Dekaheptoid: Difference between revisions
Alemagno12 (talk | contribs) (Replacing Discord link with file upload, since Discord links rot quickly) |
(Used Template:Stub) |
||
(16 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
{{Stub}} | |||
'''Dekaheptoid''' (from Ancient Greek word meaning "seventeen") is an informal class of Turing machines that are, in some sense, similar to [[Skelet 17]]. A typical Turing machine in this class has the following behavior: | '''Dekaheptoid''' (from Ancient Greek word meaning "seventeen") is an informal class of Turing machines that are, in some sense, similar to [[Skelet 17]]. A typical Turing machine in this class has the following behavior: | ||
* it works with the sequence of numbers encoded as <math>10^{k}</math> (here referred to as ''digits''). | * it works with the sequence of numbers encoded as <math>10^{k}</math> (here referred to as ''digits''). | ||
* it spends most of | * it spends most of its time performing an operation that could be described as incrementing/decrementing the Gray Code of the sequence | ||
* it has a roughly cubic growth rate | * it has a roughly cubic growth rate | ||
Line 11: | Line 12: | ||
* ''Zero'': expand the tape to the left by adding some number of leading zeros. The leftmost digit could be incremented by some small value. Typically this occurs when all digits (possibly, except for the least significant one) are even. | * ''Zero'': expand the tape to the left by adding some number of leading zeros. The leftmost digit could be incremented by some small value. Typically this occurs when all digits (possibly, except for the least significant one) are even. | ||
* ''Overflow'': incrementing the leftmost digit creates new leading zeros. | * ''Overflow'': incrementing the leftmost digit creates new leading zeros. | ||
* ''Smudge'': if an "internal" (i.e. neither the first nor the last) digit is zero, increment it and decrement some digit next to it. In some cases leads to halting. | * ''Smudge'': if an "internal" (i.e. neither the first nor the last) digit is zero, increment it and decrement some digit next to it. In some cases, this leads to halting. | ||
== State variables == | |||
It is useful to consider the following ''state variables'': | |||
* Rightmost digit (denoted by <code>last</code>). The parity of <code>last</code> can be relevant, and is either 0 or 1, as calculated by <code>last % 2</code>. Possible values of <code>last</code> are all natural numbers <math>\mathbb{N} = {0,1,2,3, ...}</math> (note, however, that only <code>0</code> and <code>1</code> values affect the behaviour; everything else could be merged into a single class named <code>2+</code>) | |||
* Gray code value (denoted by <code>grayval</code>): the integer corresponding to the Gray code bitstring obtained by calculating the parity of each number (except the last) in the list. For a list of length <math>L</math>, possible Grey code values are <math>[0, 1, 2, ..., 2^L - 1]</math>. If <code>grayval == 0</code>, all entries in the list are even, except perhaps the last one. If <code>grayval == 2^L - 1</code>, all entries in the list are odd, except perhaps the last one. | |||
* Number of internal zeros (denoted by <code>num_internal_zero</code>). | |||
* Number of leading zeros (denoted by <code>num_leading_zeros</code>). | |||
* Rightmost odd index, including the last digit (denoted by <code>rightmost_odd_idx</code>). If all entries are even, it is defined as <math>-1</math> by convention. | |||
* Rightmost odd index not counting the last digit (denoted by <code>rightmost_odd_idx_alt</code>). If all pertinent entries are even, it is defined as <math>-1</math> by convention. | |||
Note that if <code>grayval == 0</code>, then <code>rightmost_odd_idx_alt == -1</code>, and <code>rightmost_odd_idx</code> is either 0 or L. | |||
== 5-state dekaheptoids == | == 5-state dekaheptoids == | ||
Two notable machines are [[Skelet 17]] and | Two notable machines are [[Skelet 17]] and {{TM|1RB1LC_1RC---_0LD1RE_0LA1LD_0RC0RB|halting}} which is equivalent to Skelet 17 starting from the state D and halts after 533 steps (29 rule applications). | ||
== 6-state dekaheptoids == | == 6-state dekaheptoids == | ||
Known dekaheptoids fall into one of 12 equivalence classes. | Known dekaheptoids fall into one of 12 equivalence classes (based on checking configurations after each rule application; two TMs are considered equivalent if their high-level configs are always equivalent during 15k+ high-level steps). | ||
=== equivalent to skelet 17 === | |||
<pre> | |||
1RB---_0LC1RE_0LD1LC_1RA1LB_0RB0LF_0RA1RF | |||
1RB1RF_0LC1RE_0LD1LC_1RA1LB_0RB1LA_---0RA | |||
1RB1RF_0LC1RE_0LD1LC_1RA1LB_1LA0RA_---0RB | |||
1RB0RA_0LC1RE_0LD1LC_1RA1LB_0RB1RF_0LA--- | |||
1RB---_0LC1RF_0LD1LC_1LE1LB_0RE1RA_0RB0RA | |||
1RB---_0LC1RE_0LD1LC_1RA1LB_0LF0RA_0RB1RF | |||
1RB---_0LC1RF_0LE1LD_0RD1LC_1RA1LB_0RB0RA | |||
1RB---_0LC1RE_0LD1LC_1RA1LB_0RB1RF_0LF0RA | |||
1RB---_0LC1RF_0LD1LC_1RE1LB_0LE1RA_0RB0RA | |||
1RB---_0LC1RE_0LD1LC_1RA1RF_0RB0RA_0LF1LB | |||
</pre> | |||
The notable machine is {{TM|1RB---_0LC1RF_0LE1LD_0RD1LC_1RA1LB_0RB0RA|undecided}} that employs a different mechanism for keeping track of parity. | |||
=== "Old Relif Orbora" family === | |||
<pre> | |||
1RB---_0LC1RF_0LD1LC_1RE1LB_1RD0RB_0RB0RA | |||
1RB---_0LC1RF_0LD1LC_1RE1LB_1RD0LB_0RB0RA | |||
1RB---_0LC1RF_0LD1LC_1RE1LB_1RD0LD_0RB0RA | |||
1RB---_0LC1RF_0LD1LC_1RE1LB_1RD0LF_0RB0RA | |||
</pre> | |||
''Rules'' (based on <code>1RB---_0LC1RF_0LD1LC_1RE1LB_1RD0RB_0RB0RA</code>) | |||
<pre> | |||
last != 0 and rightmost_odd_idx > 0: | |||
apply_increment -- the usual Gray Code increment operation. | |||
last == 0 and rightmost_odd_idx_alt != -1 and rightmost_odd_idx != 0: | |||
apply_halve o apply_increment -- first, run an Increment operation, decreasing the last digit to fictitious value "-1"; then, delete the last digit. | |||
last == 0 and (rightmost_odd_idx <= 0) and grayval != "2^L - 1" and num_leading_zeros != 2: | |||
apply_halve o apply_weird_double_zero -- first, add two leading zeros, then increment the last leading zero, then delete the last digit | |||
For example: [2, 6, 12, 24, 48, 0] -> [0, 1, 2, 6, 12, 24, 48] | |||
grayval == "2^L - 1" and rightmost_odd_idx == 0 and last == "0" : | |||
apply_halve o apply_zero_D -- an overflow variant (see below) | |||
grayval == "2^L - 1" and rightmost_odd_idx == 0 and last == "2+" : | |||
apply_zero_D -- an overflow variant (see below) | |||
grayval == '2^L - 1' and L == 1: | |||
apply_leading_zero_increment o apply_add_one_zero o apply_overflow -- increment the leading digit, add leading zero, then add one leading zero, then increase the first non-zero digit and decrease the last digit. | |||
grayval == "0" and ((internal_zeros_len > 0) or (num_ending_zeros > 2) or (num_leading_zeros > 0)) : | |||
apply_halt | |||
if the halting condition isn't met, then the either of these ones happen: | |||
grayval == "0" and internal_zeros_len == 0 and rightmost_odd_idx == -1 and rightmost_odd_idx_alt == -1 and num_ending_zeros == 0 : | |||
apply_leading_zero_increment o apply_add_double_zero -- add two leading zeros, then increase the first non-zero digit and decrease the last digit. | |||
grayval == "0" and internal_zeros_len == 0 and rightmost_odd_idx == -1 and rightmost_odd_idx_alt == -1 and num_ending_zeros > 0 : | |||
apply_halve o apply_leading_zero_increment o apply_add_double_zero -- the same as above but delete the last digit afterward | |||
</pre> | |||
The <code>apply_zero_D</code> operation could be written as <code>apply_increment_1N o apply_overflow</code>: increment the leading digit, add leading zero, then increase the first digit (newly added zero) and decrease the last digit. | |||
=== "Iralic Orcora" family === | |||
<pre> | |||
1RB---_0LC1RD_0LE1RD_0RC0RA_0LF1LE_1RA1LC | |||
1RB---_0RC1RF_0LD1RF_0LE1LD_1RA1LC_0RC0RA | |||
1RB---_0LB1RC_0RD0RA_0LE1RC_0LF1LE_1RA1LD | |||
</pre> | |||
''Rules'' (based on <code>1RB---_0RC1RF_0LD1RF_0LE1LD_1RA1LC_0RC0RA</code>) | |||
<pre> | |||
grayval == '2^L - 1' and L == 1: | |||
apply_init -- increment the only digit and add leading zero | |||
`gray-adic` == "2^L - 1" and rightmost_odd_idx == 0 and last == "2+" : | |||
apply_zero_increment -- increase the first digit by 2 (instead of more customary 1), add leading zero, decrement the last digit | |||
last == "2+" and rightmost_odd_idx > 0 : | |||
apply_increment | |||
last == '1' and grayval != '2^L - 1' and grayval != '0' : | |||
apply_halve_and_increment o apply_increment -- apply the usual Gray Code increment, then delete the last digit and increment the new last digit by 1. | |||
grayval == "0" and last %2 == 0 and ((internal_zeros_len == 0 and num_leading_zeros > 1) or internal_zeros_len > 0 or num_ending_zeros >= 3) : | |||
apply_halt | |||
if the halting condition isn't met, then the either of these ones happen: | |||
grayval == "0" and internal_zeros_len == 0 and rightmost_odd_idx == -1 and rightmost_odd_idx_alt == -1 and num_ending_zeros == 0 : | |||
apply_zero -- increment the first digit, decrement the last digit, add two leading zeros | |||
grayval == "0" and internal_zeros_len == 0 and rightmost_odd_idx == -1 and rightmost_odd_idx_alt == -1 and num_ending_zeros == 1 : | |||
apply_halve o apply_zero -- increment the first digit, decrement the last digit, add two leading zeros, erase the last digit (that is less than zero now) | |||
grayval == "0" and internal_zeros_len == 0 and rightmost_odd_idx == -1 and rightmost_odd_idx_alt == -1 and num_ending_zeros == 2 : | |||
apply_weird_halve_zero_variant -- erase two last digits (that are zero), increment the first digit and the new last digit, add two leading zeros | |||
</pre> | |||
=== "Olaile Orcorb" family === | |||
<pre> | |||
1RB1LC_1RC---_0LD1RF_0LE1RD_0LA1LE_0RC0RB | |||
1RB1LC_1RC---_0LD1RF_0LE1LE_0LA1LE_0RC0RB | |||
</pre> | |||
Instead of a single Gray Code Increment, these TMs have two different increment rules: Excluding Increment and Shallow Increment. One can also analyze them as a traditional Gray Code Increment except with the parity of last digit switched. | |||
''Rules'' (based on <code>1RB1LC_1RC---_0LD1RF_0LE1LE_0LA1LE_0RC0RB</code>) | |||
<pre> | |||
last == "0" and rightmost_odd_idx_alt != -1 and rightmost_odd_idx != 0 : | |||
apply_halve o apply_increment | |||
last != "0" and rightmost_odd_idx_alt > 0 and last %2 == 1 : | |||
apply_excluding_increment | |||
last == "2+" and last %2 == 0 : | |||
apply_shallow_increment | |||
grayval == "0" and all_even == 0 : | |||
apply_zero | |||
grayval == '2^L - 1' and L > 1 : | |||
apply_overflow o apply_zero_increment | |||
rightmost_odd_idx_alt == 0 and last == '1' : | |||
apply_overflow o apply_zero_increment | |||
grayval == "0" and last == "0" and ((`L %2` == 0 and num_ending_zeros == L) or (internal_zeros_len > 0) or (internal_zeros_len == 0 and num_leading_zeros != -1 and (num_leading_zeros >= 3 or num_ending_zeros >= 3))) : | |||
apply_halt | |||
if the halting condition isn't met, then this rule applies: | |||
L > 1 and grayval == "0" and internal_zeros_len == 0 and rightmost_odd_idx == -1 and rightmost_odd_idx_alt == -1 and num_ending_zeros > 0 : | |||
apply_halve o apply_zero | |||
</pre> | |||
=== 1RB1LC_1RC---_0LD1RE_0LA1LD_0RC1RF_0LF0RB === | |||
The rules aren't complete. | |||
<pre> | |||
last == "0" and rightmost_odd_idx_alt != -1 and rightmost_odd_idx != 0 : | |||
apply_halve o apply_increment | |||
last != "0" and rightmost_odd_idx > 0 : | |||
apply_increment | |||
num_leading_zeros == 2 and last == "0" and all_even == 1 : | |||
apply_halve o apply_weird_double_zero -- first, add two leading zeros, then increment the last leading zero, then delete the last digit | |||
The conditions for these operations aren't described yet: | |||
apply_zero | |||
apply_halve o apply_zero | |||
apply_zero_variant o apply_smudge_internal_zeros | |||
apply_weird_double_zero o apply_halve_and_increment (a rare operation) | |||
apply_weird_double_zero | |||
apply_halt | |||
</pre> | |||
=== 1RB---_0LC1LB_1RE1LD_0LB1RF_1RD1RA_0RD0RE === | |||
This machine is obtained by adding a new state F to the halting config of Skelet 17. The F state mangles the left end of the tape and introduces a lot of chaos into tape evolution. | |||
=== 1RB---_0LC1RF_0LD1LC_1RE1LB_0RE1LA_0RB0RA === | |||
<pre> | |||
last == "0" and rightmost_odd_idx_alt != -1 and rightmost_odd_idx != 0 : | |||
apply_halve o apply_increment | |||
grayval == "2^L - 1" and rightmost_odd_idx == 0 and last == "0" : | |||
apply_halve o apply_zero_D | |||
grayval == "2^L - 1" and rightmost_odd_idx == 0 and last == "2+" : | |||
apply_zero_D | |||
last != "0" and rightmost_odd_idx > 0 : | |||
apply_increment | |||
grayval == "0" and last %2 == 0 and ((internal_zeros_len == 0 and num_leading_zeros > 1) or internal_zeros_len > 0 or num_ending_zeros >= 3) : | |||
apply_halt | |||
if the halting condition isn't met, then this rule applies: | |||
grayval == "0" and L > 1 and internal_zeros_len == 0 and rightmost_odd_idx == -1 and rightmost_odd_idx_alt == -1 and num_ending_zeros == 0 : | |||
apply_zero | |||
The condition for this operation isn't described yet: | |||
apply_halve o apply_zero | |||
</pre> | |||
=== 1RB---_0LC1RF_1RA1LD_0LE1RF_0LC1LE_0RD0RA === | |||
<pre> | |||
1RB---_0LC1RF_1RA1LD_0LE1RF_0LC1LE_0RD0RA 9 | |||
grayval == "2^L - 1" and rightmost_odd_idx == 0 and last == "2+" : | |||
apply_zero_D -- see above for description | |||
last == "2+" and rightmost_odd_idx > 0 : | |||
apply_increment | |||
last == '1' and grayval != '2^L - 1' and grayval != '0' : | |||
apply_halve_and_increment o apply_excluding_increment | |||
gray == "0" and `last %2` == 0 and ((internal_zeros_len == 0 and num_leading_zeros > 1) or internal_zeros_len > 0 or num_ending_zeros >= 3) : | |||
apply_halt | |||
If the halting condition isn't met: | |||
L > 1 and gray == "0" and internal_zeros_len == 0 and rightmost_odd_idx == -1 and rightmost_odd_idx_alt == -1 and num_ending_zeros == 0 : | |||
apply_zero | |||
L > 1 and gray == "0" and internal_zeros_len == 0 and rightmost_odd_idx == -1 and rightmost_odd_idx_alt == -1 and num_ending_zeros == 1 : | |||
apply_halve o apply_zero | |||
L > 1 and gray == "0" and internal_zeros_len == 0 and rightmost_odd_idx == -1 and rightmost_odd_idx_alt == -1 and num_ending_zeros == 2 : | |||
apply_weird_halve_zero | |||
The conditions for these two very rare operations aren't described yet: | |||
apply_weird_incrementing_halve | |||
apply_halve_and_increment o apply_zero_D | |||
</pre> | |||
=== 1RB---_0RC1RB_1LD1RE_1LE---_0RB1LF_0LE0LD === | |||
=== 1RB1LC_1RC---_0LD1RE_0LA1LD_0RF0RB_0LC1RE === | |||
This TM is notable, as I was unable to found any config where it would halt. | |||
<pre> | |||
last == "0" and (rightmost_odd_idx <= 0) and grayval != "2^L - 1" and num_leading_zeros != 2 : | |||
apply_halve_and_increment | |||
last == "2+" and last %2 == 0 : | |||
apply_shallow_increment | |||
last == "2+" and last %2 == 1 and gray != "0" : | |||
apply_excluding_increment | |||
last == "2+" and last %2 == 1 and gray == "0" : | |||
apply_zero | |||
grayval == '2^L - 1' and L > 1 : | |||
apply_halve o apply_weird_one_zero o apply_increment_D_even o apply_weird_double_zero | |||
last == '1' and grayval == '0' : | |||
apply_smudge_internal_zeros o apply_zero | |||
rightmost_odd_idx_alt == 0 and last == '1' : | |||
apply_halve o apply_weird_one_zero o apply_increment_D_even o apply_weird_double_zero | |||
The conditions for these operations aren't described yet: | |||
apply_weird_incrementing_halve o apply_halve | |||
apply_smudge_internal_zeros o apply_unsafe_increment_1N | |||
apply_halve o apply_increment o apply_excluding_increment | |||
</pre> | |||
=== 1RB1LC_1RC0RF_0LD1RE_0LA1LD_0RC0RB_0RE--- === | |||
The rules aren't complete. | |||
<pre> | |||
last == "0" and rightmost_odd_idx_alt != -1 and rightmost_odd_idx != 0 : | |||
apply_halve o apply_increment | |||
grayval == "2^L - 1" and rightmost_odd_idx == 0 and last == "0" : | |||
apply_halve o apply_zero o apply_overflow | |||
last != "0" and rightmost_odd_idx > 0 : | |||
apply_increment | |||
grayval == '2^L - 1' and L > 1 : | |||
apply_halve o apply_zero o apply_overflow | |||
The conditions for these operations aren't described yet: | |||
apply_zero | |||
apply_zero_variant o apply_reverse_smudge_internal_zeros | |||
apply_halve o apply_zero | |||
apply_halt | |||
</pre> | |||
== 2-state, 5-symbol dekaheptoids == | == 2-state, 5-symbol dekaheptoids == | ||
The | The {{TM|1RB3RB1LB---2RB_2LA1RA4LB2LA2RA|Undecided}} machine encodes digits as <math>4^k</math> separated by <math>12</math>. For example, {{mono|[x,y,z]}} is represented as <math>1 <B 4^x 12 4^y 12 4^z</math>. Note this machine is mirrored (z is the most significant digit while x is the least significant). | ||
The analysis by {{mono|@dyuan01}} is available [[:File:BB_2x5_Dekaheptoid_Non_Halt_Proof_Version_2_.pdf|here]]. | |||
[[Category:Zoology]] |
Latest revision as of 22:34, 10 August 2025
Dekaheptoid (from Ancient Greek word meaning "seventeen") is an informal class of Turing machines that are, in some sense, similar to Skelet 17. A typical Turing machine in this class has the following behavior:
- it works with the sequence of numbers encoded as (here referred to as digits).
- it spends most of its time performing an operation that could be described as incrementing/decrementing the Gray Code of the sequence
- it has a roughly cubic growth rate
The specifics can differ, but some of common tape transformations and conditions are:
- Increment: the value at the last index is decremented and some other value is incremented. Typically this does not expand the tape.
- Halve: the last digit (typically having a value 1 or less) is deleted.
- Zero: expand the tape to the left by adding some number of leading zeros. The leftmost digit could be incremented by some small value. Typically this occurs when all digits (possibly, except for the least significant one) are even.
- Overflow: incrementing the leftmost digit creates new leading zeros.
- Smudge: if an "internal" (i.e. neither the first nor the last) digit is zero, increment it and decrement some digit next to it. In some cases, this leads to halting.
State variables
It is useful to consider the following state variables:
- Rightmost digit (denoted by
last
). The parity oflast
can be relevant, and is either 0 or 1, as calculated bylast % 2
. Possible values oflast
are all natural numbers (note, however, that only0
and1
values affect the behaviour; everything else could be merged into a single class named2+
) - Gray code value (denoted by
grayval
): the integer corresponding to the Gray code bitstring obtained by calculating the parity of each number (except the last) in the list. For a list of length , possible Grey code values are . Ifgrayval == 0
, all entries in the list are even, except perhaps the last one. Ifgrayval == 2^L - 1
, all entries in the list are odd, except perhaps the last one. - Number of internal zeros (denoted by
num_internal_zero
). - Number of leading zeros (denoted by
num_leading_zeros
). - Rightmost odd index, including the last digit (denoted by
rightmost_odd_idx
). If all entries are even, it is defined as by convention. - Rightmost odd index not counting the last digit (denoted by
rightmost_odd_idx_alt
). If all pertinent entries are even, it is defined as by convention.
Note that if grayval == 0
, then rightmost_odd_idx_alt == -1
, and rightmost_odd_idx
is either 0 or L.
5-state dekaheptoids
Two notable machines are Skelet 17 and 1RB1LC_1RC---_0LD1RE_0LA1LD_0RC0RB
(bbch) which is equivalent to Skelet 17 starting from the state D and halts after 533 steps (29 rule applications).
6-state dekaheptoids
Known dekaheptoids fall into one of 12 equivalence classes (based on checking configurations after each rule application; two TMs are considered equivalent if their high-level configs are always equivalent during 15k+ high-level steps).
equivalent to skelet 17
1RB---_0LC1RE_0LD1LC_1RA1LB_0RB0LF_0RA1RF 1RB1RF_0LC1RE_0LD1LC_1RA1LB_0RB1LA_---0RA 1RB1RF_0LC1RE_0LD1LC_1RA1LB_1LA0RA_---0RB 1RB0RA_0LC1RE_0LD1LC_1RA1LB_0RB1RF_0LA--- 1RB---_0LC1RF_0LD1LC_1LE1LB_0RE1RA_0RB0RA 1RB---_0LC1RE_0LD1LC_1RA1LB_0LF0RA_0RB1RF 1RB---_0LC1RF_0LE1LD_0RD1LC_1RA1LB_0RB0RA 1RB---_0LC1RE_0LD1LC_1RA1LB_0RB1RF_0LF0RA 1RB---_0LC1RF_0LD1LC_1RE1LB_0LE1RA_0RB0RA 1RB---_0LC1RE_0LD1LC_1RA1RF_0RB0RA_0LF1LB
The notable machine is 1RB---_0LC1RF_0LE1LD_0RD1LC_1RA1LB_0RB0RA
(bbch) that employs a different mechanism for keeping track of parity.
"Old Relif Orbora" family
1RB---_0LC1RF_0LD1LC_1RE1LB_1RD0RB_0RB0RA 1RB---_0LC1RF_0LD1LC_1RE1LB_1RD0LB_0RB0RA 1RB---_0LC1RF_0LD1LC_1RE1LB_1RD0LD_0RB0RA 1RB---_0LC1RF_0LD1LC_1RE1LB_1RD0LF_0RB0RA
Rules (based on 1RB---_0LC1RF_0LD1LC_1RE1LB_1RD0RB_0RB0RA
)
last != 0 and rightmost_odd_idx > 0: apply_increment -- the usual Gray Code increment operation. last == 0 and rightmost_odd_idx_alt != -1 and rightmost_odd_idx != 0: apply_halve o apply_increment -- first, run an Increment operation, decreasing the last digit to fictitious value "-1"; then, delete the last digit. last == 0 and (rightmost_odd_idx <= 0) and grayval != "2^L - 1" and num_leading_zeros != 2: apply_halve o apply_weird_double_zero -- first, add two leading zeros, then increment the last leading zero, then delete the last digit For example: [2, 6, 12, 24, 48, 0] -> [0, 1, 2, 6, 12, 24, 48] grayval == "2^L - 1" and rightmost_odd_idx == 0 and last == "0" : apply_halve o apply_zero_D -- an overflow variant (see below) grayval == "2^L - 1" and rightmost_odd_idx == 0 and last == "2+" : apply_zero_D -- an overflow variant (see below) grayval == '2^L - 1' and L == 1: apply_leading_zero_increment o apply_add_one_zero o apply_overflow -- increment the leading digit, add leading zero, then add one leading zero, then increase the first non-zero digit and decrease the last digit. grayval == "0" and ((internal_zeros_len > 0) or (num_ending_zeros > 2) or (num_leading_zeros > 0)) : apply_halt if the halting condition isn't met, then the either of these ones happen: grayval == "0" and internal_zeros_len == 0 and rightmost_odd_idx == -1 and rightmost_odd_idx_alt == -1 and num_ending_zeros == 0 : apply_leading_zero_increment o apply_add_double_zero -- add two leading zeros, then increase the first non-zero digit and decrease the last digit. grayval == "0" and internal_zeros_len == 0 and rightmost_odd_idx == -1 and rightmost_odd_idx_alt == -1 and num_ending_zeros > 0 : apply_halve o apply_leading_zero_increment o apply_add_double_zero -- the same as above but delete the last digit afterward
The apply_zero_D
operation could be written as apply_increment_1N o apply_overflow
: increment the leading digit, add leading zero, then increase the first digit (newly added zero) and decrease the last digit.
"Iralic Orcora" family
1RB---_0LC1RD_0LE1RD_0RC0RA_0LF1LE_1RA1LC 1RB---_0RC1RF_0LD1RF_0LE1LD_1RA1LC_0RC0RA 1RB---_0LB1RC_0RD0RA_0LE1RC_0LF1LE_1RA1LD
Rules (based on 1RB---_0RC1RF_0LD1RF_0LE1LD_1RA1LC_0RC0RA
)
grayval == '2^L - 1' and L == 1: apply_init -- increment the only digit and add leading zero `gray-adic` == "2^L - 1" and rightmost_odd_idx == 0 and last == "2+" : apply_zero_increment -- increase the first digit by 2 (instead of more customary 1), add leading zero, decrement the last digit last == "2+" and rightmost_odd_idx > 0 : apply_increment last == '1' and grayval != '2^L - 1' and grayval != '0' : apply_halve_and_increment o apply_increment -- apply the usual Gray Code increment, then delete the last digit and increment the new last digit by 1. grayval == "0" and last %2 == 0 and ((internal_zeros_len == 0 and num_leading_zeros > 1) or internal_zeros_len > 0 or num_ending_zeros >= 3) : apply_halt if the halting condition isn't met, then the either of these ones happen: grayval == "0" and internal_zeros_len == 0 and rightmost_odd_idx == -1 and rightmost_odd_idx_alt == -1 and num_ending_zeros == 0 : apply_zero -- increment the first digit, decrement the last digit, add two leading zeros grayval == "0" and internal_zeros_len == 0 and rightmost_odd_idx == -1 and rightmost_odd_idx_alt == -1 and num_ending_zeros == 1 : apply_halve o apply_zero -- increment the first digit, decrement the last digit, add two leading zeros, erase the last digit (that is less than zero now) grayval == "0" and internal_zeros_len == 0 and rightmost_odd_idx == -1 and rightmost_odd_idx_alt == -1 and num_ending_zeros == 2 : apply_weird_halve_zero_variant -- erase two last digits (that are zero), increment the first digit and the new last digit, add two leading zeros
"Olaile Orcorb" family
1RB1LC_1RC---_0LD1RF_0LE1RD_0LA1LE_0RC0RB 1RB1LC_1RC---_0LD1RF_0LE1LE_0LA1LE_0RC0RB
Instead of a single Gray Code Increment, these TMs have two different increment rules: Excluding Increment and Shallow Increment. One can also analyze them as a traditional Gray Code Increment except with the parity of last digit switched.
Rules (based on 1RB1LC_1RC---_0LD1RF_0LE1LE_0LA1LE_0RC0RB
)
last == "0" and rightmost_odd_idx_alt != -1 and rightmost_odd_idx != 0 : apply_halve o apply_increment last != "0" and rightmost_odd_idx_alt > 0 and last %2 == 1 : apply_excluding_increment last == "2+" and last %2 == 0 : apply_shallow_increment grayval == "0" and all_even == 0 : apply_zero grayval == '2^L - 1' and L > 1 : apply_overflow o apply_zero_increment rightmost_odd_idx_alt == 0 and last == '1' : apply_overflow o apply_zero_increment grayval == "0" and last == "0" and ((`L %2` == 0 and num_ending_zeros == L) or (internal_zeros_len > 0) or (internal_zeros_len == 0 and num_leading_zeros != -1 and (num_leading_zeros >= 3 or num_ending_zeros >= 3))) : apply_halt if the halting condition isn't met, then this rule applies: L > 1 and grayval == "0" and internal_zeros_len == 0 and rightmost_odd_idx == -1 and rightmost_odd_idx_alt == -1 and num_ending_zeros > 0 : apply_halve o apply_zero
1RB1LC_1RC---_0LD1RE_0LA1LD_0RC1RF_0LF0RB
The rules aren't complete.
last == "0" and rightmost_odd_idx_alt != -1 and rightmost_odd_idx != 0 : apply_halve o apply_increment last != "0" and rightmost_odd_idx > 0 : apply_increment num_leading_zeros == 2 and last == "0" and all_even == 1 : apply_halve o apply_weird_double_zero -- first, add two leading zeros, then increment the last leading zero, then delete the last digit The conditions for these operations aren't described yet: apply_zero apply_halve o apply_zero apply_zero_variant o apply_smudge_internal_zeros apply_weird_double_zero o apply_halve_and_increment (a rare operation) apply_weird_double_zero apply_halt
1RB---_0LC1LB_1RE1LD_0LB1RF_1RD1RA_0RD0RE
This machine is obtained by adding a new state F to the halting config of Skelet 17. The F state mangles the left end of the tape and introduces a lot of chaos into tape evolution.
1RB---_0LC1RF_0LD1LC_1RE1LB_0RE1LA_0RB0RA
last == "0" and rightmost_odd_idx_alt != -1 and rightmost_odd_idx != 0 : apply_halve o apply_increment grayval == "2^L - 1" and rightmost_odd_idx == 0 and last == "0" : apply_halve o apply_zero_D grayval == "2^L - 1" and rightmost_odd_idx == 0 and last == "2+" : apply_zero_D last != "0" and rightmost_odd_idx > 0 : apply_increment grayval == "0" and last %2 == 0 and ((internal_zeros_len == 0 and num_leading_zeros > 1) or internal_zeros_len > 0 or num_ending_zeros >= 3) : apply_halt if the halting condition isn't met, then this rule applies: grayval == "0" and L > 1 and internal_zeros_len == 0 and rightmost_odd_idx == -1 and rightmost_odd_idx_alt == -1 and num_ending_zeros == 0 : apply_zero The condition for this operation isn't described yet: apply_halve o apply_zero
1RB---_0LC1RF_1RA1LD_0LE1RF_0LC1LE_0RD0RA
1RB---_0LC1RF_1RA1LD_0LE1RF_0LC1LE_0RD0RA 9 grayval == "2^L - 1" and rightmost_odd_idx == 0 and last == "2+" : apply_zero_D -- see above for description last == "2+" and rightmost_odd_idx > 0 : apply_increment last == '1' and grayval != '2^L - 1' and grayval != '0' : apply_halve_and_increment o apply_excluding_increment gray == "0" and `last %2` == 0 and ((internal_zeros_len == 0 and num_leading_zeros > 1) or internal_zeros_len > 0 or num_ending_zeros >= 3) : apply_halt If the halting condition isn't met: L > 1 and gray == "0" and internal_zeros_len == 0 and rightmost_odd_idx == -1 and rightmost_odd_idx_alt == -1 and num_ending_zeros == 0 : apply_zero L > 1 and gray == "0" and internal_zeros_len == 0 and rightmost_odd_idx == -1 and rightmost_odd_idx_alt == -1 and num_ending_zeros == 1 : apply_halve o apply_zero L > 1 and gray == "0" and internal_zeros_len == 0 and rightmost_odd_idx == -1 and rightmost_odd_idx_alt == -1 and num_ending_zeros == 2 : apply_weird_halve_zero The conditions for these two very rare operations aren't described yet: apply_weird_incrementing_halve apply_halve_and_increment o apply_zero_D
1RB---_0RC1RB_1LD1RE_1LE---_0RB1LF_0LE0LD
1RB1LC_1RC---_0LD1RE_0LA1LD_0RF0RB_0LC1RE
This TM is notable, as I was unable to found any config where it would halt.
last == "0" and (rightmost_odd_idx <= 0) and grayval != "2^L - 1" and num_leading_zeros != 2 : apply_halve_and_increment last == "2+" and last %2 == 0 : apply_shallow_increment last == "2+" and last %2 == 1 and gray != "0" : apply_excluding_increment last == "2+" and last %2 == 1 and gray == "0" : apply_zero grayval == '2^L - 1' and L > 1 : apply_halve o apply_weird_one_zero o apply_increment_D_even o apply_weird_double_zero last == '1' and grayval == '0' : apply_smudge_internal_zeros o apply_zero rightmost_odd_idx_alt == 0 and last == '1' : apply_halve o apply_weird_one_zero o apply_increment_D_even o apply_weird_double_zero The conditions for these operations aren't described yet: apply_weird_incrementing_halve o apply_halve apply_smudge_internal_zeros o apply_unsafe_increment_1N apply_halve o apply_increment o apply_excluding_increment
1RB1LC_1RC0RF_0LD1RE_0LA1LD_0RC0RB_0RE---
The rules aren't complete.
last == "0" and rightmost_odd_idx_alt != -1 and rightmost_odd_idx != 0 : apply_halve o apply_increment grayval == "2^L - 1" and rightmost_odd_idx == 0 and last == "0" : apply_halve o apply_zero o apply_overflow last != "0" and rightmost_odd_idx > 0 : apply_increment grayval == '2^L - 1' and L > 1 : apply_halve o apply_zero o apply_overflow The conditions for these operations aren't described yet: apply_zero apply_zero_variant o apply_reverse_smudge_internal_zeros apply_halve o apply_zero apply_halt
2-state, 5-symbol dekaheptoids
The 1RB3RB1LB---2RB_2LA1RA4LB2LA2RA
(bbch) machine encodes digits as separated by . For example, [x,y,z] is represented as . Note this machine is mirrored (z is the most significant digit while x is the least significant).
The analysis by @dyuan01 is available here.