aneris_examples.ccddb.examples.message_passing.proof_resources
From iris.algebra Require Import excl.
From iris.base_logic.lib Require Import invariants.
From iris.proofmode Require Import tactics.
From aneris.aneris_lang Require Import
lang network notation tactics proofmode lifting adequacy.
From iris_string_ident Require Import ltac2_string_ident.
From aneris.aneris_lang.lib Require Import util.
From aneris.aneris_lang.lib.serialization Require Import serialization.
From aneris_examples.ccddb.spec Require Import spec.
From aneris_examples.ccddb Require Import spec_util.
From aneris_examples.ccddb.examples Require Import lib.
From aneris_examples.ccddb.examples.message_passing Require Import prog.
Import Network.
Class mpG Σ := MPG { mp_tokG :> inG Σ (exclR unitO) }.
Definition mpΣ : gFunctors := #[GFunctor (exclR unitO)].
Instance subG_mpΣ {Σ} : subG mpΣ Σ → mpG Σ.
Proof. solve_inG. Qed.
Section Resources.
Context `{!anerisG Σ, !DB_time, !DB_events, !DB_resources Σ,
!Maximals_Computing, !mpG Σ}.
Definition token (γ : gname) : iProp Σ := own γ (Excl ()).
Lemma token_exclusive (γ : gname) : token γ -∗ token γ -∗ False.
Proof. iIntros "H1 H2". by iDestruct (own_valid_2 with "H1 H2") as %?. Qed.
Definition Ny := nroot.@"y".
Definition Nx := nroot.@"x".
Definition inv_x (γ : gname) (a : we) : iProp Σ :=
(∃ h, "x" ↦ᵤ h ∗ ⌜Maximum h = Some a⌝ ∗ ⌜WE_val a = #37⌝) ∨ token γ.
Definition inv_y (γ : gname) : iProp Σ :=
∃ h, "y" ↦ᵤ h ∗ ∀ a, (⌜a ∈ h ∧ a.(WE_val) = (# 1)⌝) →
(∃ a', ⌜a' <ₜ a⌝ ∗ inv Nx (inv_x γ a')).
End Resources.
From iris.base_logic.lib Require Import invariants.
From iris.proofmode Require Import tactics.
From aneris.aneris_lang Require Import
lang network notation tactics proofmode lifting adequacy.
From iris_string_ident Require Import ltac2_string_ident.
From aneris.aneris_lang.lib Require Import util.
From aneris.aneris_lang.lib.serialization Require Import serialization.
From aneris_examples.ccddb.spec Require Import spec.
From aneris_examples.ccddb Require Import spec_util.
From aneris_examples.ccddb.examples Require Import lib.
From aneris_examples.ccddb.examples.message_passing Require Import prog.
Import Network.
Class mpG Σ := MPG { mp_tokG :> inG Σ (exclR unitO) }.
Definition mpΣ : gFunctors := #[GFunctor (exclR unitO)].
Instance subG_mpΣ {Σ} : subG mpΣ Σ → mpG Σ.
Proof. solve_inG. Qed.
Section Resources.
Context `{!anerisG Σ, !DB_time, !DB_events, !DB_resources Σ,
!Maximals_Computing, !mpG Σ}.
Definition token (γ : gname) : iProp Σ := own γ (Excl ()).
Lemma token_exclusive (γ : gname) : token γ -∗ token γ -∗ False.
Proof. iIntros "H1 H2". by iDestruct (own_valid_2 with "H1 H2") as %?. Qed.
Definition Ny := nroot.@"y".
Definition Nx := nroot.@"x".
Definition inv_x (γ : gname) (a : we) : iProp Σ :=
(∃ h, "x" ↦ᵤ h ∗ ⌜Maximum h = Some a⌝ ∗ ⌜WE_val a = #37⌝) ∨ token γ.
Definition inv_y (γ : gname) : iProp Σ :=
∃ h, "y" ↦ᵤ h ∗ ∀ a, (⌜a ∈ h ∧ a.(WE_val) = (# 1)⌝) →
(∃ a', ⌜a' <ₜ a⌝ ∗ inv Nx (inv_x γ a')).
End Resources.