Library zoo.iris.base_logic.lib.auth_nat_min
Require Import zoo.prelude.
Require Import zoo.common.math.
Require Import zoo.common.relations.
Require Import zoo.iris.base_logic.lib.auth_mono.
Require Export zoo.iris.base_logic.lib.base.
Require Import zoo.iris.diaframe.
Require Import zoo.options.
Class AuthNatMinG Σ :=
{ #[local] auth_nat_min۰G۰mono۰G :: AuthMonoG Σ ge
}.
Definition auth_nat_min۰Σ :=
#[auth_mono۰Σ ge
].
#[global] Instance subGーauth_nat_min۰Σ Σ :
subG auth_nat_min۰Σ Σ →
AuthNatMinG Σ.
Section auth_nat_min۰G.
Context `{auth_nat_min۰G : !AuthNatMinG Σ}.
Implicit Type n m p : nat.
Definition auth_nat_min۰auth γ dq n :=
auth_mono۰auth ge γ dq n.
Definition auth_nat_min۰ub γ n :=
auth_mono۰lb ge γ n.
#[global] Instance auth_nat_min۰authーtimeless γ dq n :
Timeless (auth_nat_min۰auth γ dq n).
#[global] Instance auth_nat_min۰ubーtimeless γ n :
Timeless (auth_nat_min۰ub γ n).
#[global] Instance auth_nat_min۰authーpersistent γ n :
Persistent (auth_nat_min۰auth γ DfracDiscarded n).
#[global] Instance auth_nat_min۰ubーpersistent γ n :
Persistent (auth_nat_min۰ub γ n).
#[global] Instance auth_nat_min۰authーfractional γ n :
Fractional (λ q, auth_nat_min۰auth γ (DfracOwn q) n).
#[global] Instance auth_nat_min۰authーas_fractional γ q n :
AsFractional (auth_nat_min۰auth γ (DfracOwn q) n) (λ q, auth_nat_min۰auth γ (DfracOwn q) n) q.
Lemma auth_nat_minーalloc n :
⊢ |==>
∃ γ,
auth_nat_min۰auth γ (DfracOwn 1) n.
Lemma auth_nat_min۰authーvalid γ dq a :
auth_nat_min۰auth γ dq a ⊢
⌜✓ dq⌝.
Lemma auth_nat_min۰authーcombine γ dq1 n1 dq2 n2 :
auth_nat_min۰auth γ dq1 n1 -∗
auth_nat_min۰auth γ dq2 n2 -∗
⌜n1 = n2⌝ ∗
auth_nat_min۰auth γ (dq1 ⋅ dq2) n1.
Lemma auth_nat_min۰authーvalidー2 γ dq1 n1 dq2 n2 :
auth_nat_min۰auth γ dq1 n1 -∗
auth_nat_min۰auth γ dq2 n2 -∗
⌜✓ (dq1 ⋅ dq2)⌝ ∗
⌜n1 = n2⌝.
Lemma auth_nat_min۰authーagree γ dq1 n1 dq2 n2 :
auth_nat_min۰auth γ dq1 n1 -∗
auth_nat_min۰auth γ dq2 n2 -∗
⌜n1 = n2⌝.
Lemma auth_nat_min۰authーdfracーne γ1 dq1 n1 γ2 dq2 n2 :
¬ ✓ (dq1 ⋅ dq2) →
auth_nat_min۰auth γ1 dq1 n1 -∗
auth_nat_min۰auth γ2 dq2 n2 -∗
⌜γ1 ≠ γ2⌝.
Lemma auth_nat_min۰authーne γ1 n1 γ2 dq2 n2 :
auth_nat_min۰auth γ1 (DfracOwn 1) n1 -∗
auth_nat_min۰auth γ2 dq2 n2 -∗
⌜γ1 ≠ γ2⌝.
Lemma auth_nat_min۰authーexclusive γ n1 dq2 n2 :
auth_nat_min۰auth γ (DfracOwn 1) n1 -∗
auth_nat_min۰auth γ dq2 n2 -∗
False.
Lemma auth_nat_min۰authーpersist γ dq n :
auth_nat_min۰auth γ dq n ⊢ |==>
auth_nat_min۰auth γ DfracDiscarded n.
Lemma auth_nat_min۰ubーget γ q n :
auth_nat_min۰auth γ q n ⊢
auth_nat_min۰ub γ n.
Lemma auth_nat_min۰ubーle {γ n} n' :
n ≤ n' →
auth_nat_min۰ub γ n ⊢
auth_nat_min۰ub γ n'.
Lemma auth_nat_min۰ubーvalid γ dq n m :
auth_nat_min۰auth γ dq n -∗
auth_nat_min۰ub γ m -∗
⌜n ≤ m⌝.
Lemma auth_nat_minーupdate {γ n} n' :
n' ≤ n →
auth_nat_min۰auth γ (DfracOwn 1) n ⊢ |==>
auth_nat_min۰auth γ (DfracOwn 1) n'.
End auth_nat_min۰G.
#[global] Opaque auth_nat_min۰auth.
#[global] Opaque auth_nat_min۰ub.
Require Import zoo.common.math.
Require Import zoo.common.relations.
Require Import zoo.iris.base_logic.lib.auth_mono.
Require Export zoo.iris.base_logic.lib.base.
Require Import zoo.iris.diaframe.
Require Import zoo.options.
Class AuthNatMinG Σ :=
{ #[local] auth_nat_min۰G۰mono۰G :: AuthMonoG Σ ge
}.
Definition auth_nat_min۰Σ :=
#[auth_mono۰Σ ge
].
#[global] Instance subGーauth_nat_min۰Σ Σ :
subG auth_nat_min۰Σ Σ →
AuthNatMinG Σ.
Section auth_nat_min۰G.
Context `{auth_nat_min۰G : !AuthNatMinG Σ}.
Implicit Type n m p : nat.
Definition auth_nat_min۰auth γ dq n :=
auth_mono۰auth ge γ dq n.
Definition auth_nat_min۰ub γ n :=
auth_mono۰lb ge γ n.
#[global] Instance auth_nat_min۰authーtimeless γ dq n :
Timeless (auth_nat_min۰auth γ dq n).
#[global] Instance auth_nat_min۰ubーtimeless γ n :
Timeless (auth_nat_min۰ub γ n).
#[global] Instance auth_nat_min۰authーpersistent γ n :
Persistent (auth_nat_min۰auth γ DfracDiscarded n).
#[global] Instance auth_nat_min۰ubーpersistent γ n :
Persistent (auth_nat_min۰ub γ n).
#[global] Instance auth_nat_min۰authーfractional γ n :
Fractional (λ q, auth_nat_min۰auth γ (DfracOwn q) n).
#[global] Instance auth_nat_min۰authーas_fractional γ q n :
AsFractional (auth_nat_min۰auth γ (DfracOwn q) n) (λ q, auth_nat_min۰auth γ (DfracOwn q) n) q.
Lemma auth_nat_minーalloc n :
⊢ |==>
∃ γ,
auth_nat_min۰auth γ (DfracOwn 1) n.
Lemma auth_nat_min۰authーvalid γ dq a :
auth_nat_min۰auth γ dq a ⊢
⌜✓ dq⌝.
Lemma auth_nat_min۰authーcombine γ dq1 n1 dq2 n2 :
auth_nat_min۰auth γ dq1 n1 -∗
auth_nat_min۰auth γ dq2 n2 -∗
⌜n1 = n2⌝ ∗
auth_nat_min۰auth γ (dq1 ⋅ dq2) n1.
Lemma auth_nat_min۰authーvalidー2 γ dq1 n1 dq2 n2 :
auth_nat_min۰auth γ dq1 n1 -∗
auth_nat_min۰auth γ dq2 n2 -∗
⌜✓ (dq1 ⋅ dq2)⌝ ∗
⌜n1 = n2⌝.
Lemma auth_nat_min۰authーagree γ dq1 n1 dq2 n2 :
auth_nat_min۰auth γ dq1 n1 -∗
auth_nat_min۰auth γ dq2 n2 -∗
⌜n1 = n2⌝.
Lemma auth_nat_min۰authーdfracーne γ1 dq1 n1 γ2 dq2 n2 :
¬ ✓ (dq1 ⋅ dq2) →
auth_nat_min۰auth γ1 dq1 n1 -∗
auth_nat_min۰auth γ2 dq2 n2 -∗
⌜γ1 ≠ γ2⌝.
Lemma auth_nat_min۰authーne γ1 n1 γ2 dq2 n2 :
auth_nat_min۰auth γ1 (DfracOwn 1) n1 -∗
auth_nat_min۰auth γ2 dq2 n2 -∗
⌜γ1 ≠ γ2⌝.
Lemma auth_nat_min۰authーexclusive γ n1 dq2 n2 :
auth_nat_min۰auth γ (DfracOwn 1) n1 -∗
auth_nat_min۰auth γ dq2 n2 -∗
False.
Lemma auth_nat_min۰authーpersist γ dq n :
auth_nat_min۰auth γ dq n ⊢ |==>
auth_nat_min۰auth γ DfracDiscarded n.
Lemma auth_nat_min۰ubーget γ q n :
auth_nat_min۰auth γ q n ⊢
auth_nat_min۰ub γ n.
Lemma auth_nat_min۰ubーle {γ n} n' :
n ≤ n' →
auth_nat_min۰ub γ n ⊢
auth_nat_min۰ub γ n'.
Lemma auth_nat_min۰ubーvalid γ dq n m :
auth_nat_min۰auth γ dq n -∗
auth_nat_min۰ub γ m -∗
⌜n ≤ m⌝.
Lemma auth_nat_minーupdate {γ n} n' :
n' ≤ n →
auth_nat_min۰auth γ (DfracOwn 1) n ⊢ |==>
auth_nat_min۰auth γ (DfracOwn 1) n'.
End auth_nat_min۰G.
#[global] Opaque auth_nat_min۰auth.
#[global] Opaque auth_nat_min۰ub.