aneris_examples.ccddb.spec.time
From stdpp Require Import gmap.
Abstraction of the vector clocks.
Section Time.
Class DB_time := {
Time : Type;
TM_le : relation Time;
TM_le_PO :> PartialOrder TM_le;
TM_lt : relation Time;
TM_lt_irreflexive : ∀ vc, ¬ TM_lt vc vc;
TM_lt_trans :> Transitive TM_lt;
TM_lt_TM_le : ∀ vc vc', TM_lt vc vc' → TM_le vc vc';
TM_lt_exclusion : ∀ vc vc', TM_lt vc vc' → TM_lt vc' vc → False;
TM_le_eq_or_lt : ∀ vc vc', TM_le vc vc' → vc = vc' ∨ TM_lt vc vc';
TM_le_lt_trans :
∀ vc vc' vc'', TM_le vc vc' → TM_lt vc' vc'' → TM_lt vc vc'';
TM_lt_le_trans :
∀ vc vc' vc'', TM_lt vc vc' → TM_le vc' vc'' → TM_lt vc vc'';
}.
Definition TM_incomparable `{!DB_time} vc vc' :=
¬ TM_le vc vc' ∧ ¬ TM_le vc' vc.
Class Timed {dbt: DB_time} (T : Type) := time : T → Time.
Notation "s '<ₜ' t" :=
(TM_lt (time s) (time t)) (at level 70, no associativity).
Notation "s '≤ₜ' t" :=
(TM_le (time s) (time t)) (at level 70, no associativity).
Notation "s '=ₜ' t" :=
(time s = time t) (at level 70, no associativity).
Definition IsMaximals {T : Type} `{!DB_time} `{!EqDecision T}
`{!Countable T} `{!Timed T} (X Y : gset T) :=
∀ t : T, t ∈ Y ↔ t ∈ X ∧ ∀ t' : T, t' ∈ X → ¬ (t <ₜ t').
Definition IsMaximum {T : Type} `{!DB_time} `{!EqDecision T}
`{!Countable T} `{!Timed T} (X : gset T) (mx : T) :=
mx ∈ X ∧ ∀ t, t ∈ X → (¬ t = mx) → t <ₜ mx.
Class Maximals_Computing `{!DB_time} :=
{
Maximals : ∀ {T : Type} `{!EqDecision T} `{!Countable T}
`{!Timed T} (X : gset T), gset T;
Maximals_correct : ∀ {T : Type} `{!EqDecision T} `{!Countable T}
`{!Timed T} (X : gset T), IsMaximals X (Maximals X);
Maximum : ∀ {T : Type} `{!EqDecision T} `{!Countable T}
`{!Timed T} (X : gset T), option T;
Maximum_correct : ∀ {T : Type} `{!EqDecision T} `{!Countable T}
`{!Timed T} (X : gset T),
(∀ x y, x ∈ X → y ∈ X → x =ₜ y → x = y) →
(∀ x, Maximum X = Some x ↔ IsMaximum X x);
}.
End Time.
Notation "s '<ₜ@{' d '}' t" :=
(TM_lt (@time d _ _ s) (@time d _ _ t))
(at level 70, no associativity, format "s '<ₜ@{' d '}' t").
Notation "s '≤ₜ@{' d '}' t" :=
(TM_le (@time d _ _ s) (@time d _ _ t))
(at level 70, no associativity, format "s '≤ₜ@{' d '}' t").
Notation "s '=ₜ@{' d '}' t" :=
((@time d _ _ s) = (@time d _ _ t))
(at level 70, no associativity, format "s '=ₜ@{' d '}' t").
Notation "s '<ₜ' t" :=
(TM_lt (time s) (time t)) (at level 70, no associativity).
Notation "s '≤ₜ' t" :=
(TM_le (time s) (time t)) (at level 70, no associativity).
Notation "s '=ₜ' t" :=
(time s = time t) (at level 70, no associativity).