Commit e3601a05 authored by Ralf Jung's avatar Ralf Jung

bump Iris, update for frac_auth notation

parent 2d178e1e
Pipeline #17672 canceled with stage
in 2 minutes and 38 seconds
......@@ -131,7 +131,7 @@ Section proof3.
Context `{!heapG Σ, !spawnG Σ, !inG Σ (frac_authR natR)}.
Definition parallel_add_inv_3 (r : loc) (γ : gname) : iProp Σ :=
( n : nat, r #n own γ (! n))%I.
( n : nat, r #n own γ (F n))%I.
(** *Exercise*: finish the missing cases of the proof. *)
Lemma parallel_add_spec_3 :
......@@ -139,17 +139,17 @@ Section proof3.
Proof.
iIntros (Φ) "_ Post".
unfold parallel_add. wp_alloc r as "Hr". wp_let.
iMod (own_alloc (! 0%nat ! 0%nat)) as (γ) "[Hγ● [Hγ1◯ Hγ2◯]]".
iMod (own_alloc (F 0%nat F 0%nat)) as (γ) "[Hγ● [Hγ1◯ Hγ2◯]]".
{ by apply auth_both_valid. }
wp_apply (newlock_spec (parallel_add_inv_3 r γ) with "[Hr Hγ●]").
{ (* exercise *)
admit. }
iIntros (l) "#Hl". wp_let.
wp_apply (wp_par (λ _, own γ (!{1/2} 2%nat)) (λ _, own γ (!{1/2} 2%nat))
wp_apply (wp_par (λ _, own γ (F{1/2} 2%nat)) (λ _, own γ (F{1/2} 2%nat))
with "[Hγ1◯] [Hγ2◯]").
- wp_apply (acquire_spec with "Hl"). iDestruct 1 as (n) "[Hr Hγ●]".
wp_seq. wp_load. wp_op. wp_store.
iMod (own_update_2 _ _ _ (! (n+2) !{1/2}2)%nat with "Hγ● Hγ1◯") as "[Hγ● Hγ1◯]".
iMod (own_update_2 _ _ _ (F (n+2) F{1/2}2)%nat with "Hγ● Hγ1◯") as "[Hγ● Hγ1◯]".
{ rewrite (comm plus).
by apply frac_auth_update, (op_local_update_discrete n 0 2)%nat. }
wp_apply (release_spec with "[$Hl Hr Hγ●]"); [|by auto].
......
......@@ -9,5 +9,5 @@ build: [make "-j%{jobs}%"]
install: [] # This repo does not install
remove: []
depends: [
"coq-iris" { (= "dev.2019-05-24.0.c9984c7f") | (= "dev") }
"coq-iris" { (= "dev.2019-06-11.8.a51fa3cf") | (= "dev") }
]
......@@ -144,7 +144,7 @@ Section proof3.
Context `{!heapG Σ, !spawnG Σ, !inG Σ (frac_authR natR)}.
Definition parallel_add_inv_3 (r : loc) (γ : gname) : iProp Σ :=
( n : nat, r #n own γ (! n))%I.
( n : nat, r #n own γ (F n))%I.
(** *Exercise*: finish the missing cases of the proof. *)
Lemma parallel_add_spec_3 :
......@@ -152,16 +152,16 @@ Section proof3.
Proof.
iIntros (Φ) "_ Post".
unfold parallel_add. wp_alloc r as "Hr". wp_let.
iMod (own_alloc (! 0%nat ! 0%nat)) as (γ) "[Hγ● [Hγ1◯ Hγ2◯]]".
iMod (own_alloc (F 0%nat F 0%nat)) as (γ) "[Hγ● [Hγ1◯ Hγ2◯]]".
{ by apply auth_both_valid. }
wp_apply (newlock_spec (parallel_add_inv_3 r γ) with "[Hr Hγ●]").
{ (* exercise *) iExists 0%nat. iFrame. }
iIntros (l) "#Hl". wp_let.
wp_apply (wp_par (λ _, own γ (!{1/2} 2%nat)) (λ _, own γ (!{1/2} 2%nat))
wp_apply (wp_par (λ _, own γ (F{1/2} 2%nat)) (λ _, own γ (F{1/2} 2%nat))
with "[Hγ1◯] [Hγ2◯]").
- wp_apply (acquire_spec with "Hl"). iDestruct 1 as (n) "[Hr Hγ●]".
wp_seq. wp_load. wp_op. wp_store.
iMod (own_update_2 _ _ _ (! (n+2) !{1/2}2)%nat with "Hγ● Hγ1◯") as "[Hγ● Hγ1◯]".
iMod (own_update_2 _ _ _ (F (n+2) F{1/2}2)%nat with "Hγ● Hγ1◯") as "[Hγ● Hγ1◯]".
{ rewrite (comm plus).
by apply frac_auth_update, (op_local_update_discrete n 0 2)%nat. }
wp_apply (release_spec with "[$Hl Hr Hγ●]"); [|by auto].
......@@ -169,7 +169,7 @@ Section proof3.
- (* exercise *)
wp_apply (acquire_spec with "Hl"). iDestruct 1 as (n) "[Hr Hγ●]".
wp_seq. wp_load. wp_op. wp_store.
iMod (own_update_2 _ _ _ (! (n+2) !{1/2}2)%nat with "Hγ● Hγ2◯") as "[Hγ● Hγ2◯]".
iMod (own_update_2 _ _ _ (F (n+2) F{1/2}2)%nat with "Hγ● Hγ2◯") as "[Hγ● Hγ2◯]".
{ rewrite (comm plus).
by apply frac_auth_update, (op_local_update_discrete n 0 2)%nat. }
wp_apply (release_spec with "[- $Hl Hγ2◯]"); [|by auto].
......
......@@ -54,23 +54,23 @@ Section proof2.
(* Rules for fractional ghost variables
(proved from generic principles) *)
Lemma frac_auth_alloc n :
(|==> γ, own γ (! n) own γ (!{1} n))%I.
(|==> γ, own γ (F n) own γ (F{1} n))%I.
Proof.
by iMod (own_alloc (! n ! n))
by iMod (own_alloc (F n F n))
as (γ) "[??]"; eauto with iFrame.
Qed.
Lemma frac_auth_update n n1 n2 q γ :
own γ (! n1) -
own γ (!{q} n2) - |==>
own γ (! (n1 + n)%nat) own γ (!{q} (n2 + n)%nat).
own γ (F n1) -
own γ (F{q} n2) - |==>
own γ (F (n1 + n)%nat) own γ (F{q} (n2 + n)%nat).
Proof.
iIntros "H H'". iMod (own_update_2 with "H H'") as "[$ $]"; last done.
apply frac_auth_update, nat_local_update. lia.
Qed.
Lemma frac_auth_agree n n' γ :
own γ (! n) - own γ (!{1} n') - n = n'.
own γ (F n) - own γ (F{1} n') - n = n'.
Proof.
iIntros "H H'".
by iDestruct (own_valid_2 with "H H'") as %->%frac_auth_agreeL.
......@@ -78,13 +78,13 @@ Section proof2.
(* The invariant that we use *)
Definition proof2_inv (γ : gname) (l : loc) : iProp Σ :=
( n : nat, own γ (! n) l #n)%I.
( n : nat, own γ (F n) l #n)%I.
(* Proof of the threads *)
Lemma par_inc_FAA_spec n n' γ l q :
{{{ inv N (proof2_inv γ l) own γ (!{q} n) }}}
{{{ inv N (proof2_inv γ l) own γ (F{q} n) }}}
FAA #l #n'
{{{ m, RET #m; own γ (!{q} (n + n'))%nat }}}.
{{{ m, RET #m; own γ (F{q} (n + n'))%nat }}}.
Proof.
iIntros (Φ) "[#Hinv Hγ] Post". iInv N as (m) ">[Hauth Hl]" "Hclose".
wp_faa.
......@@ -103,8 +103,8 @@ Section proof2.
iDestruct "Hγ" as "[Hγ1 Hγ2]".
iMod (inv_alloc _ _ (proof2_inv γ l) with "[Hl Hauth]") as "#Hinv".
{ iNext. iExists 0%nat. iFrame. }
wp_apply (wp_par (λ _, own γ (!{1/2} 2%nat))
(λ _, own γ (!{1/2} 2%nat)) with "[Hγ1] [Hγ2]").
wp_apply (wp_par (λ _, own γ (F{1/2} 2%nat))
(λ _, own γ (F{1/2} 2%nat)) with "[Hγ1] [Hγ2]").
- iApply (par_inc_FAA_spec 0 2 with "[$]"); auto.
- iApply (par_inc_FAA_spec 0 2 with "[$]"); auto.
- iIntros (v1 v2) "[Hγ1 Hγ2] !>". iCombine "Hγ1 Hγ2" as "Hγ". simpl.
......@@ -117,9 +117,9 @@ Section proof2.
Qed.
Lemma par_incN_helper_spec n γ l q :
{{{ inv N (proof2_inv γ l) own γ (!{q} 0%nat) }}}
{{{ inv N (proof2_inv γ l) own γ (F{q} 0%nat) }}}
par_incN_helper #n #l
{{{ v, RET v; own γ (!{q} (n * 2))%nat }}}.
{{{ v, RET v; own γ (F{q} (n * 2))%nat }}}.
Proof.
iIntros (Φ) "[#? Hγ] Post /=".
iInduction n as [|n] "IH" forall (q Φ).
......@@ -127,8 +127,8 @@ Section proof2.
rewrite Nat2Z.inj_succ. do 2 wp_let.
wp_op. case_bool_decide; first lia. wp_if.
iDestruct "Hγ" as "[Hγ1 Hγ2]".
wp_apply (wp_par (λ _, own γ (!{q/2} 2%nat))
(λ _, own γ (!{q/2} (n * 2)%nat)) with "[Hγ1] [Hγ2]").
wp_apply (wp_par (λ _, own γ (F{q/2} 2%nat))
(λ _, own γ (F{q/2} (n * 2)%nat)) with "[Hγ1] [Hγ2]").
- iApply (par_inc_FAA_spec 0 2 with "[$]"); auto.
- wp_op. rewrite (_ : Z.succ n - 1 = n); last lia.
iApply ("IH" with "Hγ2"); auto.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment