Magnitude bounds for all intermediate lists of the HvdH reference step
ProvedNLogN.BD.refStep_LB_mkParamsLet , , and . There is an explicit bound with and such that every intermediate list of refStep q x y has all (real and imaginary) entries bounded by in absolute value: (a) the CRT digit vectors rU q x, rU q y and their scaled complex versions ecU; (b) every stage of the Gaussian-resampling () passes of the three forward transforms (inputs , and the pointwise product ) and every stage of the passes; (c) the inputs of the Fermat convolution and the chirp table chirpL q; (d) every convL and FtL output (and every fermatW output is bounded by ); (e) the products , ; (f) the output of exactConvL and the crtOut digits.
Formalization Note. LB L B (resp. LBz) says every pair (resp. integer) in the list has absolute values ; tensorGo (axs.take k) dims is the list after the first axis passes. All list functions (refStep, fwdL, FtL, convL, fermatW, exactConvL, crtIn/crtOut, tensorGo) are those of the published Def_IntMul_HvdH_MachineRef. These bounds size the registers of the machine implementation.
-- Harvey–van der Hoeven multitape-TM development (NLogN), generated by skeleton subtraction. import Definitions.Def_IntMul_HvdH_M_Defs4 set_option autoImplicit false set_option relaxedAutoImplicit false set_option maxHeartbeats 1000000 set_option linter.unusedSimpArgs false open NLogN open NLogN.BD open IntMul.HvdH IntMul.HvdH.Ref NLogN.Asym
theorem NLogN.BD.refStep_LB_mkParams (K N : ℕ) (hK : 20 ≤ K) (hN : 2 ^ (2 ^ (8 * K) + 1) ≤ N)
(x y : ℕ) :
let q := mkParams K N
Bq q < 2 ^ q.P ∧ Nat.size (Bq q) ≤ q.p + q.p / 8 ∧
-- (a)
LBz (rU q x) (Bq q) ∧ LBz (rU q y) (Bq q) ∧
LB (ecU q (rU q x)) (Bq q) ∧ LB (ecU q (rU q y)) (Bq q) ∧
-- (b) the `S̃` stages
(∀ k, LB (tensorGo ((axS q).take k) q.sdims (ecU q (rU q x))) (Bq q)) ∧
(∀ k, LB (tensorGo ((axS q).take k) q.sdims (ecU q (rU q y))) (Bq q)) ∧
(∀ k, LB (tensorGo ((axS q).take k) q.sdims (ecW q (rU q x) (rU q y))) (Bq q)) ∧
-- (c) the `fermatW` arguments
LB (ftIn q (ecU q (rU q x))) (Bq q) ∧ LB (ftIn q (ecU q (rU q y))) (Bq q) ∧
LB (ftIn q (ecW q (rU q x) (rU q y))) (Bq q) ∧ LB (chirpL q) (Bq q) ∧
-- (d)
(∀ X Y, LB (fermatW q X Y) (2 ^ q.P)) ∧ (∀ X Y, LB (convL q X Y) (Bq q)) ∧
(∀ X, LB (FtL q X) (Bq q)) ∧
-- (b) the `B̃` stages
(∀ X k, LB (tensorGo ((axB q).take k) q.tdims (FtL q X)) (Bq q)) ∧
(∀ X, LB (fwdL q X) (Bq q)) ∧
-- (e)
LB (ecW q (rU q x) (rU q y)) (Bq q) ∧ LB (ecY q (rU q x) (rU q y)) (Bq q) ∧
-- (f)
LBz (exactConvL q (rU q x) (rU q y)) (Bq q) ∧
LBz (crtOut q.s (2 * q.L - 1) (exactConvL q (rU q x) (rU q y))) (Bq q) := by sorry