Elements of Quotients of Univariate Polynomial Rings#

EXAMPLES: We create a quotient of a univariate polynomial ring over \(\ZZ\).

sage: R.<x> = ZZ[]
sage: S.<a> = R.quotient(x^3 + 3*x - 1)
sage: 2 * a^3
-6*a + 2

Next we make a univariate polynomial ring over \(\ZZ[x]/(x^3+3x-1)\).

sage: S1.<y> = S[]

And, we quotient out that by \(y^2 + a\).

sage: T.<z> = S1.quotient(y^2 + a)

In the quotient \(z^2\) is \(-a\).

sage: z^2
-a

And since \(a^3 = -3x + 1\), we have:

sage: z^6
3*a - 1
sage: R.<x> = PolynomialRing(Integers(9))
sage: S.<a> = R.quotient(x^4 + 2*x^3 + x + 2)
sage: a^100
7*a^3 + 8*a + 7
sage: R.<x> = PolynomialRing(QQ)
sage: S.<a> = R.quotient(x^3 - 2)
sage: a
a
sage: a^3
2

For the purposes of comparison in Sage the quotient element \(a^3\) is equal to \(x^3\). This is because when the comparison is performed, the right element is coerced into the parent of the left element, and \(x^3\) coerces to \(a^3\).

sage: a == x
True
sage: a^3 == x^3
True
sage: x^3
x^3
sage: S(x^3)
2

AUTHORS:

  • William Stein

class sage.rings.polynomial.polynomial_quotient_ring_element.PolynomialQuotientRingElement(parent, polynomial, check=True)#

Bases: Polynomial_singular_repr, CommutativeRingElement

Element of a quotient of a polynomial ring.

EXAMPLES:

sage: P.<x> = QQ[]
sage: Q.<xi> = P.quo([(x^2 + 1)])
sage: xi^2
-1
sage: singular(xi)                                                              # needs sage.libs.singular
xi
sage: (singular(xi)*singular(xi)).NF('std(0)')                                  # needs sage.libs.singular
-1
charpoly(var)#

The characteristic polynomial of this element, which is by definition the characteristic polynomial of right multiplication by this element.

INPUT:

  • var - string - the variable name

EXAMPLES:

sage: R.<x> = PolynomialRing(QQ)
sage: S.<a> = R.quo(x^3 -389*x^2 + 2*x - 5)
sage: a.charpoly('X')                                                       # needs sage.modules
X^3 - 389*X^2 + 2*X - 5
fcp(var='x')#

Return the factorization of the characteristic polynomial of this element.

EXAMPLES:

sage: R.<x> = PolynomialRing(QQ)
sage: S.<a> = R.quotient(x^3 -389*x^2 + 2*x - 5)
sage: a.fcp('x')                                                            # needs sage.modules
x^3 - 389*x^2 + 2*x - 5
sage: S(1).fcp('y')                                                         # needs sage.modules
(y - 1)^3
field_extension(names)#

Given a polynomial with base ring a quotient ring, return a 3-tuple: a number field defined by the same polynomial, a homomorphism from its parent to the number field sending the generators to one another, and the inverse isomorphism.

INPUT:

  • names - name of generator of output field

OUTPUT:

  • field

  • homomorphism from self to field

  • homomorphism from field to self

EXAMPLES:

sage: # needs sage.rings.number_field
sage: R.<x> = PolynomialRing(QQ)
sage: S.<alpha> = R.quotient(x^3 - 2)
sage: F.<a>, f, g = alpha.field_extension()
sage: F
Number Field in a with defining polynomial x^3 - 2
sage: a = F.gen()
sage: f(alpha)
a
sage: g(a)
alpha

Over a finite field, the corresponding field extension is not a number field:

sage: # needs sage.rings.finite_rings
sage: R.<x> = GF(25,'b')['x']
sage: S.<a> = R.quo(x^3 + 2*x + 1)
sage: F.<b>, g, h = a.field_extension()
sage: h(b^2 + 3)
a^2 + 3
sage: g(x^2 + 2)
b^2 + 2

We do an example involving a relative number field:

sage: # needs sage.rings.number_field
sage: R.<x> = QQ['x']
sage: K.<a> = NumberField(x^3 - 2)
sage: S.<X> = K['X']
sage: Q.<b> = S.quo(X^3 + 2*X + 1)
sage: F, g, h = b.field_extension('c')

Another more awkward example:

sage: # needs sage.rings.number_field
sage: R.<x> = QQ['x']
sage: K.<a> = NumberField(x^3 - 2)
sage: S.<X> = K['X']
sage: f = (X+a)^3 + 2*(X+a) + 1
sage: f
X^3 + 3*a*X^2 + (3*a^2 + 2)*X + 2*a + 3
sage: Q.<z> = S.quo(f)
sage: F.<w>, g, h = z.field_extension()
sage: c = g(z)
sage: f(c)
0
sage: h(g(z))
z
sage: g(h(w))
w

AUTHORS:

  • Craig Citro (2006-08-06)

  • William Stein (2006-08-06)

is_unit()#

Return True if self is invertible.

Warning

Only implemented when the base ring is a field.

EXAMPLES:

sage: R.<x> = QQ[]
sage: S.<y> = R.quotient(x^2 + 2*x + 1)
sage: (2*y).is_unit()
True
sage: (y + 1).is_unit()
False
lift()#

Return lift of this polynomial quotient ring element to the unique equivalent polynomial of degree less than the modulus.

EXAMPLES:

sage: R.<x> = PolynomialRing(QQ)
sage: S.<a> = R.quotient(x^3 - 2)
sage: b = a^2 - 3
sage: b
a^2 - 3
sage: b.lift()
x^2 - 3
list(copy=True)#

Return list of the elements of self, of length the same as the degree of the quotient polynomial ring.

EXAMPLES:

sage: R.<x> = PolynomialRing(QQ)
sage: S.<a> = R.quotient(x^3 + 2*x - 5)
sage: a^10
-134*a^2 - 35*a + 300
sage: (a^10).list()
[300, -35, -134]
matrix()#

The matrix of right multiplication by this element on the power basis for the quotient ring.

EXAMPLES:

sage: R.<x> = PolynomialRing(QQ)
sage: S.<a> = R.quotient(x^3 + 2*x - 5)
sage: a.matrix()                                                            # needs sage.modules
[ 0  1  0]
[ 0  0  1]
[ 5 -2  0]
minpoly()#

The minimal polynomial of this element, which is by definition the minimal polynomial of the matrix() of this element.

ALGORITHM: Use minpoly_mod() if possible, otherwise compute the minimal polynomial of the matrix().

EXAMPLES:

sage: R.<x> = PolynomialRing(QQ)
sage: S.<a> = R.quotient(x^3 + 2*x - 5)
sage: (a + 123).minpoly()                                                   # needs sage.modules
x^3 - 369*x^2 + 45389*x - 1861118
sage: (a + 123).matrix().minpoly()                                          # needs sage.modules
x^3 - 369*x^2 + 45389*x - 1861118

One useful application of this function is to compute a minimal polynomial of a finite-field element over an intermediate extension, rather than the absolute minimal polynomial over the prime field:

sage: # needs sage.rings.finite_rings
sage: F2.<i> = GF((431,2), modulus=[1,0,1])
sage: F6.<u> = F2.extension(3)
sage: (u + 1).minpoly()                                                     # needs sage.modules
x^6 + 425*x^5 + 19*x^4 + 125*x^3 + 189*x^2 + 239*x + 302
sage: ext = F6.over(F2)                                                     # needs sage.modules
sage: ext(u + 1).minpoly()  # indirect doctest                              # needs sage.modules
x^3 + (396*i + 428)*x^2 + (80*i + 39)*x + 9*i + 178
norm()#

The norm of this element, which is the determinant of the matrix of right multiplication by this element.

EXAMPLES:

sage: R.<x> = PolynomialRing(QQ)
sage: S.<a> = R.quotient(x^3 - 389*x^2 + 2*x - 5)
sage: a.norm()                                                              # needs sage.modules
5
rational_reconstruction(*args, **kwargs)#

Compute a rational reconstruction of this polynomial quotient ring element to its cover ring.

This method is a thin convenience wrapper around Polynomial.rational_reconstruction().

EXAMPLES:

sage: # needs sage.rings.finite_rings
sage: R.<x> = GF(65537)[]
sage: m = (x^11 + 25345*x^10 + 10956*x^9 + 13873*x^8 + 23962*x^7
....:      + 17496*x^6 + 30348*x^5 + 7440*x^4 + 65438*x^3 + 7676*x^2
....:      + 54266*x + 47805)
sage: f = (20437*x^10 + 62630*x^9 + 63241*x^8 + 12820*x^7 + 42171*x^6
....:      + 63091*x^5 + 15288*x^4 + 32516*x^3 + 2181*x^2 + 45236*x + 2447)
sage: f_mod_m = R.quotient(m)(f)
sage: f_mod_m.rational_reconstruction()
(51388*x^5 + 29141*x^4 + 59341*x^3 + 7034*x^2 + 14152*x + 23746,
 x^5 + 15208*x^4 + 19504*x^3 + 20457*x^2 + 11180*x + 28352)
trace()#

The trace of this element, which is the trace of the matrix of right multiplication by this element.

EXAMPLES:

sage: R.<x> = PolynomialRing(QQ)
sage: S.<a> = R.quotient(x^3 - 389*x^2 + 2*x - 5)
sage: a.trace()                                                             # needs sage.modules
389