Round-six lemma `withSplitF_runs`
ProvedNLogN.KFD.withSplitF_runsAn 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.KFDLevel):
theorem NLogN.KFD.withSplitF_runs (p : IStmt HS Pp) (W P L' h Bb : ℕ) (t : IState HS) (xs ys : List ℤ) (R : List Item)
(hP1 : 1 ≤ P) (hL1 : 1 ≤ L') (hh : 1 ≤ h)
(zW : zsz (W : ℤ) ≤ Bb) (zv : zsz ((P * L' * h : ℕ) : ℤ) ≤ Bb) (hB1 : 1 ≤ Bb)
{L1 L2 L3 : List Item} (hPp : t.G dP = .int (P : ℤ) :: L1)
(hLp : t.G rLp = .int (L' : ℤ) :: L2)
(hVv : t.G rV = .int ((P * L' * h : ℕ) : ℤ) :: L3) (cp : ℕ)
(hp : ∀ u : IState HS, u.G 0 = ints xs ++ R → u.G 1 = .int ((1 : ℕ) : ℤ) :: t.G 1 →
u.G 2 = .int (W : ℤ) :: t.G 2 → u.G 3 = .int ((P * L' : ℕ) : ℤ) :: t.G 3 →
u.G 4 = .int (h : ℤ) :: t.G 4 →
IRuns I iprog p u (u.upd 0 (ints ys ++ R)) cp) :
IRuns I iprog (withPushI (splitL W) p) (t.upd 0 (ints xs ++ R)) (t.upd 0 (ints ys ++ R))
(cSplit W Bb + cp)
Context. KFD: the fine body of one uniform level
bodyF C tpl j0 is KIL5's bodyU with every per-element piece replaced by its fine form:
fcode (subU …), the row split / merge by KFC's bwdF / fwdF, the fine network netCF
with fine frame changes edgeCF (fine level steps fcode (stepU …)), the fine routing
fcode (rebuildCU …). bodyF_run: the same denotation levelR as bodyU_run, with the fine
cost bodyCF.
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*).
-- 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 Mathlib
import Definitions.Def_IntMul_HvdH_M_Defs8
import Definitions.Def_IntMul_MultitapeModel
set_option autoImplicit false
set_option relaxedAutoImplicit false
set_option maxHeartbeats 1000000
open NLogN NLogN.KFD
open IntMul NLogN.RS
open NLogN.KIL AModel AModelL12
variable {Pp : ℕ} {I : List Sym} {iprog : Fin Pp → IStmt HS Pp}
theorem NLogN.KFD.withSplitF_runs (p : IStmt HS Pp) (W P L' h Bb : ℕ) (t : IState HS) (xs ys : List ℤ) (R : List Item)
(hP1 : 1 ≤ P) (hL1 : 1 ≤ L') (hh : 1 ≤ h)
(zW : zsz (W : ℤ) ≤ Bb) (zv : zsz ((P * L' * h : ℕ) : ℤ) ≤ Bb) (hB1 : 1 ≤ Bb)
{L1 L2 L3 : List Item} (hPp : t.G dP = .int (P : ℤ) :: L1)
(hLp : t.G rLp = .int (L' : ℤ) :: L2)
(hVv : t.G rV = .int ((P * L' * h : ℕ) : ℤ) :: L3) (cp : ℕ)
(hp : ∀ u : IState HS, u.G 0 = ints xs ++ R → u.G 1 = .int ((1 : ℕ) : ℤ) :: t.G 1 →
u.G 2 = .int (W : ℤ) :: t.G 2 → u.G 3 = .int ((P * L' : ℕ) : ℤ) :: t.G 3 →
u.G 4 = .int (h : ℤ) :: t.G 4 →
IRuns I iprog p u (u.upd 0 (ints ys ++ R)) cp) :
IRuns I iprog (withPushI (splitL W) p) (t.upd 0 (ints xs ++ R)) (t.upd 0 (ints ys ++ R))
(cSplit W Bb + cp) := by sorry