From 33a02fc64e51fe08787e82d780231c582397bf4b Mon Sep 17 00:00:00 2001
From: Hoang-Hai Dang <haidang@mpi-sws.org>
Date: Thu, 15 Apr 2021 10:29:07 +0200
Subject: [PATCH] Add some more lemmas for difference

---
 theories/fin_maps.v | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/theories/fin_maps.v b/theories/fin_maps.v
index 0197e848..48aae385 100644
--- a/theories/fin_maps.v
+++ b/theories/fin_maps.v
@@ -2422,6 +2422,8 @@ Proof.
 Qed.
 Lemma map_disjoint_difference_r {A} (m1 m2 : M A) : m1 ⊆ m2 → m1 ##ₘ m2 ∖ m1.
 Proof. intros. symmetry. by apply map_disjoint_difference_l. Qed.
+Lemma map_difference_subseteq {A} (m1 m2 : M A) : m1 ∖ m2 ⊆ m1.
+Proof. apply map_subseteq_spec. by intros ?? []%lookup_difference_Some. Qed.
 Lemma map_difference_union {A} (m1 m2 : M A) :
   m1 ⊆ m2 → m1 ∪ m2 ∖ m1 = m2.
 Proof.
@@ -2441,6 +2443,21 @@ Global Instance map_difference_right_id {A} : RightId (=) (∅:M A) (∖) := _.
 Lemma map_difference_empty {A} (m : M A) : m ∖ ∅ = m.
 Proof. by rewrite (right_id _ _). Qed.
 
+Lemma map_difference_insert_l {A} (m1 m2 : M A) i x :
+  m2 !! i = None → <[i := x]> m1 ∖ m2 = <[i := x]> (m1 ∖ m2).
+Proof.
+  intros. apply map_eq. intros j. apply option_eq. intros y.
+  rewrite lookup_insert_Some, !lookup_difference_Some, lookup_insert_Some.
+  naive_solver.
+Qed.
+Lemma map_difference_insert_subseteq {A} (m1 m2 : M A) i x :
+  <[i := x]> m1 ∖ <[i := x]> m2 ⊆ m1 ∖ m2.
+Proof.
+  apply map_subseteq_spec. intros i' x'.
+  rewrite !lookup_difference_Some, lookup_insert_Some, lookup_insert_None.
+  naive_solver.
+Qed.
+
 Lemma delete_difference {A} (m1 m2 : M A) i x :
   delete i (m1 ∖ m2) = m1 ∖ <[i:=x]> m2.
 Proof.
-- 
GitLab