Algorithm Search⌘K

Proofs: Subresultant PRS algorithm

These are the human proofs of Subresultant PRS algorithm, at full length.

The subresultant PRS algorithm computes the subresultant chain full

This proof shows: correctness.

Setting. RR is an integral domain with fraction field FF; f,g∈R[x]f, g \in R[x] with deg⁡f=m≥deg⁡g=n≥1\deg f = m \ge \deg g = n \ge 1. S0,…,Sn−1S_0, \ldots, S_{n-1} are the subresultants as defined on the page, sjs_j is the coefficient of xjx^j in SjS_j, and Sn=LC⁡(g)m−n−1g∈F[x]S_n = \operatorname{LC}(g)^{m-n-1} g \in F[x], with sn=LC⁡(g)m−ns_n = \operatorname{LC}(g)^{m-n}. Each SjS_j with j<nj < n lies in R[x]R[x], because its coefficients are determinants of matrices with entries in RR.

Theorem (structure of the subresultant chain). This is the fundamental theorem of Brown and Traub (1971), in the form of von zur Gathen and Gerhard, Section 11.2, and of Ducos (2000); we use it without proof.

  • (T0) Sn−1=prem⁡(f,g)/(−1)m−n+1S_{n-1} = \operatorname{prem}(f, g) / (-1)^{m-n+1}.
  • (T1) Let j<nj < n, let Sj+1S_{j+1} be regular (deg⁡Sj+1=j+1\deg S_{j+1} = j + 1), and let Sj≠0S_j \ne 0 have degree d≤jd \le j. Then Sk=0S_k = 0 for d<k<jd < k < j and Sd=(LC⁡(Sj)/sj+1)j−dSjS_d = (\operatorname{LC}(S_j) / s_{j+1})^{j-d} S_j; in particular SdS_d is regular.
  • (T2) In the situation of (T1), if d≥1d \ge 1, then Sd−1=prem⁡(Sj+1,Sj)/(−sj+1)j−d+2S_{d-1} = \operatorname{prem}(S_{j+1}, S_j) / (-s_{j+1})^{j-d+2}.
  • (T3) If Sj+1S_{j+1} is regular and Sj=0S_j = 0, then Sk=0S_k = 0 for all k<jk < j.

Lemma 1. For λ∈F∗\lambda \in F^*, prem⁡(λB,C)=λprem⁡(B,C)\operatorname{prem}(\lambda B, C) = \lambda \operatorname{prem}(B, C). Proof. prem⁡(B,C)=LC⁡(C)e(B mod C)\operatorname{prem}(B, C) = \operatorname{LC}(C)^{e} (B \bmod C) in F[x]F[x] with e=deg⁡B−deg⁡C+1e = \deg B - \deg C + 1, and (λB) mod C=λ(B mod C)(\lambda B) \bmod C = \lambda (B \bmod C). □\square

Invariant. At the start of each pass (line L5), with b=deg⁡Bb = \deg B:

  1. B≠0B \ne 0, SbS_b is regular, B=μSbB = \mu S_b for some μ∈F∗\mu \in F^*, and s=sbs = s_b;
  2. AA is the member before BB, and β=−LC⁡(A)⋅(−sa)a−b\beta = -\operatorname{LC}(A) \cdot (-s_a)^{a - b} on every pass but the first, where a=deg⁡Aa = \deg A and sas_a is the principal coefficient of the regular SaS_a (on the first pass, β=(−1)m−n+1\beta = (-1)^{m-n+1});
  3. the entries SkS_k for k≥bk \ge b that the algorithm stores are correct, and the stored entries for k<bk < b are still 0.

Start. A=fA = f, B=gB = g, b=nb = n, Sn=LC⁡(g)m−n−1gS_n = \operatorname{LC}(g)^{m-n-1} g is regular with sn=LC⁡(g)m−ns_n = \operatorname{LC}(g)^{m-n}, as on line L3, and B=LC⁡(g)−(m−n−1)SnB = \operatorname{LC}(g)^{-(m-n-1)} S_n. Line L4 sets β\beta as in part 2. No entry is stored yet.

One pass. Let j=b−1j = b - 1. Line L6 computes C=prem⁡(A,B)/βC = \operatorname{prem}(A, B) / \beta.

On the first pass, C=Sn−1C = S_{n-1} by (T0). On a later pass, A=νSaA = \nu S_a for some ν∈F∗\nu \in F^* by part 1 of the invariant from the previous pass, and the previous pass had C=BC = B equal to the subresultant Sa−1S_{a-1}, of degree bb, with SbS_b regular by (T1). By (T2) applied with j+1=aj + 1 = a and Sj=Sa−1S_j = S_{a-1} of degree bb, Sb−1=prem⁡(Sa,Sa−1)/(−sa)a−b+1S_{b-1} = \operatorname{prem}(S_a, S_{a-1}) / (-s_a)^{a-b+1}. By Lemma 1 and Sa=A/νS_a = A / \nu, with LC⁡(A)=νsa\operatorname{LC}(A) = \nu s_a:

Sb−1=prem⁡(A,B)ν (−sa)a−b+1=prem⁡(A,B)−LC⁡(A) (−sa)a−b=prem⁡(A,B)β.S_{b-1} = \frac{\operatorname{prem}(A, B)}{\nu \, (-s_a)^{a-b+1}} = \frac{\operatorname{prem}(A, B)}{-\operatorname{LC}(A) \, (-s_a)^{a-b}} = \frac{\operatorname{prem}(A, B)}{\beta}.

So in every pass C=Sb−1=SjC = S_{b-1} = S_j, and C∈R[x]C \in R[x], so the division on line L6 is exact.

If C=0C = 0, then Sj=0S_j = 0, and by (T3) all SkS_k with k<jk < j are zero, as stored. The algorithm returns at line L7 with the chain complete.

Otherwise line L8 stores Sj=CS_j = C. Let d=deg⁡Cd = \deg C and e=b−d≥1e = b - d \ge 1. By (T1), with Sj+1=SbS_{j+1} = S_b regular, Sk=0S_k = 0 for d<k<jd < k < j, which are still 0 as stored, and Sd=(LC⁡(C)/sb)j−dC=LC⁡(C)e−1C/se−1S_d = (\operatorname{LC}(C) / s_b)^{j-d} C = \operatorname{LC}(C)^{e-1} C / s^{e-1}. If e=1e = 1, then d=jd = j and this is CC itself; if e≥2e \ge 2, line L9 stores it. In both cases SdS_d is regular and lies in R[x]R[x], so the division on line L9 is exact. If d=0d = 0, all entries are now stored and the algorithm returns at line L10.

If d≥1d \ge 1, line L11 sets β=−LC⁡(B)(−sb)b−d\beta = -\operatorname{LC}(B) (-s_b)^{b-d}, line L12 sets s=sds = s_d, and line L13 shifts the pair to (B,C)(B, C). Now C=SjC = S_j is a nonzero multiple of the regular SdS_d, by (T1). So the invariant holds for the next pass, with aa replaced by bb and bb by dd.

Termination. deg⁡B\deg B falls strictly in each pass, so the loop ends after at most nn passes, at line L7 or L10.

The gcd. Over FF, prem⁡(A,B)\operatorname{prem}(A, B) is a nonzero constant times A mod BA \bmod B, and so is CC. So the pairs (A,B)(A, B) follow the Euclidean algorithm over FF up to constant factors, and they keep the set of common divisors in F[x]F[x]. At line L7, BB divides AA in F[x]F[x], so BB is an associate of gcd⁡(f,g)\gcd(f, g) over FF. At line L10, CC is a nonzero constant, so gcd⁡(f,g)=1\gcd(f, g) = 1 over FF. By Gauss's lemma, gcd⁡(cont⁡f,cont⁡g)⋅pp⁡(B)\gcd(\operatorname{cont} f, \operatorname{cont} g) \cdot \operatorname{pp}(B) is the gcd in Z[x]\mathbb{Z}[x] in the first case, and the content gcd alone in the second. ■\blacksquare

Back to Subresultant PRS algorithm