OK:
(%i1) is(equal(exp(x),0));
(%o1) false
Could be better (0 isn't in the range of any exponential function):
(%i2) is(equal(exp(%i*x),0));
(%o2) unknown
The proposed (below) meqp-by-csign function passes the test suite. Does
anybody
see any potential problems with this code? (infinities, ...)
(defun meqp-by-csign (z a b)
(let ((sgn) ($niceindicespref `((mlist) ,(gensym) ,(gensym) ,(gensym))))
(setq z (ratdisrep z)) ;; new, but not sure it's needed
(cond ((and (mexptp z) (eq t (mnqp (second z) 0))) nil) ;; new
stuff))))
(t
(setq z ($niceindices z))
(setq sgn (csign (sratsimp z)))
(cond ((eq '$zero sgn) t)
((and (eq sgn t) (islinear z '$%i))
(let ((r (meqp ($realpart z) 0))
(i (meqp ($imagpart z) 0)))
(cond ((or (eq r nil) (eq i nil)) nil)
((and (eq r t) (eq i t)) t)
(t `(($equal) ,a ,b)))))
((member sgn '($pos $neg $pn)) nil)
(t `(($equal) ,a ,b)))))))
Barton