Isolate the real roots of p ∈ ℤ[x]: try the fast Descartes engine, fall
back to the Sturm engine on its none. Both engines produce the same
certified RealRootIsolations p, so the result carries a full Sturm-count
witness regardless of which one found it. Returns none only when both
engines decline (e.g. non-squarefree input); the companion proves this never
happens for squarefree p.
Equations
- p.isolateRealRoots? = (p.isolateDescartes? <|> p.isolateSturm?)