Documentation

HexRootsMathlib.Completeness.PelletDyadic

theorem HexRootsMathlib.pelletAt_of_bound {cs : Array Hex.GaussDyadic} {k : } {rlo rhi : Dyadic} (hk : k < cs.size) (hbound : i(Finset.range cs.size).erase k, Dyadic.toReal (cs.getD i (0, 0)).hi * Dyadic.toReal rhi ^ i < Dyadic.toReal (cs.getD k (0, 0)).lo * Dyadic.toReal rlo ^ k) :
Hex.pelletAt cs k rlo rhi = true

Converse to pelletAt_bound: a strict inequality between the exact real casts of the dyadic bounds makes the executable Boolean check succeed.

A factor-two exact-norm margin absorbs both Gaussian-dyadic coefficient bounds. The two radii may differ, matching the executable lower radius on the dominant term and upper radius on the omitted tail.

theorem HexRootsMathlib.pellet_one_comp_slack {p : Polynomial } {c z : } {s : Multiset } {d R r L : } (hp : p 0) (hroots : p.roots = z ::ₘ s) (hd : 0 < d) (hR : 0 R) (hr : 0 r) (hrR : r R) (hL : 0 L) (hremote : ws, d w - c) (hmargin : L * z - c + (L * R + (2 * L + 1) * z - c) * ((1 + R / d) ^ s.card - 1) < r) :

Strengthened translation form of the exact Pellet converse. The multiplier and the two radii make the coefficient slack required by an executable enclosure explicit; pelletAt_one_of_slack consumes the case L = 2.

theorem HexRootsMathlib.exactWitness_one_of_roots {p : Hex.ZPoly} {sq : Hex.DyadicSquare} {z : } {roots : Multiset } {d : } (hp : toPolyℂ p 0) (hsize : 1 < Hex.DensePoly.size p) (hroots : (toPolyℂ p).roots = z ::ₘ roots) (hd : 0 < d) (hremote : wroots, d w - GaussDyadic.toComplex sq.center) (hmargin : j < 3, have rlo := Dyadic.toReal (sq.radiusLo <<< j); have rhi := Dyadic.toReal (sq.radiusHi <<< j); 2 * z - GaussDyadic.toComplex sq.center + (2 * rhi + 5 * z - GaussDyadic.toComplex sq.center) * ((1 + rhi / d) ^ roots.card - 1) < rlo) :

A wide one-root isolation satisfying the explicit enclosure margin at the base, doubled, and quadrupled radii makes the exact Taylor Pellet witness succeed. The remote multiset retains root multiplicity.

theorem HexRootsMathlib.witness_one_of_roots {p : Hex.ZPoly} {sq : Hex.DyadicSquare} {z : } {roots : Multiset } {d : } (hp : toPolyℂ p 0) (hsize : 1 < Hex.DensePoly.size p) (hroots : (toPolyℂ p).roots = z ::ₘ roots) (hd : 0 < d) (hremote : wroots, d w - GaussDyadic.toComplex sq.center) (hmargin : j < 3, have rlo := Dyadic.toReal (sq.radiusLo <<< j); have rhi := Dyadic.toReal (sq.radiusHi <<< j); 2 * z - GaussDyadic.toComplex sq.center + (2 * rhi + 5 * z - GaussDyadic.toComplex sq.center) * ((1 + rhi / d) ^ roots.card - 1) < rlo) :

The exact completeness witness is accepted by the public soft-or-exact Pellet predicate.