Re: [sage-devel] the default behaviour of reduce() for ideals

2012-08-06 Thread Marco Streng
I'm just letting the list know that there is a patch 
at http://trac.sagemath.org/sage_trac/ticket/13345 deprecating the default 
implementation of "Ideal_generic.reduce" in favour of NotImplementedError.

Op maandag 30 juli 2012 11:36:06 UTC+2 schreef Marco Streng het volgende:
>
> 2012/7/30 Thomas Feulner: 
> > Hi, 
> > 
> > in the definition of a QuotientRing there is the following assumption 
> > 
> > ASSUMPTION: 
> > 
> > ``I`` has a method ``I.reduce(x)`` returning the normal form 
> > of elements `x\in R`. In other words, it is required that 
> > ``I.reduce(x)==I.reduce(y)`` `\iff x-y \in I`, and 
> > ``x-I.reduce(x) in I``, for all `x,y\in R`. 
> > 
> > On the other hand, the default definition of reduce in 
> > sage/rings/ideal.py says 
> > def reduce(self, f): 
> > return f   # default 
> > 
> > Wouldn't it be better to raise a NotImplementedError? 
>
> It would be safer, but it sounds like it would break a lot of code. 
> Right now, reduce does exactly what it says: 
> """ 
> Return the reduction of the element of `f` modulo the ideal 
> `I` (=self). This is an element of `R` that is 
> equivalent modulo `I` to `f`. 
> """ 
>
> If you don't get any objections, you could change this documentation 
> and add a deprecation warning to this default implementation. Then 
> later it can be changed to NotImplementedError. 
>
> > These are the consequences: 
> > 
> > sage: Z16x. = Integers(16)[] 
> > sage: GR. =  Z16x.quotient(x**2 + x+1 ) 
> > sage: I = GR.ideal(4) 
> > sage: I.reduce(GR(6)) 
> > 6 # should be reduced mod 4 
> > another example is 
> > sage: J = Z16x.ideal([x+1, x+1]) # just to avoid that the ideal is 
> > identified as a principal ideal 
> > sage: R. = Z16x.quotient(J) 
> > sage: R(x) # should be 15 
>
> I'm fine with all the outputs above, though they can be improved. 
> However, I think the following is a bug: 
>
> sage: R(x+1) == 0 
> False 
>
> The only correct answer is "True". This goes wrong because the 
> "ASSUMPTION" that you quotes above is not satisfied. However, I would 
> trust R to be correct, because I never get to see the assumption, even 
> when I type 
>
> Z16x.quotient?? 
> R?? 
>
> Suggested fixes: 
> - add the assumption to the documentation of the quotient method of Z16x, 
> or 
> - add some checks to the equality tests of QuotientRing, or 
> - kill the default implementation of reduce as you suggest (but do 
> deprecation first). 
>
> (or some combination of the above) 
>
> Best, 
> Marco 
>

-- 
-- 
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org





Re: [sage-devel] the default behaviour of reduce() for ideals

2012-07-30 Thread Marco Streng
2012/7/30 Thomas Feulner :
> Hi,
>
> in the definition of a QuotientRing there is the following assumption
>
> ASSUMPTION:
>
> ``I`` has a method ``I.reduce(x)`` returning the normal form
> of elements `x\in R`. In other words, it is required that
> ``I.reduce(x)==I.reduce(y)`` `\iff x-y \in I`, and
> ``x-I.reduce(x) in I``, for all `x,y\in R`.
>
> On the other hand, the default definition of reduce in
> sage/rings/ideal.py says
> def reduce(self, f):
> return f   # default
>
> Wouldn't it be better to raise a NotImplementedError?

It would be safer, but it sounds like it would break a lot of code.
Right now, reduce does exactly what it says:
"""
Return the reduction of the element of `f` modulo the ideal
`I` (=self). This is an element of `R` that is
equivalent modulo `I` to `f`.
"""

If you don't get any objections, you could change this documentation
and add a deprecation warning to this default implementation. Then
later it can be changed to NotImplementedError.

> These are the consequences:
>
> sage: Z16x. = Integers(16)[]
> sage: GR. =  Z16x.quotient(x**2 + x+1 )
> sage: I = GR.ideal(4)
> sage: I.reduce(GR(6))
> 6 # should be reduced mod 4
> another example is
> sage: J = Z16x.ideal([x+1, x+1]) # just to avoid that the ideal is
> identified as a principal ideal
> sage: R. = Z16x.quotient(J)
> sage: R(x) # should be 15

I'm fine with all the outputs above, though they can be improved.
However, I think the following is a bug:

sage: R(x+1) == 0
False

The only correct answer is "True". This goes wrong because the
"ASSUMPTION" that you quotes above is not satisfied. However, I would
trust R to be correct, because I never get to see the assumption, even
when I type

Z16x.quotient??
R??

Suggested fixes:
- add the assumption to the documentation of the quotient method of Z16x, or
- add some checks to the equality tests of QuotientRing, or
- kill the default implementation of reduce as you suggest (but do
deprecation first).

(or some combination of the above)

Best,
Marco

-- 
-- 
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org





[sage-devel] the default behaviour of reduce() for ideals

2012-07-30 Thread Thomas Feulner
Hi,

in the definition of a QuotientRing there is the following assumption

ASSUMPTION:

``I`` has a method ``I.reduce(x)`` returning the normal form
of elements `x\in R`. In other words, it is required that
``I.reduce(x)==I.reduce(y)`` `\iff x-y \in I`, and
``x-I.reduce(x) in I``, for all `x,y\in R`.

On the other hand, the default definition of reduce in 
sage/rings/ideal.py says
def reduce(self, f):
return f   # default

Wouldn't it be better to raise a NotImplementedError?

These are the consequences:

sage: Z16x. = Integers(16)[]
sage: GR. =  Z16x.quotient(x**2 + x+1 )
sage: I = GR.ideal(4)
sage: I.reduce(GR(6))
6 # should be reduced mod 4

another example is
sage: J = Z16x.ideal([x+1, x+1]) # just to avoid that the ideal is 
identified as a principal ideal
sage: R. = Z16x.quotient(J)
sage: R(x) # should be 15

Best,
Thomas

-- 
-- 
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org