Computations #
A computation to a configuration is an asynchronous path from the empty configuration to it. This module defines computations, the type of reachable configurations, and linearisations, and relates computations to the configurations they reach.
The empty configuration is a valid configuration.
Equations
- EventStructures.emptyConf es = ⟨∅, ⋯⟩
Instances For
A computation to a configuration c is an asynchronous path
starting at the empty configuration and ending at c.
Equivalently, a computation records a causal execution up to
trace equivalence of the underlying path.
Equations
Instances For
The type of all computations, paired with their target configuration.
Equations
- EventStructures.Computations es = ((c : EventStructures.Conf es) × EventStructures.Computation es c)
Instances For
A list of events t is a linearisation of configuration c
if it is trace-equivalent to the trace of some path from the
empty configuration to c. Equivalently, t enumerates
the events of c in some order compatible with causality.
Equations
- EventStructures.isLinearisation es c t = ∃ (p : EventStructures.Path es (EventStructures.emptyConf es) c), EventStructures.TraceEquiv es (EventStructures.Path.trace es p) t
Instances For
Every computation determines a linearisation of its target configuration.
Configurations that are reachable by a computation.
Equations
- EventStructures.ReachableConf es = { c : EventStructures.Conf es // Nonempty (EventStructures.Computation es c) }
Instances For
Every computation targets a reachable configuration.
Equations
- EventStructures.computationToReachable es p = ⟨p.fst, ⋯⟩
Instances For
The map from computations to reachable configurations is surjective.