From 695c9baa2d398299eaf1bbdd2a73ebeed32e1a56 Mon Sep 17 00:00:00 2001 From: Robbert Krebbers <mail@robbertkrebbers.nl> Date: Wed, 1 Jun 2016 16:12:12 +0200 Subject: [PATCH] Use |==> syntax for 'preserve pvs' specialization pattern. We used => before, which is strange, because it has another meaning in ssreflect. --- heap_lang/lib/barrier/proof.v | 6 +++--- program_logic/boxes.v | 2 +- proofmode/spec_patterns.v | 3 ++- tests/proofmode.v | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/heap_lang/lib/barrier/proof.v b/heap_lang/lib/barrier/proof.v index fb906f2e5..31ab9d3f3 100644 --- a/heap_lang/lib/barrier/proof.v +++ b/heap_lang/lib/barrier/proof.v @@ -110,7 +110,7 @@ Proof. iAssert (barrier_ctx γ' l P)%I as "#?". { rewrite /barrier_ctx. by repeat iSplit. } iAssert (sts_ownS γ' (i_states γ) {[Change γ]} - ★ sts_ownS γ' low_states {[Send]})%I with "=>[-]" as "[Hr Hs]". + ★ sts_ownS γ' low_states {[Send]})%I with "|==>[-]" as "[Hr Hs]". { iApply sts_ownS_op; eauto using i_states_closed, low_states_closed. + set_solver. + iApply (sts_own_weaken with "Hγ'"); @@ -148,7 +148,7 @@ Proof. iExists (State Low I), {[ Change i ]}; iSplit; [done|iSplitL "Hl Hr"]. { iNext. rewrite {2}/barrier_inv /=. by iFrame. } iIntros "Hγ". - iAssert (sts_ownS γ (i_states i) {[Change i]})%I with "=>[Hγ]" as "Hγ". + iAssert (sts_ownS γ (i_states i) {[Change i]})%I with "|==>[Hγ]" as "Hγ". { iApply (sts_own_weaken with "Hγ"); eauto using i_states_closed. } wp_op=> ?; simplify_eq; wp_if. iApply ("IH" with "Hγ [HQR] HΦ"). auto. - (* a High state: the comparison succeeds, and we perform a transition and @@ -185,7 +185,7 @@ Proof. iApply (ress_split _ _ _ Q R1 R2); eauto. iFrame; auto. - iIntros "Hγ". iAssert (sts_ownS γ (i_states i1) {[Change i1]} - ★ sts_ownS γ (i_states i2) {[Change i2]})%I with "=>[-]" as "[Hγ1 Hγ2]". + ★ sts_ownS γ (i_states i2) {[Change i2]})%I with "|==>[-]" as "[Hγ1 Hγ2]". { iApply sts_ownS_op; eauto using i_states_closed, low_states_closed. + set_solver. + iApply (sts_own_weaken with "Hγ"); diff --git a/program_logic/boxes.v b/program_logic/boxes.v index 8f4e0edfb..9f5053960 100644 --- a/program_logic/boxes.v +++ b/program_logic/boxes.v @@ -193,7 +193,7 @@ Lemma box_empty_all f P Q : Proof. iIntros {?} "H"; iDestruct "H" as {Φ} "[#HeqP Hf]". iAssert ([★ map] γ↦b ∈ f, ▷ Φ γ ★ box_own_auth γ (◯ Excl' false) ★ - box_own_prop γ (Φ γ) ★ inv N (slice_inv γ (Φ γ)))%I with "=>[Hf]" as "[HΦ ?]". + box_own_prop γ (Φ γ) ★ inv N (slice_inv γ (Φ γ)))%I with "|==>[Hf]" as "[HΦ ?]". { iApply (pvs_big_sepM _ _ f); iApply (big_sepM_impl _ _ f); iFrame "Hf". iAlways; iIntros {γ b ?} "(Hγ' & #$ & #$)". assert (true = b) as <- by eauto. diff --git a/proofmode/spec_patterns.v b/proofmode/spec_patterns.v index c6919d5fa..4ef97c10b 100644 --- a/proofmode/spec_patterns.v +++ b/proofmode/spec_patterns.v @@ -32,7 +32,8 @@ Fixpoint tokenize_go (s : string) (k : list token) (kn : string) : list token := | String "#" s => tokenize_go s (TPersistent :: cons_name kn k) "" | String "%" s => tokenize_go s (TPure :: cons_name kn k) "" | String "*" s => tokenize_go s (TForall :: cons_name kn k) "" - | String "=" (String ">" s) => tokenize_go s (TPvs :: cons_name kn k) "" + | String "|" (String "=" (String "=" (String ">" s))) => + tokenize_go s (TPvs :: cons_name kn k) "" | String a s => tokenize_go s k (String a kn) end. Definition tokenize (s : string) : list token := tokenize_go s [] "". diff --git a/tests/proofmode.v b/tests/proofmode.v index 02e9a825c..9301a91b9 100644 --- a/tests/proofmode.v +++ b/tests/proofmode.v @@ -100,7 +100,7 @@ Section iris. (True -★ P -★ inv N Q -★ True -★ R) ⊢ P -★ ▷ Q -★ |={E}=> R. Proof. iIntros {?} "H HP HQ". - iApply ("H" with "[#] HP =>[HQ] =>"). + iApply ("H" with "[#] HP |==>[HQ] |==>"). - done. - by iApply inv_alloc. - by iPvsIntro. -- GitLab