Module: sage.rings.polynomial_quotient_ring
sage: R = PolynomialRing(RationalField(), 'x'); x = R.gen() sage: S = R.quotient(x**3-3*x+1, 'alpha') sage: S.gen()**2 in S True sage: x in S True sage: S.gen() in R False sage: 1 in S True
Module-level Functions
ring, polynomial, [name=None]) |
Create a quotient of a polynomial ring.
INPUT: ring -- a univariate polynomial ring in one variable. polynomial -- element name -- (optional) name for the variable OUTPUT: Creates the quotient ring R/I, where R is the ring and I is the principal ideal generated by the polynomial.
We create the quotient ring
, and demonstrate many
basic functions with it:
sage: Z = IntegerRing() sage: R = PolynomialRing(Z,'x'); x = R.gen() sage: S = R.quotient(x^3 + 7, 'a'); a = S.gen() sage: S Univariate Quotient Polynomial Ring in a over Integer Ring with modulus x^3 + 7 sage: a^3 -7 sage: S.is_field() False sage: a in S True sage: x in S True sage: a in R False sage: S.polynomial_ring() Univariate Polynomial Ring in x over Integer Ring sage: S.modulus() x^3 + 7 sage: S.degree() 3
We create the ``iterated'' polynomial ring quotient
sage: A = PolynomialRing(GF(2),'y'); y=A.gen(); print A Univariate Polynomial Ring in y over Finite Field of size 2 sage: B = A.quotient(y^2 + y + 1, 'y2'); print B Univariate Quotient Polynomial Ring in y2 over Finite Field of size 2 with modulus y^2 + y + 1 sage: C = PolynomialRing(B, 'x'); x=C.gen(); print C Univariate Polynomial Ring in x over Univariate Quotient Polynomial Ring in y2 over Finite Field of size 2 with modulus y^2 + y + 1 sage: R = C.quotient(x^3 - 5); print R Univariate Quotient Polynomial Ring in x over Univariate Quotient Polynomial Ring in y2 over Finite Field of size 2 with modulus y^2 + y + 1 with modulus x^3 + 1
Next we create a number field, but viewed as a quotient of a
polynomial ring over
:
sage: R = PolynomialRing(RationalField(), 'x'); x = R.gen() sage: S = R.quotient(x^3 + 2*x - 5, 'a') sage: S Univariate Quotient Polynomial Ring in a over Rational Field with modulus x^3 + 2*x - 5 sage: S.is_field() True sage: S.degree() 3
There are conversion functions for easily going back and forth
between quotients of polynomial rings over
and number
fields:
sage: K = S.number_field(); K Number Field in a with defining polynomial x^3 + 2*x - 5 sage: K.polynomial_quotient_ring() Univariate Quotient Polynomial Ring in a over Rational Field with modulus x^3 + 2*x - 5
The leading coefficient must be a unit (but need not be 1).
sage: R = PolynomialRing(Integers(9), 'x'); x = R.gen() sage: S = R.quotient(2*x^4 + 2*x^3 + x + 2, 'a') sage: S = R.quotient(3*x^4 + 2*x^3 + x + 2, 'a') Traceback (most recent call last): ... TypeError: polynomial (=3*x^4 + 2*x^3 + x + 2) must have unit leading coefficient
Another example:
sage: R, x = PolynomialRing(IntegerRing()).objgen() sage: f = x^2 + 1 sage: R.quotient(f) Univariate Quotient Polynomial Ring in x over Integer Ring with modulus x^2 + 1
x) |
Class: PolynomialQuotientRing_domain
sage: R, x = PolynomialRing(ZZ).objgen() sage: S, xbar = R.quotient(x^2 + 1, 'xbar').objgen() sage: S Univariate Quotient Polynomial Ring in xbar over Integer Ring with modulus x^2 + 1 sage: loads(S.dumps()) == S True sage: loads(xbar.dumps()) == xbar True
self, ring, polynomial, [name=None]) |
Special Functions: __reduce__
Class: PolynomialQuotientRing_field
sage: R, x = PolynomialRing(Q).objgen() sage: S, xbar = R.quotient(x^2 + 1, 'xbar').objgen() sage: S Univariate Quotient Polynomial Ring in xbar over Rational Field with modulus x^2 + 1 sage: loads(S.dumps()) == S True sage: loads(xbar.dumps()) == xbar True
self, ring, polynomial, [name=None]) |
Special Functions: __reduce__
Class: PolynomialQuotientRing_generic
sage: R, x = PolynomialRing(Integers(8)).objgen(); R Univariate Polynomial Ring in x over Ring of integers modulo 8 sage: S, xbar = R.quotient(x^2 + 1, 'xbar').objgen(); S Univariate Quotient Polynomial Ring in xbar over Ring of integers modulo 8 with modulus x^2 + 1
We demonstrate object persistence.
sage: loads(S.dumps()) == S True sage: loads(xbar.dumps()) == xbar True
We create some sample homomorphisms;
sage: R, x = PolynomialRing(ZZ).objgen() sage: S = R/(x^2-4) sage: f = S.hom([2]) sage: f Ring morphism: From: Univariate Quotient Polynomial Ring in x over Integer Ring with modulus x^2 - 4 To: Integer Ring Defn: x |--> 2 sage: f(x) 2 sage: f(x^2 - 4) 0 sage: f(x^2) 4
self, ring, polynomial, [name=None]) |
Functions: base_ring,
characteristic,
degree,
discriminant,
gen,
is_field,
krull_dimension,
modulus,
ngens,
number_field,
polynomial_ring
self) |
Return the base base ring of the polynomial ring, of which this ring is a quotient.
The base ring of
is
.
sage: R = PolynomialRing(IntegerRing(), 'z'); z = R.gen() sage: S = R.quotient(z^3 + z^2 + z + 1, 'beta') sage: S.base_ring() Integer Ring
Next we make a polynomial quotient ring over
and ask for its basering.
sage: T = PolynomialRing(S); W = T.quotient(T.gen()^99 + 99) sage: W.base_ring() Univariate Quotient Polynomial Ring in beta over Integer Ring with modulus z^3 + z^2 + z + 1
self) |
Return the characteristic of this quotient ring.
This is always the same as the characteristic of the base ring.
sage: R = PolynomialRing(IntegerRing(), 'z'); z = R.gen() sage: S = R.quotient(z - 19, 'a') sage: S.characteristic() 0 sage: R = PolynomialRing(GF(9), 'x'); x = R.gen() sage: S = R.quotient(x^3 + 1) sage: S.characteristic() 3
self) |
Return the degree of this quotient ring. The degree is the degree of the polynomial that we quotiented out by.
sage: R = PolynomialRing(GF(3), 'x'); x = R.gen() sage: S = R.quotient(x^2005 + 1) sage: S.degree() 2005
self, [v=None]) |
Return the discriminant of this ring over the base ring. This is by definition the discriminant of the polynomial that we quotiented out by.
sage: R = PolynomialRing(RationalField(), 'x'); x = R.gen() sage: S = R.quotient(x^3 + x^2 + x + 1) sage: S.discriminant() -16 sage: S = R.quotient((x + 1) * (x + 1)) sage: S.discriminant() 0
The discriminant of the quotient polynomial ring need not equal the discriminant of the corresponding number field, since the discriminant of a number field is by definition the discriminant of the ring ring of integers of the number field:
sage: S = R.quotient(x^2 - 8) sage: S.number_field().discriminant() 8 sage: S.discriminant() 32
self, [n=0]) |
Return the generator of this quotient ring. This is the equivalence class of the image of the generator of the polynomial ring.
sage: R = PolynomialRing(RationalField(), 'x'); x = R.gen() sage: S = R.quotient(x^2 - 8, 'gamma') sage: S.gen() gamma
self) |
Return whether or not this quotient ring is a field.
sage: R = PolynomialRing(IntegerRing(), 'z'); z = R.gen() sage: S = R.quotient(z^2-2) sage: S.is_field() False sage: R = PolynomialRing(RationalField(), 'x'); x = R.gen() sage: S = R.quotient(x^2 - 2) sage: S.is_field() True
self) |
Return the polynomial modulus of this quotient ring.
sage: R = PolynomialRing(GF(3), 'x'); x = R.gen() sage: S = R.quotient(x^2 - 2) sage: S.modulus() x^2 + 1
self) |
Return the number of generators of this quotient ring over the base ring. This function always returns 1.
sage: R = PolynomialRing(RationalField(), 'x'); x = R.gen() sage: S = PolynomialRing(R, 'y'); y = S.gen() sage: T = S.quotient(y + x, 'z') sage: T Univariate Quotient Polynomial Ring in z over Univariate Polynomial Ring in x over Rational Field with modulus y + x sage: T.ngens() 1
self) |
Return the number field isomorphic to this quotient polynomial ring, if possible.
sage: R = PolynomialRing(RationalField(), 'x'); x = R.gen() sage: S = R.quotient(x^29 - 17*x - 1, 'alpha') sage: K = S.number_field() sage: K Number Field in alpha with defining polynomial x^29 - 17*x - 1 sage: alpha = K.gen() sage: alpha^29 17*alpha + 1
self) |
Return the polynomial ring of which this ring is the quotient.
sage: R = PolynomialRing(RationalField(), 'x'); x = R.gen() sage: S = R.quotient(x^2-2) sage: S.polynomial_ring() Univariate Polynomial Ring in x over Rational Field
Special Functions: __call__,
__cmp__,
__reduce__,
__repr__,
_coerce_,
_is_valid_homomorphism_
self, x) |
Coerce x into this quotient ring. Anything that can be coerced into the polynomial ring can be coerced into the quotient.
INPUT: x -- object to be coerced OUTPUT: an element obtained by coercing x into this ring.
sage: R = PolynomialRing(RationalField(), 'x'); x = R.gen() sage: S = R.quotient(x^3-3*x+1, 'alpha') sage: S(x) alpha sage: S(x^3) 3*alpha - 1 sage: S([1,2]) 2*alpha + 1 sage: S([1,2,3,4,5]) 18*alpha^2 + 9*alpha - 3 sage: S(S.gen()+1) alpha + 1 sage: S(S.gen()^10+1) 90*alpha^2 - 109*alpha + 28
self, other) |
Compare self and other.
sage: Rx = PolynomialRing(RationalField(), 'x'); x = Rx.gen() sage: Ry = PolynomialRing(RationalField(), 'y'); y = Ry.gen() sage: Rx == Ry False sage: Qx = Rx.quotient(x^2+1) sage: Qy = Ry.quotient(y^2+1) sage: Qx == Qy False sage: Qx == Qx True sage: Qz = Rx.quotient(x^2+1) sage: Qz == Qx True