Elements of Quotients of Univariate Polynomial Rings#

EXAMPLES: We create a quotient of a univariate polynomial ring over Z.

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 Z[x]/(x3+3x1).

sage: S1.<y> = S[]

And, we quotient out that by y2+a.

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

In the quotient z2 is a.

sage: z^2
-a

And since a3=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 a3 is equal to x3. This is because when the comparison is performed, the right element is coerced into the parent of the left element, and x3 coerces to a3.

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)
xi
sage: (singular(xi)*singular(xi)).NF('std(0)')
-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')
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')
x^3 - 389*x^2 + 2*x - 5
sage: S(1).fcp('y')
(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: 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: 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: 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: 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()
[ 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()
x^3 - 369*x^2 + 45389*x - 1861118
sage: (a+123).matrix().minpoly()
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: F2.<i> = GF((431,2), modulus=[1,0,1])
sage: F6.<u> = F2.extension(3)
sage: (u+1).minpoly()
x^6 + 425*x^5 + 19*x^4 + 125*x^3 + 189*x^2 + 239*x + 302
sage: ext = F6.over(F2)
sage: ext(u+1).minpoly()  # indirect doctest
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()
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: 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()
389