diff --git a/theories/algebra/gmap.v b/theories/algebra/gmap.v index 4bbb324c858e7f4179b522209b1ca9af227b3acb..13208c8d1126270c3e95019cbbff030cb9225437 100644 --- a/theories/algebra/gmap.v +++ b/theories/algebra/gmap.v @@ -598,24 +598,11 @@ Qed. Lemma big_opM_singletons m : ([^op map] k ↦ x ∈ m, {[ k := x ]}) = m. Proof. - rewrite big_opM_eq /big_opM_def. - remember (map_to_list m) as l eqn:Heql. - assert (map_to_list m ≡ₚ l) as Hl by by rewrite Heql. - clear Heql. revert m Hl. induction l as [|kx l IH]. - - intros m ->%map_to_list_empty_inv_alt. - rewrite big_opL_nil. done. - - destruct kx as [k x]. - intros m Hl. - rewrite big_opL_cons. - assert (NoDup ((k, x) :: l).*1) as Hnodup. - { rewrite -Hl. apply NoDup_fst_map_to_list. } - rewrite (IH (list_to_map l)). - + rewrite (map_to_list_insert_inv _ _ _ _ Hl). - rewrite insert_singleton_op //. - apply not_elem_of_list_to_map_1. - apply NoDup_cons_11 in Hnodup. done. - + apply map_to_list_to_map. - eapply NoDup_cons_12. done. + rewrite big_opM_eq /big_opM_def -{2}(list_to_map_to_list m). + assert (NoDup (map_to_list m).*1) as Hnodup by apply NoDup_fst_map_to_list. + revert Hnodup. induction (map_to_list m) as [|[k x] l IH]; csimpl; first done. + intros [??]%NoDup_cons. rewrite IH //. + rewrite insert_singleton_op ?not_elem_of_list_to_map_1 //. Qed. End properties.