Details and Options
In a step of evolution of a tag system, a fixed number of elements is deleted from the beginning of the tape. The rules specify a block of digits that should be added to the end of the tape based on the first element that was deleted.
The argument
rules should be given as a list of
Rule or
RuleDelayed elements, such as in the format
{{0,_,s___}⧴{s,0,0},{1,0,s___}⧴{s,1},{1,1,s___}⧴{s,0,1}}.
Blank elements are used to represent tape elements that do not matter for choosing the block to be added to the end of the tape.
As a special case, the Post tag system can be specified by setting the argument rules to "Post". This is equivalent to giving rules as {{0,_,_,s___}→{s,0,0},{1,_,_,s___}→ {s,1,1,0,1}}.
The argument
init can be given either in compressed form (a list of digits such as
{1,0,1,0,0,1,1}), or in uncompressed form (a list where the first element is a digit and the second element is a list of digits, such as
{1,{1,0,1}}). The resource function
TagSystemConvert can be used to interconvert between these forms.
The argument t should be given as an integer.
ResourceFunction["TagSystemEvolve"] accepts two options:
MaxSteps | Infinity | the maximum number of steps to be taken in the tag system evolution |
Method | Automatic | the algorithm used internally to compute the tag system evolution |
If no value is specified for the
MaxSteps option,
ResourceFunction["TagSystemEvolve"][rules,init] will attempt to perform a fixed point evolution, which takes the system to the state at which it halts.
If no value is specified for the
Method option, then the tag system evolution will be performed using functional iteration in the Wolfram Language. Alternatively, there is a
"BitwiseOptimized" method, which can only be used when
rules is given as
"Post", that uses a faster algorithm written in C++.