Documentation

HexRootsMathlib.Isolate

The unique complex root selected by an atom certificate.

Equations
Instances For

    The selected value is an interior simple root, unique in the atom's selected closed region.

    The selected value is a root.

    The selected root lies in the atom's stored circumscribed disc.

    The raw and separation-refined semantic-root interpretations agree.

    theorem HexRootsMathlib.array_mapM_isSome {α : Type u_1} {β : Type u_2} {f : αOption β} {xs : Array α} (h : xxs.toList, (f x).isSome = true) :

    An option-valued array map succeeds when its function succeeds on every input entry. Public because HexNumberFieldMathlib uses it to discharge success of the embedding and refinement mapM pipelines.

    theorem HexRootsMathlib.isolateComplexRoots?_run (p : Hex.ZPoly) (h : Hex.HasOnlySimpleRoots p) (atomPrec : ) (strategy : Hex.AtomStrategy) (hdegree : 0 < Hex.DensePoly.natDegree p) {atoms : Array (Hex.DyadicRootIsolation p)} (hrun : p.isolateComplexRoots? h atomPrec strategy = some atoms) :
    ∃ (rs : Array (Hex.Certified p)), Hex.isolateAll? p (max atomPrec (Hex.separationDepth p)) #[Hex.Component.cauchy p hdegree] strategy = some rs rs.size = atoms.size ∀ (i : ) (hi : i < rs.size) (hj : i < atoms.size), rs[i] = Hex.Certified.atom atoms[i]

    In the positive-degree branch, successful isolation is a successful Cauchy-started general driver run whose results correspond indexwise to the returned atoms.

    theorem HexRootsMathlib.isolateComplexRoots?_root_mem_of_pos (p : Hex.ZPoly) (h : Hex.HasOnlySimpleRoots p) (atomPrec : ) (strategy : Hex.AtomStrategy) (hdegree : 0 < Hex.DensePoly.natDegree p) {atoms : Array (Hex.DyadicRootIsolation p)} (hrun : p.isolateComplexRoots? h atomPrec strategy = some atoms) {z : } (hzroot : (toPolyℂ p).IsRoot z) :
    isoatoms.toList, DyadicRootIsolation.root iso = z

    Every root belongs to one of the atoms returned by successful positive-degree isolation.

    theorem HexRootsMathlib.isolateComplexRoots?_nonpositive (p : Hex.ZPoly) (h : Hex.HasOnlySimpleRoots p) (atomPrec : ) (strategy : Hex.AtomStrategy) (hdegree : ¬0 < Hex.DensePoly.natDegree p) {atoms : Array (Hex.DyadicRootIsolation p)} (hrun : p.isolateComplexRoots? h atomPrec strategy = some atoms) :

    A successful non-positive-degree call is the nonzero constant branch and returns no atoms, independently of strategy.

    theorem HexRootsMathlib.isolateComplexRoots?_prec (p : Hex.ZPoly) (h : Hex.HasOnlySimpleRoots p) (atomPrec : ) (strategy : Hex.AtomStrategy) {atoms : Array (Hex.DyadicRootIsolation p)} (hrun : p.isolateComplexRoots? h atomPrec strategy = some atoms) (iso : Hex.DyadicRootIsolation p) :
    iso atoms.toListmax atomPrec (Hex.separationDepth p) iso.square.prec

    Every returned atom meets the full driver target, not only the requested atom precision.

    theorem HexRootsMathlib.isolateComplexRoots?_refined (p : Hex.ZPoly) (h : Hex.HasOnlySimpleRoots p) (atomPrec : ) (strategy : Hex.AtomStrategy) {atoms : Array (Hex.DyadicRootIsolation p)} (hrun : p.isolateComplexRoots? h atomPrec strategy = some atoms) (iso : Hex.DyadicRootIsolation p) :
    iso atoms.toList(Hex.mahlerPrec p) iso.square.prec

    Every successful isolation result can be wrapped as a RefinedIsolation: the driver's separation target dominates mahlerPrec.

    theorem HexRootsMathlib.isolateComplexRoots?_roots_ne (p : Hex.ZPoly) (h : Hex.HasOnlySimpleRoots p) (atomPrec : ) (strategy : Hex.AtomStrategy) {atoms : Array (Hex.DyadicRootIsolation p)} (hrun : p.isolateComplexRoots? h atomPrec strategy = some atoms) {i j : } (hi : i < atoms.size) (hj : j < atoms.size) (hij : i j) :

    Distinct output indices select distinct semantic roots.

    theorem HexRootsMathlib.isolateComplexRoots?_disjoint (p : Hex.ZPoly) (h : Hex.HasOnlySimpleRoots p) (atomPrec : ) (strategy : Hex.AtomStrategy) {atoms : Array (Hex.DyadicRootIsolation p)} (hrun : p.isolateComplexRoots? h atomPrec strategy = some atoms) {i j : } (hi : i < atoms.size) (hj : j < atoms.size) (hij : i j) :

    Distinct output atoms have disjoint closed circumscribed discs, for every strategy accepted by the general isolation driver.

    theorem HexRootsMathlib.isolateComplexRoots?_count (p : Hex.ZPoly) (h : Hex.HasOnlySimpleRoots p) (atomPrec : ) (strategy : Hex.AtomStrategy) {atoms : Array (Hex.DyadicRootIsolation p)} (hrun : p.isolateComplexRoots? h atomPrec strategy = some atoms) :

    The number of returned atoms is the polynomial's complex natural degree. Together with isolateComplexRoots?_roots_ne, this records that the exact enumeration has no duplicate representatives.

    theorem HexRootsMathlib.isolateComplexRoots?_sound (p : Hex.ZPoly) (h : Hex.HasOnlySimpleRoots p) (atomPrec : ) (strategy : Hex.AtomStrategy) {atoms : Array (Hex.DyadicRootIsolation p)} (hrun : p.isolateComplexRoots? h atomPrec strategy = some atoms) :

    Successful isolation enumerates exactly the distinct complex roots and meets the requested precision, for every strategy and every executable edge case.

    @[reducible, inline]
    noncomputable abbrev Hex.DyadicRootIsolation.root {p : ZPoly} (iso : DyadicRootIsolation p) :

    Field-notation alias for an atom's semantic root.

    Equations
    Instances For