Building the pair the matrix machine reads #
⚠️ Unreviewed by Bolton
TM.pairInputWorkTM emits pair first second, reading the first component off a work tape and
the second off its input tape. The enumerator needs pair x w with the witness second, so the
witness has to be what the emitter reads as an input — which TM.retargetInput arranges, since it
runs a machine with its input supplied on the last work tape. TM.retargetOutput then sends the
emitted pair to a work tape rather than the real output, which a loop body cannot write to.
The emitter's own contract says only that the pair appears; it says nothing about the tapes it
read. PolyExists.pairFrame_hoareTime restates its exact-execution theorem as the contract that
does: both sources come back with their cells intact and their heads left past the content, which
the rewind that follows the stage puts back.
Main results #
PolyExists.pairFrame_hoareTime— the emitter's contract, framedPolyExists.emitCore,PolyExists.emitTM— the emitter as a stage of the enumeratorPolyExists.emitCore_hoareTime— the stage's contract, on the three tapes it usesPolyExists.emitTM,PolyExists.emitTM_hoareTime— the same, placed in the layout
The pair emitter, framed. Beyond the pair, this records what the sources look like when the stage ends: their cells are untouched and the first component is still readable, its head having been left past the content.
The emitter as a three-tape machine: the input copy, the witness it reads as an input, and the tape the pair is written to.
Equations
Instances For
The emitter stage's contract. Started with the input copy rewound, the witness in virtual-input shape, and the target tape blank, it leaves the pair on the target tape and both sources with their cells intact.
The emitter placed in the enumerator's layout: it uses the first three tapes, which is where the input copy, the witness, and the pair sit.
Equations
Instances For
A tape of the layout is outside the emitter's block exactly when its index is at least three.
The placed emitter's contract. The three tapes it uses come back as
PolyExists.emitCore_hoareTime describes them; every other tape of the layout is untouched.