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