Wolfram Research

Function Repository Resource:

TotalCausalInvariantQ

Source Notebook

Determine whether a given multiway system is causal invariant

Contributed by: Jonathan Gorard

ResourceFunction["TotalCausalInvariantQ"][rules,n]

returns True if the multiway system with the specified rules is total causal invariant after n steps, and False otherwise.

Details and Options

Rules can be specified in the following ways:
{"lhs1"->"rhs1",…} string substitution system
{{l11,l12,…}->{r11,r12,..},…} list substitution system
WolframModel[rules] Wolfram Model system
CellularAutomaton[rules] cellular automaton system
"type"rules system of the specified type
Supported rule types include:
"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
Causal invariance is a property of multiway systems in which all branches of evolution history yield causal networks that are isomorphic as acyclic graphs.
In the case of an abstract rewrite system it is a sufficient condition for confluence (or the Church-Rosser property), and in the case of a WolframModel it is equivalent to Lorentz covariance.

Examples

Basic Examples

Determine total causal invariance for two string substitution systems:

In[1]:=
ResourceFunction[
 "TotalCausalInvariantQ"][{"AA" -> "ABA", "AAA" -> "B"}, 2]
Out[1]=
In[2]:=
ResourceFunction["TotalCausalInvariantQ"][{"AA" -> "AB", "B" -> "BA"},
  4]
Out[2]=

TotalCausalInvariantQ can handle Wolfram Models and other system types:

In[3]:=
ResourceFunction["TotalCausalInvariantQ"][
 ResourceFunction[
  "WolframModel"][{{{2, 2, 1}, {2, 2, 2}} -> {{1, 1, 3}, {3, 3, 2}}}],
  2]
Out[3]=
In[4]:=
ResourceFunction["TotalCausalInvariantQ"][CellularAutomaton[30], 2]
Out[4]=
In[5]:=
ResourceFunction[
 "TotalCausalInvariantQ"][{{0} -> {0, 1, 0}, {1, 1} -> {1}}, 2]
Out[5]=

Scope

System Types

TotalCausalInvariantQ supports both string and list substitution systems:

In[6]:=
ResourceFunction[
 "TotalCausalInvariantQ"][{"BB" -> "AA", "AB" -> "BA"}, 2]
Out[6]=
In[7]:=
ResourceFunction[
 "TotalCausalInvariantQ"][{{1, 1} -> {0, 0}, {0, 1} -> {1, 0}}, 2]
Out[7]=

TotalCausalInvariantQ also supports multiway generalizations of cellular automata:

In[8]:=
ResourceFunction["TotalCausalInvariantQ"][
 CellularAutomaton[{170, 240}], 10]
Out[8]=

TotalCausalInvariantQ also supports multiway generalizations of Wolfram Models:

In[9]:=
ResourceFunction["TotalCausalInvariantQ"][
 ResourceFunction[
  "WolframModel"][{{0, 1}, {1, 0}} -> {{1, 2}, {2, 1}}], 1]
Out[9]=
In[10]:=
ResourceFunction["TotalCausalInvariantQ"][
 ResourceFunction["WolframModel"][{{0, 1}} -> {{1, 2}, {2, 1}}], 1]
Out[10]=

Applications

Causal Invariant Rules

Prove that the Xor and And functions are total causal invariant (due to associativity):

In[11]:=
ResourceFunction[
 "TotalCausalInvariantQ"][{"TT" -> "F", "TF" -> "T", "FT" -> "T", "FF" -> "F"}, 1]
Out[11]=
In[12]:=
ResourceFunction[
 "TotalCausalInvariantQ"][{"TT" -> "T", "TF" -> "F", "FT" -> "F", "FF" -> "F"}, 1]
Out[12]=

On the other hand, the Nand function is not associative, so it is not total causal invariant:

In[13]:=
ResourceFunction[
 "TotalCausalInvariantQ"][{"TT" -> "F", "TF" -> "T", "FT" -> "T", "FF" -> "T"}, 1]
Out[13]=

Resource History

Source Metadata

Related Resources

License Information