HvdH machine lemma GL.ftlP_all (`convL` and `FtL` programs (parametric in the `fermatW` program))
ProvedNLogN.GL.ftlP_allThe following holds (Lean statement, in the scope of module NLogN.HGl7):
theorem NLogN.GL.ftlP_all (fw : LProg2 M Ctx PreW (fermatW q) CW) (hfw : FwOK fw) {m Φm : ℕ}
(hM : MulBnd M m Φm) (s : IState HS) (hC : Ctx s) (U : List (ℤ × ℤ))
(R RC LN LT LP : List Item) (T Q : ℕ)
(hU : s.G gD = gints U ++ R) (hCH : s.G gCH = gints (chirpL q) ++ RC) (hUl : U.length = T)
(hAl : (chirpL q).length = T) (hN : s.G gPN = .int T :: LN)
(hT : s.G gPT = .int (2 ^ (q.p + q.logT)) :: LT) (hP : s.G gPP = .int (2 ^ q.p) :: LP)
(hUb : GB m U) (hAb : GB m (chirpL q)) (hPre : PreW (ftlV q U) (chirpL q))
(hWl : (fermatW q (ftlV q U) (chirpL q)).length = T)
(hWb : GB Q (fermatW q (ftlV q U) (chirpL q))) (hCb : GB m (convL q (ftlV q U) (chirpL q)))
(hmQ : 2 * m + 1 ≤ Q) (hk : q.p + q.logT + 1 ≤ Q) (hNQ : zsz ((2 * T : ℕ) : ℤ) ≤ Q) :
(ftlP fw).run s = s.upd gD (gints (FtL q U) ++ R) ∧
(ftlP fw).ok M s ∧
(ftlP fw).cost M s ≤ CW + 8 * T * Φm + 1000000 * (T + 1) * (Q + 2)
Context. The lemma belongs to the part convL and FtL programs (parametric in the fermatW program): * convP fw: gD : gints U ++ R, gZA : gints A ++ R₁ ↦ gD : gints (convL q U A) ++ R,
gZA : R₁ (transfers to the abstract fermatW program fw, then tdiv 2^(p+logT)).
ftlP fw:gD : gints U ++ R↦gD : gints (FtL q U) ++ Rwith the chirp tablechirpL qkept ongCH.
Formalization Note. This is a lemma of the Lean development NLogN, a multitape-Turing-machine implementation of the Harvey–van der Hoeven integer multiplication algorithm, used in the proof of NLogN.FIN.theorem_1_1_nlogn : IntMul.MulTimeBound fun n => n * Real.log n. All names refer to the definition bundles IntMul_HvdH_M_Defs1–IntMul_HvdH_M_Defs8 (namespace NLogN), built on the platform model Def_IntMul_MultitapeModel and the published reference Def_IntMul_HvdH_MachineRef. The machine layer: IState HS is a state of 64 item stacks; RM programs have a semantics p.run s, a definedness predicate p.ok M s and a cost p.cost M s relative to a multiplication spec M : MulSpec; zsz z is the bit length of .
-- Harvey–van der Hoeven multitape-TM development (NLogN), generated by skeleton subtraction.
import Definitions.Def_IntMul_HvdH_M_Defs8
set_option autoImplicit false
set_option relaxedAutoImplicit false
set_option maxHeartbeats 1000000
set_option linter.unusedSimpArgs false
open NLogN
open NLogN.GL
open IntMul NLogN IntMul.HvdH IntMul.HvdH.Ref
variable {M : MulSpec} {Ctx : IState HS → Prop} {PreW : List (ℤ × ℤ) → List (ℤ × ℤ) → Prop}
{q : Params} {CW : ℕ}
set_option maxHeartbeats 4000000
theorem NLogN.GL.ftlP_all (fw : LProg2 M Ctx PreW (fermatW q) CW) (hfw : FwOK fw) {m Φm : ℕ}
(hM : MulBnd M m Φm) (s : IState HS) (hC : Ctx s) (U : List (ℤ × ℤ))
(R RC LN LT LP : List Item) (T Q : ℕ)
(hU : s.G gD = gints U ++ R) (hCH : s.G gCH = gints (chirpL q) ++ RC) (hUl : U.length = T)
(hAl : (chirpL q).length = T) (hN : s.G gPN = .int T :: LN)
(hT : s.G gPT = .int (2 ^ (q.p + q.logT)) :: LT) (hP : s.G gPP = .int (2 ^ q.p) :: LP)
(hUb : GB m U) (hAb : GB m (chirpL q)) (hPre : PreW (ftlV q U) (chirpL q))
(hWl : (fermatW q (ftlV q U) (chirpL q)).length = T)
(hWb : GB Q (fermatW q (ftlV q U) (chirpL q))) (hCb : GB m (convL q (ftlV q U) (chirpL q)))
(hmQ : 2 * m + 1 ≤ Q) (hk : q.p + q.logT + 1 ≤ Q) (hNQ : zsz ((2 * T : ℕ) : ℤ) ≤ Q) :
(ftlP fw).run s = s.upd gD (gints (FtL q U) ++ R) ∧
(ftlP fw).ok M s ∧
(ftlP fw).cost M s ≤ CW + 8 * T * Φm + 1000000 * (T + 1) * (Q + 2) := by sorry