Skip to content
Snippets Groups Projects
Commit 6d147668 authored by Ralf Jung's avatar Ralf Jung
Browse files

more flexible masks for sts_alloc and heap_alloc

parent f931b131
No related branches found
No related tags found
No related merge requests found
...@@ -62,13 +62,14 @@ Section heap. ...@@ -62,13 +62,14 @@ Section heap.
Qed. Qed.
(** Allocation *) (** Allocation *)
Lemma heap_alloc N σ : Lemma heap_alloc E N σ :
authG heap_lang Σ heapRA authG heap_lang Σ heapRA nclose N E
ownP σ pvs N N ( (_ : heapG Σ), heap_ctx N Π{map σ} heap_mapsto). ownP σ pvs E E ( (_ : heapG Σ), heap_ctx N Π{map σ} heap_mapsto).
Proof. Proof.
rewrite -{1}(from_to_heap σ). etransitivity. intros. rewrite -{1}(from_to_heap σ). etransitivity.
{ rewrite [ownP _]later_intro. { rewrite [ownP _]later_intro.
apply (auth_alloc (ownP of_heap) N (to_heap σ)), to_heap_valid. } apply (auth_alloc (ownP of_heap) E N (to_heap σ)); last done.
apply to_heap_valid. }
apply pvs_mono, exist_elim=> γ. apply pvs_mono, exist_elim=> γ.
rewrite -(exist_intro (HeapG _ _ γ)); apply and_mono_r. rewrite -(exist_intro (HeapG _ _ γ)); apply and_mono_r.
induction σ as [|l v σ Hl IH] using map_ind. induction σ as [|l v σ Hl IH] using map_ind.
......
...@@ -41,12 +41,13 @@ Section auth. ...@@ -41,12 +41,13 @@ Section auth.
Lemma auto_own_valid γ a : auth_own γ a a. Lemma auto_own_valid γ a : auth_own γ a a.
Proof. by rewrite /auth_own own_valid auth_validI. Qed. Proof. by rewrite /auth_own own_valid auth_validI. Qed.
Lemma auth_alloc N a : Lemma auth_alloc E N a :
a φ a pvs N N ( γ, auth_ctx γ N φ auth_own γ a). a nclose N E
φ a pvs E E ( γ, auth_ctx γ N φ auth_own γ a).
Proof. Proof.
intros Ha. eapply sep_elim_True_r. intros Ha HN. eapply sep_elim_True_r.
{ by eapply (own_alloc (Auth (Excl a) a) N). } { by eapply (own_alloc (Auth (Excl a) a) N). }
rewrite pvs_frame_l. apply pvs_strip_pvs. rewrite pvs_frame_l. rewrite -(pvs_mask_weaken N E) //. apply pvs_strip_pvs.
rewrite sep_exist_l. apply exist_elim=>γ. rewrite -(exist_intro γ). rewrite sep_exist_l. apply exist_elim=>γ. rewrite -(exist_intro γ).
transitivity ( auth_inv γ φ auth_own γ a)%I. transitivity ( auth_inv γ φ auth_own γ a)%I.
{ rewrite /auth_inv -(exist_intro a) later_sep. { rewrite /auth_inv -(exist_intro a) later_sep.
......
...@@ -63,13 +63,15 @@ Section sts. ...@@ -63,13 +63,15 @@ Section sts.
sts_own γ s T pvs E E (sts_ownS γ S T). sts_own γ s T pvs E E (sts_ownS γ S T).
Proof. intros. by apply own_update, sts_update_frag_up. Qed. Proof. intros. by apply own_update, sts_update_frag_up. Qed.
Lemma sts_alloc N s : Lemma sts_alloc E N s :
φ s pvs N N ( γ, sts_ctx γ N φ sts_own γ s ( sts.tok s)). nclose N E
φ s pvs E E ( γ, sts_ctx γ N φ sts_own γ s ( sts.tok s)).
Proof. Proof.
eapply sep_elim_True_r. intros HN. eapply sep_elim_True_r.
{ apply (own_alloc (sts_auth s ( sts.tok s)) N). { apply (own_alloc (sts_auth s ( sts.tok s)) N).
apply sts_auth_valid; solve_elem_of. } apply sts_auth_valid; solve_elem_of. }
rewrite pvs_frame_l. apply pvs_strip_pvs. rewrite pvs_frame_l. rewrite -(pvs_mask_weaken N E) //.
apply pvs_strip_pvs.
rewrite sep_exist_l. apply exist_elim=>γ. rewrite -(exist_intro γ). rewrite sep_exist_l. apply exist_elim=>γ. rewrite -(exist_intro γ).
transitivity ( sts_inv γ φ sts_own γ s ( sts.tok s))%I. transitivity ( sts_inv γ φ sts_own γ s ( sts.tok s))%I.
{ rewrite /sts_inv -(exist_intro s) later_sep. { rewrite /sts_inv -(exist_intro s) later_sep.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment