Shouldn't is/equal use more powerful techniques? WAS: if x*(y+z)=x*y+x*z then print(true) else print(false); yields false



On 2/25/2011 10:45 AM, Stavros Macrakis wrote:
> That said, Maxima doesn't (and can't) guarantee that is( equal( a , b 
> ) ) will always give a complete answer, for example:
>
>      is(equal(1-sin(x)^2,cos(x)^2));
>               =>    unknown
>
> It turns out that is/equal is basically using ratsimp and some other 
> techniques, probably to avoid 'expensive' operations.  Nowadays (given 
> how much faster and larger computers are), it might make sense for it 
> to try ratsimp(exponentialize(logarc(...))) if ratsimp returns 
> unknown.  (Probably shouldn't use radcan, which may be over-eager in 
> its simplifications.)
>
>
Lisp has programs like  member  which have optional arguments to 
specific what kind of equality test to use..

(member  3 '(3.0 4.0) :test 'eq)   is false  (i.e. nil)
(member  3 '(3.0 4.0) :test '=)      is  true   (actually,  (3.0 4.0) 
which being non-nil can be used as true).

So Maxima could have something like

equal(x, y, transformations=[ratsimp, trigsimp])

This is not really so useful as in the case of membership, because one 
could do this, too

  is (ratsimp(x-y)=0)  ...