We are certainly going to cause confusion if we don't implement this symbolic simplification suggestion (+1):
sage: y=x-x sage: y 0 sage: y==0 0 == 0 sage: 0==0 True sage: i.e. not all 0's ae the same. Now, I can understand why that is the case (different rings) but it is not going to help beginner users. John 2008/5/16 <[EMAIL PROTECTED]>: > > > > > On Thu, 15 May 2008, William Stein wrote: > >> >> On Thu, May 15, 2008 at 10:42 PM, John H Palmieri >> <[EMAIL PROTECTED]> wrote: >>> >>> >>> >>> On May 15, 9:56 pm, "William Stein" <[EMAIL PROTECTED]> wrote: >>>> On Thu, May 15, 2008 at 9:48 PM, John H Palmieri <[EMAIL PROTECTED]> wrote: >>>> >>>> >>>> >>>>> Is this a bug? >>>> >>>>> sage: 3 == pi >>>>> 3 == pi >>>>> sage: i == i >>>>> I == I >>>> >>>>> Shouldn't this return "False" and "True", respectively? >>>> >>>> Those are symbolic equations: >>>> >>>> sage: type(I == I) >>>> <class 'sage.calculus.equations.SymbolicEquation'> >>>> >>>> It's just a more general case of: >>>> >>>> sage: var('a,b,c,x') >>>> (a, b, c, x) >>>> sage: a*x^2 + b*x + c == 0 >>>> a*x^2 + b*x + c == 0 >>>> sage: type(a*x^2 + b*x + c == 0) >>>> <class 'sage.calculus.equations.SymbolicEquation'> >>>> sage: solve(a*x^2 + b*x + c == 0, x) >>>> [x == (-sqrt(b^2 - 4*a*c) - b)/(2*a), x == (sqrt(b^2 - 4*a*c) - b)/(2*a)] >>> >>> Yes, except I, pi, and e are constants, not variables. >> >> They are elements of the symbolic ring: >> >> sage: parent(I) >> Symbolic Ring >> sage: parent(pi) >> Symbolic Ring >> sage: parent(e) >> Symbolic Ring >> >> I'm not claiming to tell you the ultimate way things "should be". I'm only >> explaining why they work the way they were and they do. >> >>> I suppose "bug" is not the right word, but I would content that this >>> behavior is not at all what beginning users will expect. I mean, if I >>> can do 'e**(i * pi)' and get -1, I would expect to be able to do '3 == >>> pi' and get "False". >>> >>> Or maybe I should say, if I can do 'a = 5; a == 7' and get "False", I >>> would expect to be able to do '3 == pi' and get "False". Why is pi >>> treated as a symbolic variable and not as a number? >> >> Pi is an element of the symbolic ring. What ring would you want >> it to be part of? There is no "ring of numbers" in Sage. There could >> be I suppose, but there isn't at present. >> >>> (Think about this from the beginning user's point of view. If they >>> see odd behavior, they're going to be confused. A goal should be to >>> not let this happen, or to provide a good way for them to figure out >>> why the behavior was actually reasonable in the first place. How do >>> you expect someone to react when they type in '3 == pi'? If they're >>> puzzled, what do you reasonably expect them to be able to do to >>> clarify things?) >> >> I would prefer "3 == pi" to return False. See below. Want to make >> a Sage Enhancement Proposal and implement it? :-) It would >> go something like this: >> >> Sage Enhancement Proposal: Change comparisons that involve >> elements of the symbolic ring to return True or False if both sides >> of the symbolic comparison are constants and the comparison can >> be definitely determined. [...] There would be a discussion on sage-devel, >> probably some voting, and then it would get done. > > +1! Robert Miller and I were discussing creating a language today. No > matter what was input, it would return an affirmative answer. Perhaps this > is a better idea: > > {{{ > class do_what_i_say: > def eval(self,str): > return str > doit = do_what_i_say() > }}} > > {{{ > %doit > foo bar > baz > /// > foo bar > baz > }}} > > Hey, check it out! Thanks to the Sage notebook, one can implement a > feature-rich computer algebra system in 3 lines! It computes anything you > ask for almost instantaneously! > > Seriously though, I understand *why* the following happens: > > sage: sqrt(2) > sqrt(2) > sage: sqrt(2) < 2 > sqrt(2) < 2 > > I even know how to disable it. But it seriously drives me nuts every time I > run into it. > > >> >>> >>>> That said, maybe something so obvious as I == I would best be simplified >>>> to True. But then people would argue that it is very inconsistent that >>>> sometimes symbolic equations are simplified to True/False and sometimes >>>> they aren't. >>>> >>>> In all cases you can do bool( a symbolic equation ) to get True or False. >>>> >>>> sage: bool(I == I) >>>> True >>>> >>>>> I know this >>>>> works: >>>> >>>>> sage: 3 == pi.n() >>>>> False >>>>> sage: 3 == RR(pi) >>>>> False >>>> >>>>> but I sort of expect pi to act like the number pi when used with >>>>> things like == or <, without using the .n() decoration. >>>> >>>> Nope. Pi is symbolic. >>>> >>>> I'm certainly open to doing some simplification to True/False of symbolic >>>> equalities though, when we can do so. I think the main reason we don't >>>> now is simply that nobody implemented it. Comments welcome. >>>> >>>> -- William >>>> >>> >> >> >> >> -- >> William Stein >> Associate Professor of Mathematics >> University of Washington >> http://wstein.org >> >> > >> > > > > > > --~--~---------~--~----~------------~-------~--~----~ To post to this group, send email to sage-devel@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://www.sagemath.org -~----------~----~----~----~------~----~------~--~---