Henry,
> (%i8) integrate(r,z,-sqrt(20-r^2),sqrt(20-r^2));
> 2
> Is r - 20 positive, negative, or zero?
>
> positive;
> Defint: Lower limit of integration must be real.
I don't see any bugs here. Maxima wants to ensure that the
limits of integration are real. In the absence of any info about r
(as supplied by assume), Maxima asks the user via the function asksign.
> (%i9) integrate(r,z,-sqrt(20-r^2),sqrt(20-r^2));
> Defint: Lower limit of integration must be real.
> -- an error. Quitting. To debug this try debugmode(true);
OK, this is a known bug: the previous asksign result, which caused an error,
wasn't cleaned up, and so it causes the same error.
> (%i1) integrate(r,z,-sqrt(20-r^2),sqrt(20-r^2));
> 2
> Is r - 20 positive, negative, or zero?
>
> negative;
>
> When I answer negative, it works
>
> (%o1) 2 r sqrt(20 - r^2 )
Well, that seems correct: r^2 - 20 < 0 iff 20 - r^2 > 0,
which implies the limits of integration are real.
asksign queries pop up in all kinds of places in Maxima;
I find it obnoxious. I'd rather see something like
if 20 - r^2 in reals then <foo> else undefined ('integral (<blah blah blah>))
although Maxima is not quite capable of that yet.
FWIW
Robert Dodier