is(equal(exp(%i*x),0)) ---> unknown



How about:

(defun meqp-by-csign (z a b)
  (let ((sgn) ($niceindicespref `((mlist) ,(gensym) ,(gensym) ,(gensym))))
    (cond ((and (mexptp z) (eq t (mnqp (third z) '$minf)) (eq t (mnqp
   (second z) 0))) nil)
   (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)))))))


(1) The test suite is OK with this change. (The extra code gets called 3
times.)

(2) We have :(

  (%i3) is(equal(minf, -inf));
  (%o3) false

  (%i4) is(equal(minf, minf));
  (%o4) true

(3) The gamma failures have been fixed:

No unexpected errors found.
Evaluation took:
  129.031 seconds of real time
  129.031250 seconds of total run time (121.109375 user, 7.921875 system)
  [ Run times consist of 4.662 seconds GC time, and 124.370 seconds non-GC
  time. ]
  100.00% CPU
  6,045 forms interpreted
  4,738 lambdas converted
  411,870,521,592 processor cycles
  7,214,885,896 bytes consed

Barton