The user documentation for rootscontract says that it "Converts products of roots into roots of products. ". But rootscontract misses converting x^a * y^a
to (x*y)^a
. Maybe rootscontract could be extended do do this; likely there would be a new value for the the option variable rootsconmode that controls this conversion.
For more discussion, please see https://sourceforge.net/p/maxima/bugs/4347/