Library zoo.iris.base_logic.lib.saved_prop
From zoo Require Import
prelude.
From zoo.iris.base_logic Require Export
lib.base.
From zoo.iris.base_logic Require Import
lib.agree.
From zoo.iris Require Import
diaframe.
From zoo Require Import
options.
Class SavedPropG Σ :=
{ #[local] saved_prop_G :: AgreeG Σ (▶ ∙)
}.
Definition saved_prop_Σ :=
#[agree_Σ (▶ ∙)
].
#[global] Instance subG_saved_prop_Σ Σ :
subG saved_prop_Σ Σ →
SavedPropG Σ.
Section saved_prop_G.
Context `{saved_prop_G : !SavedPropG Σ}.
Implicit Types P : iProp Σ.
Definition saved_prop γ P :=
agree_on γ (Next P).
#[global] Instance saved_prop_contractive γ :
Contractive (saved_prop γ).
#[global] Instance saved_prop_proper γ :
Proper ((≡) ==> (≡)) (saved_prop γ).
#[global] Instance saved_prop_persistent γ P :
Persistent (saved_prop γ P).
Lemma saved_prop_alloc P :
⊢ |==>
∃ γ,
saved_prop γ P.
Lemma saved_prop_alloc_cofinite (γs : gset gname) P :
⊢ |==>
∃ γ,
⌜γ ∉ γs⌝ ∗
saved_prop γ P.
Lemma saved_prop_agree γ P1 P2 :
saved_prop γ P1 -∗
saved_prop γ P2 -∗
▷ (P1 ≡ P2).
End saved_prop_G.
#[global] Opaque saved_prop.
prelude.
From zoo.iris.base_logic Require Export
lib.base.
From zoo.iris.base_logic Require Import
lib.agree.
From zoo.iris Require Import
diaframe.
From zoo Require Import
options.
Class SavedPropG Σ :=
{ #[local] saved_prop_G :: AgreeG Σ (▶ ∙)
}.
Definition saved_prop_Σ :=
#[agree_Σ (▶ ∙)
].
#[global] Instance subG_saved_prop_Σ Σ :
subG saved_prop_Σ Σ →
SavedPropG Σ.
Section saved_prop_G.
Context `{saved_prop_G : !SavedPropG Σ}.
Implicit Types P : iProp Σ.
Definition saved_prop γ P :=
agree_on γ (Next P).
#[global] Instance saved_prop_contractive γ :
Contractive (saved_prop γ).
#[global] Instance saved_prop_proper γ :
Proper ((≡) ==> (≡)) (saved_prop γ).
#[global] Instance saved_prop_persistent γ P :
Persistent (saved_prop γ P).
Lemma saved_prop_alloc P :
⊢ |==>
∃ γ,
saved_prop γ P.
Lemma saved_prop_alloc_cofinite (γs : gset gname) P :
⊢ |==>
∃ γ,
⌜γ ∉ γs⌝ ∗
saved_prop γ P.
Lemma saved_prop_agree γ P1 P2 :
saved_prop γ P1 -∗
saved_prop γ P2 -∗
▷ (P1 ≡ P2).
End saved_prop_G.
#[global] Opaque saved_prop.