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

Add lemmas `map_singleton_equiv_inj` and `map_fmap_equiv_inj`.

parent ac4dbb94
No related branches found
No related tags found
1 merge request!276Misc setoids lemmas and tweaks for maps and option
Pipeline #48334 passed
...@@ -677,6 +677,14 @@ Proof. ...@@ -677,6 +677,14 @@ Proof.
- rewrite lookup_singleton in Heq. naive_solver. - rewrite lookup_singleton in Heq. naive_solver.
- rewrite lookup_singleton_ne in Heq by done. naive_solver. - rewrite lookup_singleton_ne in Heq by done. naive_solver.
Qed. Qed.
Global Instance map_singleton_equiv_inj `{Equiv A} :
Inj2 (=) () () (singletonM (M:=M A)).
Proof.
intros i1 x1 i2 x2 Heq. specialize (Heq i1).
rewrite lookup_singleton in Heq. destruct (decide (i1 = i2)) as [->|].
- rewrite lookup_singleton in Heq. apply (inj _) in Heq. naive_solver.
- rewrite lookup_singleton_ne in Heq by done. inversion Heq.
Qed.
Lemma map_non_empty_singleton {A} i (x : A) : {[i := x]} ( : M A). Lemma map_non_empty_singleton {A} i (x : A) : {[i := x]} ( : M A).
Proof. Proof.
...@@ -716,6 +724,12 @@ Proof. ...@@ -716,6 +724,12 @@ Proof.
intros ? m1 m2 Hm. apply map_eq; intros i. intros ? m1 m2 Hm. apply map_eq; intros i.
apply (inj (fmap (M:=option) f)). by rewrite <-!lookup_fmap, Hm. apply (inj (fmap (M:=option) f)). by rewrite <-!lookup_fmap, Hm.
Qed. Qed.
Global Instance map_fmap_equiv_inj `{Equiv A, Equiv B} (f : A B) :
Inj () () f Inj (≡@{M A}) (≡@{M B}) (fmap f).
Proof.
intros ? m1 m2 Hm i. apply (inj (fmap (M:=option) f)).
rewrite <-!lookup_fmap. by apply lookup_proper.
Qed.
Lemma lookup_fmap_Some {A B} (f : A B) (m : M A) i y : Lemma lookup_fmap_Some {A B} (f : A B) (m : M A) i y :
(f <$> m) !! i = Some y x, f x = y m !! i = Some x. (f <$> m) !! i = Some y x, f x = y m !! i = Some x.
......
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