Imports
Polynomial-time packaging of the optional conjunction-family controller
noncomputable sectionnamespace CLRS.Chapter34.Turing.PolyBuilderThe compiled controller computes the reversed optional-family gate stream within its established quadratic bound.
noncomputable def affineOptionalConjunctionFamilyRev_computableInPolyTime :
_root_.Turing.TM2ComputableInPolyTime
encodeAffineOptionalConjunctionFamily id
(fun frames : List (Option AffineConjunctionFrame) =>
(affineOptionalConjunctionFamilyGateStream frames).reverse) where
tm := compile affineOptionalConjunctionFamilyRevProgram
inputAlphabet := Equiv.refl _
outputAlphabet := Equiv.refl _
time := 1005 * Polynomial.X ^ 2 + 2
outputsFun := fun frames => by
have builderRun := affineOptionalConjunctionFamily_run frames []
have compiledRun := compile_evalsToInTime
affineOptionalConjunctionFamilyRevProgram builderRun
rw [show affineOptionalConjunctionFamilyLoopCfg
(encodeAffineOptionalConjunctionFamily frames) [] =
initialCfg affineOptionalConjunctionFamilyRevProgram
(encodeAffineOptionalConjunctionFamily frames) by rfl] at compiledRun
have machineRun : _root_.StateTransition.EvalsToInTime
(compile affineOptionalConjunctionFamilyRevProgram).step
(_root_.Turing.initList
(compile affineOptionalConjunctionFamilyRevProgram)
(encodeAffineOptionalConjunctionFamily frames))
(some (_root_.Turing.haltList
(compile affineOptionalConjunctionFamilyRevProgram)
(affineOptionalConjunctionFamilyGateStream frames).reverse))
(affineOptionalConjunctionFamilyRevSteps frames) := by
simpa only [encodeCfg_initialCfg, encodeCfg_haltCfg,
List.append_nil] using compiledRun
have htime : affineOptionalConjunctionFamilyRevSteps frames ≤
(1005 * Polynomial.X ^ 2 + 2).eval
(encodeAffineOptionalConjunctionFamily frames).length := by
simpa only [Polynomial.eval_add, Polynomial.eval_mul,
Polynomial.eval_pow, Polynomial.eval_X, Polynomial.eval_ofNat] using
affineOptionalConjunctionFamilyRev_steps_le frames
have boundedRun : _root_.StateTransition.EvalsToInTime
(compile affineOptionalConjunctionFamilyRevProgram).step
(_root_.Turing.initList
(compile affineOptionalConjunctionFamilyRevProgram)
(encodeAffineOptionalConjunctionFamily frames))
(some (_root_.Turing.haltList
(compile affineOptionalConjunctionFamilyRevProgram)
(affineOptionalConjunctionFamilyGateStream frames).reverse))
((1005 * Polynomial.X ^ 2 + 2).eval
(encodeAffineOptionalConjunctionFamily frames).length) :=
⟨machineRun.toEvalsTo, machineRun.steps_le_m.trans htime⟩
simpa [_root_.Turing.TM2OutputsInTime, compile] using boundedRunForward optional conjunction-family gate generation in polynomial time.
noncomputable def
affineOptionalConjunctionFamilyGateStream_computableInPolyTime :
_root_.Turing.TM2ComputableInPolyTime
encodeAffineOptionalConjunctionFamily id
affineOptionalConjunctionFamilyGateStream := by
let composed :=
_root_.Turing.TM2Comp.TM2ComputableInPolyTime.comp_scratch
affineOptionalConjunctionFamilyRev_computableInPolyTime
(reverse_computableInPolyTime (Γ := CircuitSym))
simpa [Function.comp_def] using Classical.choice composedend CLRS.Chapter34.Turing.PolyBuilder