aneris_examples.ccddb.resources.base
From iris.algebra Require Import agree auth excl gmap.
From aneris.aneris_lang Require Import resources.
From aneris.aneris_lang.lib Require Import lock.
From iris_monotone Require Import monotone.
From iris.base_logic Require Import invariants.
From aneris.aneris_lang.lib.vector_clock Require Import time.
From aneris_examples.ccddb.model Require Import events.
From aneris.aneris_lang Require Import resources.
From aneris.aneris_lang.lib Require Import lock.
From iris_monotone Require Import monotone.
From iris.base_logic Require Import invariants.
From aneris.aneris_lang.lib.vector_clock Require Import time.
From aneris_examples.ccddb.model Require Import events.
Modular specification for causal memory
vector-clock based implementation.
Definition seen_relation : relation (gset apply_event) :=
λ s s', s ⊆ s' ∧
∀ ae ae',
ae ∈ s' → ae' ∈ s' →
vector_clock_lt (ae_time ae) (ae_time ae') → ae' ∈ s → ae ∈ s.
Global Instance seen_relation_partial_order : PartialOrder seen_relation.
Proof.
split.
- split.
+ rewrite /Reflexive /seen_relation. set_solver.
+ rewrite /Transitive /seen_relation. set_solver.
- rewrite /AntiSymm /seen_relation. set_solver.
Qed.
Lemma seen_relation_union s1 s2 s :
seen_relation s1 s → seen_relation s2 s → seen_relation (s1 ∪ s2) s.
Proof. intros [Hs11 Hs12] [Hs21 Hs22]; split; set_solver. Qed.
Class internal_DBG Σ := {
IDBG_Global_mem_excl :>
inG Σ (authUR (gmapUR Key (exclR (gsetO write_event))));
IDBG_Global_mem_mono :> inG Σ (authUR (gmapUR Key (gsetUR write_event)));
IDBG_local_history_mono :> inG Σ (authUR (monotoneUR seen_relation));
IDBG_local_history_gset :> inG Σ (authUR (gsetUR apply_event));
IDBG_lockG :> lockG Σ;
}.