Fermat-ring FFT multiplication recovers the negacyclic convolution of the pieces
ProvedNLogN.ss_liftLet , with , and write , . Assume
Then for all integers , with and defined likewise,
In words: cutting and into signed -bit pieces, twisting by powers of , applying the forward FFT, multiplying pointwise mod , applying the inverse FFT, untwisting, scaling by and lifting to the symmetric range yields exactly (as integers, not only mod ) the negacyclic convolution
This is the algebraic heart of the Schönhage–Strassen correctness proof: the convolution theorem for the Fermat-ring transform with root and twist (whose -th power is ), together with the size bound guaranteeing that the coefficients are recovered exactly from their residues.
Formalization Note. A purely mathematical statement on lists of integers; difZ, ditZ, wtZ, pmulZ, liftL are the reference functions that the item-language procedures are proved to compute, pcs uses signed (sign of ) truncating pieces, and % is the canonical nonnegative residue.
-- Schönhage–Strassen multitape-TM development (NLogN), generated by skeleton subtraction. import Definitions.Def_IntMul_SS_Defs2 set_option autoImplicit false set_option relaxedAutoImplicit false set_option maxHeartbeats 1000000 open NLogN open IntMul
theorem NLogN.ss_lift (n k Q M : ℕ) (x y : ℤ) (hn : 1 ≤ n) (hKQ : 2 ^ k * Q = n)
(hb : 2 * ((2 : ℤ) ^ k) ^ 2 * ((2 : ℤ) ^ M) ^ 2 < 2 ^ (n - 1)) :
liftL n k Q (2 ^ k) (ditZ (2 ^ n + 1) n (2 * Q) k (pmulZ (2 ^ n + 1)
(difZ (2 ^ n + 1) (2 * Q) k (wtZ (2 ^ n + 1) Q 0 (pcs M (2 ^ k) x)))
(difZ (2 ^ n + 1) (2 * Q) k (wtZ (2 ^ n + 1) Q 0 (pcs M (2 ^ k) y))))) =
ncZ (2 ^ k) (pcs M (2 ^ k) x) (pcs M (2 ^ k) y) := by sorry