#13697: Improvements and corrections to QuotientRingElement
-----------------------------------+----------------------------------------
Reporter: Bouillaguet | Owner: malb
Type: enhancement | Status: new
Priority: minor | Milestone: sage-5.5
Component: commutative algebra | Keywords:
Work issues: | Report Upstream: N/A
Reviewers: | Authors:
Merged in: | Dependencies: #13670,#13671,#13675
Stopgaps: |
-----------------------------------+----------------------------------------
The class {{{QuotientRingElement}}}, which implements the operations an
element of the quotient `R/I` of a ring `R` by an ideal `I`, suffers from
several problems and limitations. Most of these were uncovered while
working on #13670 and #13675.
* While {{{QuotientRingElement}}} aims to be generic, it contains code
dedicated to the case where `R` is a multivariate polynomial ring. In
particular, the implementation of division first checks if `R` supports
the computation of Groebner bases. This is not the proper way to go ; a
special class should be created, following the approach taken for
univariate polynomial quotient rings ({{{PolynomialQuotientRing}}},
{{{PolynomialQuotientRingElement}}}). We should create
{{{MPolynomialQuotientRing}}} and {{{MPolynomialQuotientRingElement}}},
and host multivariate-polynomial-specific code here.
* The {{{is_unit()}}} function does almost nothing (it checks if its
argument is a unit in `R`). In the case of (multivariate) polynomial
rings, an actual test can be implemented.
* The class lacks an {{{is_regular()}}} methods (that detects zero
divisors).
* In the case of (multivariate) polynomial rings, {{{is_regular()}}} can
be implemented.
* The interest of {{{is_regular()}}} is that division by `x` should only
be allowed if `x` is regular.
* The present implementation of division has problems. It contains
multivariate-polynomial-specific code, which is bad. Furthermore, it
allows division by zero-divisors, even tough the result is not defined :
{{{
sage: R.<x,y> = QQ[]
sage: S = R.quotient_ring(R.ideal(x^2, y))
sage: S(2*x)/S(x)
S(2)
sage: S(2) * S(x) == S(2*x) # indeed, division works correctly....
True
sage: S(2+x) * S(x) == S(2*x) # but several "quotients" are possible,
because ``S(x)`` is a zero-divisor
}}}
In contrast, univariate polynomial rings behave more rigorously:
{{{
sage: P.<x> = QQ[]
sage: S = P.quotient_ring(x^2)
sage: S(2*x)/S(x)
ZeroDivisionError: element xbar of quotient polynomial ring not
invertible
}}}
* This raises the question of how we want division to proceed:
* ignore the problem? (current status, no overhead)
* test for regularity before dividing (mathematically better, may be
'''much''' slower)
* Clarifying all this would then open the possibility to have, for
example, special code to deal with ideals given by a regular chain instead
of a Groebner basis
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/13697>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica,
and MATLAB
--
You received this message because you are subscribed to the Google Groups
"sage-trac" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sage-trac?hl=en.