experimental meqp



-----"Robert Dodier"  wrote: -----

>OK. Is the new MEQP comparing lambda expressions?

Yes, it *tries* to compare lambda expressions:

(%i2) f : lambda([x,y],x+y)$
(%i3) g : lambda([a,b],a+b)$
(%i4) is(equal(f,g));
(%o4) true

Why do I say *tries*?

(%i7) is(equal(f-g,0));
Maxima was unable to evaluate the predicate:
equal(lambda([x,y],x+y)-lambda([a,b],a+b),0)

The division of labor between meqp and sign isn't
always clear.

>What does the new MEQP do for other kinds of local
>variables, e.g. summation indices?

Other than lambda expressions, it knows nothing about other
dummy variables. Some of this work should be the
responsibility of sign, not meqp.

>Btw what does the current version of the new code
>return for is(equal(true, false)) ?

ick---my code tries to use csign so it ends up in a mess. I'll
fix this (booleans, infinities, und, ...)

Another thing: the user documentation for equal says it uses
ratsimp. I don't think it does:

(%i1) is(equal(1/sqrt(2),sqrt(2)/2));
(%o1) false

(%i2) ratsimp(1/sqrt(2) -sqrt(2)/2);
(%o2) 0

My code *does* use ratsimp. I hope that this is OK?

(defun meqp-by-csign (a b)
  (let ((sgn (csign ($ratsimp (sub a b)) ...))


Barton