Unilateral Bouncers: principle
This attempts to decide [Family] Unilateral bouncers.
The principle is inspired by the former description of unilateral bouncers as “[…] each successive bounce can be inductively described from the previous ones.”
To decide a machine we have an observer follow along with a run of it and try to extract the tape segments and states that we need to inductively proof that the machine never halts.
E.g. If s, i, h are tape segments and X, Y states and we find the rules:
(i) Xh turns into iYh
(ii) iYh turns into Yi
(iii) sY turns into sX
(iv) Xi turns into iX
then starting from sXh we get sXh → siYh → sYih → sXih → siXh → … → siiXh → … → siiiXh → … and can proof by induction that we get all s(i^n)Xh and thus never halt.
To show that the rules always work the machine isn’t allowed to leave the segment that it is currently transforming, i.e. Xi has to be converted into iX without leaving the i part of the tape.
To detect crablike traversing of the increment segment we allow for a buffer b in the detection:
sbXh → siYbh → sYbih → sbXih → sibXh → … → siibXh → … → siiibXh → …
now the rules work as long as e.g. bXi is converted into ibX without leaving the i or b part or the tape.
And the buffer and increment can be different for the left and right movement:
sbXh → siYph → sYpjh → sbXjh → sibXh → … → siibXh → … → siiibXh → …
Once s,h,i,j,b,p,X,Y are defined and the conversions observed (without leaving the relevant tape segment) the decider has found a unilateral bouncer. If an attempt to define the tape segments and states doesn’t lead to the correct conversions we continue the run and try again with new definitions.
Growth direction
The observer only looks for unilateral bouncers that grow to the right. A second observer could be written to find those that grow to the left, but that means any changes have to be made in two places. Mashing them together seems unwise as it would complicate the proof and be prone to errors.
We can find the left-growers by inverting the machines from the seed database before simulating them, i.e. switch all L transitions to R transitions and vice versa. For left-growers that gives us a symmetric machine that grows to the right and can be detected.
Decider examples and counterexamples
- Examples: #508512, #81882, #7251812, see tests for more
- Counterexamples: see tests
#7159661 and #5030335 are examples of machines that take 2 bounces to repeat their patterns. These cases are not detected by this decider.
Decider code
https://github.com/Iijil1/stuff/blob/main/main.go
Decider tests
https://github.com/Iijil1/stuff/blob/main/main_test.go
Results
110570 Unilateral Bouncers that grow to the left
110781 Unilateral Bouncers that grow to the right
Total: 221351 decided
Database subset of application
11/06/22: I have run the decider on all undecided machines remaining in the seed database, that means 1538612 machines were tested. This was done in two runs, one looking for unilateral bouncers that grow to the right, the other looking for those growing to the left.
Decider correctness
It should be relatively straightforward to proof this decider correct. See this outline for the form the proof could take.