Library zoo.iris.algebra.lib.auth_monoi
From iris.algebra Require Import
proofmode_classes.
From zoo Require Import
prelude.
From zoo.common Require Export
relations.
From zoo.iris.algebra Require Export
base.
From zoo.iris.algebra Require Import
auth
monopoi.
From zoo Require Import
options.
#[local] Hint Resolve monopoi_principal_valid : core.
Section relation.
Context {SI : sidx}.
Context {A : ofe} (R : relation A).
Context `{!Initial R}.
Implicit Types a b : A.
Notation Rs := (
rtc R
).
#[local] Instance Rs_antisymm `{!AntiSymm (=) Rs} :
AntiSymm (≡) Rs.
Definition auth_monoi :=
auth (monopoi Rs).
Definition auth_monoi_R :=
authR (monopoi_UR Rs).
Definition auth_monoi_UR :=
authUR (monopoi_UR Rs).
Definition auth_monoi_auth dq a : auth_monoi_UR :=
●{dq} monopoi_principal Rs a ⋅ ◯ monopoi_principal Rs a.
Definition auth_monoi_lb a : auth_monoi_UR :=
◯ monopoi_principal Rs a.
#[global] Instance auth_monoi_auth_inj `{!AntiSymm (≡) Rs} :
Inj2 (=) (≡) (≡) auth_monoi_auth
| 10.
#[global] Instance auth_monoi_auth_inj_L `{!LeibnizEquiv A} `{!AntiSymm (=) Rs} :
Inj2 (=) (=) (≡) auth_monoi_auth
| 9.
#[global] Instance auth_monoi_lb_inj `{!AntiSymm (≡) Rs} :
Inj (≡) (≡) auth_monoi_lb
| 10.
#[global] Instance auth_monoi_lb_inj_L `{!LeibnizEquiv A} `{!AntiSymm (=) Rs} :
Inj (=) (≡) auth_monoi_lb
| 9.
#[global] Instance auth_monoi_cmra_discrete :
CmraDiscrete auth_monoi_R.
#[global] Instance auth_monoi_auth_core_id a :
CoreId (auth_monoi_auth DfracDiscarded a).
#[global] Instance auth_monoi_lb_core_id a :
CoreId (auth_monoi_lb a).
Lemma auth_monoi_auth_dfrac_op dq1 dq2 a :
auth_monoi_auth (dq1 ⋅ dq2) a ≡ auth_monoi_auth dq1 a ⋅ auth_monoi_auth dq2 a.
#[global] Instance auth_monoi_auth_dfrac_is_op dq dq1 dq2 a :
IsOp dq dq1 dq2 →
IsOp' (auth_monoi_auth dq a) (auth_monoi_auth dq1 a) (auth_monoi_auth dq2 a).
Lemma auth_monoi_lb_op a a' :
Rs a a' →
auth_monoi_lb a' ≡ auth_monoi_lb a ⋅ auth_monoi_lb a'.
Lemma auth_monoi_auth_lb_op dq a :
auth_monoi_auth dq a ≡ auth_monoi_auth dq a ⋅ auth_monoi_lb a.
Lemma auth_monoi_auth_dfrac_valid dq a :
✓ auth_monoi_auth dq a ↔
✓ dq.
Lemma auth_monoi_auth_valid a :
✓ auth_monoi_auth (DfracOwn 1) a.
Lemma auth_monoi_auth_dfrac_op_valid `{!AntiSymm (≡) Rs} dq1 a1 dq2 a2 :
✓ (auth_monoi_auth dq1 a1 ⋅ auth_monoi_auth dq2 a2) →
✓ (dq1 ⋅ dq2) ∧
a1 ≡ a2.
Lemma auth_monoi_auth_dfrac_op_valid_L `{!LeibnizEquiv A} `{!AntiSymm (=) Rs} dq1 a1 dq2 a2 :
✓ (auth_monoi_auth dq1 a1 ⋅ auth_monoi_auth dq2 a2) ↔
✓ (dq1 ⋅ dq2) ∧
a1 = a2.
Lemma auth_monoi_auth_op_valid `{!AntiSymm (≡) Rs} a1 a2 :
✓ (auth_monoi_auth (DfracOwn 1) a1 ⋅ auth_monoi_auth (DfracOwn 1) a2) →
False.
Lemma auth_monoi_auth_op_valid_L `{!LeibnizEquiv A} `{!AntiSymm (=) Rs} a1 a2 :
✓ (auth_monoi_auth (DfracOwn 1) a1 ⋅ auth_monoi_auth (DfracOwn 1) a2) ↔
False.
Lemma auth_monoi_lb_op_valid a1 a2 :
✓ (auth_monoi_lb a1 ⋅ auth_monoi_lb a2) →
∃ a,
Rs a1 a ∧
Rs a2 a.
Lemma auth_monoi_both_dfrac_valid dq a b :
✓ (auth_monoi_auth dq a ⋅ auth_monoi_lb b) ↔
✓ dq ∧
Rs b a.
Lemma auth_monoi_both_valid a b :
✓ (auth_monoi_auth (DfracOwn 1) a ⋅ auth_monoi_lb b) ↔
Rs b a.
Lemma auth_monoi_lb_mono a1 a2 :
Rs a1 a2 →
auth_monoi_lb a1 ≼ auth_monoi_lb a2.
Lemma auth_monoi_auth_dfrac_included `{!AntiSymm (≡) Rs} dq1 a1 dq2 a2 :
auth_monoi_auth dq1 a1 ≼ auth_monoi_auth dq2 a2 →
(dq1 ≼ dq2 ∨ dq1 = dq2) ∧
a1 ≡ a2.
Lemma auth_monoi_auth_dfrac_included_L `{!LeibnizEquiv A} `{!AntiSymm (=) Rs} dq1 a1 dq2 a2 :
auth_monoi_auth dq1 a1 ≼ auth_monoi_auth dq2 a2 ↔
(dq1 ≼ dq2 ∨ dq1 = dq2) ∧
a1 = a2.
Lemma auth_monoi_auth_included `{!AntiSymm (≡) Rs} a1 a2 :
auth_monoi_auth (DfracOwn 1) a1 ≼ auth_monoi_auth (DfracOwn 1) a2 →
a1 ≡ a2.
Lemma auth_monoi_auth_included_L `{!LeibnizEquiv A} `{!AntiSymm (=) Rs} a1 a2 :
auth_monoi_auth (DfracOwn 1) a1 ≼ auth_monoi_auth (DfracOwn 1) a2 ↔
a1 = a2.
Lemma auth_monoi_lb_included a1 dq a2 :
auth_monoi_lb a1 ≼ auth_monoi_auth dq a2 ↔
Rs a1 a2.
Lemma auth_monoi_lb_included' a dq :
auth_monoi_lb a ≼ auth_monoi_auth dq a.
Lemma auth_monoi_auth_persist dq a :
auth_monoi_auth dq a ~~> auth_monoi_auth DfracDiscarded a.
Lemma auth_monoi_auth_update {a} a' :
Rs a a' →
auth_monoi_auth (DfracOwn 1) a ~~> auth_monoi_auth (DfracOwn 1) a'.
Lemma auth_monoi_auth_local_update a a' :
Rs a a' →
(auth_monoi_auth (DfracOwn 1) a, auth_monoi_auth (DfracOwn 1) a) ¬l~>
(auth_monoi_auth (DfracOwn 1) a', auth_monoi_auth (DfracOwn 1) a').
End relation.
#[global] Opaque auth_monoi_auth.
#[global] Opaque auth_monoi_lb.
proofmode_classes.
From zoo Require Import
prelude.
From zoo.common Require Export
relations.
From zoo.iris.algebra Require Export
base.
From zoo.iris.algebra Require Import
auth
monopoi.
From zoo Require Import
options.
#[local] Hint Resolve monopoi_principal_valid : core.
Section relation.
Context {SI : sidx}.
Context {A : ofe} (R : relation A).
Context `{!Initial R}.
Implicit Types a b : A.
Notation Rs := (
rtc R
).
#[local] Instance Rs_antisymm `{!AntiSymm (=) Rs} :
AntiSymm (≡) Rs.
Definition auth_monoi :=
auth (monopoi Rs).
Definition auth_monoi_R :=
authR (monopoi_UR Rs).
Definition auth_monoi_UR :=
authUR (monopoi_UR Rs).
Definition auth_monoi_auth dq a : auth_monoi_UR :=
●{dq} monopoi_principal Rs a ⋅ ◯ monopoi_principal Rs a.
Definition auth_monoi_lb a : auth_monoi_UR :=
◯ monopoi_principal Rs a.
#[global] Instance auth_monoi_auth_inj `{!AntiSymm (≡) Rs} :
Inj2 (=) (≡) (≡) auth_monoi_auth
| 10.
#[global] Instance auth_monoi_auth_inj_L `{!LeibnizEquiv A} `{!AntiSymm (=) Rs} :
Inj2 (=) (=) (≡) auth_monoi_auth
| 9.
#[global] Instance auth_monoi_lb_inj `{!AntiSymm (≡) Rs} :
Inj (≡) (≡) auth_monoi_lb
| 10.
#[global] Instance auth_monoi_lb_inj_L `{!LeibnizEquiv A} `{!AntiSymm (=) Rs} :
Inj (=) (≡) auth_monoi_lb
| 9.
#[global] Instance auth_monoi_cmra_discrete :
CmraDiscrete auth_monoi_R.
#[global] Instance auth_monoi_auth_core_id a :
CoreId (auth_monoi_auth DfracDiscarded a).
#[global] Instance auth_monoi_lb_core_id a :
CoreId (auth_monoi_lb a).
Lemma auth_monoi_auth_dfrac_op dq1 dq2 a :
auth_monoi_auth (dq1 ⋅ dq2) a ≡ auth_monoi_auth dq1 a ⋅ auth_monoi_auth dq2 a.
#[global] Instance auth_monoi_auth_dfrac_is_op dq dq1 dq2 a :
IsOp dq dq1 dq2 →
IsOp' (auth_monoi_auth dq a) (auth_monoi_auth dq1 a) (auth_monoi_auth dq2 a).
Lemma auth_monoi_lb_op a a' :
Rs a a' →
auth_monoi_lb a' ≡ auth_monoi_lb a ⋅ auth_monoi_lb a'.
Lemma auth_monoi_auth_lb_op dq a :
auth_monoi_auth dq a ≡ auth_monoi_auth dq a ⋅ auth_monoi_lb a.
Lemma auth_monoi_auth_dfrac_valid dq a :
✓ auth_monoi_auth dq a ↔
✓ dq.
Lemma auth_monoi_auth_valid a :
✓ auth_monoi_auth (DfracOwn 1) a.
Lemma auth_monoi_auth_dfrac_op_valid `{!AntiSymm (≡) Rs} dq1 a1 dq2 a2 :
✓ (auth_monoi_auth dq1 a1 ⋅ auth_monoi_auth dq2 a2) →
✓ (dq1 ⋅ dq2) ∧
a1 ≡ a2.
Lemma auth_monoi_auth_dfrac_op_valid_L `{!LeibnizEquiv A} `{!AntiSymm (=) Rs} dq1 a1 dq2 a2 :
✓ (auth_monoi_auth dq1 a1 ⋅ auth_monoi_auth dq2 a2) ↔
✓ (dq1 ⋅ dq2) ∧
a1 = a2.
Lemma auth_monoi_auth_op_valid `{!AntiSymm (≡) Rs} a1 a2 :
✓ (auth_monoi_auth (DfracOwn 1) a1 ⋅ auth_monoi_auth (DfracOwn 1) a2) →
False.
Lemma auth_monoi_auth_op_valid_L `{!LeibnizEquiv A} `{!AntiSymm (=) Rs} a1 a2 :
✓ (auth_monoi_auth (DfracOwn 1) a1 ⋅ auth_monoi_auth (DfracOwn 1) a2) ↔
False.
Lemma auth_monoi_lb_op_valid a1 a2 :
✓ (auth_monoi_lb a1 ⋅ auth_monoi_lb a2) →
∃ a,
Rs a1 a ∧
Rs a2 a.
Lemma auth_monoi_both_dfrac_valid dq a b :
✓ (auth_monoi_auth dq a ⋅ auth_monoi_lb b) ↔
✓ dq ∧
Rs b a.
Lemma auth_monoi_both_valid a b :
✓ (auth_monoi_auth (DfracOwn 1) a ⋅ auth_monoi_lb b) ↔
Rs b a.
Lemma auth_monoi_lb_mono a1 a2 :
Rs a1 a2 →
auth_monoi_lb a1 ≼ auth_monoi_lb a2.
Lemma auth_monoi_auth_dfrac_included `{!AntiSymm (≡) Rs} dq1 a1 dq2 a2 :
auth_monoi_auth dq1 a1 ≼ auth_monoi_auth dq2 a2 →
(dq1 ≼ dq2 ∨ dq1 = dq2) ∧
a1 ≡ a2.
Lemma auth_monoi_auth_dfrac_included_L `{!LeibnizEquiv A} `{!AntiSymm (=) Rs} dq1 a1 dq2 a2 :
auth_monoi_auth dq1 a1 ≼ auth_monoi_auth dq2 a2 ↔
(dq1 ≼ dq2 ∨ dq1 = dq2) ∧
a1 = a2.
Lemma auth_monoi_auth_included `{!AntiSymm (≡) Rs} a1 a2 :
auth_monoi_auth (DfracOwn 1) a1 ≼ auth_monoi_auth (DfracOwn 1) a2 →
a1 ≡ a2.
Lemma auth_monoi_auth_included_L `{!LeibnizEquiv A} `{!AntiSymm (=) Rs} a1 a2 :
auth_monoi_auth (DfracOwn 1) a1 ≼ auth_monoi_auth (DfracOwn 1) a2 ↔
a1 = a2.
Lemma auth_monoi_lb_included a1 dq a2 :
auth_monoi_lb a1 ≼ auth_monoi_auth dq a2 ↔
Rs a1 a2.
Lemma auth_monoi_lb_included' a dq :
auth_monoi_lb a ≼ auth_monoi_auth dq a.
Lemma auth_monoi_auth_persist dq a :
auth_monoi_auth dq a ~~> auth_monoi_auth DfracDiscarded a.
Lemma auth_monoi_auth_update {a} a' :
Rs a a' →
auth_monoi_auth (DfracOwn 1) a ~~> auth_monoi_auth (DfracOwn 1) a'.
Lemma auth_monoi_auth_local_update a a' :
Rs a a' →
(auth_monoi_auth (DfracOwn 1) a, auth_monoi_auth (DfracOwn 1) a) ¬l~>
(auth_monoi_auth (DfracOwn 1) a', auth_monoi_auth (DfracOwn 1) a').
End relation.
#[global] Opaque auth_monoi_auth.
#[global] Opaque auth_monoi_lb.