`Φ` as a padded array (round six, `phiD_pad`)
ProvedNLogN.KFM.phiD_padΦ as a padded array.
The following holds (Lean statement, in the scope of module Solutions.KFMPhiW):
theorem NLogN.KFM.phiD_pad (hsw : ∀ j < d, sF j ≤ tP d h bL j) (xs : List ℤ) {zs : List GI}
(hz : gflat zs = PhiD h d bL sF μ xs) :
haveI := sBox_ne sF μ H
zs.length = (List.ofFn (tBox d h bL)).prod ∧ PadZ (sBox d sF) (tBox d h bL) zs ∧
∀ k : (i : Fin d) → ZMod (sBox d sF i),
zs.getD (encode (List.ofFn (tBox d h bL)) (kL k)) 0 =
(xs.getD (2 * ((eB sF μ H).symm k).val) 0, xs.getD (2 * ((eB sF μ H).symm k).val + 1) 0)
Context. KFM: Φ / Φ⁻¹ with s_j ≤ t_j, and as arrays of the chain
KFU states the pointwise denotations of Φ/Φ⁻¹ under s_j ≤ 2^h; the parameters have
s_j ≤ t_j = 2^{h+b_j} (PhiNeed, as corrected). The proofs only use sP ≤ tP:
sP_le_tPW,le_SRW,PhiD_atW,PhiInvD_atW,PhiD_eqW(copies with the weak hypothesishsw : ∀ j < d, sF j ≤ tP d h bL j).
As arrays of the chain (box t_i = tP d h bL i, source s_i = sF i, last axis = component):
encode_snoc2:enc (sh ++ [2]) (v ++ [c]) = 2·enc sh v + c.pairL ys: the Gaussian items of an integer list;gflat (pairL ys) = ysfor even length.phiD_pad:pairL (PhiD xs)vanishes off the source points (PadZ) and holds the item(xs[2κ], xs[2κ+1]),κ = (Φ⁻¹ k).val, at source pointk.phiInvD_read:(PhiInvD (gflat ws))[2m + c]is componentcofwsat the pointΦ(m).
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 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 AModel AModelL12 NLogN.KFU NLogN.KFB
variable {d : ℕ}
variable (h : ℕ) (bL : ℕ → Bool) (sF μ : ℕ → ℕ) (H : CrtOK d sF μ)
theorem NLogN.KFM.phiD_pad (hsw : ∀ j < d, sF j ≤ tP d h bL j) (xs : List ℤ) {zs : List GI}
(hz : gflat zs = PhiD h d bL sF μ xs) :
haveI := sBox_ne sF μ H
zs.length = (List.ofFn (tBox d h bL)).prod ∧ PadZ (sBox d sF) (tBox d h bL) zs ∧
∀ k : (i : Fin d) → ZMod (sBox d sF i),
zs.getD (encode (List.ofFn (tBox d h bL)) (kL k)) 0 =
(xs.getD (2 * ((eB sF μ H).symm k).val) 0, xs.getD (2 * ((eB sF μ H).symm k).val + 1) 0) := by sorry