Traces up to independence #
Trace equivalence over an arbitrary independence relation.
Two traces are equivalent when one is obtained from the other by swapping adjacent independent events.
- refl {α : Type u_1} {R : α → α → Prop} (t : List α) : TraceEquiv R t t
- swap {α : Type u_1} {R : α → α → Prop} {e₁ e₂ : α} {t₁ t₂ t₃ : List α} (ind : R e₁ e₂) : TraceEquiv R (t₁ ++ e₁ :: e₂ :: t₂) t₃ → TraceEquiv R (t₁ ++ e₂ :: e₁ :: t₂) t₃
Instances For
A labelling respects independence if it assigns equal labels to independent events.
Equations
- Trace.LabelRespecting R lbl = ∀ {e₁ e₂ : α}, R e₁ e₂ → lbl e₁ = lbl e₂
Instances For
Trace equivalence is reflexive.
Trace equivalence is transitive.
Trace equivalence is symmetric when independence is.
Trace equivalence implies label equivalence for an independence-respecting labelling.
Trace equivalence is an equivalence relation when independence is symmetric.
Trace equivalence is a left congruence for append.
Trace equivalence is a right congruence for append.
Trace equivalence is a congruence for append.
Setoid of traces, for a symmetric independence relation.
Equations
- Trace.traceEquivSetoid R hsymm = { r := TraceEquiv R, iseqv := ⋯ }
Instances For
Positional trace equivalence #
For families, independence is relative to the configuration reached so far.
Traces equivalent from a configuration.
- refl {L : Type u_3} {F : ConfFamily L} {c : Set F.Event} (t : List F.Event) : F.TraceEquivFrom c t t
- swap {L : Type u_3} {F : ConfFamily L} {c : Set F.Event} {e₁ e₂ : F.Event} {p t t' : List F.Event} : F.Indep (reach F c p) e₁ e₂ → F.TraceEquivFrom c (p ++ e₁ :: e₂ :: t) t' → F.TraceEquivFrom c (p ++ e₂ :: e₁ :: t) t'
Instances For
Equivalent traces use the same events, so reach the same configuration.