The toy Fürer scheme returns the product full
This proof shows: correctness, termination.
This proof is for the exact toy model of the page: R=Zq[x]/(xm+1) with q prime, m a power of 2, K=2m, Nt=KL with Nt∣q−1, limbs of b bits and β=2b. It does not cover Fürer's complex version, whose precision analysis is in his paper.
Termination. A call of FFT on a vector of length Kℓ with ℓ≥2 makes calls on vectors of length K (line L7) and Kℓ−1 (line L9) only, and a call of length K stops at line L6, whose radix-2 DFT halves its length at each level. So the recursion depth is at most L−1+log2K, and FURER-MULTIPLY makes three calls and finite loops.
Lemma 1 (the ring and the root). Let ω be a primitive Nt-th root of unity in Zq and ζ=ωNt/K. The map ϕ(f)=(f(ζ2i+1))0≤i<m is a ring isomorphism R→Zqm. The element ρ with ϕ(ρ)=(ω2i+1)i satisfies ρNt/K=x, and ρ is a principal Nt-th root of unity in R: ρNt=1, and ∑j=0Nt−1ρjk=0 for k≡0(modNt).
Proof. ζ has order K=2m, so ζm=−1, and the m numbers ζ2i+1 are distinct roots of xm+1. Hence xm+1=∏i(x−ζ2i+1) over the field Zq, the factors are pairwise coprime, and ϕ is an isomorphism by the Chinese remainder theorem. Then ϕ(ρNt/K)=(ω(2i+1)Nt/K)i=(ζ2i+1)i=ϕ(x), so ρNt/K=x. Each coordinate ω2i+1 is a primitive Nt-th root of unity, since 2i+1 is odd and Nt is a power of 2. So ρNt=1, and for k≡0 each coordinate of ϕ(∑jρjk) is a geometric sum ∑jω(2i+1)jk=0, because ω(2i+1)k=1 and its Nt-th power is 1. □
Lemma 2 (shifts). For each integer e, SHIFT computes a⋅xe in R.
Proof. x2m=1 in R, so only emod2m matters, and xm=−1 turns e≥m into a sign and e−m. Then xe∑iaixi=∑iaixi+e, and each term with i+e≥m is −aixi+e−m, which is what the code writes. □
Lemma 3 (FFT). If ∣v∣⋅s=Nt and ∣v∣=Kℓ with ℓ≥1, then FFT(v,s,σ) returns Xk=∑n<∣v∣vnωnk for 0≤k<∣v∣, with ω=ρσs.
Proof. By induction on ℓ. If ℓ=1, then s=Nt/K and ω=ρσNt/K=xσ by Lemma 1, and line L6 computes the DFT with root xσ by the radix-2 recursion, which is correct for each element ω with ωK=1, using ωK/2=xσm=−1; its multiplications are by powers of x and are correct by Lemma 2. If ℓ≥2, let J=Kℓ−1, and write n=Jn2+n1 and k=k1+Kk2 with n1,k2<J and n2,k1<K. Since ωJK=ω∣v∣=ρσNt=1,
ωnk=ωJn2k1⋅ωn1k1⋅ωKn1k2. So Xk1+Kk2=∑n1ωKn1k2(ωn1k1∑n2vJn2+n1(ωJ)n2k1). Here ωJ=ρσsJ with sJ=Nt/K, so the inner sum is the DFT of length K that line L7 computes by the induction hypothesis with stride Nt/K. Line L8 multiplies its k1-th entry by ωn1k1, skipping the factors equal to 1. The outer sum is the DFT of length J with root ωK=ρσsK, which line L9 computes with stride sK, where J⋅sK=Nt, by the induction hypothesis. Line L9 stores it at index k1+Kk2. □
Lemma 4 (inversion). If c^=FFT(c,1,+1), then FFT(c^,1,−1)=Ntc.
Proof. By Lemma 3 the n-th entry of FFT(c^,1,−1) is ∑k∑jcjρjkρ−nk=∑jcj∑kρ(j−n)k=Ntcn, by Lemma 1. □
Theorem. If u,v<2(Nt/2)(m/2)b and (Nt/2)(m/2)(β−1)2<q, then FURER-MULTIPLY returns uv.
Proof. Line L1 writes u=∑j<Nt/2∑t<m/2uj,tβt+jm/2 with 0≤uj,t<β, and sets aj=∑tuj,txt for j<Nt/2 and aj=0 for j≥Nt/2; the same for v and bj. By Lemma 3 and the convolution property, which follows from Lemma 4 in the usual way, c=FFT(a^⋅b^,1,−1)/Nt is the cyclic convolution cn=∑j+j′≡n(modNt)ajbj′ in R. Since aj and bj′ vanish for j,j′≥Nt/2, only pairs with j+j′=n<Nt−1 contribute, and there is no wrap. Each ajbj′ has degree at most m−2<m in x, so it is the plain product of the polynomials, with no use of xm=−1. Hence the coefficient of xt in cn, as an integer, is ∑uj,svj′,s′ over j+j′=n and s+s′=t, a sum of at most (Nt/2)(m/2) terms each at most (β−1)2, so it is less than q and its residue modulo q is the integer itself. Line L5 computes ∑n∑tcn,tβt+nm/2, which is
j,s∑j′,s′∑uj,svj′,s′β(s+s′)+(j+j′)m/2=uv.■