Imports
Affine wire channels of verifier-input arms
Two of the four wire blocks in every candidate-length arm are singleton affine progressions: its selected height bit advances by one, and its blank separator cell advances by one input-stack symbol width. This module derives their exact input-length polynomials and compiles both channels from the raw word.
noncomputable sectionnamespace CLRS.Chapter34.Turing.CookLevinopen PolyBuilderFirst public-input height wire, corresponding to candidate length zero.
noncomputable def verifierInputArmHeightBasePolynomial
{Γ : Type} {L : Language Γ} (W : VerifierWitness L) : Polynomial Nat :=
let tm := W.machine.tm
Polynomial.C
(1 + (labelCount tm + 1) + stateCount tm +
arithmeticStackOrdinal tm tm.k₀ + 1) +
Polynomial.C (cfgStackBitOffsetHeightCoeff tm tm.k₀) *
verifierHeight W + Polynomial.X
@[simp] theorem verifierInputArmHeightBasePolynomial_eval
{Γ : Type} {L : Language Γ} (W : VerifierWitness L) (n : Nat) :
(verifierInputArmHeightBasePolynomial W).eval n =
1 + (labelCount W.machine.tm + 1) + stateCount W.machine.tm +
cfgStackBitOffset W.machine.tm ((verifierHeight W).eval n)
W.machine.tm.k₀ + (1 + n) := by
rw [cfgStackBitOffset_eq_affine]
simp [verifierInputArmHeightBasePolynomial,
Polynomial.eval_add, Polynomial.eval_mul]
ringHeight-wire singleton value for one candidate arm.
def verifierInputArmHeightWire
{Γ : Type} {L : Language Γ} (W : VerifierWitness L)
(input : List Γ)
(arm : Fin (W.certificateBound.eval input.length + 1)) : Nat :=
1 + (labelCount W.machine.tm + 1) + stateCount W.machine.tm +
cfgStackBitOffset W.machine.tm ((verifierHeight W).eval input.length)
W.machine.tm.k₀ + (arm.val + 1 + input.length)Blank separator-cell singleton value for one candidate arm.
def verifierInputArmSeparatorWire
{Γ : Type} {L : Language Γ} (W : VerifierWitness L)
(input : List Γ)
(arm : Fin (W.certificateBound.eval input.length + 1)) : Nat :=
1 + (labelCount W.machine.tm + 1) + stateCount W.machine.tm +
cfgStackBitOffset W.machine.tm ((verifierHeight W).eval input.length)
W.machine.tm.k₀ +
(((verifierHeight W).eval input.length + 1) +
((verifierInputCode W none).val +
((reachableAlphabet W.machine.tm W.machine.tm.k₀).card + 1) *
arm.val))Raw-input affine stream of all height-wire operands.
def verifierInputArmHeightWireFrames
{Γ : Type} {L : Language Γ} (W : VerifierWitness L)
(input : List Γ) : List UnaryFrameSym :=
exactPolynomialAffineUnaryProgressionFrameStream
(verifierInputArmHeightBasePolynomial W) 1
(verifierInputArmCountPolynomial W) inputRaw-input affine stream of all blank separator-cell operands.
def verifierInputArmSeparatorWireFrames
{Γ : Type} {L : Language Γ} (W : VerifierWitness L)
(input : List Γ) : List UnaryFrameSym :=
exactPolynomialAffineUnaryProgressionFrameStream
(verifierInputSeparatorBasePolynomial W)
(Polynomial.C
((reachableAlphabet W.machine.tm W.machine.tm.k₀).card + 1))
(verifierInputArmCountPolynomial W) inputThe height channel has exactly the pointwise arithmetic coordinates.
theorem verifierInputArmHeightWireFrames_eq_encode
{Γ : Type} {L : Language Γ} (W : VerifierWitness L)
(input : List Γ) :
verifierInputArmHeightWireFrames W input =
encodeUnaryFrame (List.ofFn fun arm :
Fin (W.certificateBound.eval input.length + 1) =>
verifierInputArmHeightWire W input arm) := by
unfold verifierInputArmHeightWireFrames
exactPolynomialAffineUnaryProgressionFrameStream
affineUnaryProgressionFrameStream affineUnaryProgressionValues
exactPolynomialAffineUnaryProgression
rw [affineUnaryProgressionValuesFrom_eq_ofFn]
simp only [verifierInputArmCountPolynomial_eval]
apply congrArg encodeUnaryFrame
apply List.ofFn_inj.mpr
funext arm
simp only [Fin.val_cast]
simp [verifierInputArmHeightWire]
omegaThe separator-cell channel has exactly the pointwise arithmetic coordinates.
theorem verifierInputArmSeparatorWireFrames_eq_encode
{Γ : Type} {L : Language Γ} (W : VerifierWitness L)
(input : List Γ) :
verifierInputArmSeparatorWireFrames W input =
encodeUnaryFrame (List.ofFn fun arm :
Fin (W.certificateBound.eval input.length + 1) =>
verifierInputArmSeparatorWire W input arm) := by
unfold verifierInputArmSeparatorWireFrames
exactPolynomialAffineUnaryProgressionFrameStream
affineUnaryProgressionFrameStream affineUnaryProgressionValues
exactPolynomialAffineUnaryProgression
rw [affineUnaryProgressionValuesFrom_eq_ofFn]
simp only [verifierInputArmCountPolynomial_eval]
apply congrArg encodeUnaryFrame
apply List.ofFn_inj.mpr
funext arm
simp only [Fin.val_cast]
simp [verifierInputArmSeparatorWire,
verifierInputSeparatorBasePolynomial_eval]
ringThe arithmetic arm wire list exposes the two compiled singleton channels at its head and after its growing separator-NOT prefix.
theorem verifierInputArmArithmeticWires_eq_channels
{Γ : Type} {L : Language Γ} (W : VerifierWitness L)
(input : List Γ)
(arm : Fin (W.certificateBound.eval input.length + 1)) :
verifierInputArmArithmeticWires W input arm =
[verifierInputArmHeightWire W input arm] ++
List.ofFn (fun prefixIndex : Fin arm.val =>
(verifierInitialBoundaryEndPolynomial W).eval input.length +
prefixIndex.val) ++
[verifierInputArmSeparatorWire W input arm] ++
List.ofFn (fun index : Fin input.length =>
1 + (labelCount W.machine.tm + 1) + stateCount W.machine.tm +
cfgStackBitOffset W.machine.tm
((verifierHeight W).eval input.length) W.machine.tm.k₀ +
(((verifierHeight W).eval input.length + 1) +
((verifierInputCode W (some (input.get index))).val +
((reachableAlphabet W.machine.tm W.machine.tm.k₀).card + 1) *
(arm.val + 1 + index.val)))) := by
rflFixed polynomial-time TM2 for the height-wire channel.
noncomputable def verifierInputArmHeightWireFrames_computableInPolyTime
{Γ : Type} {L : Language Γ} (W : VerifierWitness L) :
_root_.Turing.TM2ComputableInPolyTime id id
(verifierInputArmHeightWireFrames W) := by
letI : Fintype Γ := W.alphabetFintype
exact exactPolynomialAffineUnaryProgressionFrameStream_computableInPolyTime
(verifierInputArmHeightBasePolynomial W) 1
(verifierInputArmCountPolynomial W)Fixed polynomial-time TM2 for the blank separator-cell channel.
noncomputable def verifierInputArmSeparatorWireFrames_computableInPolyTime
{Γ : Type} {L : Language Γ} (W : VerifierWitness L) :
_root_.Turing.TM2ComputableInPolyTime id id
(verifierInputArmSeparatorWireFrames W) := by
letI : Fintype Γ := W.alphabetFintype
exact exactPolynomialAffineUnaryProgressionFrameStream_computableInPolyTime
(verifierInputSeparatorBasePolynomial W)
(Polynomial.C
((reachableAlphabet W.machine.tm W.machine.tm.k₀).card + 1))
(verifierInputArmCountPolynomial W)end CLRS.Chapter34.Turing.CookLevin