Φ on whole arrays: zero padded, source address b holds xs[2·kOf b + b_d]
ProvedNLogN.KFU.PhiD_eqΦ on whole arrays: zero padded, source address b holds xs[2·kOf b + b_d].
The following holds (Lean statement, in the scope of module Solutions.KFU2Cover):
theorem NLogN.KFU.PhiD_eq (H : CrtOK d sF μ) (h : ℕ) (bL : ℕ → Bool) (hst : ∀ j < d, sF j ≤ 2 ^ h)
(xs : List ℤ) :
PhiD h d bL sF μ xs = (List.range (vol (shR d (NLogN.KFU.tP d h bL)))).map fun j =>
if Valid (shR d (sP d sF)) (decode (shR d (NLogN.KFU.tP d h bL)) j) then
xs.getD (2 * NLogN.KFU.kOf d sF μ (decode (shR d (NLogN.KFU.tP d h bL)) j) +
(decode (shR d (NLogN.KFU.tP d h bL)) j).getD d 0) 0
else 0
Context. The lemma belongs to the part KFU2 §1: coverage of the Φ-addresses and whole-array denotations: Hypotheses (RCRT side): 1 ≤ s_j, pairwise coprime s_j (j < d), μ_j P_j ≡ 1 (mod s_j).
Formalization Note. This lemma belongs to the item-language (IL) layer of the integer-multiplication-kappa campaign: tape-level programs (register programs over 64 item stacks of the NLogN multitape framework, definition bundles IntMul_HvdH_M_Defs1–IntMul_HvdH_M_Defs8) that implement the data-movement primitives of the OpenAI preprint Integer multiplication below (field moves, row split/merge, shifts, the uniform Proposition 11 interchange, Lemma 12 with fine -per-element costs, Gaussian record primitives, Proposition 14 pieces) with exact list denotations from the array-model bundles IntMul_Kappa_K_Defs* and explicit cost bounds. All names refer to the definition bundles up to IntMul_Kappa_K_Defs18.
-- OpenAI-preprint / κ-improvement development (integer-multiplication-kappa), generated by skeleton subtraction.
import Definitions.Def_IntMul_Kappa_K_Defs18
set_option autoImplicit false
set_option relaxedAutoImplicit false
set_option maxHeartbeats 1000000
set_option linter.unusedSimpArgs false
set_option linter.unnecessarySeqFocus false
open NLogN
open NLogN.KFU
open IntMul KFC AModel AModelL12
variable {d : ℕ} {sF μ : ℕ → ℕ}
open Classical
theorem NLogN.KFU.PhiD_eq (H : CrtOK d sF μ) (h : ℕ) (bL : ℕ → Bool) (hst : ∀ j < d, sF j ≤ 2 ^ h)
(xs : List ℤ) :
PhiD h d bL sF μ xs = (List.range (vol (shR d (NLogN.KFU.tP d h bL)))).map fun j =>
if Valid (shR d (sP d sF)) (decode (shR d (NLogN.KFU.tP d h bL)) j) then
xs.getD (2 * NLogN.KFU.kOf d sF μ (decode (shR d (NLogN.KFU.tP d h bL)) j) +
(decode (shR d (NLogN.KFU.tP d h bL)) j).getD d 0) 0
else 0 := by sorry