Library zoo.iris.base_logic.lib.excl
From iris.algebra Require Import
excl.
From zoo Require Import
prelude.
From zoo.iris.base_logic Require Export
lib.base.
From zoo.iris Require Import
diaframe.
From zoo Require Import
options.
Class ExclG Σ F :=
{ #[local] excl_G_inG :: inG Σ (exclR $ oFunctor_apply F $ iPropO Σ)
}.
Definition excl_Σ F `{!oFunctorContractive F} :=
#[GFunctor (exclRF F)
].
#[global] Instance subG_excl_Σ Σ F `{!oFunctorContractive F} :
subG (excl_Σ F) Σ →
ExclG Σ F.
Section excl_G.
Context `{excl_G : !ExclG Σ F}.
Definition excl γ a :=
own γ (Excl a).
#[global] Instance excl_proper γ :
Proper ((≡) ==> (≡)) (excl γ).
#[global] Instance excl_timeless γ a :
Discrete a →
Timeless (excl γ a).
Lemma excl_alloc a :
⊢ |==>
∃ γ,
excl γ a.
Lemma excl_exclusive γ a1 a2 :
excl γ a1 -∗
excl γ a2 -∗
False.
Lemma excl_update γ a b :
excl γ a ⊢ |==>
excl γ b.
End excl_G.
#[global] Opaque excl.
excl.
From zoo Require Import
prelude.
From zoo.iris.base_logic Require Export
lib.base.
From zoo.iris Require Import
diaframe.
From zoo Require Import
options.
Class ExclG Σ F :=
{ #[local] excl_G_inG :: inG Σ (exclR $ oFunctor_apply F $ iPropO Σ)
}.
Definition excl_Σ F `{!oFunctorContractive F} :=
#[GFunctor (exclRF F)
].
#[global] Instance subG_excl_Σ Σ F `{!oFunctorContractive F} :
subG (excl_Σ F) Σ →
ExclG Σ F.
Section excl_G.
Context `{excl_G : !ExclG Σ F}.
Definition excl γ a :=
own γ (Excl a).
#[global] Instance excl_proper γ :
Proper ((≡) ==> (≡)) (excl γ).
#[global] Instance excl_timeless γ a :
Discrete a →
Timeless (excl γ a).
Lemma excl_alloc a :
⊢ |==>
∃ γ,
excl γ a.
Lemma excl_exclusive γ a1 a2 :
excl γ a1 -∗
excl γ a2 -∗
False.
Lemma excl_update γ a b :
excl γ a ⊢ |==>
excl γ b.
End excl_G.
#[global] Opaque excl.