From 2776d930d9d03f3833ad5d21095a6275d08f3fda Mon Sep 17 00:00:00 2001
From: Robbert Krebbers <mail@robbertkrebbers.nl>
Date: Thu, 1 Nov 2018 10:31:02 +0100
Subject: [PATCH] Support singletons in `solve_map_disjoint`.

---
 tests/fin_maps.ref  |  0
 tests/fin_maps.v    | 13 +++++++++++++
 theories/fin_maps.v |  2 ++
 3 files changed, 15 insertions(+)
 create mode 100644 tests/fin_maps.ref
 create mode 100644 tests/fin_maps.v

diff --git a/tests/fin_maps.ref b/tests/fin_maps.ref
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/fin_maps.v b/tests/fin_maps.v
new file mode 100644
index 00000000..842c20a8
--- /dev/null
+++ b/tests/fin_maps.v
@@ -0,0 +1,13 @@
+From stdpp Require Import fin_maps.
+
+Section map_disjoint.
+  Context `{FinMap K M}.
+
+  Lemma solve_map_disjoint_singleton_1 {A} (m1 m2 : M A) i x :
+    m1 ##ₘ <[i:=x]> m2 → {[ i:= x ]} ∪ m2 ##ₘ m1 ∧ m2 ##ₘ ∅.
+  Proof. intros. solve_map_disjoint. Qed.
+
+  Lemma solve_map_disjoint_singleton_2 {A} (m1 m2 : M A) i x :
+    m2 !! i = None → m1 ##ₘ {[ i := x ]} ∪ m2 → m2 ##ₘ <[i:=x]> m1 ∧ m1 !! i = None.
+  Proof. intros. solve_map_disjoint. Qed.
+End map_disjoint.
diff --git a/theories/fin_maps.v b/theories/fin_maps.v
index bcce9efd..d4cdfd3e 100644
--- a/theories/fin_maps.v
+++ b/theories/fin_maps.v
@@ -1932,6 +1932,8 @@ Hint Extern 2 (_ ##ₘ {[ _ := _ ]}) =>
   apply map_disjoint_singleton_r_2 : map_disjoint.
 Hint Extern 2 (_ ∪ _ ##ₘ _) => apply map_disjoint_union_l_2 : map_disjoint.
 Hint Extern 2 (_ ##ₘ _ ∪ _) => apply map_disjoint_union_r_2 : map_disjoint.
+Hint Extern 2 ({[_:= _]} ##ₘ _) => apply map_disjoint_singleton_l : map_disjoint.
+Hint Extern 2 (_ ##ₘ {[_:= _]}) => apply map_disjoint_singleton_r : map_disjoint.
 Hint Extern 2 (<[_:=_]>_ ##ₘ _) => apply map_disjoint_insert_l_2 : map_disjoint.
 Hint Extern 2 (_ ##ₘ <[_:=_]>_) => apply map_disjoint_insert_r_2 : map_disjoint.
 Hint Extern 2 (delete _ _ ##ₘ _) => apply map_disjoint_delete_l : map_disjoint.
-- 
GitLab