From 62299a953b7a498373047f470aa791c154a1add2 Mon Sep 17 00:00:00 2001
From: Jacques-Henri Jourdan <jjourdan@mpi-sws.org>
Date: Wed, 24 Aug 2016 14:44:20 +0200
Subject: [PATCH] Simplify incr_2_safe.

---
 tests/atomic.v | 26 +++++++-------------------
 1 file changed, 7 insertions(+), 19 deletions(-)

diff --git a/tests/atomic.v b/tests/atomic.v
index fce0c5d39..7fcee07a6 100644
--- a/tests/atomic.v
+++ b/tests/atomic.v
@@ -95,8 +95,7 @@ Section user.
     rewrite /incr_2.
     wp_let.
     wp_alloc l as "Hl".
-    iVs (inv_alloc N _ (∃x':Z, l ↦ #x')%I with "[Hl]") as "#?".
-    { iNext. by iExists x. }
+    iVs (inv_alloc N _ (∃x':Z, l ↦ #x')%I with "[Hl]") as "#?"; first eauto.
     wp_let.
     wp_bind (_ || _)%E.
     iApply (wp_par (λ _, True%I) (λ _, True%I)).
@@ -104,11 +103,10 @@ Section user.
     (* prove worker triple *)
     iDestruct (incr_atomic_spec N l with "Hh") as "Hincr"=>//.
     rewrite /incr_triple /atomic_triple.
-    iSpecialize ("Hincr" $! True%I (fun _ _ => True%I) with "[]").
+    iSpecialize ("Hincr"  $! True%I (fun _ _ => True%I) with "[]").
     - iIntros "!# _".
       (* open the invariant *)
-      iInv N as "Hl" "Hclose".
-      iTimeless "Hl". iDestruct "Hl" as (x') "Hl'".
+      iInv N as (x') ">Hl'" "Hclose".
       (* mask magic *)
       iApply pvs_intro'.
       { apply ndisj_subseteq_difference; auto. }
@@ -118,26 +116,16 @@ Section user.
       iSplit.
       + (* provide a way to rollback *)
         iIntros "Hl'".
-        iApply pvs_trans.
-        (* close invariant *)
-        iApply "Hclose".
-        (* do view shifts *)
-        iVs "Hvs". iVsIntro. iNext. by iExists x'.
+        iVs "Hvs". iVs ("Hclose" with "[Hl']"); eauto.
       + (* provide a way to commit *)
         iIntros (v) "[Heq Hl']".
-        iApply pvs_trans.
-        (* close the invariant *)
-        iApply "Hclose".
-        (* do view shifts *)
-        iVs "Hvs". iVsIntro. iNext. by iExists (x' + 1).
+        iVs "Hvs". iVs ("Hclose" with "[Hl']"); eauto.
     - iDestruct "Hincr" as "#HIncr".
       iSplitL; [|iSplitL]; try (iApply wp_wand_r;iSplitL; [by iApply "HIncr"|auto]).
       iIntros (v1 v2) "_ !>".
       wp_seq.
-      iInv N as "Hinv" "Hclose".
-      iTimeless "Hinv". iDestruct "Hinv" as (x') "Hl".
+      iInv N as (x') ">Hl" "Hclose".
       wp_load.
-      iApply "Hclose".
-      iNext. by iExists x'.
+      iApply "Hclose". eauto.
   Qed.
 End user.
-- 
GitLab