From f931b13142c97bd55c1de8ee110706e1a6711f45 Mon Sep 17 00:00:00 2001
From: Ralf Jung <jung@mpi-sws.org>
Date: Wed, 17 Feb 2016 10:19:09 +0100
Subject: [PATCH] strengthen sts_alloc and auth_alloc

---
 heap_lang/heap.v     | 3 ++-
 program_logic/auth.v | 8 ++++----
 program_logic/sts.v  | 8 ++++----
 3 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/heap_lang/heap.v b/heap_lang/heap.v
index bc1a843d4..83344697a 100644
--- a/heap_lang/heap.v
+++ b/heap_lang/heap.v
@@ -67,7 +67,8 @@ Section heap.
     ownP σ ⊑ pvs N N (∃ (_ : heapG Σ), heap_ctx N ∧ Π★{map σ} heap_mapsto).
   Proof.
     rewrite -{1}(from_to_heap σ). etransitivity.
-    { apply (auth_alloc (ownP ∘ of_heap) N (to_heap σ)), to_heap_valid. }
+    { rewrite [ownP _]later_intro.
+      apply (auth_alloc (ownP ∘ of_heap) N (to_heap σ)), to_heap_valid. }
     apply pvs_mono, exist_elim=> γ.
     rewrite -(exist_intro (HeapG _ _ γ)); apply and_mono_r.
     induction σ as [|l v σ Hl IH] using map_ind.
diff --git a/program_logic/auth.v b/program_logic/auth.v
index c698c33a3..5a9360e30 100644
--- a/program_logic/auth.v
+++ b/program_logic/auth.v
@@ -42,17 +42,17 @@ Section auth.
   Proof. by rewrite /auth_own own_valid auth_validI. Qed.
 
   Lemma auth_alloc N a :
-    ✓ a → φ a ⊑ pvs N N (∃ γ, auth_ctx γ N φ ∧ auth_own γ a).
+    ✓ a → ▷ φ a ⊑ pvs N N (∃ γ, auth_ctx γ N φ ∧ auth_own γ a).
   Proof.
     intros Ha. eapply sep_elim_True_r.
     { by eapply (own_alloc (Auth (Excl a) a) N). }
     rewrite pvs_frame_l. apply pvs_strip_pvs.
     rewrite sep_exist_l. apply exist_elim=>γ. rewrite -(exist_intro γ).
     transitivity (▷ auth_inv γ φ ★ auth_own γ a)%I.
-    { rewrite /auth_inv -later_intro -(exist_intro a).
+    { rewrite /auth_inv -(exist_intro a) later_sep.
       rewrite const_equiv // left_id.
-      rewrite [(_ ★ φ _)%I]comm -assoc. apply sep_mono; first done.
-      rewrite /auth_own -own_op auth_both_op. done. }
+      rewrite [(_ ★ ▷ φ _)%I]comm -assoc. apply sep_mono; first done.
+      rewrite -later_intro /auth_own -own_op auth_both_op. done. }
     rewrite (inv_alloc N) /auth_ctx pvs_frame_r. apply pvs_mono.
     by rewrite always_and_sep_l.
   Qed.
diff --git a/program_logic/sts.v b/program_logic/sts.v
index 6a6521d82..21ea1544f 100644
--- a/program_logic/sts.v
+++ b/program_logic/sts.v
@@ -64,7 +64,7 @@ Section sts.
   Proof. intros. by apply own_update, sts_update_frag_up. Qed.
 
   Lemma sts_alloc N s :
-    φ s ⊑ pvs N N (∃ γ, sts_ctx γ N φ ∧ sts_own γ s (⊤ ∖ sts.tok s)).
+    ▷ φ s ⊑ pvs N N (∃ γ, sts_ctx γ N φ ∧ sts_own γ s (⊤ ∖ sts.tok s)).
   Proof.
     eapply sep_elim_True_r.
     { apply (own_alloc (sts_auth s (⊤ ∖ sts.tok s)) N).
@@ -72,9 +72,9 @@ Section sts.
     rewrite pvs_frame_l. apply pvs_strip_pvs.
     rewrite sep_exist_l. apply exist_elim=>γ. rewrite -(exist_intro γ).
     transitivity (▷ sts_inv γ φ ★ sts_own γ s (⊤ ∖ sts.tok s))%I.
-    { rewrite /sts_inv -later_intro -(exist_intro s).
-      rewrite [(_ ★ φ _)%I]comm -assoc. apply sep_mono_r.
-      by rewrite -own_op sts_op_auth_frag_up; last solve_elem_of. }
+    { rewrite /sts_inv -(exist_intro s) later_sep.
+      rewrite [(_ ★ ▷ φ _)%I]comm -assoc. apply sep_mono_r.
+      by rewrite -later_intro -own_op sts_op_auth_frag_up; last solve_elem_of. }
     rewrite (inv_alloc N) /sts_ctx pvs_frame_r.
     by rewrite always_and_sep_l.
   Qed.
-- 
GitLab