A block-table loop (round six, `stA_sp`)
ProvedJ6Seg.PreT.stA_spA block-table loop.
The following holds (Lean statement, in the scope of module Solutions.J6SegILPre9):
theorem J6Seg.PreT.stA_sp (s : IState HS) (v : Fin HS → ℤ) (c : Fin HS → List ℤ) {O : Fin HS}
(hO : O ∉ rg) (hO5 : O.val < 56) (hOC : O ≠ Cu) (hc : c Cu = []) {P R sN tN lam aN A : ℕ}
(hi : StIn2 v P R sN tN lam aN A) (hPA : P ≤ A) {cN nN : ℕ} (h1 : v 1 = cN) (h2 : v 2 = nN)
(hn : nN ≤ lam) {eJ : Ex HS} (hiJ : InRg eJ) (hpJ : Poly eJ = true) (hdJ : J6Seg.PreT.dg eJ ≤ 40)
(hoJ : ∀ (u : Fin HS → ℤ) (cu : Fin HS → List ℤ), eJ.ok (encK s (J6Seg.PreT.RF u cu))) (jv : ℕ → ℕ)
(hJ : ∀ (k : ℕ) (u : Fin HS → ℤ) (cu : Fin HS → List ℤ), u 1 = cN → u 22 = sN → u 23 = tN →
u 25 = aN → u 12 = k → eJ.eval (encK s (J6Seg.PreT.RF u cu)) = jv k)
(bX : ∀ k < nN, |expNeg P sN (jv k)| ≤ 2 ^ A)
(bF : ∀ k < nN, |(-1) ^ k * J6Seg.fmul P (expNeg P sN (jv k)) (giI P sN tN aN k)| ≤ 2 ^ A)
(bq : ∀ k < lam, |expNeg P sN (2 * aN ^ 2 * tN * (k + 1))| ≤ 2 ^ A)
(bG : ∀ k ≤ lam, |gamI P sN tN aN k| ≤ 2 ^ A) :
∃ v' : Fin HS → ℤ, (∀ j, j ≠ 3 → j ≠ 4 → j ≠ 5 → j ≠ 11 → j ≠ 12 → v' j = v j) ∧ VB v' A ∧
Sp (stA O eJ) (encK s (J6Seg.PreT.RF v c)) (encK s (J6Seg.PreT.RF v' (Function.update c O
(rv (fun (k : ℕ) => (-1) ^ k * J6Seg.fmul P (expNeg P sN (jv k)) (giI P sN tN aN k)) nN ++ c O))))
(cStA A lam eJ)
Context. B-line IL, pre-tables (B5), part 9: the block tables am, ap
stA O eJ = Γ := 2^P; S := 1; loop U < n { X := expNeg P s (eJ); X := S·fmul P X (fdiv P 2^P Γ); S := -S; q := expNeg P s (2α²t(U+1)); Γ := fmul P Γ (2^P - q⁺); push X; U++ } (count on 2).
With eJ = jME (amP) it pushes (mkTables …).am c 0, …, am c (n-1) (block start c on 1),
with eJ = jPE (apP) the ap c h. Clobbers 3, 4, 5, 11, 12.
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_R6_Defs68 set_option autoImplicit false set_option relaxedAutoImplicit false set_option maxHeartbeats 1000000 open J6Seg J6Seg.PreT open IntMul NLogN NLogN.KIL NLogN.RS IntMul.HvdH
theorem J6Seg.PreT.stA_sp (s : IState HS) (v : Fin HS → ℤ) (c : Fin HS → List ℤ) {O : Fin HS}
(hO : O ∉ rg) (hO5 : O.val < 56) (hOC : O ≠ Cu) (hc : c Cu = []) {P R sN tN lam aN A : ℕ}
(hi : StIn2 v P R sN tN lam aN A) (hPA : P ≤ A) {cN nN : ℕ} (h1 : v 1 = cN) (h2 : v 2 = nN)
(hn : nN ≤ lam) {eJ : Ex HS} (hiJ : InRg eJ) (hpJ : Poly eJ = true) (hdJ : J6Seg.PreT.dg eJ ≤ 40)
(hoJ : ∀ (u : Fin HS → ℤ) (cu : Fin HS → List ℤ), eJ.ok (encK s (J6Seg.PreT.RF u cu))) (jv : ℕ → ℕ)
(hJ : ∀ (k : ℕ) (u : Fin HS → ℤ) (cu : Fin HS → List ℤ), u 1 = cN → u 22 = sN → u 23 = tN →
u 25 = aN → u 12 = k → eJ.eval (encK s (J6Seg.PreT.RF u cu)) = jv k)
(bX : ∀ k < nN, |expNeg P sN (jv k)| ≤ 2 ^ A)
(bF : ∀ k < nN, |(-1) ^ k * J6Seg.fmul P (expNeg P sN (jv k)) (giI P sN tN aN k)| ≤ 2 ^ A)
(bq : ∀ k < lam, |expNeg P sN (2 * aN ^ 2 * tN * (k + 1))| ≤ 2 ^ A)
(bG : ∀ k ≤ lam, |gamI P sN tN aN k| ≤ 2 ^ A) :
∃ v' : Fin HS → ℤ, (∀ j, j ≠ 3 → j ≠ 4 → j ≠ 5 → j ≠ 11 → j ≠ 12 → v' j = v j) ∧ VB v' A ∧
Sp (stA O eJ) (encK s (J6Seg.PreT.RF v c)) (encK s (J6Seg.PreT.RF v' (Function.update c O
(rv (fun (k : ℕ) => (-1) ^ k * J6Seg.fmul P (expNeg P sN (jv k)) (giI P sN tN aN k)) nN ++ c O))))
(cStA A lam eJ) := by sorry