Documentation

HexRootsTheory.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 HexRootsTheory.array_mapM_isSome {α : Type u_1} {β : Type u_2} {f : α → Option β} {xs : Array α} (h : ∀ x ∈ xs.toList, (f x).isSome = true) :

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

    theorem HexRootsTheory.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 HexRootsTheory.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) :
    ∃ iso ∈ atoms.toList, DyadicRootIsolation.root iso = z

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

    theorem HexRootsTheory.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 HexRootsTheory.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.toList → max atomPrec ↑(Hex.separationDepth p) ≤ iso.square.prec

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

    theorem HexRootsTheory.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 HexRootsTheory.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 HexRootsTheory.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 HexRootsTheory.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 HexRootsTheory.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