From 3db38bdd1a05bfca6ca00c511cb6f36a16c886af Mon Sep 17 00:00:00 2001
From: Ralf Jung <jung@mpi-sws.org>
Date: Thu, 22 Jul 2021 10:30:01 +0200
Subject: [PATCH] update dependencies; use solve_ndisj more

---
 coq-lambda-rust.opam                          |  2 +-
 theories/lifetime/model/creation.v            | 20 +++----------------
 theories/typing/lib/arc.v                     | 15 +++++---------
 .../typing/lib/rwlock/rwlockreadguard_code.v  |  5 ++---
 4 files changed, 11 insertions(+), 31 deletions(-)

diff --git a/coq-lambda-rust.opam b/coq-lambda-rust.opam
index 29cff810..7ab5190e 100644
--- a/coq-lambda-rust.opam
+++ b/coq-lambda-rust.opam
@@ -13,7 +13,7 @@ the type system, and safety proof for some Rust libraries.
 """
 
 depends: [
-  "coq-iris" { (= "dev.2021-07-19.2.0ae9d9ee") | (= "dev") }
+  "coq-iris" { (= "dev.2021-07-22.0.26ebf1ee") | (= "dev") }
 ]
 
 build: [make "-j%{jobs}%"]
diff --git a/theories/lifetime/model/creation.v b/theories/lifetime/model/creation.v
index dbfdff98..e9dd05da 100644
--- a/theories/lifetime/model/creation.v
+++ b/theories/lifetime/model/creation.v
@@ -33,8 +33,7 @@ Proof.
     rewrite /lft_inv_dead; iDestruct "Hdead" as (R) "(_ & Hcnt' & _)".
     iDestruct (own_cnt_valid_2 with "Hcnt' Hcnt")
       as %[?%nat_included _]%auth_both_valid_discrete; lia. }
-  iMod (box_empty with "Hbox") as "[HP Hbox]"=>//.
-  { (* FIXME [solve_ndisj] fails *) set_solver+. }
+  iMod (box_empty with "Hbox") as "[HP Hbox]"=>//; first by solve_ndisj.
   { intros i s. by rewrite lookup_fmap fmap_Some=> -[? [/HB -> ->]]. }
   rewrite lft_vs_unfold; iDestruct "Hvs" as (n) "[Hcnt Hvs]".
   iDestruct (big_sepS_filter_acc (.⊂ κ) _ _ (dom _ I) with "Halive")
@@ -131,13 +130,8 @@ Proof.
   iModIntro; iExists Λ.
   rewrite {1}/lft_tok big_sepMS_singleton. iSplit; first done. iFrame "HΛ".
   clear I A HΛ. iIntros "!> HΛ".
-  iApply (step_fupd_mask_mono (↑lftN ∪ userE) _ ((↑lftN ∪ userE)∖↑mgmtN)).
-  { (* FIXME solve_ndisj should really handle this... *)
-    assert (↑mgmtN ## userE) by solve_ndisj. set_solver. }
-  { done. }
+  iApply (step_fupd_mask_mono (↑lftN ∪ userE) _ ((↑lftN ∪ userE)∖↑mgmtN)); [solve_ndisj..|].
   iInv mgmtN as (A I) "(>HA & >HI & Hinv)" "Hclose".
-  { (* FIXME solve_ndisj should really handle this... *)
-    assert (↑mgmtN ⊆ ↑lftN) by solve_ndisj. set_solver. }
   rewrite /lft_tok big_sepMS_singleton.
   iDestruct (own_valid_2 with "HA HΛ")
     as %[[s [?%leibniz_equiv ?]]%singleton_included_l _]%auth_both_valid_discrete.
@@ -159,15 +153,7 @@ Proof.
   { iApply (@big_sepS_impl with "[$HinvK]"); iIntros "!>".
     iIntros (κ [? _]%elem_of_kill_set) "$". rewrite /lft_dead. eauto. }
   iApply fupd_trans.
-  iApply (fupd_mask_mono (userE ∪ ↑borN ∪ ↑inhN)).
-  { (* FIXME can we make solve_ndisj handle this? *)
-    clear -userE_lftN_disj. rewrite -assoc. apply union_least.
-    - assert (userE ##@{coPset} ↑mgmtN) by solve_ndisj. set_solver.
-    - assert (↑inhN ##@{coPset} ↑mgmtN) by solve_ndisj.
-      assert (↑inhN ⊆@{coPset} ↑lftN) by solve_ndisj.
-      assert (↑borN ##@{coPset} ↑mgmtN) by solve_ndisj.
-      assert (↑borN ⊆@{coPset} ↑lftN) by solve_ndisj.
-      set_solver. }
+  iApply (fupd_mask_mono (userE ∪ ↑borN ∪ ↑inhN)); first solve_ndisj.
   iMod (lfts_kill A I K K' with "[$HI $HinvD] HinvK") as "[[HI HinvD] HinvK]".
   { done. }
   { intros κ κ' [??]%elem_of_kill_set ??. apply elem_of_kill_set.
diff --git a/theories/typing/lib/arc.v b/theories/typing/lib/arc.v
index 7eed83f4..0cf17a54 100644
--- a/theories/typing/lib/arc.v
+++ b/theories/typing/lib/arc.v
@@ -770,8 +770,7 @@ Section arc.
       rewrite heap_mapsto_vec_cons. iDestruct "H↦" as "[H↦0 H↦1]".
       iDestruct "Hpersist" as "(? & ? & H†)". wp_bind (_ <- _)%E.
       iDestruct "Hdrop" as "[Hν Hdrop]". iSpecialize ("H†" with "Hν").
-      iApply wp_mask_mono; last iApply (wp_step_fupd with "H†"); first done.
-      { set_solver+. (* FIXME [solve_ndisj] fails *) }
+      iApply wp_mask_mono; last iApply (wp_step_fupd with "H†"); [solve_ndisj..|].
       iDestruct "Hown" as (???) "(_ & Hlen & _)". wp_write. iIntros "(#Hν & Hown & H†)!>".
       wp_seq. wp_op. wp_op. iDestruct "Hown" as (?) "[H↦ Hown]".
       iDestruct (ty_size_eq with "Hown") as %?. rewrite Max.max_0_r.
@@ -874,8 +873,7 @@ Section arc.
       rewrite heap_mapsto_vec_cons. iDestruct "Hr" as "[Hr0 Hr1]".
       iDestruct "Hpersist" as "(Ha & _ & H†)". wp_bind (_ <- _)%E.
       iSpecialize ("H†" with "Hν").
-      iApply wp_mask_mono; last iApply (wp_step_fupd with "H†"); first done.
-      { (* FIXME [solve_ndisj] fails *) set_solver+. }
+      iApply wp_mask_mono; last iApply (wp_step_fupd with "H†"); [solve_ndisj..|].
       wp_write. iIntros "(#Hν & Hown & H†) !>". wp_seq. wp_op. wp_op.
       rewrite -(firstn_skipn ty.(ty_size) vl0) heap_mapsto_vec_app.
       iDestruct "Hr1" as "[Hr1 Hr2]". iDestruct "Hown" as (vl) "[Hrc' Hown]".
@@ -949,8 +947,7 @@ Section arc.
     iDestruct "Hrc" as (γ ν q') "[#(Hi & Hs & #Hc) Htoks]".
     wp_apply (is_unique_spec with "Hi Htoks"). iIntros ([]) "H"; wp_if.
     - iDestruct "H" as "(Hrc & Hrc1 & Hν)". iSpecialize ("Hc" with "Hν"). wp_bind Skip.
-      iApply wp_mask_mono; last iApply (wp_step_fupd with "Hc"); first done.
-      { (* FIXME [solve_ndisj] fails *) set_solver+. }
+      iApply wp_mask_mono; last iApply (wp_step_fupd with "Hc"); [solve_ndisj..|].
       wp_seq. iIntros "(#Hν & Hown & H†) !>". wp_seq.
       iMod ("Hclose2" with "[Hrc Hrc1 H†] Hown") as "[Hb Hα]".
       { iIntros "!> Hown !>". iLeft. iFrame. }
@@ -1035,8 +1032,7 @@ Section arc.
     pose proof (fin_to_nat_lt x). destruct (fin_to_nat x) as [|[|[]]]; last lia.
     - iIntros "(Hrc0 & Hrc1 & HP1)". wp_case. wp_bind (_ +â‚— _)%E.
       iSpecialize ("Hc" with "HP1").
-      iApply wp_mask_mono; last iApply (wp_step_fupd with "Hc"); first done.
-      { (* FIXME [solve_ndisj] fails *) set_solver+. }
+      iApply wp_mask_mono; last iApply (wp_step_fupd with "Hc"); [solve_ndisj..|].
       wp_op. iIntros "(#Hν & Hrc2 & H†)". iModIntro.
       iMod ("Hclose2" with "[Hrc'↦ Hrc0 Hrc1 H†] Hrc2") as "[Hb Hα1]".
       { iIntros "!> Hrc2". iExists [_]. rewrite heap_mapsto_vec_singleton.
@@ -1051,8 +1047,7 @@ Section arc.
       iApply type_delete; [solve_typing..|].
       iApply type_jump; solve_typing.
     - iIntros "[Hν Hweak]". wp_case. iSpecialize ("Hc" with "Hν"). wp_bind (new _). 
-      iApply wp_mask_mono; last iApply (wp_step_fupd with "Hc"); first done.
-      { (* FIXME [solve_ndisj] fails *) set_solver+. }
+      iApply wp_mask_mono; last iApply (wp_step_fupd with "Hc"); [solve_ndisj..|].
       wp_apply wp_new=>//. lia. iIntros (l) "(H† & Hlvl) (#Hν & Hown & H†') !>".
       rewrite -!lock Nat2Z.id.
       wp_let. wp_op. rewrite !heap_mapsto_vec_cons shift_loc_assoc shift_loc_0.
diff --git a/theories/typing/lib/rwlock/rwlockreadguard_code.v b/theories/typing/lib/rwlock/rwlockreadguard_code.v
index e2c0553d..fadb5089 100644
--- a/theories/typing/lib/rwlock/rwlockreadguard_code.v
+++ b/theories/typing/lib/rwlock/rwlockreadguard_code.v
@@ -96,11 +96,10 @@ Section rwlockreadguard_functions.
           iCombine "Hν" "Hν'" as "Hν". iDestruct "Hq" as %->.
           iApply (step_fupd_mask_mono ((↑lftN ∪ lft_userE) ∪ (⊤ ∖ ↑rwlockN ∖ ↑lftN ∖ lft_userE)));
             last iApply (step_fupd_mask_frame_r _ (lft_userE)).
-          { set_solver+. }
+          { solve_ndisj. }
           { solve_ndisj. }
           { rewrite difference_difference. apply: disjoint_difference_r1. done. }
-          { (* FIXME [solve_ndisj] fails. *)
-            apply: disjoint_difference_r1. done. }
+          { solve_ndisj. }
           iMod ("H†" with "Hν") as "H†". iModIntro. iNext. iMod "H†".
           iMod fupd_mask_subseteq as "Hclose"; last iMod ("Hh" with "H†") as "Hb".
           { set_solver+. }
-- 
GitLab