Library zoo.iris.base_logic.lib.saved_pred
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 SavedPredG Σ A :=
{ #[local] saved_pred_G :: AgreeG Σ (A -d> ▶ ∙)
}.
Definition saved_pred_Σ A :=
#[agree_Σ (A -d> ▶ ∙)
].
#[global] Instance subG_saved_pred_Σ Σ A :
subG (saved_pred_Σ A) Σ →
SavedPredG Σ A.
Section saved_pred_G.
Context `{saved_pred_G : !SavedPredG Σ A}.
Implicit Types Ψ : A → iProp Σ.
Definition saved_pred γ Ψ :=
agree_on γ (Next ∘ Ψ).
#[global] Instance saved_pred_contractive γ n :
Proper ((pointwise_relation _ (dist_later n)) ==> (≡{n}≡)) (saved_pred γ).
#[global] Instance saved_pred_proper γ :
Proper ((≡) ==> (≡)) (saved_pred γ : (A -d> iProp Σ) → _).
#[global] Instance saved_pred_persistent γ Ψ :
Persistent (saved_pred γ Ψ).
Lemma saved_pred_alloc Ψ :
⊢ |==>
∃ γ,
saved_pred γ Ψ.
Lemma saved_pred_alloc_cofinite (γs : gset gname) Ψ :
⊢ |==>
∃ γ,
⌜γ ∉ γs⌝ ∗
saved_pred γ Ψ.
Lemma saved_pred_agree {γ Ψ1 Ψ2} x :
saved_pred γ Ψ1 -∗
saved_pred γ Ψ2 -∗
▷ (Ψ1 x ≡ Ψ2 x).
End saved_pred_G.
#[global] Opaque saved_pred.
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 SavedPredG Σ A :=
{ #[local] saved_pred_G :: AgreeG Σ (A -d> ▶ ∙)
}.
Definition saved_pred_Σ A :=
#[agree_Σ (A -d> ▶ ∙)
].
#[global] Instance subG_saved_pred_Σ Σ A :
subG (saved_pred_Σ A) Σ →
SavedPredG Σ A.
Section saved_pred_G.
Context `{saved_pred_G : !SavedPredG Σ A}.
Implicit Types Ψ : A → iProp Σ.
Definition saved_pred γ Ψ :=
agree_on γ (Next ∘ Ψ).
#[global] Instance saved_pred_contractive γ n :
Proper ((pointwise_relation _ (dist_later n)) ==> (≡{n}≡)) (saved_pred γ).
#[global] Instance saved_pred_proper γ :
Proper ((≡) ==> (≡)) (saved_pred γ : (A -d> iProp Σ) → _).
#[global] Instance saved_pred_persistent γ Ψ :
Persistent (saved_pred γ Ψ).
Lemma saved_pred_alloc Ψ :
⊢ |==>
∃ γ,
saved_pred γ Ψ.
Lemma saved_pred_alloc_cofinite (γs : gset gname) Ψ :
⊢ |==>
∃ γ,
⌜γ ∉ γs⌝ ∗
saved_pred γ Ψ.
Lemma saved_pred_agree {γ Ψ1 Ψ2} x :
saved_pred γ Ψ1 -∗
saved_pred γ Ψ2 -∗
▷ (Ψ1 x ≡ Ψ2 x).
End saved_pred_G.
#[global] Opaque saved_pred.