Solve never calls Equal?

• To: mathgroup at smc.vnet.net
• Subject: [mg120272] Solve never calls Equal?
• From: Richard Fateman <fateman at cs.berkeley.edu>
• Date: Sat, 16 Jul 2011 05:41:06 -0400 (EDT)
• References: <201107150118.VAA23606@smc.vnet.net> <ivovvt\$qpa\$1@smc.vnet.net>

```(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).

Cheers

RJF

```

• 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?