You say...
****
now the DISREP property doesn't correspond to the varlist variable
anymore. Anything that uses the genvars internally and doesn't know about
some subprocedure doing ($ratdisrep ($rat exp var)) will fail now.
****
Any subprogram that uses the DISREP property without making sure
that the DISREP properties are consistent with genvar/varlist
data is erroneous. such programs should always have at their
top level something like
(defun set-up-disreps-then-do-foo(foo)
(mapc #'(lambda(v g)(setf (get g 'disrep) v)) varlist genvars)
(funcall foo))
It is possible that this mechanism is inherently a bad idea
because the use of global information like the disrep properties
on atoms means that recursively calling ratdisrep inside
ratdisrep leads to problems where disrep properties are
overwritten.
If you do this
rat(x,x)$
rat(y,y)$
rat(z,z)$ then (when this program was first written)
only ONE genvar would be used
If you do rat(x,x)+rat(y,y) then 2 separate disreps are
done and stuff is done with a varlist of (x,y) or maybe
(y,x)...