Round-six lemma `pushLoop_cost`
ProvedNLogN.KFM.pushLoop_costcomplexity-theoryinteger-multiplicationkappa-improvement
An auxiliary lemma of the round-six development, published as a separate node because its proof is long or shared.
The following holds (Lean statement, in the scope of module Solutions.KFMS9):
theorem NLogN.KFM.pushLoop_cost (Bd : RS) (dst : Fin HS) (hdO : dst ≠ mOc) (s : IState HS) (d : ℕ)
(LD : List Item) (hD : s.G zD = .int (d : ℤ) :: LD) (v : ℕ → ℤ)
(hB : ∀ (L : List Item) (c : ℕ), 1 ≤ c → c ≤ d →
Bd.ok ((s.upd dst (L ++ s.G dst)).upd mOc (.int (c : ℤ) :: s.G mOc)) ∧
Bd.run ((s.upd dst (L ++ s.G dst)).upd mOc (.int (c : ℤ) :: s.G mOc)) =
((s.upd dst (L ++ s.G dst)).upd mOc (.int (c : ℤ) :: s.G mOc)).upd dst
(.int (v (c - 1)) :: L ++ s.G dst))
(B C : ℕ) (hzd : zsz (d : ℤ) ≤ B) (hB1 : 1 ≤ B)
(hbc : ∀ (L : List Item) (c : ℕ), 1 ≤ c → c ≤ d →
Bd.cost ((s.upd dst (L ++ s.G dst)).upd mOc (.int (c : ℤ) :: s.G mOc)) ≤ C) :
(RS.rep mOc (.reg zD) Bd).cost s ≤ 2 * 10 ^ 7 * (B + 2) ^ 2 +
d * (C + 4 * 10 ^ 7 * (B + 2) ^ 2 + 30) + 32
Context. KFM S9: the cost of the source and inverse lists
Write K = 10^7 (B+2)^2. Assume every atom is at most A, with A^k < 2^B for k ≤ 8.
pmLoop_cost: the product loop costs at most(i+1)·40K.sumLoop_cost: the sum loop costs at most(s+1)·40K.muB_cost: one inverse costs at most(i+s+4)·40K.
Formalization Note. Part of the Lean formalization of the round-six κ-improvement (integer-multiplication-kappa campaign, target IntMul.Kappa.jain_round6_framework). The statement is copied verbatim from the Lean development; the platform node carries the same declaration name. Definitions it mentions live in the IntMul_Kappa_R6_Defs* bundles (on top of the published κ bundles IntMul_Kappa_K_Defs*).
Preamble
-- Round-six κ development (integer-multiplication-kappa), generated by skeleton subtraction. import Definitions.Def_IntMul_Kappa_K_Defs33 import Definitions.Def_IntMul_Kappa_R6_Defs1 import Definitions.Def_IntMul_MultitapeModel import Mathlib import Definitions.Def_IntMul_HvdH_M_Defs8 import Definitions.Def_IntMul_HvdH_Numeric import Definitions.Def_IntMul_HvdH_ExpApprox import Definitions.Def_IntMul_HvdH_Twiddle import Definitions.Def_IntMul_HvdH_RealExp set_option autoImplicit false set_option relaxedAutoImplicit false set_option maxHeartbeats 1000000 open NLogN NLogN.KFM open IntMul NLogN.RS
Formal statement
theorem NLogN.KFM.pushLoop_cost (Bd : RS) (dst : Fin HS) (hdO : dst ≠ mOc) (s : IState HS) (d : ℕ)
(LD : List Item) (hD : s.G zD = .int (d : ℤ) :: LD) (v : ℕ → ℤ)
(hB : ∀ (L : List Item) (c : ℕ), 1 ≤ c → c ≤ d →
Bd.ok ((s.upd dst (L ++ s.G dst)).upd mOc (.int (c : ℤ) :: s.G mOc)) ∧
Bd.run ((s.upd dst (L ++ s.G dst)).upd mOc (.int (c : ℤ) :: s.G mOc)) =
((s.upd dst (L ++ s.G dst)).upd mOc (.int (c : ℤ) :: s.G mOc)).upd dst
(.int (v (c - 1)) :: L ++ s.G dst))
(B C : ℕ) (hzd : zsz (d : ℤ) ≤ B) (hB1 : 1 ≤ B)
(hbc : ∀ (L : List Item) (c : ℕ), 1 ≤ c → c ≤ d →
Bd.cost ((s.upd dst (L ++ s.G dst)).upd mOc (.int (c : ℤ) :: s.G mOc)) ≤ C) :
(RS.rep mOc (.reg zD) Bd).cost s ≤ 2 * 10 ^ 7 * (B + 2) ^ 2 +
d * (C + 4 * 10 ^ 7 * (B + 2) ^ 2 + 30) + 32 := by sorrySource
S. Jain, round-six networks for the integer-multiplication κ-improvement campaign (https://github.com/Swapnil-jain/integer-mult-kappa, commit 5868dc7) and D. Colkitt, integer-mult-bounds (https://github.com/CrocSwap/integer-mult-bounds); target `IntMul.Kappa.jain_round6_framework`. Lean declaration `NLogN.KFM.pushLoop_cost`, Solutions/KFMS9.lean (lines 296–339) of the round-six development.