mulBody_runs (KFM 6: the Schönhage–Strassen FM as a `MulOK` multiplication procedure)
ProvedNLogN.KFM.mulBody_runsThe following holds (Lean statement, in the scope of module Solutions.KFMMul):
theorem NLogN.KFM.mulBody_runs (pF pD pT pP : Fin P) (hPF : iprog pF = fmBody pF pD pT pP)
(hPD : iprog pD = difBody pD) (hPT : iprog pT = ditBody pT) (hPP : iprog pP = pow2Body pP)
(s : IState NS) (a b : ℤ) (LA : List Item) (hA : s.G ARG = .int a :: .int b :: LA) :
IRuns I iprog (mulBody pF pP) s (s.upd ARG (.int (a * b) :: LA))
(mulCost (zsz a + zsz b))
Context. The lemma belongs to the part KFM 6: the Schönhage–Strassen FM as a MulOK multiplication procedure.
Formalization Note. This lemma belongs to the item-language (IL) layer of the integer-multiplication-kappa campaign: tape-level programs (register programs over 64 item stacks of the NLogN multitape framework, definition bundles IntMul_HvdH_M_Defs1–IntMul_HvdH_M_Defs8) that implement the data-movement primitives of the OpenAI preprint Integer multiplication below (field moves, row split/merge, shifts, the uniform Proposition 11 interchange, Lemma 12 with fine -per-element costs, Gaussian record primitives, Proposition 14 pieces) with exact list denotations from the array-model bundles IntMul_Kappa_K_Defs* and explicit cost bounds. All names refer to the definition bundles up to IntMul_Kappa_K_Defs18.
-- OpenAI-preprint / κ-improvement development (integer-multiplication-kappa), generated by skeleton subtraction.
import Definitions.Def_IntMul_Kappa_K_Defs18
set_option autoImplicit false
set_option relaxedAutoImplicit false
set_option maxHeartbeats 1000000
set_option linter.unusedSimpArgs false
set_option linter.unusedVariables false
set_option linter.unusedSectionVars false
set_option linter.style.longLine false
open NLogN
open NLogN.KFM
open IntMul NLogN
variable {P : ℕ} {I : List Sym} {iprog : Fin P → IStmt NS P}
theorem NLogN.KFM.mulBody_runs (pF pD pT pP : Fin P) (hPF : iprog pF = fmBody pF pD pT pP)
(hPD : iprog pD = difBody pD) (hPT : iprog pT = ditBody pT) (hPP : iprog pP = pow2Body pP)
(s : IState NS) (a b : ℤ) (LA : List Item) (hA : s.G ARG = .int a :: .int b :: LA) :
IRuns I iprog (mulBody pF pP) s (s.upd ARG (.int (a * b) :: LA))
(mulCost (zsz a + zsz b)) := by sorry