From a467cde457e330491096c6c8924efd8caec559a0 Mon Sep 17 00:00:00 2001 From: Robbert Krebbers <mail@robbertkrebbers.nl> Date: Wed, 1 Jun 2016 15:30:44 +0200 Subject: [PATCH] Rename box_slice into slice. And use slice_name, which is defined as gname but Opaque, instead of gname in boxes. --- program_logic/boxes.v | 44 ++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/program_logic/boxes.v b/program_logic/boxes.v index 3ef1749df..8f4e0edfb 100644 --- a/program_logic/boxes.v +++ b/program_logic/boxes.v @@ -13,29 +13,31 @@ Section box_defs. Context `{boxG Λ Σ} (N : namespace). Notation iProp := (iPropG Λ Σ). - Definition box_own_auth (γ : gname) (a : auth (option (excl bool))) : iProp := - own γ (a, ∅). + Definition slice_name := gname. - Definition box_own_prop (γ : gname) (P : iProp) : iProp := + Definition box_own_auth (γ : slice_name) + (a : auth (option (excl bool))) : iProp := own γ (a, ∅). + + Definition box_own_prop (γ : slice_name) (P : iProp) : iProp := own γ (∅:auth _, Some (to_agree (Next (iProp_unfold P)))). - Definition box_slice_inv (γ : gname) (P : iProp) : iProp := + Definition slice_inv (γ : slice_name) (P : iProp) : iProp := (∃ b, box_own_auth γ (◠Excl' b) ★ box_own_prop γ P ★ if b then P else True)%I. - Definition box_slice (γ : gname) (P : iProp) : iProp := - inv N (box_slice_inv γ P). + Definition slice (γ : slice_name) (P : iProp) : iProp := + inv N (slice_inv γ P). - Definition box (f : gmap gname bool) (P : iProp) : iProp := - (∃ Φ : gname → iProp, + Definition box (f : gmap slice_name bool) (P : iProp) : iProp := + (∃ Φ : slice_name → iProp, ▷ (P ≡ [★ map] γ ↦ b ∈ f, Φ γ) ★ [★ map] γ ↦ b ∈ f, box_own_auth γ (◯ Excl' b) ★ box_own_prop γ (Φ γ) ★ - inv N (box_slice_inv γ (Φ γ)))%I. + inv N (slice_inv γ (Φ γ)))%I. End box_defs. Instance: Params (@box_own_auth) 4. Instance: Params (@box_own_prop) 4. -Instance: Params (@box_slice_inv) 4. -Instance: Params (@box_slice) 5. +Instance: Params (@slice_inv) 4. +Instance: Params (@slice) 5. Instance: Params (@box) 5. Section box. @@ -46,13 +48,13 @@ Implicit Types P Q : iProp. (* FIXME: solve_proper picks the eq ==> instance for Next. *) Global Instance box_own_prop_ne n γ : Proper (dist n ==> dist n) (box_own_prop γ). Proof. solve_proper. Qed. -Global Instance box_inv_ne n γ : Proper (dist n ==> dist n) (box_slice_inv γ). +Global Instance box_inv_ne n γ : Proper (dist n ==> dist n) (slice_inv γ). Proof. solve_proper. Qed. -Global Instance box_slice_ne n γ : Proper (dist n ==> dist n) (box_slice N γ). +Global Instance slice_ne n γ : Proper (dist n ==> dist n) (slice N γ). Proof. solve_proper. Qed. Global Instance box_ne n f : Proper (dist n ==> dist n) (box N f). Proof. solve_proper. Qed. -Global Instance box_slice_persistent γ P : PersistentP (box_slice N γ P). +Global Instance slice_persistent γ P : PersistentP (slice N γ P). Proof. apply _. Qed. (* This should go automatic *) @@ -95,7 +97,7 @@ Qed. Lemma box_insert f P Q : ▷ box N f P ={N}=> ∃ γ, f !! γ = None ★ - box_slice N γ Q ★ ▷ box N (<[γ:=false]> f) (Q ★ P). + slice N γ Q ★ ▷ box N (<[γ:=false]> f) (Q ★ P). Proof. iIntros "H"; iDestruct "H" as {Φ} "[#HeqP Hf]". iPvs (own_alloc_strong (◠Excl' false ⋅ ◯ Excl' false, @@ -103,7 +105,7 @@ Proof. as {γ} "[Hdom Hγ]"; first done. rewrite pair_split. iDestruct "Hγ" as "[[Hγ Hγ'] #HγQ]". iDestruct "Hdom" as % ?%not_elem_of_dom. - iPvs (inv_alloc N _ (box_slice_inv γ Q) with "[Hγ]") as "#Hinv"; first done. + iPvs (inv_alloc N _ (slice_inv γ Q) with "[Hγ]") as "#Hinv"; first done. { iNext. iExists false; eauto. } iPvsIntro; iExists γ; repeat iSplit; auto. iNext. iExists (<[γ:=Q]> Φ); iSplit. @@ -114,7 +116,7 @@ Qed. Lemma box_delete f P Q γ : f !! γ = Some false → - box_slice N γ Q ★ ▷ box N f P ={N}=> ∃ P', + slice N γ Q ★ ▷ box N f P ={N}=> ∃ P', ▷ ▷ (P ≡ (Q ★ P')) ★ ▷ box N (delete γ f) P'. Proof. iIntros {?} "[#Hinv H]"; iDestruct "H" as {Φ} "[#HeqP Hf]". @@ -133,7 +135,7 @@ Qed. Lemma box_fill f γ P Q : f !! γ = Some false → - box_slice N γ Q ★ ▷ Q ★ ▷ box N f P ={N}=> ▷ box N (<[γ:=true]> f) P. + slice N γ Q ★ ▷ Q ★ ▷ box N f P ={N}=> ▷ box N (<[γ:=true]> f) P. Proof. iIntros {?} "(#Hinv & HQ & H)"; iDestruct "H" as {Φ} "[#HeqP Hf]". iInv N as {b'} "(Hγ & #HγQ & _)"; iTimeless "Hγ". @@ -151,7 +153,7 @@ Qed. Lemma box_empty f P Q γ : f !! γ = Some true → - box_slice N γ Q ★ ▷ box N f P ={N}=> ▷ Q ★ ▷ box N (<[γ:=false]> f) P. + slice N γ Q ★ ▷ box N f P ={N}=> ▷ Q ★ ▷ box N (<[γ:=false]> f) P. Proof. iIntros {?} "[#Hinv H]"; iDestruct "H" as {Φ} "[#HeqP Hf]". iInv N as {b} "(Hγ & #HγQ & HQ)"; iTimeless "Hγ". @@ -191,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 (box_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. @@ -207,4 +209,4 @@ Proof. Qed. End box. -Typeclasses Opaque box_slice box. +Typeclasses Opaque slice_name slice box. -- GitLab