From 532a9ed0b176cfa2d825f490a9da41d0b7ddb7ab Mon Sep 17 00:00:00 2001
From: Robbert Krebbers <mail@robbertkrebbers.nl>
Date: Fri, 27 Oct 2017 16:46:39 +0200
Subject: [PATCH] Some clean up to Hai's commit.

---
 theories/gmap.v | 41 ++++++++++++++++++-----------------------
 1 file changed, 18 insertions(+), 23 deletions(-)

diff --git a/theories/gmap.v b/theories/gmap.v
index 4b2fa7f4..bda9e138 100644
--- a/theories/gmap.v
+++ b/theories/gmap.v
@@ -187,35 +187,30 @@ Section curry_uncurry.
    apply map_eq; intros [i j]. by rewrite lookup_gmap_curry, lookup_gmap_uncurry.
   Qed.
 
-  Lemma gmap_uncurry_nonempty (m : gmap (K1 * K2) A):
-   ∀ i x, gmap_uncurry m !! i = Some x → x ≠ ∅.
+  Lemma gmap_uncurry_non_empty (m : gmap (K1 * K2) A) i x :
+    gmap_uncurry m !! i = Some x → x ≠ ∅.
   Proof.
-    apply (map_fold_ind (λ mr m, ∀ i x, mr !! i = Some x → x ≠ ∅)); [done|].
-    intros [i j] x m12 mr Hij IH i' x'.
-    destruct (decide (i = i')) as [->|];
-      [rewrite lookup_partial_alter
-      |rewrite lookup_partial_alter_ne; [apply IH|done]].
-    inversion 1. apply insert_non_empty.
+    intros Hm ->. revert m Hm.
+    apply (map_fold_ind (λ mr _, mr !! i = Some ∅ → False)); [done|].
+    intros [i' j] x m mr ??. destruct (decide (i = i')) as [->|].
+    - rewrite lookup_partial_alter. intros [= []%insert_non_empty].
+    - by rewrite lookup_partial_alter_ne by done.
   Qed.
 
-  Lemma gmap_uncurry_curry_nonempty (m : gmap K1 (gmap K2 A))
-    (NE: ∀ i x, m !! i = Some x → x ≠ ∅) :
+  Lemma gmap_uncurry_curry_non_empty (m : gmap K1 (gmap K2 A)) :
+    (∀ i x, m !! i = Some x → x ≠ ∅) →
     gmap_uncurry (gmap_curry m) = m.
   Proof.
-    apply map_eq; intros i. destruct (m !! i) as [x'|] eqn:Eqx'.
-    - destruct (gmap_uncurry (gmap_curry m) !! i) as [x2|] eqn:Eq2.
+    intros Hne. apply map_eq; intros i. destruct (m !! i) as [m2|] eqn:Hm.
+    - destruct (gmap_uncurry (gmap_curry m) !! i) as [m2'|] eqn:Hcurry.
       + f_equal. apply map_eq. intros j.
-        assert (Eq3: x' !! j = (m !! i  : option (gmap _ _)) ≫= (!! j)).
-          { by rewrite Eqx'. }
-        assert (Eq4: x2 !! j = (
-            gmap_uncurry (gmap_curry m) !! i : option (gmap _ _)) ≫= (!! j)).
-          { by rewrite Eq2. }
-        by rewrite Eq3, <- lookup_gmap_curry, Eq4, lookup_gmap_uncurry.
-      + revert Eq2. rewrite lookup_gmap_uncurry_None.
-        setoid_rewrite lookup_gmap_curry. rewrite Eqx'.
-        intros Eq2. exfalso. apply (NE _ _ Eqx'), map_eq, Eq2.
-    - apply lookup_gmap_uncurry_None.
-      intros j. by rewrite lookup_gmap_curry, Eqx'.
+        trans ((gmap_uncurry (gmap_curry m) !! i : option (gmap _ _)) ≫= (!! j)).
+        { by rewrite Hcurry. }
+        by rewrite lookup_gmap_uncurry, lookup_gmap_curry, Hm.
+      + rewrite lookup_gmap_uncurry_None in Hcurry.
+        exfalso; apply (Hne i m2), map_eq; [done|intros j].
+        by rewrite lookup_empty, <-(Hcurry j), lookup_gmap_curry, Hm.
+   - apply lookup_gmap_uncurry_None; intros j. by rewrite lookup_gmap_curry, Hm.
   Qed.
 End curry_uncurry.
 
-- 
GitLab