Quotient Ring Elements#
AUTHORS:
William Stein
- class sage.rings.quotient_ring_element.QuotientRingElement(parent, rep, reduce=True)#
Bases:
RingElement
An element of a quotient ring \(R/I\).
INPUT:
parent
- the ring \(R/I\)rep
- a representative of the element in \(R\); this is used as the internal representation of the elementreduce
- bool (optional, default: True) - if True, then the internal representation of the element isrep
reduced modulo the ideal \(I\)
EXAMPLES:
sage: R.<x> = PolynomialRing(ZZ) sage: S.<xbar> = R.quo((4 + 3*x + x^2, 1 + x^2)); S Quotient of Univariate Polynomial Ring in x over Integer Ring by the ideal (x^2 + 3*x + 4, x^2 + 1) sage: v = S.gens(); v (xbar,)
sage: loads(v[0].dumps()) == v[0] True
sage: R.<x,y> = PolynomialRing(QQ, 2) sage: S = R.quo(x^2 + y^2); S Quotient of Multivariate Polynomial Ring in x, y over Rational Field by the ideal (x^2 + y^2) sage: S.gens() # optional - sage.libs.singular (xbar, ybar)
We name each of the generators.
sage: S.<a,b> = R.quotient(x^2 + y^2) # optional - sage.libs.singular sage: a # optional - sage.libs.singular a sage: b # optional - sage.libs.singular b sage: a^2 + b^2 == 0 # optional - sage.libs.singular True sage: b.lift() # optional - sage.libs.singular y sage: (a^3 + b^2).lift() # optional - sage.libs.singular -x*y^2 + y^2
- is_unit()#
Return
True
if self is a unit in the quotient ring.EXAMPLES:
sage: R.<x,y> = QQ[]; S.<a,b> = R.quo(1 - x*y); type(a) # optional - sage.libs.singular <class 'sage.rings.quotient_ring.QuotientRing_generic_with_category.element_class'> sage: a*b # optional - sage.libs.singular 1 sage: S(2).is_unit() # optional - sage.libs.singular True
Check that github issue #29469 is fixed:
sage: a.is_unit() # optional - sage.libs.singular True sage: (a+b).is_unit() # optional - sage.libs.singular False
- lc()#
Return the leading coefficient of this quotient ring element.
EXAMPLES:
sage: R.<x,y,z> = PolynomialRing(GF(7), 3, order='lex') # optional - sage.rings.finite_rings sage: I = sage.rings.ideal.FieldIdeal(R) # optional - sage.rings.finite_rings sage: Q = R.quo(I) # optional - sage.rings.finite_rings sage: f = Q(z*y + 2*x) # optional - sage.rings.finite_rings sage: f.lc() # optional - sage.rings.finite_rings 2
- lift()#
If self is an element of \(R/I\), then return self as an element of \(R\).
EXAMPLES:
sage: R.<x,y> = QQ[]; S.<a,b> = R.quo(x^2 + y^2); type(a) # optional - sage.libs.singular <class 'sage.rings.quotient_ring.QuotientRing_generic_with_category.element_class'> sage: a.lift() # optional - sage.libs.singular x sage: (3/5*(a + a^2 + b^2)).lift() # optional - sage.libs.singular 3/5*x
- lm()#
Return the leading monomial of this quotient ring element.
EXAMPLES:
sage: R.<x,y,z> = PolynomialRing(GF(7), 3, order='lex') # optional - sage.rings.finite_rings sage: I = sage.rings.ideal.FieldIdeal(R) # optional - sage.rings.finite_rings sage: Q = R.quo(I) # optional - sage.rings.finite_rings sage: f = Q(z*y + 2*x) # optional - sage.rings.finite_rings sage: f.lm() # optional - sage.rings.finite_rings xbar
- lt()#
Return the leading term of this quotient ring element.
EXAMPLES:
sage: R.<x,y,z> = PolynomialRing(GF(7), 3, order='lex') # optional - sage.rings.finite_rings sage: I = sage.rings.ideal.FieldIdeal(R) # optional - sage.rings.finite_rings sage: Q = R.quo(I) # optional - sage.rings.finite_rings sage: f = Q(z*y + 2*x) # optional - sage.rings.finite_rings sage: f.lt() # optional - sage.rings.finite_rings 2*xbar
- monomials()#
Return the monomials in
self
.OUTPUT:
A list of monomials.
EXAMPLES:
sage: R.<x,y> = QQ[]; S.<a,b> = R.quo(x^2 + y^2); type(a) # optional - sage.libs.singular <class 'sage.rings.quotient_ring.QuotientRing_generic_with_category.element_class'> sage: a.monomials() # optional - sage.libs.singular [a] sage: (a + a*b).monomials() # optional - sage.libs.singular [a*b, a] sage: R.zero().monomials() # optional - sage.libs.singular []
- reduce(G)#
Reduce this quotient ring element by a set of quotient ring elements
G
.INPUT:
G
- a list of quotient ring elements
Warning
This method is not guaranteed to return unique minimal results. For quotients of polynomial rings, use
reduce()
on the ideal generated byG
, instead.EXAMPLES:
sage: P.<a,b,c,d,e> = PolynomialRing(GF(2), 5, order='lex') # optional - sage.rings.finite_rings sage: I1 = ideal([a*b + c*d + 1, a*c*e + d*e, # optional - sage.rings.finite_rings ....: a*b*e + c*e, b*c + c*d*e + 1]) sage: Q = P.quotient(sage.rings.ideal.FieldIdeal(P)) # optional - sage.rings.finite_rings sage: I2 = ideal([Q(f) for f in I1.gens()]) # optional - sage.rings.finite_rings sage: f = Q((a*b + c*d + 1)^2 + e) # optional - sage.rings.finite_rings sage: f.reduce(I2.gens()) # optional - sage.rings.finite_rings ebar
Notice that the result above is not minimal:
sage: I2.reduce(f) # optional - sage.rings.finite_rings 0
- variables()#
Return all variables occurring in
self
.OUTPUT:
A tuple of linear monomials, one for each variable occurring in
self
.EXAMPLES:
sage: R.<x,y> = QQ[]; S.<a,b> = R.quo(x^2 + y^2); type(a) # optional - sage.libs.singular <class 'sage.rings.quotient_ring.QuotientRing_generic_with_category.element_class'> sage: a.variables() # optional - sage.libs.singular (a,) sage: b.variables() # optional - sage.libs.singular (b,) sage: s = a^2 + b^2 + 1; s # optional - sage.libs.singular 1 sage: s.variables() # optional - sage.libs.singular () sage: (a + b).variables() # optional - sage.libs.singular (a, b)