I don't think looking at the Lisp representation of %union(...) is very helpful to understanding its semantics. Reading the code of simp-%union might help a bit for an implementor. But for a *user*, %union is documented in the to_poly_solve section of the manual<http://maxima.sourceforge.net/docs/manual/en/maxima_79.html> . -s