hex

9.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; nothing counts until an exact witness rechecks it.

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.isolate entry point below handles.