# PseudoRemainderSequence(R, polR)¶

This package contains some functions: discriminant, resultant, subResultantGcd, chainSubResultants, degreeSubResultant, lastSubResultant, resultantEuclidean, subResultantGcdEuclidean, \ ``semiSubResultantGcdEuclidean1`\ <l50736575646f52656d61696e64657253657175656e6365-5c20606073656d69537562526573756c74616e744763644575636c696465616e3160605c20>`, \ ``semiSubResultantGcdEuclidean2`\ <l50736575646f52656d61696e64657253657175656e6365-5c20606073656d69537562526573756c74616e744763644575636c696465616e3260605c20>`, etc. These procedures are coming from improvements of the subresultants algorithm.

chainSubResultants: (polR, polR) -> List polR

`chainSubResultants(P, Q)` computes the list of non zero subresultants of `P` and `Q`.

degreeSubResultant: (polR, polR, NonNegativeInteger) -> polR

`degreeSubResultant(P, Q, d)` computes a subresultant of degree `d`.

degreeSubResultantEuclidean: (polR, polR, NonNegativeInteger) -> Record(coef1: polR, coef2: polR, subResultant: polR)

`degreeSubResultantEuclidean(P, Q, d)` returns a subresultant `S_i` of degree `d` and carries out the equality `coef1*P + coef2*Q = S_i`.

discriminant: polR -> R

`discriminant(P)` returns the discriminant of `P`.

discriminantEuclidean: polR -> Record(coef1: polR, coef2: polR, discriminant: R)

`discriminantEuclidean(P)` carries out the equality `coef1 * P + coef2 * D(P) = discriminant(P)`.

divide: (polR, polR) -> Record(quotient: polR, remainder: polR)

`divide(F, G)` computes quotient and rest of the exact euclidean division of `F` by `G`.

gcd: (polR, polR) -> polR if R has GcdDomain

`gcd(P, Q)` returns the `gcd` of `P` and `Q`.

indiceSubResultant: (polR, polR, NonNegativeInteger) -> polR

`indiceSubResultant(P, Q, i)` returns the subresultant of indice `i`

indiceSubResultantEuclidean: (polR, polR, NonNegativeInteger) -> Record(coef1: polR, coef2: polR, subResultant: polR)

`indiceSubResultant(P, Q, i)` returns the subresultant `S_i(P, Q)` and carries out the equality `coef1*P + coef2*Q = S_i(P, Q)`

lastSubResultant: (polR, polR) -> polR

`lastSubResultant(P, Q)` computes the last non zero subresultant of `P` and `Q`

lastSubResultantEuclidean: (polR, polR) -> Record(coef1: polR, coef2: polR, subResultant: polR)

`lastSubResultantEuclidean(P, Q)` computes the last non zero subresultant `S` and carries out the equality `coef1*P + coef2*Q = S`.

LazardQuotient2: (polR, R, R, NonNegativeInteger) -> polR

`LazardQuotient2(F, x, y, n)` computes `(x^(n-1) * F) exquo y^(n-1)`

LazardQuotient: (R, R, NonNegativeInteger) -> R

`LazardQuotient(x, y, n)` computes `x^n exquo y^(n-1)`

next_sousResultant2: (polR, polR, polR, R) -> polR

`next_sousResultant2(P, Q, Z, s)` returns the subresultant `S_{e-1}` where `P ~ S_d, Q = S_{d-1}, Z = S_e, s = lc(S_d)`

resultant: (polR, polR) -> R

`resultant(P, Q)` returns the resultant of `P` and `Q`

resultantEuclidean: (polR, polR) -> Record(coef1: polR, coef2: polR, resultant: R)

`resultantEuclidean(P, Q)` carries out the equality `coef1*P + coef2*Q = resultant(P, Q)`

resultantReduit: (polR, polR) -> R if R has GcdDomain

`resultantReduit(P,Q)` returns the “reduce resultant” of `P` and `Q`.

resultantReduitEuclidean: (polR, polR) -> Record(coef1: polR, coef2: polR, resultantReduit: R) if R has GcdDomain

`resultantReduitEuclidean(P, Q)` returns the “reduce resultant” and carries out the equality `coef1*P + coef2*Q = resultantReduit(P, Q)`.

schema: (polR, polR) -> List NonNegativeInteger

`schema(P, Q)` returns the list of degrees of non zero subresultants of `P` and `Q`.

semiDegreeSubResultantEuclidean: (polR, polR, NonNegativeInteger) -> Record(coef2: polR, subResultant: polR)

`semiDegreeSubResultantEuclidean(P, Q, d)` returns a subresultant `S_i` of degree `d` and carries out the equality `... P + coef2*Q = S_i`. Warning: `degree(P) >= degree(Q)`.

semiDiscriminantEuclidean: polR -> Record(coef2: polR, discriminant: R)

`discriminantEuclidean(P)` carries out the equality `... P + coef2 * D(P) = discriminant(P)`. Warning: `degree(P) >= degree(Q)`.

semiIndiceSubResultantEuclidean: (polR, polR, NonNegativeInteger) -> Record(coef2: polR, subResultant: polR)

`semiIndiceSubResultantEuclidean(P, Q, i)` returns the subresultant `S_i(P, Q)` and carries out the equality `... P + coef2*Q = S_i(P, Q)` Warning: `degree(P) >= degree(Q)`.

semiLastSubResultantEuclidean: (polR, polR) -> Record(coef2: polR, subResultant: polR)

`semiLastSubResultantEuclidean(P, Q)` computes the last non zero subresultant `S` and carries out the equality `... P + coef2*Q = S`. Warning: `degree(P) >= degree(Q)`.

semiResultantEuclidean1: (polR, polR) -> Record(coef1: polR, resultant: R)

`semiResultantEuclidean1(P, Q)` carries out the equality `coef1.P + ... Q = resultant(P, Q)`.

semiResultantEuclidean2: (polR, polR) -> Record(coef2: polR, resultant: R)

`semiResultantEuclidean2(P, Q)` carries out the equality `... P + coef2*Q = resultant(P, Q)`. Warning: `degree(P) >= degree(Q)`.

semiResultantReduitEuclidean: (polR, polR) -> Record(coef2: polR, resultantReduit: R) if R has GcdDomain

`semiResultantReduitEuclidean(P, Q)` returns the “reduce resultant” and carries out the equality `... P + coef2*Q = resultantReduit(P, Q)`.

semiSubResultantGcdEuclidean1: (polR, polR) -> Record(coef1: polR, gcd: polR)

`semiSubResultantGcdEuclidean1(P, Q)` carries out the equality `coef1*P + ... Q = +/- S_i(P, Q)` where the degree (not the indice) of the subresultant `S_i(P, Q)` is as small as possible.

semiSubResultantGcdEuclidean2: (polR, polR) -> Record(coef2: polR, gcd: polR)

`semiSubResultantGcdEuclidean2(P, Q)` carries out the equality `... P + coef2*Q = +/- S_i(P, Q)` where the degree (not the indice) of the subresultant `S_i(P, Q)` is as small as possible. Warning: `degree(P) >= degree(Q)`.

subResultantGcd: (polR, polR) -> polR

`subResultantGcd(P, Q)` returns the `gcd` of two primitive polynomials `P` and `Q`.

subResultantGcdEuclidean: (polR, polR) -> Record(coef1: polR, coef2: polR, gcd: polR)

`subResultantGcdEuclidean(P, Q)` carries out the equality `coef1*P + coef2*Q = +/- S_i(P, Q)` where the degree (not the indice) of the subresultant `S_i(P, Q)` is as small as possible.