# Why does Solve not find solutions in terms of radicals?

Let's consider the following system of polynomial equations. The s and the capital S are two different variables (I know the capital-s is not recommended).

eqOrig = {s^2 - S^2 - b[0] - (S b[3] - s b[4])^2/(
4 (s^2 + S^2)^2) + (-s b[3] - S b[4])^2/(
4 (s^2 + S^2)^2) - (S b[2] + s b[5])^2/(
4 (s^2 + S^2)^2) + (-s b[2] + S b[5])^2/(
4 (s^2 + S^2)^2) - (S b[1] - s b[6])^2/(
4 (s^2 + S^2)^2) + (-s b[1] - S b[6])^2/(4 (s^2 + S^2)^2) == 0,
2 s S + ((S b[3] - s b[4]) (-s b[3] - S b[4]))/(
2 (s^2 + S^2)^2) + ((S b[2] + s b[5]) (-s b[2] + S b[5]))/(
2 (s^2 + S^2)^2) + ((S b[1] - s b[6]) (-s b[1] - S b[6]))/(
2 (s^2 + S^2)^2) - b[7] == 0};


After the substitution

eqReducedOrderGB =
GroebnerBasis[
Join[eqOrig, {s*S == stS, s^2 + S^2 == s2pS2}], {stS, s2pS2}, {s, S},
MonomialOrder -> EliminationOrder]


I can reduce the order of the initial equation from 8 to 4, and then solve the reduced equation in terms of radicals

(soleqReducedOrderGB =
Solve[Thread[eqReducedOrderGB == 0], {stS, s2pS2}]) // LeafCount
(* 40445 *)


The solution is given in terms of radicals

FreeQ[soleqReducedOrderGB, _Root]
(*True*)


If, instead, I solve the initial equation (do not try this unless you really want to investigate the problem since it takes few hours using Mma10.3)

(solOrig = Solve[eqOrig, {s, S}]) // LeafCount
(*5382364097*) !!!


The solution given for the first variable is simple enough.

solSolve[[1]][[1]] // LeafCount
(*7237*)


However, it cannot be written in terms of radicals

FreeQ[ToRadicals[solSolve[[1]][[1]]], _Root]
(* False *)


I think that the property (of a solution being written in radicals) should depend only on the equation itself and not on the way equation is solved.

• ... and your question is? why the two solutions are expressed differently? how you can show that they are equivalent? What would you like to know exactly? – MarcoB Mar 5 at 21:56
• Could you provide the value of solSolve[[1]][[1]] so we don't have to run the few hours long computation? – Chip Hurst Mar 5 at 21:59
• Or if it's too big, either Cases[solSolve[[1]][[1]], _Root, ∞] or even FirstCase[solSolve[[1]][[1]], _Root, {}, ∞] for that matter. – Chip Hurst Mar 5 at 22:01
• The sticky point is the final assertion. Obtaining radical solutions is not trivial even when they exist. The change of variables (introducing a level of radical nesting) has the effect of making the task trivial in this case. – Daniel Lichtblau Mar 5 at 23:10
• @ChipHurst You can get a good idea of the behavior, but much faster, by changing parameters to numbers: polysNum = Numerator[Together[eqOrig[[All, 1]]]] /. Thread[Array[b, 8, 0] -> RandomInteger[{-20, 20}, 8]] and then set result to zero and solve. – Daniel Lichtblau Mar 5 at 23:37