Skip to content
Browse chapters
Imports

Row-level source formula for one dispatch-mux label

The final label reassembler must emit the source accepted by the generic affine mux controller. This module unfolds that source to the exact bytes a local TM2 must write. The empty-coordinate case emits one header-only segment; otherwise the first coordinate carries the header flag and every remaining coordinate emits a header-free singleton segment.

noncomputable sectionnamespace CLRS.Chapter34.Turing.CookLevinopen PolyBuilder

Explicit bytes of one nonempty singleton mux segment.

def affineMuxInvocationSingletonSourceFrames (selector : Nat) (emitsHeader : Bool) (frame : AffineMuxFinPairFrame) : List UnaryFrameSym := encodeUnaryFrame [selector, frame.selectorNot, if emitsHeader then 1 else 0] ++ encodeUnaryFrame [frame.whenTrue, frame.whenFalse, frame.trueArm] ++ [.frameEnd]

The degenerate empty mux is a single header row followed immediately by the segment boundary.

A singleton segment expands to one explicit header triple, one explicit data triple, and its physical segment boundary.

private theorem affineMuxInvocationSingletonSegments_tail_sourceFrames (selector : Nat) (frames : List AffineMuxFinPairFrame) : (frames.map (affineMuxInvocationSingletonSegment selector false)).flatMap AffineMuxInvocationProgression.sourceFrames = frames.flatMap (affineMuxInvocationSingletonSourceFrames selector false) := by induction frames with | nil => rfl | cons frame frames ih => simp only [List.map_cons, List.flatMap_cons] rw [affineMuxInvocationSingletonSegment_sourceFrames, ih]

Exact row program for the singleton-segment source of one mux view.

def transitionDispatchMuxInvocationLabelSourceRows (selector : Nat) : List AffineMuxFinPairFrame → List UnaryFrameSym | [] => encodeUnaryFrame [selector, 0, 1] ++ [.frameEnd] | frame :: frames => affineMuxInvocationSingletonSourceFrames selector true frame ++ frames.flatMap (affineMuxInvocationSingletonSourceFrames selector false)

The abstract segment source of one reconstructed label is exactly the explicit empty/first/rest row program above.

Consequently the complete verifier dispatch source is a seed-major, label-major concatenation of the explicit row programs.

theorem verifierTransitionDispatchMuxDescriptorInvocationSourceFrames_eq_labelRows {Γ : Type} {L : Language Γ} (W : VerifierWitness L) (input : List Γ) : verifierTransitionDispatchMuxDescriptorInvocationSourceFrames W input = (verifierTransitionRowSeeds W input).flatMap fun seed => (transitionDispatchMuxDescriptorInvocationViews W.machine.tm seed).flatMap fun view => transitionDispatchMuxInvocationLabelSourceRows view.selector view.frames := by rw [ verifierTransitionDispatchMuxDescriptorInvocationSourceFrames_eq_reassembledViews] apply List.flatMap_congr intro seed hseed apply List.flatMap_congr intro view hview exact view.sourceFrames_eq_rows
end CLRS.Chapter34.Turing.CookLevin