Re: [sage-devel] the default behaviour of reduce() for ideals
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/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
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