The Schur-Cohn test returns the exact number of zeros in the disc, or reports a singular step, after at most n passes full
This proof shows: correctness, termination.
Write D={∣z∣<1}, T={∣z∣=1}, and k(p) for the number of zeros of p in D, counted with multiplicity. For p of exact degree n with an=0, let p∗(z)=znp(1/zˉ)=∑i=0nan−izi and Tp=a0p−anp∗. The arithmetic is exact.
Lemma 1: the reciprocal polynomial
(a) ∣p∗(z)∣=∣p(z)∣ for z∈T. (b) p∗(0)=an=0, and for z=0, p∗(z)=0 if and only if p(1/zˉ)=0, with the same multiplicity. (c) If p has no zeros on T, then k(p∗)=n−k(p).
Proof. (a) On T, 1/zˉ=z and ∣zn∣=1. (b) The first claim is the constant coefficient. For z=0, zn=0, and w↦1/wˉ is an anti-holomorphic bijection of C∖{0}; writing p(w)=(w−ζ)mg(w) with g(ζ)=0 gives p∗(z)=zn(1/zˉ−ζ)mg(1/zˉ)=(1−ζˉz)mzn−mg(1/zˉ), which has a zero of multiplicity exactly m at z=1/ζˉ. (c) By (b), the zeros of p∗ in D are the images under w↦1/wˉ of the nonzero zeros of p with ∣w∣>1. Since p has no zeros on T, those are all zeros of p outside D, of total multiplicity n−k(p) (zeros at 0 are inside, and are not images of anything). □
Let p have exact degree n≥1 and no zeros on T, and let δ=Tp(0)=∣a0∣2−∣an∣2.
(a) degTp≤n−1.
(b) If δ=0, then Tp has no zeros on T, is not the zero polynomial, and k(Tp)=k(p) if δ>0, k(Tp)=n−k(p) if δ<0.
Proof. (a) The coefficient of zn in Tp is a0an−ana0=0. The constant term is a0a0−anan=δ.
(b) On T, by Lemma 1(a), ∣a0p(z)∣=∣a0∣∣p(z)∣ and ∣anp∗(z)∣=∣an∣∣p(z)∣, and ∣p(z)∣>0. If δ>0, then ∣a0∣>∣an∣, so ∣anp∗∣<∣a0p∣ on T. Hence ∣Tp∣≥(∣a0∣−∣an∣)∣p∣>0 on T, and by Rouché's theorem Tp and a0p have the same number of zeros in D, which is k(p) since a0=0. If δ<0, the roles swap: ∣a0p∣<∣anp∗∣ on T, Tp has no zeros on T, and k(Tp)=k(−anp∗)=k(p∗)=n−k(p) by Lemma 1(c). □
Lemma 3: singular cases
If p and p∗ have a common zero ζ, then every polynomial pj computed by the algorithm vanishes at ζ, and the algorithm returns "singular". This includes a zero ζ∈T, since then p∗(ζ)=ζnp(ζ)=0, and a pair of zeros ζ, 1/ζˉ, by Lemma 1(b).
Proof. If p(ζ)=p∗(ζ)=0, then Tp(ζ)=0, and if ζ=0 also (Tp)∗(ζ)=0: indeed (Tp)∗ is, up to a power of z coming from the degree drop, a0p∗−anp, which vanishes at ζ. (If ζ=0 then p∗(0)=an=0, so ζ=0.) Dividing by a positive rational in line L7 does not change zeros. By induction every pj and pj∗ vanish at ζ, as long as the algorithm runs. If no step were singular, the loop would end with a nonzero constant pJ, which does not vanish at ζ: a contradiction. So some δj+1 is 0, or some pj+1 is the zero polynomial, which also has δj+1=0, and line L6 returns "singular". □
Theorem
The algorithm stops after at most n passes. If it returns (k,"count"), then p has no zeros on T and k(p)=k.
Proof. Termination: by Lemma 2(a), degpj+1<degpj, and line L7 only removes leading zeros, so the loop runs at most n times.
Correctness: suppose the algorithm returns a count, with polynomials p0,…,pJ, pJ a nonzero constant and all δ1,…,δJ=0. If p0 had a zero on T, Lemma 3 would give "singular", so it has none. By Lemma 2(b) and induction on j, no pj has a zero on T, and
k(pj)=k(pj+1) if δj+1>0,k(pj)=nj−k(pj+1) if δj+1<0, where the division in line L7 by a positive rational changes neither the zeros of pj+1 nor the sign of δj+2, since δj+2 is homogeneous of degree 2 in the coefficients of pj+1. Since k(pJ)=0, line L9 computes exactly k(pJ−1),…,k(p0) by this recursion. □
Disc of centre c and radius r
The map w↦c+rw is a bijection from D onto {∣z−c∣<r} and from T onto the boundary circle, and it preserves multiplicities. So the zeros of q(w)=p(c+rw) in D correspond one to one to the zeros of p in the disc, and the theorem applies to q, which the implementation computes exactly by a Taylor shift and a scaling.