hex

12.1. Introduction🔗

HexRoots isolates the complex roots of a polynomial with integer coefficients. Each root is enclosed in a square in the complex plane with Gaussian-dyadic centre and power-of-two half-width, carrying a witness, checked by decide, that a certified region around the square holds exactly one root. As with real-root isolation the certificates are exact: the Taylor coefficients at the centre are exact Gaussian dyadics, and every witness is a strict comparison between two dyadic rationals, with no floats and no error budget. The search may use approximate dyadic reciprocals to place candidate squares, but those are only hints.

The computational core is Mathlib-free. It expands a polynomial about a Gaussian-dyadic centre, tests candidate squares, subdivides, and glues the survivors into connected components until each root sits alone in a certified region. The correspondence library HexRootsMathlib is the Mathlib companion: it proves that a certificate really does pin down a root of the polynomial viewed as an element of Polynomial ℂ, and that a successful whole-polynomial run enumerates every distinct root exactly once.

A single root is an atom. Atoms admit two interchangeable certificate forms: a Newton-Kantorovich contraction witness, whose certified region is the square itself, and a Pellet root-count witness, whose certified region is the square's circumscribed disc. A component that a Pellet witness certifies to hold k ≥ 2 roots with multiplicity, most naturally a repeated root, is reported instead as a cluster. A nonzero polynomial with only simple roots isolates entirely into atoms; that is the case the user-facing Hex.ZPoly.isolateComplexRoots? entry point below handles.