fasttimes bug



Hi

fasttimes has a very old bug which makes it less usable
because it won't work if its first argument is $rat(1)$
because
(1) rat(1) is given an empty list of variables
unless it has been the result of some computation
involving some variables;
(2) fasttimes assumes that list of variables of the product
should be the same as the one of its first argument
instead of taking the union of the variables of both arguments


In fact we have:

(%i324) 
fasttimes(rat(1),rat(x));
Use `fasttimes' only on CRE polynomials with same varlists
  -- an error.  To debug this try debugmode(true);
(%i325) fasttimes(rat(x),rat(1));
Evaluation took 0.00 seconds (0.00 elapsed) using 776 bytes.
(%o325)/R/                             x
(%i326)


Despite the fact that rat(1) should be the same as remainder(1,rat(x))
they are different when used inside fasttimes because it seems
that remainder give to "1" the right list of variables


(%i328) rat(1);
Evaluation took 0.00 seconds (0.00 elapsed) using 232 bytes.
(%o328)/R/                             1
(%i329) remainder(rat(1),rat(x));
Evaluation took 0.00 seconds (0.00 elapsed) using 1.070 KB.
(%o329)/R/                             1
(%i330) is(%=%o328);
Evaluation took 0.00 seconds (0.00 elapsed) using 600 bytes.
(%o330)                              true
(%i331) fasttimes(remainder(rat(1),rat(x)),rat(x));
Evaluation took 0.00 seconds (0.00 elapsed) using 1.523 KB.
(%o331)/R/                             x



Its code is in ratout.lisp but I am not enough Lisp savy to debug it

(defmfun $fasttimes (x y)
   (cond ((and (not (atom x)) (not (atom y))
               (equal (car x) (car y)) (equal (caar x) 'mrat)
               (equal (cddr x) 1) (equal (cddr y) 1))
          (cons (car x)(cons (fptimes (cadr x)(cadr y))1)))
         (t (merror "Use `fasttimes' only on CRE polynomials with same 
varlists"))))



Any suggestions on how to fix it other than circumvent it?
Possibly a fix in the Lisp code?

    Fabrizio