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
Subject: 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
From: Richard Fateman
Date: Fri, 25 Feb 2011 11:06:21 -0800
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) ...