#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.

Reply via email to