Library zoo.iris.base_logic.lib.mono_gset
Require Import zoo.prelude.
Require Import zoo.common.relations.
Require Export zoo.iris.base_logic.lib.base.
Require Import zoo.iris.base_logic.lib.auth_mono.
Require Import zoo.iris.diaframe.
Require Import zoo.options.
Class MonoGsetG Σ A `{Countable A} :=
{ #[local] mono_gset۰G۰mono۰G :: AuthMonoG Σ (A := leibnizO (gset A)) subseteq
}.
Definition mono_gset۰Σ A `{Countable A} :=
#[auth_mono۰Σ (A := leibnizO (gset A)) subseteq
].
#[global] Instance subGーmono_gset۰Σ Σ V `{Countable V} :
subG (mono_gset۰Σ V) Σ →
MonoGsetG Σ V.
Section mono_gset۰G.
Context `{mono_gset۰G : MonoGsetG Σ A}.
Implicit Type a : A.
Implicit Type s : gset A.
Definition mono_gset۰auth γ dq s :=
auth_mono۰auth subseteq γ dq s.
Definition mono_gset۰lb γ s :=
auth_mono۰lb subseteq γ s.
Definition mono_gset۰elem γ a :=
mono_gset۰lb γ {[a]}.
#[global] Instance mono_gset۰authーproper γ dq :
Proper ((≡) ==> (≡)) (mono_gset۰auth γ dq).
#[global] Instance mono_gset۰lbーproper γ :
Proper ((≡) ==> (≡)) (mono_gset۰lb γ).
#[global] Instance mono_gset۰authーtimeless γ dq s :
Timeless (mono_gset۰auth γ dq s).
#[global] Instance mono_gset۰lbーtimeless γ s :
Timeless (mono_gset۰lb γ s).
#[global] Instance mono_gset۰authーpersistent γ s :
Persistent (mono_gset۰auth γ DfracDiscarded s).
#[global] Instance mono_gset۰lbーpersistent γ s :
Persistent (mono_gset۰lb γ s).
#[global] Instance mono_gset۰authーfractional γ s :
Fractional (λ q, mono_gset۰auth γ (DfracOwn q) s).
#[global] Instance mono_gset۰authーas_fractional γ q s :
AsFractional (mono_gset۰auth γ (DfracOwn q) s) (λ q, mono_gset۰auth γ (DfracOwn q) s) q.
Lemma mono_gsetーalloc s :
⊢ |==>
∃ γ,
mono_gset۰auth γ (DfracOwn 1) s.
Lemma mono_gset۰authーvalid γ dq s :
mono_gset۰auth γ dq s ⊢
⌜✓ dq⌝.
Lemma mono_gset۰authーcombine γ dq1 s1 dq2 s2 :
mono_gset۰auth γ dq1 s1 -∗
mono_gset۰auth γ dq2 s2 -∗
⌜s1 = s2⌝ ∗
mono_gset۰auth γ (dq1 ⋅ dq2) s1.
Lemma mono_gset۰authーvalidー2 γ dq1 s1 dq2 s2 :
mono_gset۰auth γ dq1 s1 -∗
mono_gset۰auth γ dq2 s2 -∗
⌜✓ (dq1 ⋅ dq2)⌝ ∗
⌜s1 = s2⌝.
Lemma mono_gset۰authーagree γ dq1 s1 dq2 s2 :
mono_gset۰auth γ dq1 s1 -∗
mono_gset۰auth γ dq2 s2 -∗
⌜s1 = s2⌝.
Lemma mono_gset۰authーdfracーne γ1 dq1 s1 γ2 dq2 s2 :
¬ ✓ (dq1 ⋅ dq2) →
mono_gset۰auth γ1 dq1 s1 -∗
mono_gset۰auth γ2 dq2 s2 -∗
⌜γ1 ≠ γ2⌝.
Lemma mono_gset۰authーne γ1 s1 γ2 dq2 s2 :
mono_gset۰auth γ1 (DfracOwn 1) s1 -∗
mono_gset۰auth γ2 dq2 s2 -∗
⌜γ1 ≠ γ2⌝.
Lemma mono_gset۰authーexclusive γ s1 dq2 s2 :
mono_gset۰auth γ (DfracOwn 1) s1 -∗
mono_gset۰auth γ dq2 s2 -∗
False.
Lemma mono_gset۰authーpersist γ dq s :
mono_gset۰auth γ dq s ⊢ |==>
mono_gset۰auth γ DfracDiscarded s.
Lemma mono_gset۰lbーget γ dq s :
mono_gset۰auth γ dq s ⊢
mono_gset۰lb γ s.
Lemma mono_gset۰lbーmono {γ s} s' :
s' ⊆ s →
mono_gset۰lb γ s ⊢
mono_gset۰lb γ s'.
Lemma mono_gset۰elemーget {γ dq s} a :
a ∈ s →
mono_gset۰auth γ dq s ⊢
mono_gset۰elem γ a.
Lemma mono_gset۰lbーvalid γ dq s1 s2 :
mono_gset۰auth γ dq s1 -∗
mono_gset۰lb γ s2 -∗
⌜s2 ⊆ s1⌝.
Lemma mono_gset۰elemーvalid γ dq s a :
mono_gset۰auth γ dq s -∗
mono_gset۰elem γ a -∗
⌜a ∈ s⌝.
Lemma mono_gsetーupdate {γ s} s' :
s ⊆ s' →
mono_gset۰auth γ (DfracOwn 1) s ⊢ |==>
mono_gset۰auth γ (DfracOwn 1) s'.
Lemma mono_gsetーinsert {γ s} a :
mono_gset۰auth γ (DfracOwn 1) s ⊢ |==>
mono_gset۰auth γ (DfracOwn 1) ({[a]} ∪ s).
Lemma mono_gsetーinsert' {γ s} a :
mono_gset۰auth γ (DfracOwn 1) s ⊢ |==>
mono_gset۰auth γ (DfracOwn 1) ({[a]} ∪ s) ∗
mono_gset۰elem γ a.
End mono_gset۰G.
#[global] Opaque mono_gset۰auth.
#[global] Opaque mono_gset۰lb.
Require Import zoo.common.relations.
Require Export zoo.iris.base_logic.lib.base.
Require Import zoo.iris.base_logic.lib.auth_mono.
Require Import zoo.iris.diaframe.
Require Import zoo.options.
Class MonoGsetG Σ A `{Countable A} :=
{ #[local] mono_gset۰G۰mono۰G :: AuthMonoG Σ (A := leibnizO (gset A)) subseteq
}.
Definition mono_gset۰Σ A `{Countable A} :=
#[auth_mono۰Σ (A := leibnizO (gset A)) subseteq
].
#[global] Instance subGーmono_gset۰Σ Σ V `{Countable V} :
subG (mono_gset۰Σ V) Σ →
MonoGsetG Σ V.
Section mono_gset۰G.
Context `{mono_gset۰G : MonoGsetG Σ A}.
Implicit Type a : A.
Implicit Type s : gset A.
Definition mono_gset۰auth γ dq s :=
auth_mono۰auth subseteq γ dq s.
Definition mono_gset۰lb γ s :=
auth_mono۰lb subseteq γ s.
Definition mono_gset۰elem γ a :=
mono_gset۰lb γ {[a]}.
#[global] Instance mono_gset۰authーproper γ dq :
Proper ((≡) ==> (≡)) (mono_gset۰auth γ dq).
#[global] Instance mono_gset۰lbーproper γ :
Proper ((≡) ==> (≡)) (mono_gset۰lb γ).
#[global] Instance mono_gset۰authーtimeless γ dq s :
Timeless (mono_gset۰auth γ dq s).
#[global] Instance mono_gset۰lbーtimeless γ s :
Timeless (mono_gset۰lb γ s).
#[global] Instance mono_gset۰authーpersistent γ s :
Persistent (mono_gset۰auth γ DfracDiscarded s).
#[global] Instance mono_gset۰lbーpersistent γ s :
Persistent (mono_gset۰lb γ s).
#[global] Instance mono_gset۰authーfractional γ s :
Fractional (λ q, mono_gset۰auth γ (DfracOwn q) s).
#[global] Instance mono_gset۰authーas_fractional γ q s :
AsFractional (mono_gset۰auth γ (DfracOwn q) s) (λ q, mono_gset۰auth γ (DfracOwn q) s) q.
Lemma mono_gsetーalloc s :
⊢ |==>
∃ γ,
mono_gset۰auth γ (DfracOwn 1) s.
Lemma mono_gset۰authーvalid γ dq s :
mono_gset۰auth γ dq s ⊢
⌜✓ dq⌝.
Lemma mono_gset۰authーcombine γ dq1 s1 dq2 s2 :
mono_gset۰auth γ dq1 s1 -∗
mono_gset۰auth γ dq2 s2 -∗
⌜s1 = s2⌝ ∗
mono_gset۰auth γ (dq1 ⋅ dq2) s1.
Lemma mono_gset۰authーvalidー2 γ dq1 s1 dq2 s2 :
mono_gset۰auth γ dq1 s1 -∗
mono_gset۰auth γ dq2 s2 -∗
⌜✓ (dq1 ⋅ dq2)⌝ ∗
⌜s1 = s2⌝.
Lemma mono_gset۰authーagree γ dq1 s1 dq2 s2 :
mono_gset۰auth γ dq1 s1 -∗
mono_gset۰auth γ dq2 s2 -∗
⌜s1 = s2⌝.
Lemma mono_gset۰authーdfracーne γ1 dq1 s1 γ2 dq2 s2 :
¬ ✓ (dq1 ⋅ dq2) →
mono_gset۰auth γ1 dq1 s1 -∗
mono_gset۰auth γ2 dq2 s2 -∗
⌜γ1 ≠ γ2⌝.
Lemma mono_gset۰authーne γ1 s1 γ2 dq2 s2 :
mono_gset۰auth γ1 (DfracOwn 1) s1 -∗
mono_gset۰auth γ2 dq2 s2 -∗
⌜γ1 ≠ γ2⌝.
Lemma mono_gset۰authーexclusive γ s1 dq2 s2 :
mono_gset۰auth γ (DfracOwn 1) s1 -∗
mono_gset۰auth γ dq2 s2 -∗
False.
Lemma mono_gset۰authーpersist γ dq s :
mono_gset۰auth γ dq s ⊢ |==>
mono_gset۰auth γ DfracDiscarded s.
Lemma mono_gset۰lbーget γ dq s :
mono_gset۰auth γ dq s ⊢
mono_gset۰lb γ s.
Lemma mono_gset۰lbーmono {γ s} s' :
s' ⊆ s →
mono_gset۰lb γ s ⊢
mono_gset۰lb γ s'.
Lemma mono_gset۰elemーget {γ dq s} a :
a ∈ s →
mono_gset۰auth γ dq s ⊢
mono_gset۰elem γ a.
Lemma mono_gset۰lbーvalid γ dq s1 s2 :
mono_gset۰auth γ dq s1 -∗
mono_gset۰lb γ s2 -∗
⌜s2 ⊆ s1⌝.
Lemma mono_gset۰elemーvalid γ dq s a :
mono_gset۰auth γ dq s -∗
mono_gset۰elem γ a -∗
⌜a ∈ s⌝.
Lemma mono_gsetーupdate {γ s} s' :
s ⊆ s' →
mono_gset۰auth γ (DfracOwn 1) s ⊢ |==>
mono_gset۰auth γ (DfracOwn 1) s'.
Lemma mono_gsetーinsert {γ s} a :
mono_gset۰auth γ (DfracOwn 1) s ⊢ |==>
mono_gset۰auth γ (DfracOwn 1) ({[a]} ∪ s).
Lemma mono_gsetーinsert' {γ s} a :
mono_gset۰auth γ (DfracOwn 1) s ⊢ |==>
mono_gset۰auth γ (DfracOwn 1) ({[a]} ∪ s) ∗
mono_gset۰elem γ a.
End mono_gset۰G.
#[global] Opaque mono_gset۰auth.
#[global] Opaque mono_gset۰lb.