diff --git a/theories/fin_map_dom.v b/theories/fin_map_dom.v index 3de5e3e07fcfb652e826be4604b95688bc2baa39..f4c4fb867c5a4dea2ca4d705632e70a05d24e8e2 100644 --- a/theories/fin_map_dom.v +++ b/theories/fin_map_dom.v @@ -119,6 +119,17 @@ Proof. eauto using (empty_finite (C:=D)), (union_finite (C:=D)), (singleton_finite (C:=D)). Qed. +Global Instance dom_proper `{!Equiv A} : Proper ((≡@{M A}) ==> (≡)) (dom D). +Proof. + intros m1 m2 EQm. apply elem_of_equiv. intros i. + rewrite !elem_of_dom, EQm. done. +Qed. +(** If [D] has Leibniz equality, we can show an even stronger result. This is a +common case e.g. when having a [gmap K A] where the key [K] has Leibniz equality +(and thus also [gset K], the usual domain) but the value type [A] does not. *) +Global Instance dom_proper_L `{!Equiv A, !LeibnizEquiv D} : + Proper ((≡@{M A}) ==> (=)) (dom D) | 0. +Proof. intros ???. unfold_leibniz. by apply dom_proper. Qed. Context `{!LeibnizEquiv D}. Lemma dom_empty_L {A} : dom D (@empty (M A) _) = ∅.