Wolfram Function Repository
Instantuse addon functions for the Wolfram Language
Function Repository Resource:
Compute canonical branch pairs for a given multiway system
ResourceFunction["CanonicalBranchPairs"][rules] generates a list of canonical (i.e. initial conditionindependent) branch pairs for the multiway system with the specified rules.  
ResourceFunction["CanonicalBranchPairs"][rules,n] generates an association of resolved and unresolved canonical branch pairs for the multiway system with the specified rules after n steps. 
{"lhs_{1}"→"rhs_{1}",…}  string substitution system 
{{l_{11},l_{12},…}>{r_{11},r_{12},..},…}  list substitution system 
CellularAutomaton[rules]  cellular automaton system 
"type"→rules  system of the specified type 
"StringSubstitutionSystem"  rules given as replacements on strings 
"ListSubstitutionSystem"  rules given as replacements on lists 
"CellularAutomaton"  rules given as a list of CellularAutomaton rule specifications 
"WolframModel"  rules given as replacements on hypergraphs 
"GivePredecessors"  False  whether to label branch pairs with their predecessor state 
"GiveResolvents"  False  whether to label branch pairs with their resolvent state 
"IncludeSelfPairs"  False  whether to include trivial branch pairs 
Generate the list of all canonical branch pairs (i.e. critical pairs) for a string substitution system:
In[1]:= 

Out[1]= 

Generate the association showing which branch pairs converge after 2 steps and which do not:
In[2]:= 

Out[2]= 

Show common predecessor states:
In[3]:= 

Out[3]= 

Show common resolvent states for resolved canonical branch pairs:
In[4]:= 

Out[4]= 

Show both common predecessors and common resolvents, where appropriate:
In[5]:= 

Out[5]= 

CanonicalBranchPairs can handle Wolfram Models and other system types:
In[6]:= 

Out[6]= 

In[7]:= 

Out[7]= 

In[8]:= 

Out[8]= 

CanonicalBranchPairs supports both string and list substitution systems:
In[9]:= 

Out[9]= 

In[10]:= 

Out[10]= 

CanonicalBranchPairs also supports multiway generalizations of cellular automata:
In[11]:= 

Out[11]= 

Generate all resolved branch pairs from left and right shift cellular automaton rules after 5 steps:
In[12]:= 

Out[12]= 

Determine that the rule 30 cellular automaton is not causal invariant:
In[13]:= 

Out[13]= 

CanonicalBranchPairs also supports multiway generalizations of Wolfram Models:
In[14]:= 

Out[14]= 

Determine that this Wolfram Model rule has unresolved branch pairs, and thus is not causal invariant:
In[15]:= 

Out[15]= 

By default, CanonicalBranchPairs returns only a list of canonical branch pairs:
In[16]:= 

Out[16]= 

Common predecessor states can be shown using "GivePredecessors":
In[17]:= 

Out[17]= 

Similarly, CanonicalBranchPairs with a step count by default lists only resolved and unresolved canonical branch pairs:
In[18]:= 

Out[18]= 

Common resolvents of resolved branch pairs can be shown using "GiveResolvents":
In[19]:= 

Out[19]= 

Show both common predecessors and common resolvents, where appropriate:
In[20]:= 

Out[20]= 

By default, CanonicalBranchPairs does not include self pairs (i.e. trivial critical pairs):
In[21]:= 

Out[21]= 

Self pairs can be included using “IncludeSelfPairs”:
In[22]:= 

Out[22]= 

CanonicalBranchPairs returns an empty list of unresolved canonical branch pairs if and only if the rule is total causal invariant:
In[26]:= 

Out[26]= 

In[27]:= 

Out[27]= 

This work is licensed under a Creative Commons Attribution 4.0 International License