Documentation

TauCeti.RingTheory.Polynomial.Tschirnhaus

Tschirnhaus transforms #

Let f and T be polynomials over a commutative ring R. The Tschirnhaus transform of f by T is the polynomial whose roots are the values T(α) at the roots α of f, counted with multiplicity. It is defined on the coefficient side, as the resultant in X of f(X) and Y - T(X),

tschirnhausPolynomial f T = Res_X (f(X), Y - T(X)),

For monic f, it commutes with every base change R →+* S: the transform of a monic integral polynomial over ℚ is the image of its transform over ℤ, and the transform modulo p is its reduction. For arbitrary f, degree-dropping specialization need not preserve this resultant.

T is admissible for f over a field K when it separates the roots of f, that is, when a ↦ T(a) is injective on the roots of f in its splitting field. Admissibility does not depend on the field in which the roots are taken. For nonzero f over a field, the transform is separable exactly when f is separable and T is admissible. Admissible transforms are the classical remedy for a resolvent whose specialization at f is not separable: the resolvent is recomputed at the transform, whose roots are in bijection with those of f.

Main definitions #

Main results #

References #

noncomputable def Polynomial.tschirnhausPolynomial {R : Type u_1} [CommRing R] (f T : Polynomial R) :

The Tschirnhaus transform of f by T: the resultant in X of f(X) and Y - T(X), as a polynomial in Y. When f is monic and splits, its roots are the values T(α) at the roots α of f, counted with multiplicity (Polynomial.tschirnhausPolynomial_eq_prod_roots).

Equations
Instances For
    theorem Polynomial.tschirnhausPolynomial_eq_resultant {R : Type u_1} [CommRing R] {f : Polynomial R} (hf : f.Monic) (T : Polynomial R) {n : ℕ} (hn : T.natDegree ≤ n) :

    For monic f, the resultant defining the Tschirnhaus transform may be computed with any valid bound n on the degree of T.

    @[simp]
    theorem Polynomial.map_tschirnhausPolynomial {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] {f : Polynomial R} (hf : f.Monic) (T : Polynomial R) (φ : R →+* S) :

    Base change. For monic f, the Tschirnhaus transform commutes with every ring morphism. No hypothesis on T is needed, although its degree may drop.

    @[simp]
    theorem Polynomial.map_tschirnhausPolynomial_of_injective {R : Type u_1} {S : Type u_2} [CommRing R] [CommRing S] (f T : Polynomial R) (φ : R →+* S) (hφ : Function.Injective ⇑φ) :

    The Tschirnhaus transform commutes with an injective base change, without requiring f to be monic.

    theorem Polynomial.tschirnhausPolynomial_eq_C_mul_prod_roots {R : Type u_1} [CommRing R] [IsDomain R] {f : Polynomial R} (hs : f.Splits) (T : Polynomial R) :
    f.tschirnhausPolynomial T = C (f.leadingCoeff ^ (C X - map C T).natDegree) * (Multiset.map (fun (b : R) => X - C b) (Multiset.map (fun (x : R) => eval x T) f.roots)).prod

    The root-product formula. Over a domain in which f splits, its Tschirnhaus transform is its leading coefficient raised to the degree in X of Y - T(X), times the product of X - T(α) over the roots α of f, counted with multiplicity.

    theorem Polynomial.tschirnhausPolynomial_eq_prod_roots {R : Type u_1} [CommRing R] [IsDomain R] {f : Polynomial R} (hf : f.Monic) (hs : f.Splits) (T : Polynomial R) :
    f.tschirnhausPolynomial T = (Multiset.map (fun (b : R) => X - C b) (Multiset.map (fun (x : R) => eval x T) f.roots)).prod

    The monic root-product formula. Over a domain in which the monic polynomial f splits, the Tschirnhaus transform of f by T is ∏ (X - T(α)).

    @[simp]
    theorem Polynomial.roots_tschirnhausPolynomial {R : Type u_1} [CommRing R] [IsDomain R] {f : Polynomial R} (hs : f.Splits) (T : Polynomial R) :
    (f.tschirnhausPolynomial T).roots = Multiset.map (fun (x : R) => eval x T) f.roots

    For a polynomial over a domain that splits, the roots of its Tschirnhaus transform are the values of T at its roots, counted with multiplicity. Both sides are empty when f = 0.

    theorem Polynomial.isRoot_tschirnhausPolynomial {R : Type u_1} [CommRing R] [IsDomain R] {f : Polynomial R} (hf : f ≠ 0) {a : R} (ha : f.IsRoot a) (T : Polynomial R) :

    For a nonzero polynomial over a domain, the value of T at any root of f is a root of the Tschirnhaus transform; no splitting hypothesis is needed.

    The Tschirnhaus transform splits in every domain in which f splits.

    The Tschirnhaus transform of a monic polynomial is monic, over any commutative ring.

    @[simp]

    The Tschirnhaus transform of a monic polynomial has the same degree, whatever the degree of T, over any commutative ring.

    @[simp]

    The Tschirnhaus transform by X is the identity.

    @[simp]
    theorem Polynomial.tschirnhausPolynomial_C {R : Type u_1} [CommRing R] (f : Polynomial R) (c : R) :

    The Tschirnhaus transform by a constant c collapses every root to c.

    @[simp]
    theorem Polynomial.aroots_tschirnhausPolynomial {K : Type u_3} {L : Type u_4} [CommRing K] [CommRing L] [IsDomain L] [Algebra K L] {f : Polynomial K} (hf : f.Monic) (hs : (map (algebraMap K L) f).Splits) (T : Polynomial K) :
    (f.tschirnhausPolynomial T).aroots L = Multiset.map (fun (a : L) => (aeval a) T) (f.aroots L)

    If the monic polynomial f splits in the domain L, then the roots in L of the Tschirnhaus transform are the values of T at the roots of f in L, counted with multiplicity.

    @[simp]
    theorem Polynomial.rootSet_tschirnhausPolynomial {K : Type u_3} {L : Type u_4} [CommRing K] [CommRing L] [IsDomain L] [Algebra K L] {f : Polynomial K} (hf : f.Monic) (hs : (map (algebraMap K L) f).Splits) (T : Polynomial K) :
    (f.tschirnhausPolynomial T).rootSet L = (fun (a : L) => (aeval a) T) '' f.rootSet L

    If the monic polynomial f splits in the domain L, then the roots in L of the Tschirnhaus transform are the images under T of the roots of f in L.

    noncomputable def Polynomial.Monic.tschirnhausRootMap {K : Type u_3} {L : Type u_4} [CommRing K] [CommRing L] [IsDomain L] [Algebra K L] {f : Polynomial K} (hf : f.Monic) (T : Polynomial K) :
    ↑(f.rootSet L) → ↑((f.tschirnhausPolynomial T).rootSet L)

    The map from the roots of a monic polynomial f to the roots of its Tschirnhaus transform, sending α to T(α), in a domain L.

    Equations
    Instances For
      @[simp]
      theorem Polynomial.Monic.coe_tschirnhausRootMap {K : Type u_3} {L : Type u_4} [CommRing K] [CommRing L] [IsDomain L] [Algebra K L] {f : Polynomial K} (hf : f.Monic) (T : Polynomial K) (x : ↑(f.rootSet L)) :
      ↑(hf.tschirnhausRootMap T x) = (aeval ↑x) T

      Every root of the Tschirnhaus transform of a monic polynomial is the image of a root of the original polynomial.

      theorem Polynomial.splits_map_tschirnhausPolynomial {K : Type u_3} {L : Type u_4} [CommRing K] [CommRing L] [IsDomain L] [Algebra K L] {f : Polynomial K} (hf : f.Monic) (hs : (map (algebraMap K L) f).Splits) (T : Polynomial K) :

      If a monic polynomial splits after a base change, then its Tschirnhaus transform splits after the same base change.

      Over a field, the Tschirnhaus transform of a nonzero polynomial is nonzero.

      @[simp]
      theorem Polynomial.aroots_tschirnhausPolynomial_field {K : Type u_3} [Field K] {L : Type u_4} [CommRing L] [IsDomain L] [Algebra K L] {f : Polynomial K} (hs : (map (algebraMap K L) f).Splits) (T : Polynomial K) :
      (f.tschirnhausPolynomial T).aroots L = Multiset.map (fun (a : L) => (aeval a) T) (f.aroots L)

      In any domain in which a field polynomial splits, the roots of its transform are the values of T at its roots, counted with multiplicity. Both sides are empty when f = 0.

      @[simp]
      theorem Polynomial.rootSet_tschirnhausPolynomial_field {K : Type u_3} [Field K] {L : Type u_4} [CommRing L] [IsDomain L] [Algebra K L] {f : Polynomial K} (hs : (map (algebraMap K L) f).Splits) (T : Polynomial K) :
      (f.tschirnhausPolynomial T).rootSet L = (fun (a : L) => (aeval a) T) '' f.rootSet L

      The root set of the transform of a field polynomial is the image of the root set under T, in any domain in which f splits. Both sides are empty when f = 0.

      If a polynomial over a field splits after a base change to a domain, then its Tschirnhaus transform splits after the same base change.

      noncomputable def Polynomial.tschirnhausRootMap {K : Type u_3} [Field K] {L : Type u_4} [CommRing L] [IsDomain L] [Algebra K L] (f T : Polynomial K) :
      ↑(f.rootSet L) → ↑((f.tschirnhausPolynomial T).rootSet L)

      The map from the roots of a field polynomial to the roots of its Tschirnhaus transform in a domain, sending α to T(α).

      Equations
      Instances For
        @[simp]
        theorem Polynomial.coe_tschirnhausRootMap {K : Type u_3} [Field K] {L : Type u_4} [CommRing L] [IsDomain L] [Algebra K L] (f T : Polynomial K) (x : ↑(f.rootSet L)) :
        ↑(f.tschirnhausRootMap T x) = (aeval ↑x) T

        Every root in a splitting domain of the Tschirnhaus transform of a field polynomial is the image of a root of the original polynomial. For f = 0 the transform is 0 or 1, so both root sets are empty.

        T is admissible for f, or separates the roots of f, when a ↦ T(a) is injective on the roots of f in its splitting field. By Polynomial.tschirnhausAdmissible_iff_injOn, the splitting field may be replaced by any field in which f splits.

        Equations
        Instances For
          theorem Polynomial.tschirnhausAdmissible_iff_injOn {K : Type u_3} [Field K] {L : Type u_4} [Field L] [Algebra K L] {f T : Polynomial K} (hs : (map (algebraMap K L) f).Splits) :
          f.TschirnhausAdmissible T ↔ Set.InjOn (fun (a : L) => (aeval a) T) (f.rootSet L)

          Admissibility may be tested in any field in which f splits.

          @[simp]

          The Tschirnhaus transform by X is admissible.

          theorem Polynomial.separable_tschirnhausPolynomial_iff_of_splits {K : Type u_3} [Field K] {L : Type u_4} [Field L] [Algebra K L] {f : Polynomial K} (hf : f ≠ 0) (hs : (map (algebraMap K L) f).Splits) (T : Polynomial K) :
          (f.tschirnhausPolynomial T).Separable ↔ f.Separable ∧ Set.InjOn (fun (a : L) => (aeval a) T) (f.rootSet L)

          If the nonzero polynomial f splits in L, then its Tschirnhaus transform by T is separable if and only if f is separable and T is injective on the roots of f in L.

          Separability of the Tschirnhaus transform. For nonzero f, the Tschirnhaus transform by T is separable if and only if f is separable and T is admissible for f.

          theorem Polynomial.TschirnhausAdmissible.bijOn_rootSet {K : Type u_3} [Field K] {L : Type u_4} [Field L] [Algebra K L] {f T : Polynomial K} (hT : f.TschirnhausAdmissible T) (hs : (map (algebraMap K L) f).Splits) :
          Set.BijOn (fun (a : L) => (aeval a) T) (f.rootSet L) ((f.tschirnhausPolynomial T).rootSet L)

          The root sets correspond. If T is admissible for a polynomial f that splits in L, then a ↦ T(a) maps the roots of f in L bijectively onto the roots of the Tschirnhaus transform in L. Both root sets are empty when f = 0.

          noncomputable def Polynomial.TschirnhausAdmissible.rootSetEquiv {K : Type u_3} [Field K] {L : Type u_4} [Field L] [Algebra K L] {f T : Polynomial K} (hT : f.TschirnhausAdmissible T) (hs : (map (algebraMap K L) f).Splits) :

          The canonical equivalence from the roots of f to the roots of an admissible Tschirnhaus transform, sending α to T(α).

          Equations
          Instances For
            @[simp]
            theorem Polynomial.TschirnhausAdmissible.coe_rootSetEquiv_apply {K : Type u_3} [Field K] {L : Type u_4} [Field L] [Algebra K L] {f T : Polynomial K} (hT : f.TschirnhausAdmissible T) (hs : (map (algebraMap K L) f).Splits) (x : ↑(f.rootSet L)) :
            ↑((hT.rootSetEquiv hs) x) = (aeval ↑x) T
            @[simp]
            theorem Polynomial.TschirnhausAdmissible.aeval_coe_rootSetEquiv_symm_apply {K : Type u_3} [Field K] {L : Type u_4} [Field L] [Algebra K L] {f T : Polynomial K} (hT : f.TschirnhausAdmissible T) (hs : (map (algebraMap K L) f).Splits) (y : ↑((f.tschirnhausPolynomial T).rootSet L)) :
            (aeval ↑((hT.rootSetEquiv hs).symm y)) T = ↑y

            Applying T to the inverse image under the canonical root equivalence recovers the root.