The zero-extending increment #
⚠️ Unreviewed by Bolton
TM.binarySuccTM increments the number a tape holds: a carry running off the end appends a new
high 1, which is what a numeral needs. TM.binaryBumpTM runs the same scan with that one write
changed to a 0, which increments the string a tape holds — one place wider each time it
overflows.
The strings it steps through, from the empty one, are every bitstring in order of length:
[], 0, 1, 00, 10, 01, 11, 000, … So a machine enumerating the witnesses of a
bounded existential can carry the witness on a tape and advance it with this, instead of decoding
one from a counter.
Main results #
TM.binaryBumpTM— the machine, andTM.binaryBumpTimeits exact running timeTM.binaryBumpTM_reachesIn_frame— exact execution with a full tape frameTM.binaryBumpTM_hoareTime_frame— its compositional time contractTM.binaryBumpTM_isTransducer— the output head never moves left
The exact running time is at most twice the string's length, plus two.
The zero-extending increment, executed exactly. Starting on a rewound bit string,
binaryBumpTM halts after exactly binaryBumpTime bits transitions with the next string in the
enumeration. Input, output, and every unrelated work tape are preserved exactly.
Time-bounded compositional form of TM.binaryBumpTM_reachesIn_frame.
binaryBumpTM never moves the output head left, so it is safe in one-way-output,
space-bounded compositions.