The six pushes (round six, `keyPush_fsp`)
ProvedIntMul.Kappa.R6.IL2C.keyPush_fspcomplexity-theoryinteger-multiplicationkappa-improvement
The six pushes of keyProgC, followed by any continuation.
The following holds (Lean statement, in the scope of module Solutions.R6IL2CKeyRunA):
theorem IntMul.Kappa.R6.IL2C.keyPush_fsp {l : Lay} {K ρ G n L M Bb : ℕ} (hV : KVal l K ρ G n L M Bb)
{s : IState HS} {G0 : Fin HS → List ℤ} {k : ℕ} (hk : k < M)
{lm : List ℤ} (hm : G0 rm = (k : ℤ) :: lm) (hE : KEnv (encK s G0) l K ρ G n)
{rest : RS} {fin : IState HS} {c : ℕ}
(hr : FSp rest (encK s (IntMul.Kappa.R6.IL2C.KS G0 n ((2 : ℤ) ^ G) (gc l.QL l.sX k) (gc l.QC l.sT k)
(gc l.QC l.sU k) (gc l.QL l.sY k))) fin c) :
FSp (.seq (.push pN (.reg IntMul.Kappa.R6.IL2C.kN)) (.seq (.push IntMul.Kappa.R6.IL2C.pR (.reg kRR))
(.seq (.push kx (gcK rm kSX kQL)) (.seq (.push kt (gcK rm kST kQC))
(.seq (.push ku (gcK rm kSU kQC)) (.seq (.push ky (gcK rm kSY kQL)) rest))))))
(encK s G0) fin (IntMul.Kappa.R6.IL2C.cPush Bb + c)
Context. Round six, compact controls (I2C): the run of the key program, part A
Definitions and the six pushes of keyProgC (keyPush_fsp, continuation style).
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_R6_Defs21 set_option autoImplicit false set_option relaxedAutoImplicit false set_option maxHeartbeats 1000000 open IntMul IntMul.Kappa IntMul.Kappa.R6 IntMul.Kappa.R6.IL2C open NLogN NLogN.KFL NLogN.KIL NLogN.KFD IntMul NLogN.RS
Formal statement
theorem IntMul.Kappa.R6.IL2C.keyPush_fsp {l : Lay} {K ρ G n L M Bb : ℕ} (hV : KVal l K ρ G n L M Bb)
{s : IState HS} {G0 : Fin HS → List ℤ} {k : ℕ} (hk : k < M)
{lm : List ℤ} (hm : G0 rm = (k : ℤ) :: lm) (hE : KEnv (encK s G0) l K ρ G n)
{rest : RS} {fin : IState HS} {c : ℕ}
(hr : FSp rest (encK s (IntMul.Kappa.R6.IL2C.KS G0 n ((2 : ℤ) ^ G) (gc l.QL l.sX k) (gc l.QC l.sT k)
(gc l.QC l.sU k) (gc l.QL l.sY k))) fin c) :
FSp (.seq (.push pN (.reg IntMul.Kappa.R6.IL2C.kN)) (.seq (.push IntMul.Kappa.R6.IL2C.pR (.reg kRR))
(.seq (.push kx (gcK rm kSX kQL)) (.seq (.push kt (gcK rm kST kQC))
(.seq (.push ku (gcK rm kSU kQC)) (.seq (.push ky (gcK rm kSY kQL)) rest))))))
(encK s G0) fin (IntMul.Kappa.R6.IL2C.cPush Bb + c) := 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 `IntMul.Kappa.R6.IL2C.keyPush_fsp`, Solutions/R6IL2CKeyRunA.lean (lines 141–264) of the round-six development.