Wolfram Research

Function Repository Resource:

 TokenEventGraph (2.0.0) current version: 3.2.0 »

Source Notebook

Generate a token-event graph for multicomputational evolution according to particular rules

Contributed by: Stephen Wolfram and Nikolay Murzin

ResourceFunction["TokenEventGraph"][rules, init, t]

generates a token-event graph for t steps of evolution according to rules from init.

Details and Options

ResourceFunction["TokenEventGraph"] accepts the following options:
"Mode""Tuples"how to match multiple tokens: "Tuples", "OrderedTuples" or "Subsets"
"TokenDeduplication"Truewhether to deduplicate tokens
"EventDeduplication"Falsewhether to deduplicate events
"EdgeDeduplication"Falsewhether to remove multiedges
"TokenLabeling"Automatichow to label token vertices
"EventLabeling"Nonehow to label event vertices
"TokenRenderingFunction"Identityhow to render tokens
"TokenLabeling"→Automatic uses ordinary vertex labels; "TokenLabeling"→True uses boxes for each vertex.
"EventLabeling"→Automatic uses ordinarily placed vertex labels; "EventLabeling"→True uses in-circle labeling for each vertex; "EventLabeling"→"Colors" uses a different color for each rule index.
Event vertices have the form {"Event", timeStep, ruleIndex, positions, eventIndex}.
Edges are tagged by list indices. Rules with associations produce tagged edges with keys as tags.

Examples

Basic Examples (2) 

Make a token-event graph of a simple rule:

In[1]:=
ResourceFunction["TokenEventGraph"][n_ :> {n + 1, n + 2}, {1, 2}, 2]
Out[1]=

Multiple rules:

In[2]:=
ResourceFunction["TokenEventGraph"][{n_ :> n + 1, n_ :> 2 n}, {1, 2},
  2]
Out[2]=

Scope (3) 

Make a WolframModel-like TokenEventGraph:

In[3]:=
Module[{w = 0}, ResourceFunction["TokenEventGraph", ResourceVersion->"2.0.0"][{{{x_, y_}, {y_, z_}} :> {{w++, y}, {y, z}, {z, w}, {x, w}}}, {{0, 0}}, 3, AspectRatio -> 1/2]]
Out[3]=

Edges are tagged by corresponding input or output list index:

In[4]:=
ResourceFunction["TokenEventGraph", ResourceVersion->"2.0.0"][{n_, m_} :> {n - m, m - n}, {1, 2}, 2, EdgeLabels -> "EdgeTag"]
Out[4]=

Tag edges with keys by having associations on both sides of a rule:

In[5]:=
ResourceFunction["TokenEventGraph", ResourceVersion->"2.0.0"][<|"left" -> n_, "right" :> m_|> :> <|"-" -> n - m,
    "+" -> n + m|>, {1, 2}, 1, EdgeLabels -> "EdgeTag"]
Out[5]=

Options (7) 

Mode (1) 

Mode of picking tokens can be one of: "Tuples" (default), "OrderedTuples", "Subsets":

In[6]:=
ResourceFunction["TokenEventGraph", ResourceVersion->"2.0.0"][{n_, m_} :> n + m, {1, 2, 3, 4}, 1, "Mode" -> "Tuples"]
Out[6]=
In[7]:=
ResourceFunction["TokenEventGraph", ResourceVersion->"2.0.0"][{n_, m_} :> n + m, {1, 2, 3, 4}, 1, "Mode" -> "OrderedTuples"]
Out[7]=
In[8]:=
ResourceFunction["TokenEventGraph", ResourceVersion->"2.0.0"][{n_, m_} :> n + m, {1, 2, 3, 4}, 1, "Mode" -> "Subsets"]
Out[8]=

TokenDeduplication (1) 

Turn off deduplication of tokens:

In[9]:=
ResourceFunction["TokenEventGraph"][
 f[n_] /; n > 2 :> {f[n - 1], f[n - 2]}, {f[7]}, 4, "TokenDeduplication" -> True]
Out[9]=
In[10]:=
ResourceFunction["TokenEventGraph"][
 f[n_] /; n > 2 :> {f[n - 1], f[n - 2]}, {f[7]}, 4, "TokenDeduplication" -> False]
Out[10]=

EdgeDeduplication (1) 

Remove multiedges:

In[11]:=
ResourceFunction["TokenEventGraph"][{n_, m_} :> n + m, {1, 2}, 2, "EdgeDeduplication" -> False]
Out[11]=
In[12]:=
ResourceFunction["TokenEventGraph"][{n_, m_} :> n + m, {1, 2}, 2, "EdgeDeduplication" -> True]
Out[12]=

EventDeduplication (1) 

Keep or remove duplicate events:

In[13]:=
ResourceFunction["TokenEventGraph", ResourceVersion->"2.0.0"][{n_ :> n + 1, n_ :> 2 n}, {1, 2}, 2, "EventDeduplication" -> False]
Out[13]=
In[14]:=
ResourceFunction["TokenEventGraph", ResourceVersion->"2.0.0"][{n_ :> n + 1, n_ :> 2 n}, {1, 2}, 2, "EventDeduplication" -> True]
Out[14]=

TokenLabeling (1) 

Disable custom token labeling:

In[15]:=
ResourceFunction["TokenEventGraph", ResourceVersion->"2.0.0"][{n_ :> n + 1, n_ :> 2 n}, {1, 2}, 2, "TokenLabeling" -> None]
Out[15]=

EventLabeling (1) 

Label events by its rule index:

In[16]:=
ResourceFunction["TokenEventGraph", ResourceVersion->"2.0.0"][{n_ :> n + 1, n_ :> 2 n}, {1, 2}, 2, "EventDeduplication" -> False, "EventLabeling" -> "Colors"]
Out[16]=

TokenRenderingFunction (1) 

Specify rendering for the token:

In[17]:=
ResourceFunction["TokenEventGraph", ResourceVersion->"2.0.0"][{n_ :> n + 1, n_ :> 2 n}, {1, 2}, 2, "TokenRenderingFunction" -> (Style[#, 12, Bold, Red] &)]
Out[17]=

Version History

  • 3.2.0 – 23 February 2026
  • 3.1.0 – 23 October 2024
  • 3.0.0 – 22 April 2024
  • 2.2.0 – 14 March 2022
  • 2.1.0 – 07 March 2022
  • 2.0.0 – 23 February 2022
  • 1.2.0 – 15 February 2022
  • 1.1.2 – 19 January 2022

Related Resources

License Information