Documentation

HexRootsMathlib.Completeness.RootFreeConverse

A factor-two exact-norm margin at coefficient zero absorbs both Gaussian dyadic coefficient bounds and makes the executable Pellet check succeed.

theorem HexRootsMathlib.rootFree_one_root_of_margin {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 - DyadicSquare.center sq) (hmargin : have R := Dyadic.toReal sq.radiusHi; have E := (1 + R / d) ^ roots.card - 1; 2 * (R + (R + z - DyadicSquare.center sq) * E) < z - DyadicSquare.center sq) :

If one root is separated from all the others and is far enough from the centre relative to the test radius, the actual executable T-zero test succeeds. The contrapositive gives the constant-radius survivor bound used by the glue argument.

theorem HexRootsMathlib.rootFree_of_roots {p : Hex.ZPoly} {s : Hex.DyadicSquare} {d : } (hp : toPolyℂ p 0) (hsize : 0 < Hex.DensePoly.size p) (hd : 0 < d) (hremote : z(toPolyℂ p).roots, d z - DyadicSquare.center s) (htail : 2 * ((1 + Dyadic.toReal s.radiusHi / d) ^ (toPolyℂ p).roots.card - 1) < 1) :

If every root is remote enough that the normalized positive-degree tail has mass below one half, the actual executable rootFree test succeeds.

A square retained by the T-zero filter lies within eight degree-scaled upper radii of an actual root.

theorem HexRootsMathlib.exists_root_ne_of_depth {p : Hex.ZPoly} {s : Hex.DyadicSquare} (hp : toPolyℂ p 0) (hsize : 0 < Hex.DensePoly.size p) (hprec : (Hex.separationDepth p) s.prec) (hkeep : Hex.rootFree p s true) :
z(toPolyℂ p).roots, z - DyadicSquare.center s < 2 ^ (-(Hex.mahlerPrec p)) * (1449 / 1024) / 32

At separationDepth, every retained square is extremely close to one root on the Mahler separation scale.

theorem HexRootsMathlib.root_near_of_simple {p : Hex.ZPoly} {s : Hex.DyadicSquare} (hp : toPolyℂ p 0) (hsize : 1 < Hex.DensePoly.size p) {z : } (hzroot : (toPolyℂ p).IsRoot z) (hsimple : Polynomial.eval z (Polynomial.derivative (toPolyℂ p)) 0) (hprec : (Hex.separationDepth p) s.prec) (hkeep : Hex.rootFree p s true) (hzc : z - DyadicSquare.center s < 2 ^ (-(Hex.mahlerPrec p)) * (1449 / 1024) / 32) :

Once a locally simple root has been identified on the coarse Mahler scale, failure of T₀ places it within the sharp degree-independent survivor radius. Other roots of the polynomial may have multiplicity.

At separation depth the remote-root tail is already negligible, so a square retained by T-zero is within 65/32 executable radii of one root. The 1/384 tail at the implemented depth leaves enough room for enclosing a whole component with a loss of at most two precision levels.

Executable edge-or-corner adjacency is strictly less than four half-widths in the sup metric.

The geometric same-precision bound is also sufficient for executable adjacency.

Adjacent retained squares at separation depth have the same nearby root, with the sharp degree-independent bound on both centres.

A root is in the degree-independent proximity neighborhood of a retained square.

Equations
Instances For
    theorem HexRootsMathlib.nearRoot_unique {p : Hex.ZPoly} {s : Hex.DyadicSquare} (hp : toPolyℂ p 0) (hsep : (HexPolyZMathlib.toPolyℚ p).Separable) (hprec : (Hex.separationDepth p) s.prec) {z w : } (hz : NearRoot p s z) (hw : NearRoot p s w) :
    z = w

    Mahler separation makes the nearby root of a separation-depth square unique.

    theorem HexRootsMathlib.nearRoot_iff_of_edge {p : Hex.ZPoly} {s t : Hex.DyadicSquare} (hp : toPolyℂ p 0) (hsize : 1 < Hex.DensePoly.size p) (hsep : (HexPolyZMathlib.toPolyℚ p).Separable) (hprec : ∀ (u : Hex.DyadicSquare), u = s u = t(Hex.separationDepth p) u.prec) (hkeep : ∀ (u : Hex.DyadicSquare), u = s u = tHex.rootFree p u true) (hedge : Glue.Edge s t) (z : ) :
    NearRoot p s z NearRoot p t z

    Crossing one retained adjacency edge preserves the semantic nearby root.

    theorem HexRootsMathlib.nearRoot_iff_of_connected {p : Hex.ZPoly} {component : List Hex.DyadicSquare} {s t : Hex.DyadicSquare} (hp : toPolyℂ p 0) (hsize : 1 < Hex.DensePoly.size p) (hsep : (HexPolyZMathlib.toPolyℚ p).Separable) (hconnected : Glue.Connected component) (hprec : ucomponent, (Hex.separationDepth p) u.prec) (hkeep : ucomponent, Hex.rootFree p u true) (hs : s component) (ht : t component) (z : ) :
    NearRoot p s z NearRoot p t z

    Nearby-root semantics is constant on a connected retained component.

    theorem HexRootsMathlib.exists_nearRoot_of_connected {p : Hex.ZPoly} {component : List Hex.DyadicSquare} (hp : toPolyℂ p 0) (hsize : 1 < Hex.DensePoly.size p) (hsep : (HexPolyZMathlib.toPolyℚ p).Separable) (hconnected : Glue.Connected component) (hprec : ucomponent, (Hex.separationDepth p) u.prec) (hkeep : ucomponent, Hex.rootFree p u true) :
    z(toPolyℂ p).roots, ucomponent, z - DyadicSquare.center u 65 / 32 * Dyadic.toReal u.radiusHi

    Every connected component of retained separation-depth squares has one root satisfying the sharp proximity bound at every member.

    theorem HexRootsMathlib.exists_nearRoot_of_glueCovered {p : Hex.ZPoly} {squares component : Array Hex.DyadicSquare} (hp : toPolyℂ p 0) (hsize : 1 < Hex.DensePoly.size p) (hsep : (HexPolyZMathlib.toPolyℚ p).Separable) (hprec : usquares.toList, (Hex.separationDepth p) u.prec) (hkeep : usquares.toList, Hex.rootFree p u true) (hc : component (Hex.glueCovered squares).toList) :
    z(toPolyℂ p).roots, ucomponent.toList, z - DyadicSquare.center u 65 / 32 * Dyadic.toReal u.radiusHi

    Every actual glued component of retained separation-depth squares belongs to one root, uniformly satisfying the sharp proximity bound.