Parts of the witness-enumerating machine #
⚠️ Unreviewed by Bolton
The machine that will witness polyExistsClass PSPACE ⊆ PSPACE copies its input onto a work
tape, then loops over witnesses, building pair x w and running the matrix machine on it. This
file records the window contracts of the individual parts, obtained from their existing time
contracts by TM.keepsWindowOn_of_haltsIn — no new tape analysis is needed for any of them.
Main results #
TM.copyInputToOutputTM_keepsWindowOn— the input-to-output copy stays inside a linear windowTM.copyInputToWork_keepsWindow— and so does its retargeting onto a work tapeTM.resetTapes_keepsWindowOn— the clear-scratch stage keeps a windowTM.pairEmitPre,TM.pairInputWork_keepsWindowOn— and so does the pair emitterTM.binarySucc_keepsWindowOn— and the counter incrementbump_eq_bumpLE— the witness-advancing machine computes the witness enumeration's stepTM.binaryBump_keepsWindowOn— and it keeps a window
The input-to-output copy keeps a linear window. Started on its initial configuration it
halts in |x| + 2 steps, and a head moves at most one cell per step, so nothing travels past
cell |x| + 2.
Redirecting that copy onto a work tape keeps a window too. This is the stage that puts a copy of the real input where the pair emitter can delimit it.
The clear-scratch stage keeps a window. TM.resetTapesTM blanks its targets regardless of
their contents, in time linear in the wipe height and the number of targets; converting its
halting bound gives the window directly. This is the stage that makes a loop body robust enough
for TM.seqTM_keepsWindow_of_post.
The pair emitter keeps a window. Its own precondition parks the input and output tapes at
cell one but says nothing about how far the other work heads have travelled, so pairEmitPre
adds that bound; everything else comes from the emitter's halting time.
The counter increment keeps a window. TM.binarySuccTM advances the little-endian
counter that carries the witness; its framed contract already pins every tape, so the window
follows from the head bounds and its running time.
The witness-advancing machine keeps a window. Like the counter increment beside it, its framed contract pins every tape, so the window follows from the head bounds and its running time.
The witness-advancing machine computes the enumeration's step. BinaryBump.bump is
defined on the tape's bit string and bumpLE on the witness the counter denotes; they are the
same function, which is what lets dropTop_succ serve as the loop invariant of a machine that
carries its witness on a tape.