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