Wolfram Function Repository
Instantuse addon functions for the Wolfram Language
Function Repository Resource:
Compute branch pair resolutions for a given multiway system
ResourceFunction["BranchPairResolutions"][rules,init,n] generates an association of resolved and unresolved branch pairs for the multiway system with the specified rules after n steps, starting with initial conditions init. 

ResourceFunction["BranchPairResolutions"][rules→sel,init,n] uses the function sel to select which of the events obtained at each step to include in the evolution. 
{"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 
"StateEvolutionFunction"  gives the list of successors to a given state 
"StateEquivalenceFunction"  determines whether two states should be considered equivalent 
"StateEventFunction"  gives the list of events applicable to a given state 
"EventApplicationFunction"  applies an event to a given state 
"EventDecompositionFunction"  decomposes an event into creator and destroyer events for individual elements 
"SystemType"  gives a system type name 
"EventSelectionFunction"  determines which events should be applied to a given state 
"Sequential"  applies the first possible replacement (sequential substitution system) 
"Random"  applies a random replacement 
{"Random",n}  applies n randomly chosen replacements 
"MaxScan"  applies the maximal set of spatiallyseparated replacements (strings only) 
"IncludeStepNumber"  False  whether to label states and events with their respective step numbers 
"IncludeStateID"  False  whether to label states and events with unique IDs 
"GivePredecessors"  False  whether to label branch pairs with their predecessor state 
"GiveResolvents"  False  whether to label branch pairs with their resolvent state 
Generate the associations showing all convergent and nonconvergent branch pairs (i.e. critical pairs) for two string substitution systems:
In[1]:= 

Out[1]= 

In[2]:= 

Out[2]= 

Show common predecessor states:
In[3]:= 

Out[3]= 

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

Out[4]= 

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

Out[5]= 

Different event selection functions can lead to different branch pair resolution behavior:
In[6]:= 

Out[6]= 

In[7]:= 

Out[7]= 

BranchPairResolutions can handle Wolfram Models and other system types:
In[8]:= 

Out[8]= 

In[9]:= 

Out[9]= 

In[10]:= 

Out[10]= 

Preventing identical states from being merged, by including step numbers and/or state IDs, can change branch pair resolution behavior:
In[11]:= 

Out[11]= 

In[12]:= 

Out[12]= 

BranchPairResolutions supports both string and list substitution systems:
In[13]:= 

Out[13]= 

In[14]:= 

Out[14]= 

Lists can contain arbitrary symbolic elements:
In[15]:= 

Out[15]= 

Give an explicit substitution system rule:
In[16]:= 

Out[16]= 

An alternative method of specifying that a substitution system can be used:
In[17]:= 

Out[17]= 

BranchPairs also supports multiway generalizations of cellular automata:
In[18]:= 

Out[18]= 

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

Out[19]= 

Show that the rule 30 cellular automaton leads to unresolved branch pairs, and thus is not causal invariant:
In[20]:= 

Out[20]= 

BranchPairResolutions also supports multiway generalizations of Wolfram Models:
In[21]:= 

Out[21]= 

In[22]:= 

Out[22]= 

Construct a multiway evolution by explicitly specifying an association:
In[23]:= 

Out[23]= 

BranchPairResolutions accepts both individual rules and lists of rules:
In[24]:= 

Out[24]= 

In[25]:= 

Out[25]= 

Likewise for initial conditions:
In[26]:= 

Out[26]= 

Apply only the first possible event at each step:
In[27]:= 

Out[27]= 

Apply the first and last possible events at each step:
In[28]:= 

Out[28]= 

Use a greedystyle algorithm to apply the maximal set of nonconflicting events at each step (strings only):
In[29]:= 

Out[29]= 

Explicitly specify the type of rule:
In[30]:= 

Out[30]= 

In[31]:= 

Out[31]= 

By default, equivalent states are merged across all time steps:
In[32]:= 

Out[32]= 

Merging of equivalent states across different time steps can be prevented by including step numbers:
In[33]:= 

Out[33]= 

Merging of equivalent states at the same time step can be prevented by also including state IDs:
In[34]:= 

Out[34]= 

By default, BranchPairs returns only an association of resolved and unresolved branch pairs:
In[35]:= 

Out[35]= 

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

Out[36]= 

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

Out[37]= 

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

Out[38]= 

BranchPairsResolutions returning an empty list of unresolved branch pairs is a sufficient (but not necessary) condition for causal invariance:
In[42]:= 

Out[42]= 

In[43]:= 

Out[43]= 

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