Foliation

A foliation is an update ordering

For non-interfering events (i.e. spacelike events) you can do any set you want at the same time

Generations correspond to “thick” collections of update events

MultiwaySystem[{"A""BB","B""A"}"Random","A",12,"CausalGraph"]
In[]:=
Out[]=

Is Sequential a tachyonic foliation?

MultiwaySystem[{"A""BB","B""A"}"Sequential","A",12,"CausalGraph"]
In[]:=
Out[]=
MultiwaySystem[{"A""AB","B""A"}"Sequential","A",12,"CausalGraph"]
In[]:=
Out[]=
MultiwaySystem[{"A""AA","AAB""BA"}"Sequential","A",12,"CausalGraph"]
In[]:=
Out[]=
MultiwaySystem[{"AA""A","AB""BAA"}"Sequential","AABA",4,"CausalGraph"]
In[]:=
Out[]=
MultiwaySystem[{"A""B"}"Sequential","AAA",2,"CausalGraph"]
In[]:=
Out[]=
MultiwaySystem[{"C""AAA","A""B"}"Sequential","C",4,"CausalGraph"]
In[]:=
Out[]=
MultiwaySystem[{{0,1,0}{0,0,1},{0}{0,1,0}}"Sequential",{1,0,1,0},20,"CausalGraph"]
In[]:=
Out[]=
TotalCausalInvariantQ[{{0,1,0}{0,0,1},{0}{0,1,0}},4]
In[]:=
True
Out[]=

Sequential is depth-first search..... (which never recurses back up the tree if the rule doesn’t terminate)

“Generations” is breadth-first search

Least-recent first....

The standard StringReplace update ordering

As many as it can without overlapping.......
ResourceFunction["SequentialSubstitutionSystemPlot"][ResourceFunction["SequentialSubstitutionSystem"][{{0,1,0}{0,0,1},{0}{0,1,0}},{1,0,1,0},50]]
In[]:=
Out[]=

Foliation specification

What branch of the multiway system are you taking?

At each step, you have a list of possible replacements ... you need EventSelectionFunction

Preferring the left; preferring the right
First;Last
Sequential updates: traveling at the speed of light
Sort[RandomInteger[100,10]]
In[]:=
{38,57,59,61,64,84,92,97,99,100}
Out[]=
Flatten[Table[{t,RandomInteger[100]},10,{t,5}],1]
In[]:=
Out[]=
Graphics[Point[Flatten[Table[{t,RandomInteger[30]},15,{t,20}],1]]]
In[]:=
Out[]=
​
Consider fixed-length strings
UpdatesPicture[Flatten[Table[Table[i,1+RandomInteger[3]],{i,20}]]&,20,5,.2]
In[]:=
Out[]=
“strong hyperbolicity”
UpdatesPicture[Flatten[Table[Table[i,Ceiling[.3i]],{i,20}]]&,20,5,.2]
In[]:=
Out[]=
Flatten[Table[Table[i,Ceiling[.3i]],{i,20}]]
In[]:=
{1,2,3,4,4,5,5,6,6,7,7,7,8,8,8,9,9,9,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,14,15,15,15,15,15,16,16,16,16,16,17,17,17,17,17,17,18,18,18,18,18,18,19,19,19,19,19,19,20,20,20,20,20,20}
Out[]=

lapse function α (“timelike distance”); shift vector
β
i

For each point, pick a sequence of delays between updatings....
ArrayPlot[(Characters[#]/.{"A"1,"B"0})&/@SubstitutionSystem["BA""AB","ABBBBAAAABBBA",10],MeshAll]
In[]:=
Out[]=
Clear[StringPlot]
In[]:=
StringPlot[data_]:=ArrayPlot[PadRight[(Characters[#]/.{"A"Yellow,"B"Orange})&/@data,Automatic,White],MeshIf[Length[data]>20,None,All]]
In[]:=
CharacterStringPlot[data_]:=MapIndexed[{Style[<|"A"Yellow,"B"Orange,0White|>[#1],EdgeForm[Gray],Rectangle[-#2,-#2+{1,1}]],Text[#1,-#2+{1,1}/2]}&,data,{2}]
In[]:=
LapsedSubstitutionSystem[rule_,init_,lapses_]:=
Priority list where at every step each position gets a priority
(i.e. this is a list of positions to update in order)
{1,5,2,3,4,...}
To make the picture above, coarse grain this, showing only every ___ steps
PrioritySubstitutionSystem[rule_,init_,pos_]:=
"ABBBBAAABBBAAA"
StringLength["ABBBBAAAABBBA"]
In[]:=
13
Out[]=
PrioritizedSubstitutionSystem["BA""AB","ABBBBAAAABBBA",RandomInteger[{1,13},1000],"Compressed"]
In[]:=
{ABBBBAAAABBBA,ABBBBAAAABBAB,ABBBABAAABBAB,ABBBABAAABABB,ABBBAABAABABB,ABBABABAABABB,ABABBABAABABB,ABABABBAABABB,AABBABBAABABB,AABBABABABABB,AABABBABABABB,AABABABBABABB,AABABABABBABB,AABABABABABBB,AABABABAABBBB,AAABBABAABBBB,AAABBAABABBBB,AAABBAAABBBBB,AAABABAABBBBB,AAABAABABBBBB,AAABAAABBBBBB,AAAABAABBBBBB,AAAAABABBBBBB,AAAAAABBBBBBB}
Out[]=
StringPlot[%]
In[]:=
Out[]=
PrioritizedSubstitutionSystem["A""B",StringRepeat["A",20],Table[Mod[i,20,1],{i,100}],"Compressed"]//StringPlot
In[]:=
Out[]=
PrioritizedSubstitutionSystem["A""B",StringRepeat["A",20],{10,5,3},"Compressed"]//StringPlot
In[]:=
Out[]=
PrioritizedSubstitutionSystem["BA""AB",StringJoin[StringRepeat["B",20],StringRepeat["A",20]],Table[Mod[i,40,1],{i,100}],"Compressed"]//StringPlot
In[]:=
Out[]=
PrioritizedSubstitutionSystem["BA""AB",StringJoin[StringRepeat["B",20],StringRepeat["A",20]],Flatten[Table[Table[i,Ceiling[.2i]],{i,40}]],"Compressed"]//StringPlot
In[]:=
Out[]=
PrioritizedSubstitutionSystem["BA""AB",StringJoin[StringRepeat["B",20],StringRepeat["A",20]],41-Flatten[Table[Table[i,Ceiling[.2i]],{i,40}]],"Compressed"]//StringPlot
In[]:=
Out[]=
PrioritizedSubstitutionSystem["BA""AB",StringJoin[StringRepeat["B",20],StringRepeat["A",20]],Flatten[Table[Table[Table[i,Ceiling[.02i]],{i,40}],10]],"Compressed"]//StringPlot
In[]:=
Out[]=
PrioritizedSubstitutionSystem["BA""AB",StringJoin[StringRepeat["B",20],StringRepeat["A",20]],41-Flatten[Table[Table[Table[i,Ceiling[.02i]],{i,40}],10]],"Compressed"]//StringPlot
In[]:=
Out[]=
PrioritizedSubstitutionSystem["BA""AB",StringJoin[StringRepeat["B",20],StringRepeat["A",20]],RandomInteger[{1,40},1000],"Compressed"]//StringPlot
In[]:=
Out[]=
Show[PrioritizedSubstitutionSystem["BA""AB",StringJoin[StringRepeat["B",20],StringRepeat["A",20]],RandomInteger[{1,40},10000],"Compressed"]//StringPlot,AspectRatio2]
In[]:=
Out[]=
Show[PrioritizedSubstitutionSystem["BA""AB",StringJoin[StringRepeat["B",20],StringRepeat["A",20]],Flatten[Table[Table[Table[i,Ceiling[.02i]],{i,40}],1000]],"Compressed"]//StringPlot,AspectRatio2]
In[]:=
Out[]=
Show[PrioritizedSubstitutionSystem["BA""AB",StringJoin[StringRepeat["B",20],StringRepeat["A",20]],Flatten[Table[Table[Table[i,Mod[3i+2j,40,1]],{i,40}],{j,10}]],"Compressed"]//StringPlot,AspectRatio2]
In[]:=
Out[]=
Show[PrioritizedSubstitutionSystem["BA""AB",StringJoin[StringRepeat["B",20],StringRepeat["A",20]],Flatten[Table[Mod[3i^2,40,1],{i,2000}]],"Compressed"]//StringPlot,AspectRatio2]
In[]:=
Out[]=
Need an ergodic sequence to do something interesting....
PrioritizedSubstitutionSystem[{"A""BB","B""A"},"A",Table[Mod[i,40,1],{i,300}],"Compressed"]//StringPlot
In[]:=
Out[]=
PrioritizedSubstitutionSystem[{"A""BB","B""A"},"A",Table[Mod[i^2,40,1],{i,300}],"Compressed"]//StringPlot
In[]:=
Out[]=
Flatten[Table[Table[Table[i,Ceiling[.2i]],{i,40}],100]]
Out[]=
PrioritizedSubstitutionSystem[{"A""BB","B""A"},"A",Flatten[Table[Table[Table[i,Ceiling[.2i]],{i,40}],10]],"Compressed"]//StringPlot
In[]:=
Out[]=
PrioritizedSubstitutionSystem[{"A""BB","B""A"},"A",Flatten[Table[Table[Table[i,Ceiling[.3i]],{i,40}],10]],"Compressed"]//StringPlot
In[]:=
Out[]=
PrioritizedSubstitutionSystem[{"A""BB","B""A"},"A",Flatten[Table[Table[Table[i,Ceiling[.8i]],{i,40}],10]],"Compressed"]//StringPlot
In[]:=
Out[]=
PrioritizedSubstitutionSystem[{"A""BB","B""A"},"A",Flatten[Table[Table[Table[i,Ceiling[.1i]],{i,40}],10]],"Compressed"]//StringPlot
In[]:=
Out[]=
PrioritizedSubstitutionSystem[{"A""BB","B""A"},"A",Flatten[Table[Table[Table[i,Ceiling[.02i]],{i,40}],10]],"Compressed"]//StringPlot
In[]:=
Out[]=
Left-right scan......
PrioritizedSubstitutionSystem[{"A""BB","B""A"},"A",Flatten[Table[Table[Table[i,1],{i,40}],10]],"Compressed"]//StringPlot
In[]:=
Out[]=
SubstitutionSystem[{"A""BB","B""A"},"A",10]
In[]:=
{A,BB,AA,BBBB,AAAA,BBBBBBBB,AAAAAAAA,BBBBBBBBBBBBBBBB,AAAAAAAAAAAAAAAA,BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB,AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA}
Out[]=
updatepix[pos_]:=Graphics[MapIndexed[Line[{{#,-First[#2]},{#+1,-First[#2]}}]&,pos]]
In[]:=
updatepix[Flatten[Table[Table[Table[i,1],{i,40}],5]]]
In[]:=
Out[]=
updatepix[Take[Flatten[Table[Table[Table[i,Ceiling[.2i]],{i,40}],10]],80]]
In[]:=
Out[]=
Show[updatepix[Flatten[Table[Table[Table[i,Ceiling[.02i]],{i,40}],10]]],AspectRatio2]
In[]:=
Out[]=
Show[updatepix[Flatten[Table[Table[Table[i,Ceiling[.2i]],{i,40}],10]]],AspectRatio2]
In[]:=
Out[]=
PrioritizedSubstitutionSystem[{"B""BB"},"B",Flatten[Table[Table[Table[i,Ceiling[.02i]],{i,10}],10]],"Compressed"]//StringPlot
In[]:=
Out[]=
Show[updatepix[Mod[Range[1000],40,1]],AspectRatio2]
In[]:=
Out[]=
Show[updatepix[Mod[2Range[1000],41,1]],AspectRatio2]
In[]:=
Out[]=
Show[updatepix[Mod[3Range[1000],41,1]],AspectRatio2]
In[]:=
Out[]=
PrioritizedSubstitutionSystem[{"A""BB","B""A"},"A",Mod[3Range[1000],41,1],"Compressed"]//StringPlot
In[]:=
Out[]=
PrioritizedSubstitutionSystem[{"A""BB","B""A"},"A",Mod[2Range[200],41,1],"Compressed"]//StringPlot
In[]:=
Out[]=
PrioritizedSubstitutionSystem[{"A""BB","B""A"},"A",Mod[2Range[50],41,1]]//StringPlot
In[]:=
PrioritizedSubstitutionSystem[{"A""BB","B""A"},"A",Mod[3Range[300],41,1],"Compressed"]//StringPlot
In[]:=
Out[]=
Table[PrioritizedSubstitutionSystem[{"A""BB","B""A"},"A",Mod[nRange[300],41,1],"Compressed"]//StringPlot,{n,20}]
In[]:=
Out[]=
Table[Show[updatepix[Mod[nRange[300],41,1]],AspectRatio2],{n,20}]
In[]:=
Out[]=