Documentation

HexNumberFieldMathlib.Yun

noncomputable def Hex.PolyQuot.Roots.toPolynomialMap {p : ZPoly} {x : SimpleRoot p} [p.CheckedIrreducible] {K : Type u_1} [Semiring K] (embedding : PolyQuot p x →+* K) (f : DensePoly (PolyQuot p x)) :

Interpret an executable fixed-field polynomial after a field embedding.

Equations
Instances For

    Unfolding rule for the polynomial interpretation used by the Yun proofs.

    The executable fixed-field derivative agrees with the Mathlib derivative after dense-polynomial transport.

    The multiplicity of a root of a polynomial gcd is the minimum of its multiplicities in the two nonzero inputs.

    theorem Hex.PolyQuot.Roots.rootMultiplicity_of_mul_eq {K : Type u_1} [Field K] (quotient divisor dividend : Polynomial K) (hdividend : dividend 0) (hreconstruct : quotient * divisor = dividend) (z : K) :

    Root multiplicity subtracts across an exact polynomial quotient.

    A root's multiplicity is bounded by the degree of a nonzero polynomial.

    Executable field division subtracts root multiplicities when the divisor is known to divide the nonzero dividend.

    Monic normalization changes a nonzero polynomial only by a nonzero constant factor, so it preserves every root multiplicity.

    Associated polynomials have the same root multiplicity.

    The executable monic gcd divides each nonzero input.

    theorem Hex.PolyQuot.Roots.toPolynomial_div_ne_zero {K : Type u_1} [Field K] [DecidableEq K] (dividend divisor : DensePoly K) (hdivisor : divisor dividend) (hdividend : HexPolyMathlib.toPolynomial dividend 0) :
    HexPolyMathlib.toPolynomial (dividend / divisor) 0

    An exact quotient of a nonzero executable polynomial is nonzero.

    Monic normalization of a nonzero executable polynomial remains nonzero.

    A monic exact quotient subtracts the divisor's root multiplicity.

    theorem Hex.PolyQuot.Roots.map_monic_associated {p : ZPoly} {x : SimpleRoot p} [p.CheckedIrreducible] {K : Type u_1} [Field K] (embedding : PolyQuot p x →+* K) (f : DensePoly (PolyQuot p x)) (hf : toPolynomialMap embedding f 0) :
    Associated (toPolynomialMap embedding (monic f)) (toPolynomialMap embedding f)

    Monic normalization remains associated after any field embedding.

    theorem Hex.PolyQuot.Roots.rootMultiplicity_map_monic {p : ZPoly} {x : SimpleRoot p} [p.CheckedIrreducible] {K : Type u_1} [Field K] [DecidableEq K] (embedding : PolyQuot p x →+* K) (f : DensePoly (PolyQuot p x)) (hf : toPolynomialMap embedding f 0) (z : K) :

    Monic normalization preserves root multiplicity after any field embedding.

    theorem Hex.PolyQuot.Roots.rootMultiplicity_map_monicGcd {p : ZPoly} {x : SimpleRoot p} [p.CheckedIrreducible] {K : Type u_1} [Field K] [DecidableEq K] (embedding : PolyQuot p x →+* K) (f g : DensePoly (PolyQuot p x)) (hf : toPolynomialMap embedding f 0) (hg : toPolynomialMap embedding g 0) (z : K) :

    The executable monic gcd realizes the pointwise minimum of root multiplicities after any field embedding.

    theorem Hex.PolyQuot.Roots.map_monicGcd_ne_zero {p : ZPoly} {x : SimpleRoot p} [p.CheckedIrreducible] {K : Type u_1} [Field K] (embedding : PolyQuot p x →+* K) (f g : DensePoly (PolyQuot p x)) (hf : toPolynomialMap embedding f 0) :
    toPolynomialMap embedding (monic (f.gcd g)) 0

    The monic gcd of two polynomials that remain nonzero after a field embedding also remains nonzero.

    theorem Hex.PolyQuot.Roots.map_derivative {p : ZPoly} {x : SimpleRoot p} [p.CheckedIrreducible] {K : Type u_1} [Field K] (embedding : PolyQuot p x →+* K) (f : DensePoly (PolyQuot p x)) :

    The executable derivative commutes with every field embedding.

    theorem Hex.PolyQuot.Roots.map_div_mul {p : ZPoly} {x : SimpleRoot p} [p.CheckedIrreducible] {K : Type u_1} [Field K] (embedding : PolyQuot p x →+* K) (dividend divisor : DensePoly (PolyQuot p x)) (hdivisor : divisor dividend) :
    toPolynomialMap embedding (dividend / divisor) * toPolynomialMap embedding divisor = toPolynomialMap embedding dividend

    Exact executable division remains an exact factorization after a field embedding.

    theorem Hex.PolyQuot.Roots.map_div_ne_zero {p : ZPoly} {x : SimpleRoot p} [p.CheckedIrreducible] {K : Type u_1} [Field K] (embedding : PolyQuot p x →+* K) (dividend divisor : DensePoly (PolyQuot p x)) (hdivisor : divisor dividend) (hdividend : toPolynomialMap embedding dividend 0) :
    toPolynomialMap embedding (dividend / divisor) 0

    An exact quotient of a polynomial that stays nonzero after embedding also stays nonzero.

    theorem Hex.PolyQuot.Roots.rootMultiplicity_map_div {p : ZPoly} {x : SimpleRoot p} [p.CheckedIrreducible] {K : Type u_1} [Field K] (embedding : PolyQuot p x →+* K) (dividend divisor : DensePoly (PolyQuot p x)) (hdivisor : divisor dividend) (hdividend : toPolynomialMap embedding dividend 0) (z : K) :
    Polynomial.rootMultiplicity z (toPolynomialMap embedding (dividend / divisor)) = Polynomial.rootMultiplicity z (toPolynomialMap embedding dividend) - Polynomial.rootMultiplicity z (toPolynomialMap embedding divisor)

    Exact executable division subtracts root multiplicities after a field embedding.

    theorem Hex.PolyQuot.Roots.rootMultiplicity_map_monicDiv {p : ZPoly} {x : SimpleRoot p} [p.CheckedIrreducible] {K : Type u_1} [Field K] [DecidableEq K] (embedding : PolyQuot p x →+* K) (dividend divisor : DensePoly (PolyQuot p x)) (hdivisor : divisor dividend) (hdividend : toPolynomialMap embedding dividend 0) (z : K) :

    A monic exact quotient subtracts root multiplicities after a field embedding.

    theorem Hex.PolyQuot.Roots.map_monicDiv_ne_zero {p : ZPoly} {x : SimpleRoot p} [p.CheckedIrreducible] {K : Type u_1} [Field K] (embedding : PolyQuot p x →+* K) (dividend divisor : DensePoly (PolyQuot p x)) (hdivisor : divisor dividend) (hdividend : toPolynomialMap embedding dividend 0) :
    toPolynomialMap embedding (monic (dividend / divisor)) 0

    A monic exact quotient remains nonzero after a field embedding.

    structure Hex.PolyQuot.Roots.YunInvariant {p : ZPoly} {x : SimpleRoot p} [p.CheckedIrreducible] {K : Type u_1} [Field K] (embedding : PolyQuot p x →+* K) (z : K) (r k : ) (w repeated : DensePoly (PolyQuot p x)) :

    Pointwise semantic invariant of the Yun loop at multiplicity index k. The first polynomial contains the root once exactly while k ≤ r; the repeated part contains the remaining r - k copies.

    Instances For
      theorem Hex.PolyQuot.Roots.YunInvariant.step {p : ZPoly} {x : SimpleRoot p} [p.CheckedIrreducible] {K : Type u_1} [Field K] [DecidableEq K] (embedding : PolyQuot p x →+* K) (z : K) (r k : ) (w repeated : DensePoly (PolyQuot p x)) (invariant : YunInvariant embedding z r k w repeated) :
      have shared := monic (w.gcd repeated); have nextRepeated := monic (repeated / shared); YunInvariant embedding z r (k + 1) shared nextRepeated

      One executable Yun step advances the pointwise loop invariant.

      theorem Hex.PolyQuot.Roots.YunInvariant.component {p : ZPoly} {x : SimpleRoot p} [p.CheckedIrreducible] {K : Type u_1} [Field K] [DecidableEq K] (embedding : PolyQuot p x →+* K) (z : K) (r k : ) (w repeated : DensePoly (PolyQuot p x)) (invariant : YunInvariant embedding z r k w repeated) :
      have shared := monic (w.gcd repeated); have component := monic (w / shared); Polynomial.rootMultiplicity z (toPolynomialMap embedding component) = if k = r then 1 else 0

      The component produced at a Yun step contains the root exactly when the current index is its original multiplicity.

      theorem Hex.PolyQuot.Roots.YunInvariant.init {p : ZPoly} {x : SimpleRoot p} [p.CheckedIrreducible] {K : Type u_1} [Field K] [CharZero K] [DecidableEq K] (embedding : PolyQuot p x →+* K) (f : DensePoly (PolyQuot p x)) (hf : toPolynomialMap embedding f 0) (hdegree : (toPolynomialMap embedding f).natDegree 0) (z : K) :
      have normalized := monic f; have repeated := monic (normalized.gcd (derivative normalized)); have distinct := monic (normalized / repeated); YunInvariant embedding z (Polynomial.rootMultiplicity z (toPolynomialMap embedding f)) 1 distinct repeated

      The normalized derivative/gcd prelude establishes the Yun invariant at multiplicity index one.

      theorem Hex.PolyQuot.Roots.degree_pos_of_map_root {p : ZPoly} {x : SimpleRoot p} [p.CheckedIrreducible] {K : Type u_1} [Field K] (embedding : PolyQuot p x →+* K) (f : DensePoly (PolyQuot p x)) (hf : toPolynomialMap embedding f 0) {z : K} (hroot : (toPolynomialMap embedding f).IsRoot z) :

      A nonzero embedded polynomial with a root has positive executable degree.

      theorem Hex.PolyQuot.Roots.yun_sound {p : ZPoly} {x : SimpleRoot p} [p.CheckedIrreducible] {K : Type u_1} [Field K] [CharZero K] [DecidableEq K] (embedding : PolyQuot p x →+* K) (f : DensePoly (PolyQuot p x)) (hf : toPolynomialMap embedding f 0) (hdegree : 0 < f.natDegree) (z : K) (entry : DensePoly (PolyQuot p x) × ) (hentry : entry (yun f).toList) (hroot : (toPolynomialMap embedding entry.1).IsRoot z) :

      Every root of an emitted Yun component is a root of the input with the component's stored multiplicity.

      theorem Hex.PolyQuot.Roots.yun_complete {p : ZPoly} {x : SimpleRoot p} [p.CheckedIrreducible] {K : Type u_1} [Field K] [CharZero K] [DecidableEq K] (embedding : PolyQuot p x →+* K) (f : DensePoly (PolyQuot p x)) (hf : toPolynomialMap embedding f 0) (hdegree : 0 < f.natDegree) (z : K) (hroot : (toPolynomialMap embedding f).IsRoot z) :
      entry(yun f).toList, (toPolynomialMap embedding entry.1).IsRoot z entry.2 = Polynomial.rootMultiplicity z (toPolynomialMap embedding f)

      Every root of a positive-degree input occurs in an emitted Yun component at its exact multiplicity.