Traces and the trace monoid #
This module defines trace equivalence on lists of events (the congruence generated by swapping adjacent concurrent events), shows it is an equivalence relation and a congruence for concatenation, and builds the trace monoid as the quotient of lists of events by trace equivalence.
Trace equivalence: two traces are equivalent if one can be obtained from the other by swapping adjacent concurrent events.
- refl {es : EventStructure} (t : List es.Event) : TraceEquiv es t t
- swap {es : EventStructure} {e₁ e₂ : es.Event} {t₁ t₂ t₃ : List es.Event} (ind : es.concurrent e₁ e₂) : TraceEquiv es (t₁ ++ e₁ :: e₂ :: t₂) t₃ → TraceEquiv es (t₁ ++ e₂ :: e₁ :: t₂) t₃
Instances For
Trace equivalence is reflexive.
Trace equivalence is transitive.
Trace equivalence is symmetric.
Trace equivalence is an equivalence relation.
Trans instance for calc proofs.
Equations
- EventStructures.Trace.instTransListEventTraceEquiv es = { trans := ⋯ }
Trace equivalence is a left congruence for append.
Trace equivalence is a right congruence for append.
Trace equivalence is a congruence for append.
Setoid instance for trace equivalence.
Equations
- EventStructures.Trace.traceEquivSetoid es = { r := EventStructures.TraceEquiv es, iseqv := ⋯ }
The trace monoid: lists of events quotiented by trace equivalence.
Equations
Instances For
Lift a list to the trace monoid.
Equations
Instances For
Multiplication in the trace monoid (concatenation of traces).
Equations
- EventStructures.Trace.Monoid.instMulTraceMonoid es = { mul := Quotient.lift₂ (fun (t₁ t₂ : List es.Event) => EventStructures.Trace.Monoid.mk es (t₁ ++ t₂)) ⋯ }
Identity element in the trace monoid (empty trace).
Equations
Left identity law for trace monoid.
Right identity law for trace monoid.
Associativity law for trace monoid.
The trace monoid is a monoid.
Equations
- One or more equations did not get rendered due to their size.
If the concurrency relation is full, the head of the list can be moved to the end
If the concurrency relation is full, the monoid is commutative.
If the concurrency relation is empty, trace equivalence is just list equality.
If the concurrency relation is empty and there are at least two distinct events, then the monoid is not commutative.