An edge in the configuration graph of an event structure: from configuration c₁ to configuration c₂ by adding event e.
- event : es.Event
- conf₁_enables : Configuration.enables es (↑c₁) self.event
Instances For
A path in the configuration graph of an event structure.
- refl {es : EventStructure} {c : Conf es} : Path es c c
- step {es : EventStructure} {c₁ c₂ c₃ : Conf es} (hEdge : Edge es c₁ c₂) (hPath : Path es c₂ c₃) : Path es c₁ c₃
Instances For
Composition of paths.
Equations
- Path.path_comp es Path.refl h₂₃_2 = h₂₃_2
- Path.path_comp es (Path.step hEdge hPath) h₂₃ = Path.step hEdge (Path.path_comp es hPath h₂₃)
Instances For
Next configuration after executing an enabled event.
Instances For
Execute a list of events from a configuration.
- nil {es : EventStructure} (c : Conf es) : ExecList es c [] c
- cons {es : EventStructure} {c c' : Conf es} {t : List es.Event} (e : es.Event) (h : Configuration.enables es (↑c) e) (hnext : ExecList es (nextConf es c e h) t c') : ExecList es 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 es Path.refl = []
- Path.trace es (Path.step hEdge hPath') = hEdge.event :: Path.trace es hPath'
Instances For
Length of a path, defined as the length of its trace.
Equations
- Path.length es hPath = (Path.trace es hPath).length
Instances For
Build a path from an executable list.
Equations
- Path.execList_to_path es (Path.ExecList.nil c₂) = Path.refl
- Path.execList_to_path es (Path.ExecList.cons e h_2 hnext) = Path.step { event := e, conf₁_enables := h_2, conf₂_equals := ⋯ } (Path.execList_to_path es hnext)
Instances For
Lift an exec list from a smaller configuration to a larger one, assuming monotone enabling under subset.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Existence of a path length.
Minimal path length between two configurations, given existence of a path.
Equations
- Path.minPathLength es 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 es Path.refl = Path.ExecList.nil c₁
- Path.execList_of_path es (Path.step hEdge hPath) = Path.ExecList.cons hEdge.event ⋯ (⋯.mpr (Path.execList_of_path es hPath))
Instances For
Path equivalence is the kernel of the trace function.
Equations
- Path.pathSetoid es c₁ c₂ = Setoid.ker (Path.trace es)
Two paths are equivalent if their traces are trace equivalent
Equations
- Path.PathEquiv es p₁ p₂ = (Path.pathSetoid es c₁ c₂) p₁ p₂
Instances For
Path equivalence is reflexive.
Path equivalence is symmetric.
Path equivalence is transitive.
Asynchronous path: paths quotiented by path equivalence.
Equations
- Path.Async es c₁ c₂ = Quotient (Path.pathSetoid es c₁ c₂)
Instances For
Identity asynchronous path.
Equations
- Path.Async.async_path_id es c = Path.Async.mk es (Path.path_id es c)
Instances For
Composition of asynchronous paths.
Equations
- Path.Async.async_path_comp es p₁₂ p₂₃ = Quotient.lift₂ (fun (p₁₂ : Path es c₁ c₂) (p₂₃ : Path es c₂ c₃) => Path.Async.mk es (Path.path_comp es 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 an event structure.
Equations
- pathCategory es = { Hom := Path es, id := Path.path_id es, comp := fun {X Y Z : Conf es} => Path.path_comp es, id_comp := ⋯, comp_id := ⋯, assoc := ⋯ }
The asynchronous path category of an event structure.
Equations
- asyncPathCategory es = { Hom := Path.Async es, id := Path.Async.async_path_id es, comp := fun {X Y Z : Conf es} => Path.Async.async_path_comp es, id_comp := ⋯, comp_id := ⋯, assoc := ⋯ }