> Isn't this EV's central idea, actually, since in its basic form
> EV(<expression>) == ?MEVAL(?MEVALATOMS('(<expression>)))
> EV(<expression>,NOEVAL) == ?MEVALATOMS('(<expression>))
> modulo simplification and disrepping.
Fuller discussion coming, but forcing resimplification is actually an
important application of EV:
ex: log(a*b)
qex: '( '(log(a*b)) )
logexpand:'all$
ev(ex) => log(a)+log(b)
?meval(?mevalatoms('(ex))) => log(a)+log(b)
ev(ex,noeval) => log(a)+log(b)
?mevalatoms('(ex)) => log(a*b)
expand(ex,expop,expon) => log(a)+log(b)
ev(qex) => log(a*b)
?meval(?mevalatoms('(qex))) => log(a*b)
ev(qex,noeval) => '(log(a)+log(b))
?mevalatoms('(qex)) => '(log(a*b))
expand(qex,expop,expon) => '(log(a)+log(b))
But even in this simple case, the equivalence is not straightforward.
In particular, the ev(qex) case does *not* force resimplification.... I
suspect that this is simply an incorrect optimization (on the assumption
that the meval would take care of simplification).
Except for that case, you could say that ev is equivalent to
expand(?meval(?mevalatoms('(<expression>))),expop,expon)
But I'm not sure that actually makes it easier to understand!!
-s