Wolfram Research

Function Repository Resource:

TokenEventGraph (2.0.0) current version: 3.0.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.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