Nice work!
Another thing you might want to look at is simp-tagged expressions which are
not the same as their resimplifications, i.e.
(not (equal expr (resimplify expr)))
A few functions are not supposed to return normal simplified expressions
(factor(<integer>), cfdisrep); also, some flags will be lost, so 'equal'
isn't right.
-s
On Tue, Nov 17, 2009 at 4:28 PM, Dieter Kaiser <drdieterkaiser at web.de>wrote:
> I have written a test function to detect bad simplified Maxima
> expressions. The idea is that a well simplified or well formed Maxima
> expression does not have any nested unsimplified subexpression.
>
> The arguments are a FORM and a FLAG which indicates, if we expect a
> simplified or an unsimplified expression. The return value is T for a
> well formed and NIL for a bad formed expression.
>
> (defun well-formed-p (form flag)
> (let ((expr (specrepcheck form)))
> (cond ((atom expr))
> ((and (listp (car expr))
> (member (caar expr) '(mdefine lambda))))
> ((and flag
> (listp (car expr))
> (member 'simp (car expr)))
> (do ((l (cdr expr) (cdr l)))
> ((null l) t)
> (when (not (well-formed-p (car l) t))
> (return nil))))
> ((and (not flag)
> (listp (car expr)))
> (cond ((member 'simp (car expr))
> (do ((l (cdr expr) (cdr l)))
> ((null l) t)
> (when (not (well-formed-p (car l) t))
> (return nil))))
> (t t))))))
>
> Examples for well formed expressions:
>
> '((mplus) a b ((mtimes) x y z)) --> T
> '((mplus) a b ((mtimes simp) x y z)) --> T
> '((mplus simp) a b ((mtimes simp) x y z)) --> T
>
> Example for a bad formed expression:
>
> '((mplus simp) a b ((mtimes) x y)) --> NIL
>
> Expressions with lambda and mdefine are excluded from the test.
>
> I have done a first check for the whole testsuite and I have counted
> about 4000 bad simplified expressions as input to the simplifier. That
> is not too much, because I have counted every call to the simplifier and
> some expressions go very often through the simplifier. Furthermore, the
> simplifier is called about 10^7 times from the testsuite.
>
> A lot of bad expressions are harmless, e.g. contain unsimplified
> rational constants. Other expressions contain unsimplified trig
> expressions. I am not sure if nested subexpressions which contain a
> RATSIMP flag, but not a SIMP flag are well formed, e.g.
>
> ((MEXPT SIMP) $%E ((MTIMES RATSIMP) -1 $%I $T))
>
> Some more examples for bad formed expressions from the testsuite:
>
> Error 226:
> ((MTIMES SIMP) ((MEXPT SIMP) 2 ((RAT SIMP) 1 2))
> ((MEXPT SIMP) $%PI ((RAT SIMP) -1 2)) ((MEXPT SIMP) $X ((RAT SIMP) -1
> 2))
> ((%SINH) $X))
>
> Error 503:
> ((%INTEGRATE SIMP)
> ((MTIMES SIMP) ((MEXPT SIMP) $X -4)
> ((MEXPT SIMP) ((%SIN) ((MTIMES SIMP) $A $X)) 7))
> $X 0 $INF)
>
> Error 922:
> ((MTIMES SIMP) ((MEXPT SIMP) 4 ((MTIMES SIMP) ((RAT SIMP) 1 2) $V))
> ((%BESSEL_J) $V $Z) ((%GAMMA SIMP) ((MPLUS SIMP) 1 $V))
> ((MEXPT SIMP) $Z ((MTIMES SIMP) -1 $V))
> ((MEXPT SIMP) $%E ((MTIMES SIMP) $%I $Z)))
>
> Error 1748:
> (($CONJUGATE SIMP) ((%LOG) $X))
>
> Error 2732:
> ((MNCEXPT SIMP) ((MNCTIMES) $A $B) 2)
>
> Error 2990:
> ((MPLUS SIMP)
> ((MTIMES SIMP) ((RAT) 4 3) ((MEXPT SIMP) $%PI ((RAT SIMP) 1 2))
> ((%ERFC SIMP) ((MEXPT SIMP) $Z ((RAT SIMP) 1 2))))
> ((MTIMES SIMP) -1 ((MEXPT SIMP) $Z ((RAT SIMP) -3 2))
> ((MPLUS SIMP) ((RAT SIMP) -2 3) ((MTIMES SIMP) ((RAT SIMP) 4 3) $Z))
> ((MEXPT SIMP) $%E ((MTIMES SIMP) -1 $Z))))
>
> I will have a look at the different reasons for the simplification
> errors to reduce the number of bad formed expressions.
>
> Dieter Kaiser
>
> _______________________________________________
> Maxima mailing list
> Maxima at math.utexas.edu
> http://www.math.utexas.edu/mailman/listinfo/maxima
>