A path in the configuration graph of an event structure.
- refl {L : Type u_1} {F : ConfFamily L} {c : F.Conf} : Path F c c
- step {L : Type u_1} {F : ConfFamily L} {c₁ c₂ c₃ : F.Conf} (hEdge : Edge F c₁ c₂) (hPath : Path F c₂ c₃) : Path F c₁ c₃
Instances For
Composition of paths.
Equations
- Path.path_comp F Path.refl h₂₃_2 = h₂₃_2
- Path.path_comp F (Path.step hEdge hPath) h₂₃ = Path.step hEdge (Path.path_comp F hPath h₂₃)
Instances For
Next configuration after executing an enabled event.
Instances For
Execute a list of events from a configuration.
- nil {L : Type u_1} {F : ConfFamily L} (c : F.Conf) : ExecList F c [] c
- cons {L : Type u_1} {F : ConfFamily L} {c c' : F.Conf} {t : List F.Event} (e : F.Event) (h : F.enables (↑c) e) (hnext : ExecList F (nextConf F c e h) t c') : ExecList F c (e :: t) c'
Instances For
Left identity law: composing with the identity path on the right.
Right identity law: composing with the identity path on the left.
Trace of the path
Equations
- Path.trace F Path.refl = []
- Path.trace F (Path.step hEdge hPath') = hEdge.event :: Path.trace F hPath'
Instances For
Length of a path, defined as the length of its trace.
Equations
- Path.length F hPath = (Path.trace F hPath).length
Instances For
The label sequence of a path: the trace mapped through F.label.
Equations
- Path.labels F p = List.map F.label (Path.trace F p)
Instances For
Build a path from an executable list.
Equations
- Path.execList_to_path F (Path.ExecList.nil c₂) = Path.refl
- Path.execList_to_path F (Path.ExecList.cons e h_2 hnext) = Path.step { event := e, conf₁_enables := h_2, conf₂_equals := ⋯ } (Path.execList_to_path F hnext)
Instances For
Lift an exec list from a smaller configuration to a larger one.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Minimal path length between two configurations, given existence of a path.
Equations
- Path.minPathLength F h = Nat.find ⋯
Instances For
The trace of an execList_to_path is exactly the original list.
Extract an executable list from a path.
Equations
- Path.execList_of_path F Path.refl = Path.ExecList.nil c₁
- Path.execList_of_path F (Path.step hEdge hPath) = Path.ExecList.cons hEdge.event ⋯ (⋯.mpr (Path.execList_of_path F hPath))
Instances For
Paths are equivalent when their traces commute adjacent independent events.
Equations
- Path.pathSetoid F c₁ c₂ = { r := fun (p q : Path F c₁ c₂) => F.TraceEquivFrom (↑c₁) (Path.trace F p) (Path.trace F q), iseqv := ⋯ }
The target of a path is the source extended by the trace.
Two paths are equivalent if their traces are trace equivalent
Equations
- Path.PathEquiv F p₁ p₂ = (Path.pathSetoid F c₁ c₂) p₁ p₂
Instances For
Path equivalence is reflexive.
Path equivalence is symmetric.
Path equivalence is transitive.
Path equivalence is an equivalence relation.
Asynchronous path: paths quotiented by path equivalence.
Equations
- Path.Async F c₁ c₂ = Quotient (Path.pathSetoid F c₁ c₂)
Instances For
Lift a path to an asynchronous path.
Equations
- Path.Async.mk F p = ⟦p⟧
Instances For
Identity asynchronous path.
Equations
- Path.Async.async_path_id F c = Path.Async.mk F (Path.path_id F c)
Instances For
Composition of asynchronous paths.
Equations
- Path.Async.async_path_comp F p₁₂ p₂₃ = Quotient.lift₂ (fun (p₁₂ : Path F c₁ c₂) (p₂₃ : Path F c₂ c₃) => Path.Async.mk F (Path.path_comp F p₁₂ p₂₃)) ⋯ p₁₂ p₂₃
Instances For
Left identity law for asynchronous path composition.
Right identity law for asynchronous path composition.
Associativity law for asynchronous path composition.
For a path from c₁ to c₂, every event in the trace appears exactly once.
Paths are monotone: the source configuration is a subset of the target.
Events executed in a path must be added to reach the target configuration.
A path requires executing at least the events in its trace.
The path category of the configuration family.
Equations
- pathCategory F = { Hom := Path F, id := Path.path_id F, comp := fun {X Y Z : F.Conf} => Path.path_comp F, id_comp := ⋯, comp_id := ⋯, assoc := ⋯ }
The asynchronous path category of the configuration family.
Equations
- asyncPathCategory F = { Hom := Path.Async F, id := Path.Async.async_path_id F, comp := fun {X Y Z : F.Conf} => Path.Async.async_path_comp F, id_comp := ⋯, comp_id := ⋯, assoc := ⋯ }