Skip to content
Browse chapters
Imports

Executable post-transition verifier-circuit tail

This module specializes the continuous unary tail controller to the actual Cook--Levin verifier and identifies its output with the complete circuit encoding suffix after the transition phase.

namespace CLRS.Chapter34.Turing.CookLevinnoncomputable sectionopen StateTransitionopen PolyBuilder

Exact encoded circuit suffix after all adjacent-row transitions.

def verifierCircuitTailGateStream {Γ : Type} {L : Language Γ} (W : VerifierWitness L) (x : List Γ) : List CircuitSym := verifierInitialBoundaryGateStream W x ++ verifierInputBoundaryGateStream W x ++ verifierAcceptingBoundaryGateStream W x ++ verifierFinalConjunctionGateStream W x ++ .outputMark :: encNat (verifierCircuit W x).output

Canonical runtime operands for every post-transition verifier phase.

The compiled operand script denotes the exact semantic verifier tail.

The already frozen transition prefix followed by the generated tail is the complete verifier-circuit encoding, byte for byte.

theorem verifierCircuitTransitionPrefix_append_tail {Γ : Type} {L : Language Γ} (W : VerifierWitness L) (x : List Γ) : verifierCircuitTransitionPrefix W x ++ verifierCircuitTailGateStream W x = encodeCircuit (verifierCircuit W x) := by have hgates : ((((verifierTransitions W x).builder.gates ++ (verifierInitialBoundaryGateTrace W x).gates) ++ verifierInputBoundaryGateTrace W x) ++ verifierAcceptingBoundaryGateTrace W x) ++ (CircuitBuilder.conjunctionGateTrace (verifierAcceptingBoundary W x).builder.gates.length (verifierConstraintWires W x)).gates = (verifierCircuit W x).gates := by calc _ = (((verifierInitialBoundary W x).builder.gates ++ verifierInputBoundaryGateTrace W x) ++ verifierAcceptingBoundaryGateTrace W x) ++ (CircuitBuilder.conjunctionGateTrace (verifierAcceptingBoundary W x).builder.gates.length (verifierConstraintWires W x)).gates := by rw [verifierInitialBoundary_gates_eq] _ = ((verifierInputBoundary W x).builder.gates ++ verifierAcceptingBoundaryGateTrace W x) ++ (CircuitBuilder.conjunctionGateTrace (verifierAcceptingBoundary W x).builder.gates.length (verifierConstraintWires W x)).gates := by rw [verifierInputBoundary_gates_eq] _ = (verifierAcceptingBoundary W x).builder.gates ++ (CircuitBuilder.conjunctionGateTrace (verifierAcceptingBoundary W x).builder.gates.length (verifierConstraintWires W x)).gates := by rw [verifierAcceptingBoundary_gates_eq] _ = (verifierCircuit W x).gates := (verifierCircuit_gates_eq_finalConjunction W x).symm have hstream := congrArg (List.flatMap encodeCircuitGate) hgates simp only [List.flatMap_append, List.append_assoc] at hstream rw [verifierCircuitTransitionPrefix_eq] simp only [verifierCircuitTailGateStream, encodeCircuit, verifierInitialBoundaryGateStream, verifierInputBoundaryGateStream, verifierAcceptingBoundaryGateStream, verifierFinalConjunctionGateStream, List.append_assoc] simpa only [List.append_assoc] using congrArg (fun gates => encNat (verifierCircuit W x).inputCount ++ gates ++ (.outputMark :: encNat (verifierCircuit W x).output)) hstream

One fixed program computes the exact complete post-transition suffix.

The specialized verifier tail inherits the generic quadratic runtime envelope in its exact combined operand encoding.

theorem verifierCircuitTail_steps_le {Γ : Type} {L : Language Γ} (W : VerifierWitness L) (x : List Γ) : affineVerifierTailRevSteps (compileVerifierTailScript W x) ≤ 5000 * (encodeAffineVerifierTailScript (compileVerifierTailScript W x)).length ^ 2 + 100 := affineVerifierTailRev_steps_le (compileVerifierTailScript W x)
endend CLRS.Chapter34.Turing.CookLevin