GenerateSingleHistory generates single histories, which it achieves by setting
MaxDestroyerEvents to one. Note that for nondeterministic systems, the history generated may
depend on the event order.
For example, for a MultisetSubstitutionSystem:
In[] := multihistory = GenerateSingleHistory[
MultisetSubstitutionSystem[{a_, b_} :> {a + b, a - b, a * b}], MaxEvents -> 10] @ {1, 2}In[] := #["ExpressionsEventsGraph", VertexLabels -> Placed[Automatic, After]] & @
SetReplaceTypeConvert[WolframModelEvolutionObject] @ multihistoryNote that there is a distinction between single-history and single-path systems. Single-path systems are defined as ones where there is only one event possible from every state. A Turing machine would be an example of a single-path system. On the other hand, single-history systems allow multiple events from a single state, but all these events must be consistent, i.e., take non-overlapping inputs. Neither single-path nor single-history systems have branchlike-separated events.
![Out[] = Multihistory[... MultisetSubstitutionSystem v0 ...]](/maxitg/SetReplace/raw/87a92210f27ee7957b64f479e694711e84da8f06/Documentation/Images/MultisetMultihistory.png)
![Out[] = Graph[...
token-event graph where all tokens have out degrees less or equal than 1:
{1, 2 (* init *)} -> {3, -1, 2 (* gen 1 *)},
{3, -1} -> {2 (* gen 2 *), 4 (* gen 2 *), -3},
{2 (* gen 1 *), 2 (* gen 2 *)} -> {4 (* gen 3 sum *), 0, 4 (* gen 3 product *)},
<<7>>
...]](/maxitg/SetReplace/raw/87a92210f27ee7957b64f479e694711e84da8f06/Documentation/Images/GenerateSingleHistoryExample.png)