Function Repository Resource:

CyclicTagSystemEvolveList

Source Notebook

Generate the evolution of a cyclic tag system

Contributed by: Wolfram Research

ResourceFunction["CyclicTagSystemEvolveList"][rules,init,t]

returns the list of states attained from evolving init, using cyclic tag system rules over t steps.

ResourceFunction["CyclicTagSystemEvolveList"][rules,init]

gives the result of evolving init for one step.

ResourceFunction["CyclicTagSystemEvolveList"][rules,init,t,dt]

returns the states attained at every step dt.

ResourceFunction["CyclicTagSystemEvolveList"][rules,init,t,dt,prop]

returns the specified prop of states attained at every step.

ResourceFunction["CyclicTagSystemEvolveList"][rules]

is an operator form of ResourceFunction["CyclicTagSystemEvolveList"] that represents one step of evolution.

Details

In a step of evolution in a cyclic tag system, the first element of the tape is deleted. If the first element was 0, no elements are added to the end of the tape. If the first element was 1, then the first block in rules is added to the end of the tape. At every evolution step, the blocks in rules are rotated left one step so that the first block goes to the end of rules.
The argument rules should be given as a list, where each element is a list specifying a block of digits to be added to the end of the tape, such as {{0, 1}, {0}, {0, 1, 1}}.
The argument init should be given as a list that specifies the initial tape configuration, such as {0, 1, 1, 1}.
ResourceFunction["CyclicTagSystemEvolveList"] supports the following properties (which can be supplied as the argument prop):
"States"the list of tape configurations throughout the cyclic tag system evolution
"Lengths"the list of tape lengths throughout the cyclic tag system evolution

Examples

Basic Examples (3) 

Generate the tape states in 25 evolution steps of a cyclic tag system:

In[1]:=
ResourceFunction[
 "CyclicTagSystemEvolveList"][{{1, 1}, {1, 0}}, {1}, 25]
Out[1]=

Return only every fifth state in that same evolution:

In[2]:=
ResourceFunction[
 "CyclicTagSystemEvolveList"][{{1, 1}, {1, 0}}, {1}, 25, 5]
Out[2]=

Find the length of every tenth state in the cyclic tag evolution:

In[3]:=
ResourceFunction[
 "CyclicTagSystemEvolveList"][{{1, 1}, {1, 0}}, {1}, 500, 10, "Lengths"]
Out[3]=

Scope (2) 

Visualize the successive tape states in the evolution of a cyclic tag system:

In[4]:=
ArrayPlot[
 PadRight[
  ResourceFunction[
   "CyclicTagSystemEvolveList"][{{1, 1}, {1, 0}}, {1}, 25], Automatic, 0.25]]
Out[4]=

Plot how tape length changes across the evolution of the same cyclic tag system:

In[5]:=
ListStepPlot[
 ResourceFunction["CyclicTagSystemEvolveList"][{{1, 1}, {1, 0}}, {1}, 500, 1, "Lengths"], Filling -> Axis]
Out[5]=

Visualize the successive tape states in the evolution of a slightly more complicated cyclic tag system:

In[6]:=
ArrayPlot[
 PadRight[
  ResourceFunction[
   "CyclicTagSystemEvolveList"][{{0, 1}, {0}, {0, 1, 1}}, {0, 1, 1, 1}, 25], Automatic, 0.25]]
Out[6]=

Plot how tape length changes across the evolution of the same cyclic tag system (which in this case demonstrates that the system eventually halts):

In[7]:=
ListStepPlot[
 ResourceFunction[
  "CyclicTagSystemEvolveList"][{{0, 1}, {0}, {0, 1, 1}}, {0, 1, 1, 1}, 200, 1, "Lengths"], Filling -> Axis]
Out[7]=

Version History

  • 1.1.0 – 15 July 2022
  • 1.0.0 – 10 March 2021

Related Resources

License Information