From 92768cff1b5c22270bc2914d913a2c2b3044f41c Mon Sep 17 00:00:00 2001 From: Robbert Krebbers <mail@robbertkrebbers.nl> Date: Tue, 24 May 2016 20:46:00 +0200 Subject: [PATCH] Make use of {[ x1; .. ; xn ]} set notation in barrier proof. --- heap_lang/lib/barrier/proof.v | 12 +++++++----- heap_lang/lib/barrier/protocol.v | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/heap_lang/lib/barrier/proof.v b/heap_lang/lib/barrier/proof.v index fdff15b7b..f091da42a 100644 --- a/heap_lang/lib/barrier/proof.v +++ b/heap_lang/lib/barrier/proof.v @@ -79,7 +79,7 @@ Lemma ress_split i i1 i2 Q R1 R2 P I : i ∈ I → i1 ∉ I → i2 ∉ I → i1 ≠i2 → (saved_prop_own i Q ★ saved_prop_own i1 R1 ★ saved_prop_own i2 R2 ★ (Q -★ R1 ★ R2) ★ ress P I) - ⊢ ress P ({[i1]} ∪ ({[i2]} ∪ (I ∖ {[i]}))). + ⊢ ress P ({[i1;i2]} ∪ I ∖ {[i]}). Proof. iIntros {????} "(#HQ&#H1&#H2&HQR&H)"; iDestruct "H" as {Ψ} "[HPΨ HΨ]". iDestruct (big_sepS_delete _ _ i with "HΨ") as "[#HΨi HΨ]"; first done. @@ -88,8 +88,10 @@ Proof. iNext. iRewrite "Heq" in "HQR". iIntros "HP". iSpecialize ("HPΨ" with "HP"). iDestruct (big_sepS_delete _ _ i with "HPΨ") as "[HΨ HPΨ]"; first done. iDestruct ("HQR" with "HΨ") as "[HR1 HR2]". - rewrite !big_sepS_insert''; [|abstract set_solver ..]. by iFrame "HR1 HR2". - - rewrite !big_sepS_insert'; [|abstract set_solver ..]. by repeat iSplit. + rewrite -assoc_L !big_sepS_insert''; [|abstract set_solver ..]. + by iFrame "HR1 HR2". + - rewrite -assoc_L !big_sepS_insert'; [|abstract set_solver ..]. + by repeat iSplit. Qed. (** Actual proofs *) @@ -178,8 +180,8 @@ Proof. iPvs (saved_prop_alloc_strong _ (R2: ∙%CF iProp) (I ∪ {[i1]})) as {i2} "[Hi2' #Hi2]"; iDestruct "Hi2'" as %Hi2; iPvsIntro. rewrite ->not_elem_of_union, elem_of_singleton in Hi2; destruct Hi2. - iExists (State p ({[i1]} ∪ ({[i2]} ∪ (I ∖ {[i]})))). - iExists ({[Change i1 ]} ∪ {[ Change i2 ]}). + iExists (State p ({[i1; i2]} ∪ I ∖ {[i]})). + iExists ({[Change i1; Change i2 ]}). iSplit; [by eauto using split_step|iSplitL]. - iNext. rewrite {2}/barrier_inv /=. iFrame "Hl". iApply (ress_split _ _ _ Q R1 R2); eauto. iFrame "Hr HQR". by repeat iSplit. diff --git a/heap_lang/lib/barrier/protocol.v b/heap_lang/lib/barrier/protocol.v index 4294c9e32..952088705 100644 --- a/heap_lang/lib/barrier/protocol.v +++ b/heap_lang/lib/barrier/protocol.v @@ -68,7 +68,7 @@ Lemma split_step p i i1 i2 I : i ∈ I → i1 ∉ I → i2 ∉ I → i1 ≠i2 → sts.steps (State p I, {[ Change i ]}) - (State p ({[i1]} ∪ ({[i2]} ∪ (I ∖ {[i]}))), {[ Change i1; Change i2 ]}). + (State p ({[i1; i2]} ∪ I ∖ {[i]}), {[ Change i1; Change i2 ]}). Proof. intros. apply rtc_once. constructor; first constructor. - destruct p; set_solver. -- GitLab