When a > 0, Maxima does the simplification sqrt(a * x * y) --> sqrt(a) * sqrt(x * y).
In doing this, Maxima checks the signs of x and y twice. When x or y are messy expressions,
checking their signs might take a long time. Other than introducing a global variable that
instructs Maxima to skip the simplification sqrt(product) --> product square roots the second time,
I think there no way around checking the signs twice.
Maybe somebody would like to think about how simplification rules
could be turned off and on without resorting to (confusing) global
variables--an example of such a special is exptrlsw (I think).
Try this:
(%i2) assume(a > 0);
(%o2) [a>0]
(%i3) :lisp(trace simpexpt $sign)
(%i3) sqrt(a*x*y);
--Barton