fwdF_spec (KFC: the self-contained fine-cost forward field move `fwdF`)
ProvedNLogN.KFC.fwdF_specThe following holds (Lean statement, in the scope of module Solutions.KFCFwdMain):
theorem NLogN.KFC.fwdF_spec (t : IState HS) (xs : List ℤ) (P q M B w : ℕ) (R L1 L2 L3 L4 : List Item)
(hlen : xs.length = P * q * M * B) (hb : Bnd w xs)
(hB1 : 1 ≤ B) (hM1 : 1 ≤ M) (hq1 : 1 ≤ q) (hP1 : 1 ≤ P)
(h0 : t.G 0 = ints xs ++ R) (h1 : t.G 1 = .int P :: L1) (h2 : t.G 2 = .int q :: L2)
(h3 : t.G 3 = .int M :: L3) (h4 : t.G 4 = .int B :: L4) :
IRuns I iprog fwdF t (t.upd 0 (ints (AModel.pull [P, q, M, B] [P, M, q, B] KIL.gS 0 xs) ++ R))
(cFwdF P q M B w)
Context. The lemma belongs to the part KFC: the self-contained fine-cost forward field move fwdF: fwdF_spec: on t with ints xs ++ R on stack 0 and P, q, M, B on stacks 1 … 4,
fwdF ends in t.upd 0 (ints (pull [P,q,M,B] [P,M,q,B] gS 0 xs) ++ R) (all scratch stacks
restored) with cost ≤ cFwdF P q M B w = (2q+16)·kap w·V + cUL P + cUL q + cUL M + cUL B + 1000,
V = P·q·M·B, w a bound on the bit size of the entries of xs only.
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.unnecessarySeqFocus false
set_option maxRecDepth 20000
open NLogN
open IntMul AModel
open NLogN.KFC
variable {Pp : ℕ} {I : List Sym} {iprog : Fin Pp → IStmt HS Pp}
theorem NLogN.KFC.fwdF_spec (t : IState HS) (xs : List ℤ) (P q M B w : ℕ) (R L1 L2 L3 L4 : List Item)
(hlen : xs.length = P * q * M * B) (hb : Bnd w xs)
(hB1 : 1 ≤ B) (hM1 : 1 ≤ M) (hq1 : 1 ≤ q) (hP1 : 1 ≤ P)
(h0 : t.G 0 = ints xs ++ R) (h1 : t.G 1 = .int P :: L1) (h2 : t.G 2 = .int q :: L2)
(h3 : t.G 3 = .int M :: L3) (h4 : t.G 4 = .int B :: L4) :
IRuns I iprog fwdF t (t.upd 0 (ints (AModel.pull [P, q, M, B] [P, M, q, B] KIL.gS 0 xs) ++ R))
(cFwdF P q M B w) := by sorry