Skip to content
Snippets Groups Projects
Commit cb08e14f authored by Robbert Krebbers's avatar Robbert Krebbers
Browse files

Put `LeibnizEquiv` lemmas for `dom` in section.

parent 74649a4b
No related branches found
No related tags found
1 merge request!116Add `set_solver` support for `dom`
...@@ -142,32 +142,34 @@ Global Instance dom_proper_L `{!Equiv A, !LeibnizEquiv D} : ...@@ -142,32 +142,34 @@ Global Instance dom_proper_L `{!Equiv A, !LeibnizEquiv D} :
Proper ((≡@{M A}) ==> (=)) (dom D) | 0. Proper ((≡@{M A}) ==> (=)) (dom D) | 0.
Proof. intros ???. unfold_leibniz. by apply dom_proper. Qed. Proof. intros ???. unfold_leibniz. by apply dom_proper. Qed.
Context `{!LeibnizEquiv D}. Section leibniz.
Lemma dom_map_filter_L {A} (P : K * A Prop) `{!∀ x, Decision (P x)} (m : M A) X : Context `{!LeibnizEquiv D}.
( i, i X x, m !! i = Some x P (i, x)) Lemma dom_map_filter_L {A} (P : K * A Prop) `{!∀ x, Decision (P x)} (m : M A) X :
dom D (filter P m) = X. ( i, i X x, m !! i = Some x P (i, x))
Proof. unfold_leibniz. apply dom_map_filter. Qed. dom D (filter P m) = X.
Lemma dom_empty_L {A} : dom D (@empty (M A) _) = ∅. Proof. unfold_leibniz. apply dom_map_filter. Qed.
Proof. unfold_leibniz; apply dom_empty. Qed. Lemma dom_empty_L {A} : dom D (@empty (M A) _) = ∅.
Lemma dom_empty_inv_L {A} (m : M A) : dom D m = m = ∅. Proof. unfold_leibniz; apply dom_empty. Qed.
Proof. by intros; apply dom_empty_inv; unfold_leibniz. Qed. Lemma dom_empty_inv_L {A} (m : M A) : dom D m = m = ∅.
Lemma dom_alter_L {A} f (m : M A) i : dom D (alter f i m) = dom D m. Proof. by intros; apply dom_empty_inv; unfold_leibniz. Qed.
Proof. unfold_leibniz; apply dom_alter. Qed. Lemma dom_alter_L {A} f (m : M A) i : dom D (alter f i m) = dom D m.
Lemma dom_insert_L {A} (m : M A) i x : dom D (<[i:=x]>m) = {[ i ]} dom D m. Proof. unfold_leibniz; apply dom_alter. Qed.
Proof. unfold_leibniz; apply dom_insert. Qed. Lemma dom_insert_L {A} (m : M A) i x : dom D (<[i:=x]>m) = {[ i ]} dom D m.
Lemma dom_singleton_L {A} (i : K) (x : A) : dom D ({[i := x]} : M A) = {[ i ]}. Proof. unfold_leibniz; apply dom_insert. Qed.
Proof. unfold_leibniz; apply dom_singleton. Qed. Lemma dom_singleton_L {A} (i : K) (x : A) : dom D ({[i := x]} : M A) = {[ i ]}.
Lemma dom_delete_L {A} (m : M A) i : dom D (delete i m) = dom D m {[ i ]}. Proof. unfold_leibniz; apply dom_singleton. Qed.
Proof. unfold_leibniz; apply dom_delete. Qed. Lemma dom_delete_L {A} (m : M A) i : dom D (delete i m) = dom D m {[ i ]}.
Lemma dom_union_L {A} (m1 m2 : M A) : dom D (m1 m2) = dom D m1 dom D m2. Proof. unfold_leibniz; apply dom_delete. Qed.
Proof. unfold_leibniz; apply dom_union. Qed. Lemma dom_union_L {A} (m1 m2 : M A) : dom D (m1 m2) = dom D m1 dom D m2.
Lemma dom_intersection_L {A} (m1 m2 : M A) : Proof. unfold_leibniz; apply dom_union. Qed.
dom D (m1 m2) = dom D m1 dom D m2. Lemma dom_intersection_L {A} (m1 m2 : M A) :
Proof. unfold_leibniz; apply dom_intersection. Qed. dom D (m1 m2) = dom D m1 dom D m2.
Lemma dom_difference_L {A} (m1 m2 : M A) : dom D (m1 m2) = dom D m1 dom D m2. Proof. unfold_leibniz; apply dom_intersection. Qed.
Proof. unfold_leibniz; apply dom_difference. Qed. Lemma dom_difference_L {A} (m1 m2 : M A) : dom D (m1 m2) = dom D m1 dom D m2.
Lemma dom_fmap_L {A B} (f : A B) (m : M A) : dom D (f <$> m) = dom D m. Proof. unfold_leibniz; apply dom_difference. Qed.
Proof. unfold_leibniz; apply dom_fmap. Qed. Lemma dom_fmap_L {A B} (f : A B) (m : M A) : dom D (f <$> m) = dom D m.
Proof. unfold_leibniz; apply dom_fmap. Qed.
End leibniz.
End fin_map_dom. End fin_map_dom.
Lemma dom_seq `{FinMapDom nat M D} {A} start (xs : list A) : Lemma dom_seq `{FinMapDom nat M D} {A} start (xs : list A) :
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment