MathGroup Archive 2011

[Date Index] [Thread Index] [Author Index]

Search the Archive

Solve never calls Equal?

  • To: mathgroup at
  • Subject: [mg120272] Solve never calls Equal?
  • From: Richard Fateman <fateman at>
  • Date: Sat, 16 Jul 2011 05:41:06 -0400 (EDT)
  • References: <> <ivovvt$qpa$>

(in a different thread, where replacing Equal by SameQ was proposed)

On 7/15/2011 2:07 AM, Andrzej Kozlowski wrote:
> Well, here is one example of what would happen:
> In[3]:= Unprotect[Equal]
> Out[3]= {Equal}
> In[5]:= Equal[a_, b__] := SameQ[a, b]
> In[6]:= Protect[Equal]
> Out[6]= {Equal}
> In[7]:= Solve[3 x  == 1, x]
> Out[7]= {}
> Doesn't look like a great idea to me.
> Andrzej Kozlowski

That's because  3*x==1  is immediately changed to False, and 
Solve[False, x] is indeed not a great idea.

Equal[a_?NumberQ, b_?NumberQ] :=  SameQ[a, b];

works better.  That Solve example works just fine.

Indeed, if one does this..

Equal[a_?NumberQ, b_?NumberQ] := (Print[test[a, b]]; SameQ[a, b]);

one can detect when, if ever, the Solve program calls Equal on two 
numbers.  It will print   test[...]  on such occasions.

When does Solve call Equal on 2 numbers?   I poked around a little and
found -- never.   I tried Integrate, Factor, Do, Product, Plot..  --never.

note that f[x_] := If [x == 0, 1, f[x - 1]*x]; f[5] computes 5! and 
calls Equal 6 times... but Factorial[5] does not.

Perhaps the internal support routines do not call Equal?
or calls to it are compiled away and not in reach of redefinition by the 
user?  Or do they call SameQ?   (no, they don't. I tried it).



  • Prev by Date: Re: Compile and Total
  • Next by Date: Re: Expectation function
  • Previous by thread: Re: Numerical accuracy/precision - this is a bug or a feature?
  • Next by thread: Re: Solve never calls Equal?