Chaining a sequence of stages through pinned tape states #
A machine assembled from many subroutines is a TM.bigSeqTM of stages, each carrying the tape
state from one pinned configuration to the next. TM.bigSeqTM_hoareTime already chains stages,
but only through the EmitPred state shape, whose output component is a written list. A stage
that leaves a counter tape half-scanned, or two tallies at different values, does not fit that
shape.
The rule below chains through arbitrary pinned states — a fixed input tape, a family of work
banks, and a family of output tapes — asking only that every pinned tape be Parked, which is
what makes the phase transitions between stages no-ops.
Main results #
TM.bigSeqTM_hoareTime_pinned_gen— the chain rule for arbitrary pinned tape states, input tape includedTM.bigSeqTM_hoareTime_pinned— the same with a fixed input tape
Chaining stages through pinned tape states. Stage k carries the pinned state k to the
pinned state k + 1; the fold carries state 0 to state ms.length. Every pinned tape is
required Parked, which makes the phase transition between consecutive stages a no-op.
The input tape is indexed too. A stage may move the input head — a rewind does — and then the next stage's precondition names a different input tape, so a single fixed one will not do.
The chain rule with a fixed input tape, the common case: no stage moves the input head.