PseudoRemainderSequence(R, polR)

prs.spad line 1 [edit on github]

This package contains some functions: discriminant, resultant, subResultantGcd, chainSubResultants, degreeSubResultant, lastSubResultant, resultantEuclidean, subResultantGcdEuclidean, semiSubResultantGcdEuclidean1, semiSubResultantGcdEuclidean2, etc. These procedures are coming from improvements of the subresultants algorithm.

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

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

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

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

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.

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.