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

lock allows applying equivalences

parent 4ee03a57
No related branches found
No related tags found
No related merge requests found
Pipeline #
coq-iris https://gitlab.mpi-sws.org/FP/iris-coq 35551d40f927c1d567993ff27eeb46f64788efca coq-iris https://gitlab.mpi-sws.org/FP/iris-coq 1edf71ef9809456c29454d8ad60c34ea10e36fe8
...@@ -28,16 +28,13 @@ Section proof. ...@@ -28,16 +28,13 @@ Section proof.
( b : bool, l #b if b then True else own γ (Excl ()) R)%I. ( b : bool, l #b if b then True else own γ (Excl ()) R)%I.
Definition is_lock (γ : lockname) (l : loc) (R : iProp Σ) : iProp Σ := Definition is_lock (γ : lockname) (l : loc) (R : iProp Σ) : iProp Σ :=
(cinv N (γ.1) (lock_inv (γ.2) l R))%I. cinv N (γ.1) (lock_inv (γ.2) l R).
Definition own_lock (γ : lockname) : frac iProp Σ := Definition own_lock (γ : lockname) : frac iProp Σ :=
cinv_own (γ.1). cinv_own (γ.1).
Definition locked (γ : lockname): iProp Σ := own (γ.2) (Excl ()). Definition locked (γ : lockname): iProp Σ := own (γ.2) (Excl ()).
Lemma locked_exclusive (γ : lockname) : locked γ -∗ locked γ -∗ False.
Proof. iIntros "H1 H2". by iDestruct (own_valid_2 with "H1 H2") as %?. Qed.
Global Instance lock_inv_ne γ l : NonExpansive (lock_inv γ l). Global Instance lock_inv_ne γ l : NonExpansive (lock_inv γ l).
Proof. solve_proper. Qed. Proof. solve_proper. Qed.
Global Instance is_lock_contractive γ l : Contractive (is_lock γ l). Global Instance is_lock_contractive γ l : Contractive (is_lock γ l).
...@@ -50,6 +47,18 @@ Section proof. ...@@ -50,6 +47,18 @@ Section proof.
Global Instance locked_timeless γ : TimelessP (locked γ). Global Instance locked_timeless γ : TimelessP (locked γ).
Proof. apply _. Qed. Proof. apply _. Qed.
Lemma locked_exclusive (γ : lockname) : locked γ -∗ locked γ -∗ False.
Proof. iIntros "H1 H2". by iDestruct (own_valid_2 with "H1 H2") as %?. Qed.
Lemma is_lock_iff γ l R R' :
(R R') -∗ is_lock γ l R -∗ is_lock γ l R'.
Proof.
iIntros "#HRR' Hlck". iApply cinv_iff; last done. iNext. iAlways.
iSplit; iIntros "Hinv"; iDestruct "Hinv" as (b) "[Hl HR]"; iExists b;
iFrame "Hl"; (destruct b; first done); iDestruct "HR" as "[$ HR]";
by iApply "HRR'".
Qed.
(** The main proofs. *) (** The main proofs. *)
Lemma newlock_inplace (E : coPset) (R : iProp Σ) l (b : bool) : Lemma newlock_inplace (E : coPset) (R : iProp Σ) l (b : bool) :
l #b -∗ (if b then True else R) ={E}=∗ γ, is_lock γ l R own_lock γ 1%Qp. l #b -∗ (if b then True else R) ={E}=∗ γ, is_lock γ l R own_lock γ 1%Qp.
......
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