On Jun 4, 2008, at 8:40 AM, Dan Christensen wrote:

>
> "William Stein" <[EMAIL PROTECTED]> writes:
>
>> 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.
>
> I'm not sure what symbolic equations are currently used for,

Stuff like

sage: solve(x^2 == 5)
[x == -sqrt(5), x == sqrt(5)]

> but
> this kind of special casing can cause problems.  If I'm building
> up an equation using inputs that I don't control, my code may
> have unexpected problems if what it thinks is a symbolic equation
> turns into a boolean.

I agree, think we should either always (my preference) or never  
return a symbolic equation. "Can be definitely determined" could be  
expensive too.

> Maybe the heart of the matter is that we need a separate notation
> for symbolic equations vs. comparison.  E.g.
>
> sage: 3 == pi
> False
>
> sage: 3 === pi
> 3 === pi
>
> sage: 1.2 == 1.3
> False
>
> sage: 1.2 === 1.3
> 1.2 === 1.3
>
> Note that this gives you the ability to have symbolic equations
> when the components happen to not be symbolic.  (Does this even
> make sense given the current set-up?)
>
> I'm not sure what to do if the user requests a comparison that
> sage can't easily determine:
>
> sage: sqrt(3) + sqrt(8) == sqrt(5) + pi
>
> One idea would be to return a symbolic equation
>
>   sqrt(3) + sqrt(8) === sqrt(5) + pi
>
> but probably the best is to raise an exception:  if my code is
> expecting a boolean, then a symbolic equation may confuse it.
>
> So my SEP would be that == always returns a boolean or raises
> an exception, and === always returns a symbolic equation.
>
> The notation === is of course a topic for discussion.  If ===
> is chosen, it would have to use the pre-processor.  Is there
> another operator that would make sense?

This was actually one of the original proposals. One would also have  
to come up with operators for <, <=, >=, >, and !=. Also, in the  
current system, it is easy to do

sage: bool(3 == pi)
False
sage: if 3 == pi:
     print "bad"
....:
sage:


- Robert

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to