Round-six lemma `conjPU_runs`
ProvedNLogN.KFM.conjPU_runscomplexity-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.KFMMv):
theorem NLogN.KFM.conjPU_runs (B : ℕ) (s : IState HS) (zs : List GI) (R0 : List Item)
(h0 : s.G 0 = ints (gflat zs) ++ R0) (hB : GB B zs) (LX LX2 : List Item)
(hX : s.G nX = .int (zs.length : ℤ) :: LX)
(hX2 : s.G nX2 = .int ((2 * zs.length : ℕ) : ℤ) :: LX2) :
IRuns I iprog conjPU s (s.upd 0 (ints (gflat (zs.map gconj)) ++ R0)) (cConj zs.length B)
Context. KFM: counted moves and the conjugation pass
mvNU Cn X Y: moveNitems (count onCn) fromXtoY(mvNU_runs: the moved block arrives reversed). Two of them move a block in order (mv2_runs).conjPU:zs ↦ zs.map gconjon stack0(NGaussian items, countsNonnXand2NonnX2), as KFM'sitemPUwith a two-item body (conjPU_runs).
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
import Definitions.Def_IntMul_HvdH_SApprox
import Definitions.Def_IntMul_HvdH_MachineRef
import Definitions.Def_IntMul_HvdH_DiagApprox
import Definitions.Def_IntMul_HvdH_EApprox
import Definitions.Def_IntMul_HvdH_JApprox
import Definitions.Def_IntMul_HvdH_BApprox
import Definitions.Def_IntMul_HvdH_FPApprox
set_option autoImplicit false
set_option relaxedAutoImplicit false
set_option maxHeartbeats 1000000
open NLogN NLogN.KFM
open IntMul NLogN.KFC NLogN.KFB NLogN.KFT NLogN.KIL
variable {P : ℕ} {I : List Sym} {iprog : Fin P → IStmt HS P}
Formal statement
theorem NLogN.KFM.conjPU_runs (B : ℕ) (s : IState HS) (zs : List GI) (R0 : List Item)
(h0 : s.G 0 = ints (gflat zs) ++ R0) (hB : GB B zs) (LX LX2 : List Item)
(hX : s.G nX = .int (zs.length : ℤ) :: LX)
(hX2 : s.G nX2 = .int ((2 * zs.length : ℕ) : ℤ) :: LX2) :
IRuns I iprog conjPU s (s.upd 0 (ints (gflat (zs.map gconj)) ++ R0)) (cConj zs.length B) := 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.conjPU_runs`, Solutions/KFMMv.lean (lines 114–178) of the round-six development.