Require Import Classical List Relations Peano_dec.
Require Import Vbase ExtraRelations cactions.
Set Implicit Arguments.
An execution contains:
In the SRArmw model, an execution also contains:
- a sequence of events (actions identifiers), acts,
- a labeling function, lab, mapping action identifiers to the actions,
- the "sequence before" order, sb,
- the "reads from" map, rf, and
- the modification order, mo.
- the "atomicity" relation, rmw, which relates atomic read and write events belonging to the same successful read-modify-write.
Variable acts : list actid.
Variable lab : actid → act.
Variable sb : actid → actid → Prop.
Variable rf : actid → option actid.
Variable rmw : actid → actid → Prop.
Variable mo : actid → actid → Prop.
Definition happens_before :=
clos_trans (fun a b ⇒ sb a b ∨ rf b = Some a).
We require executions to have a finite domain:
Definition ExecutionFinite :=
≪ CLOlab: ∀ a, lab a ≠ Askip 0 → In a acts ≫ ∧
≪ CLOsb : ∀ a b, sb a b → In a acts ∧ In b acts ≫.
Definition CompleteRF :=
∀ a (RF: rf a = None)
(READ: is_read (lab a)), False.
The reads-from map is consistent iff it relates only reads and writes to
the same location and with the same values.
Definition ConsistentRF_dom :=
∀ a b (RF: rf a = Some b),
∃ l v,
≪ READ: is_readLV (lab a) l v ≫ ∧
≪ WRITE: is_writeLV (lab b) l v ≫.
Definition BasicConsistency :=
≪ FIN : ExecutionFinite ≫ ∧
≪ CsbT: transitive sb ≫ ∧
≪ CrfD: ConsistentRF_dom ≫ ∧
≪ COrf: CompleteRF ≫.
Properties of the modification order:
Definition ConsistentMO_dom :=
∀ a b (MO: mo a b), ∃ l, is_writeL (lab a) l ∧ is_writeL (lab b) l.
Definition ConsistentMO_big_dom :=
∀ a b (MO: mo a b), is_write (lab a) ∧ is_write (lab b).
Definition ConsistentRMW_dom :=
∀ a b (RF: rmw a b),
≪ PO: sb a b ≫ ∧
≪ POI: ∀ c (SB: sb c b) (NEQ: c ≠ a), sb c a ≫ ∧
≪ POI': ∀ c (SB: sb a c) (NEQ: c ≠ b), sb b c ≫ ∧
≪ NORMWa: is_rmw (lab a) = false ≫ ∧
≪ NORMWb: is_rmw (lab b) = false ≫ ∧
∃ l,
≪ READ: is_readL (lab a) l ≫ ∧
≪ WRITE: is_writeL (lab b) l ≫.
We move on to the various coherence axioms:
- CoherentWW: the modification order cannot contradict happens-before
- CoherentWR: a read cannot read from an overwritten write.
Definition CoherentWW :=
∀ a b (HB: happens_before a b) (MO: mo b a),
False.
Definition CoherentWRplain :=
∀ a b (MO: mo a b) c (RF: rf c = Some a) (HB: happens_before b c),
False.
Definition CoherentWR :=
∀ a b (MO: mo a b) c (RF: rf c = Some a) (HB: happens_before b c)
(LOC: loc (lab a) = loc (lab b)),
False.
Definition CoherentWRatom :=
∀ a b (MO: mo a b) c (RF: rf c = Some a) (MO': mo b c)
(LOC: loc (lab a) = loc (lab b)),
False.
Definition CoherentWRrmw :=
∀ a b (MO: mo a b) c d (RMW: rmw c d) (RF: rf c = Some a) (MO': mo b d)
(LOC: loc (lab a) = loc (lab b)),
False.
Definition ConsistentRA :=
≪ FIN : ExecutionFinite ≫ ∧
≪ CsbT: transitive sb ≫ ∧
≪ CrfD: ConsistentRF_dom ≫ ∧
≪ COrf: CompleteRF ≫ ∧
≪ ACYC: irreflexive happens_before ≫ ∧
≪ CmoD: ConsistentMO_dom ≫ ∧
≪ CmoF: ∀ l, is_total (fun a ⇒ is_writeL (lab a) l) mo ≫ ∧
≪ CmoT: transitive mo ≫ ∧
≪ CmoI: irreflexive mo ≫ ∧
≪ Cww : CoherentWW ≫ ∧
≪ Cwr : CoherentWRplain ≫ ∧
≪ Cat : CoherentWRatom ≫.
Definition ConsistentSRA :=
≪ FIN : ExecutionFinite ≫ ∧
≪ CsbT: transitive sb ≫ ∧
≪ CrfD: ConsistentRF_dom ≫ ∧
≪ COrf: CompleteRF ≫ ∧
≪ ACYC: irreflexive happens_before ≫ ∧
≪ CmoD: ConsistentMO_big_dom ≫ ∧
≪ CmoF: is_total (fun a ⇒ is_write (lab a)) mo ≫ ∧
≪ CmoT: transitive mo ≫ ∧
≪ CmoI: irreflexive mo ≫ ∧
≪ Cww : CoherentWW ≫ ∧
≪ Cwr : CoherentWR ≫ ∧
≪ Cat : CoherentWRatom ≫.
Definition ConsistentSRArmw :=
≪ FIN : ExecutionFinite ≫ ∧
≪ CsbT: transitive sb ≫ ∧
≪ NOU : ∀ x (RMW: is_rmw (lab x)), False ≫ ∧
≪ CrfD: ConsistentRF_dom ≫ ∧
≪ COrf: CompleteRF ≫ ∧
≪ Crmw: ConsistentRMW_dom ≫ ∧
≪ ACYC: irreflexive happens_before ≫ ∧
≪ CmoD: ConsistentMO_big_dom ≫ ∧
≪ CmoF: is_total (fun a ⇒ is_write (lab a)) mo ≫ ∧
≪ CmoT: transitive mo ≫ ∧
≪ CmoI: irreflexive mo ≫ ∧
≪ Cww : CoherentWW ≫ ∧
≪ Cwr : CoherentWR ≫ ∧
≪ Cat : CoherentWRrmw ≫.
An alternative, much more compact, coherence axiom.
Definition mofr l x y :=
mo x y ∧ is_writeL (lab x) l ∧ is_writeL (lab y) l
∨ ∃ z, rf x = Some z ∧ mo z y ∧ x ≠ y
∧ is_readL (lab x) l ∧ is_writeL (lab y) l.
Definition ConsistentRAalt :=
≪ FIN : ExecutionFinite ≫ ∧
≪ CsbT: transitive sb ≫ ∧
≪ CrfD: ConsistentRF_dom ≫ ∧
≪ COrf: CompleteRF ≫ ∧
≪ CmoD: ConsistentMO_dom ≫ ∧
≪ CmoF: ∀ l, is_total (fun a ⇒ is_writeL (lab a) l) mo ≫ ∧
≪ CmoT: transitive mo ≫ ∧
≪ CmoI: irreflexive mo ≫ ∧
≪ CO : ∀ l, acyclic (fun x y ⇒ sb x y ∨ rf y = Some x ∨ mofr l x y) ≫.
Definition no_ww_races :=
∀ a l (Wa: is_writeL (lab a) l) b (Wb: is_writeL (lab b) l) (NEQ: a ≠ b) ,
happens_before a b ∨ happens_before b a.
Definition writes_beforeSRA a b :=
is_write (lab a) ∧ is_write (lab b) ∧ a ≠ b ∧
loc (lab a) = loc (lab b) ∧ ∃ c, happens_before a c ∧ rf c = Some b.
Definition ConsistentSRAwb :=
≪ FIN : ExecutionFinite ≫ ∧
≪ CsbT: transitive sb ≫ ∧
≪ CrfD: ConsistentRF_dom ≫ ∧
≪ COrf: CompleteRF ≫ ∧
≪ ACYC: acyclic (fun x y ⇒ sb x y ∨ rf y = Some x ∨ writes_beforeSRA x y) ≫.
Definition CoherentWRsc sc :=
∀ a b (SC: sc a b) c (RF: rf c = Some a) (SC': sc b c)
(W: is_write (lab b)) (LOC: loc (lab a) = loc (lab b)),
False.
Definition ConsistentSCalt sc :=
≪ FIN : ExecutionFinite ≫ ∧
≪ CsbT: transitive sb ≫ ∧
≪ CrfD: ConsistentRF_dom ≫ ∧
≪ COrf: CompleteRF ≫ ∧
≪ CscF: is_total (fun a ⇒ In a acts) sc ≫ ∧
≪ CscT: transitive sc ≫ ∧
≪ CscI: irreflexive sc ≫ ∧
≪ CrfIN: ∀ a b (RF: rf b = Some a), sc a b ≫ ∧
≪ CpoIN: ∀ a b (SB: sb a b), sc a b ≫ ∧
≪ Cwr : CoherentWRsc sc ≫.
Definition ConsistentSC :=
≪ FIN : ExecutionFinite ≫ ∧
≪ CsbT: transitive sb ≫ ∧
≪ CrfD: ConsistentRF_dom ≫ ∧
≪ COrf: CompleteRF ≫ ∧
≪ CmoD: ConsistentMO_dom ≫ ∧
≪ CmoF: ∀ l, is_total (fun a ⇒ is_writeL (lab a) l) mo ≫ ∧
≪ CmoT: transitive mo ≫ ∧
≪ CmoI: irreflexive mo ≫ ∧
≪ CO : acyclic (fun x y ⇒ sb x y ∨ rf y = Some x ∨ ∃ l, mofr l x y) ≫.
Definition wellformed_fences :=
∀ x (WRI: is_writeL (lab x) fence_loc),
is_rmw (lab x) ∨
∀ y (WRI': is_writeL (lab y) fence_loc),
sb x y.
Definition races_with a b :=
≪ NEQ: a ≠ b ≫ ∧
≪ Aa: is_access (lab a) ≫ ∧
≪ Ab: is_access (lab b) ≫ ∧
≪ LOC: loc (lab a) = loc (lab b) ≫ ∧
≪ WRI: is_write (lab a) ∨ is_write (lab b) ≫ ∧
≪ NHB1 : ¬ happens_before a b ≫ ∧
≪ NHB2 : ¬ happens_before b a ≫.
Definition racy a := ∃ b, races_with a b.
End Consistency.
Lemma racy_access lab sb rf a : racy lab sb rf a → is_access (lab a).
Hint Resolve racy_access : caccess.
Lemma sb_in_hb :
∀ (sb : relation actid) rf x y,
sb x y →
happens_before sb rf x y.
Lemma rf_in_hb :
∀ sb rf x y,
rf y = Some x →
happens_before sb rf x y.
Lemma hb_trans :
∀ sb rf x y z,
happens_before sb rf x y →
happens_before sb rf y z →
happens_before sb rf x z.
Hint Resolve hb_trans sb_in_hb rf_in_hb : hb.
Lemma loceq_mo :
∀ lab mo (C: ConsistentMO_dom lab mo) x y (H: mo x y),
loc (lab x) = loc (lab y).
Lemma loceq_rf :
∀ lab rf (C: ConsistentRF_dom lab rf) x y (H: rf x = Some y),
loc (lab x) = loc (lab y).
Lemma loceq_com :
∀ lab rf mo l x y (H: mofr lab rf mo l x y),
loc (lab x) = loc (lab y).
Lemma finiteRF :
∀ acts lab sb
(FIN: ExecutionFinite acts lab sb) rf
(Crf: ConsistentRF_dom lab rf) a b,
rf a = Some b → In a acts ∧ In b acts.
Lemma finiteMO :
∀ acts lab sb
(FIN: ExecutionFinite acts lab sb) mo
(Cmo: ConsistentMO_dom lab mo) a b,
mo a b → In a acts ∧ In b acts.
Lemma finiteHB :
∀ acts lab sb
(FIN: ExecutionFinite acts lab sb) rf
(Crf: ConsistentRF_dom lab rf) a b,
happens_before sb rf a b → In a acts ∧ In b acts.
Lemma hb_mo :
∀ acts lab sb rf mo
(CONS: ConsistentRA acts lab sb rf mo) a b
(HB : happens_before sb rf a b)
(Wa : is_write (lab a))
(Wb : is_write (lab b))
(LOC: loc (lab a) = loc (lab b)),
mo a b.
Lemma hb_in_tot_ext acts sb rf mo a b :
happens_before sb rf a b →
tot_ext acts (fun x y ⇒ sb x y ∨ rf y = Some x ∨ mo x y) a b.
SRA-coherence is stronger than RA-coherence.
Proposition ConsistentSRA_RA acts lab sb rf mo :
ConsistentSRA acts lab sb rf mo →
ConsistentRA acts lab sb rf (fun x y ⇒ mo x y ∧ loc (lab x) = loc (lab y)).
Lemma ConsistentSRA_ac acts lab sb rf mo :
ConsistentSRA acts lab sb rf mo →
acyclic (fun x y ⇒ sb x y ∨ rf y = Some x ∨ mo x y ∧ loc (lab x) = loc (lab y)).
Lemma ConsistentSRA_alt2 acts lab sb rf mo
(C: ConsistentRA acts lab sb rf mo)
(A: acyclic (fun x y ⇒ sb x y ∨ rf y = Some x ∨ mo x y)) :
∃ mo',
inclusion mo mo' ∧
ConsistentSRA acts lab sb rf mo'.
Theorem ConsistentSRA_alt acts lab sb rf :
(∃ mo, ConsistentSRA acts lab sb rf mo) ↔
(∃ mo, ConsistentRA acts lab sb rf mo ∧
acyclic (fun x y ⇒ sb x y ∨ rf y = Some x ∨ mo x y)).
In the absence of WW-races, SRA-coherence and RA-coherence coincide.
Theorem ConsistentRA_no_ww_races :
∀ acts lab sb rf (NORACE: no_ww_races lab sb rf),
(∃ mo, ConsistentSRA acts lab sb rf mo) ↔
(∃ mo, ConsistentRA acts lab sb rf mo).
In the absence of updates, SRA-coherence is equivalent to the writes-before
definition.
Theorem ConsistentSRA_wb :
∀ acts lab sb rf (NORMW: ∀ a, ¬ is_rmw (lab a)),
(∃ mo, ConsistentSRA acts lab sb rf mo) ↔
ConsistentSRAwb acts lab sb rf.
This page has been generated by coqdoc