Documentation

Mathlib.FieldTheory.Perfect

Perfect fields and rings #

In this file we define perfect fields, together with a generalisation to (commutative) rings in prime characteristic.

Main definitions / statements: #

class PerfectRing (R : Type u_1) (p : โ„•) [CommSemiring R] [ExpChar R p] :

A perfect ring of characteristic p (prime) in the sense of Serre.

NB: This is not related to the concept with the same name introduced by Bass (related to projective covers of modules).

Instances
    theorem PerfectRing.ofSurjective (R : Type u_2) (p : โ„•) [CommRing R] [ExpChar R p] [IsReduced R] (h : Function.Surjective โ‡‘(frobenius R p)) :

    For a reduced ring, surjectivity of the Frobenius map is a sufficient condition for perfection.

    noncomputable def frobeniusEquiv (R : Type u_1) (p : โ„•) [CommSemiring R] [ExpChar R p] [PerfectRing R p] :

    The Frobenius automorphism for a perfect ring.

    Equations
      Instances For
        @[simp]
        theorem frobeniusEquiv_apply (R : Type u_1) (p : โ„•) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (a : R) :
        (frobeniusEquiv R p) a = (frobenius R p) a
        @[simp]
        theorem coe_frobeniusEquiv (R : Type u_1) (p : โ„•) [CommSemiring R] [ExpChar R p] [PerfectRing R p] :
        โ‡‘(frobeniusEquiv R p) = โ‡‘(frobenius R p)
        theorem frobeniusEquiv_def (R : Type u_1) (p : โ„•) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (x : R) :
        (frobeniusEquiv R p) x = x ^ p
        noncomputable def iterateFrobeniusEquiv (R : Type u_1) (p n : โ„•) [CommSemiring R] [ExpChar R p] [PerfectRing R p] :

        The iterated Frobenius automorphism for a perfect ring.

        Equations
          Instances For
            @[simp]
            theorem iterateFrobeniusEquiv_apply (R : Type u_1) (p n : โ„•) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (a : R) :
            @[simp]
            theorem coe_iterateFrobeniusEquiv (R : Type u_1) (p n : โ„•) [CommSemiring R] [ExpChar R p] [PerfectRing R p] :
            โ‡‘(iterateFrobeniusEquiv R p n) = โ‡‘(iterateFrobenius R p n)
            theorem iterateFrobeniusEquiv_def (R : Type u_1) (p n : โ„•) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (x : R) :
            (iterateFrobeniusEquiv R p n) x = x ^ p ^ n
            @[simp]
            theorem frobeniusEquiv_symm_apply_frobenius (R : Type u_1) (p : โ„•) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (x : R) :
            (frobeniusEquiv R p).symm ((frobenius R p) x) = x
            @[simp]
            theorem frobenius_apply_frobeniusEquiv_symm (R : Type u_1) (p : โ„•) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (x : R) :
            (frobenius R p) ((frobeniusEquiv R p).symm x) = x
            @[simp]
            theorem frobeniusEquiv_symm_pow_p (R : Type u_1) (p : โ„•) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (x : R) :
            (frobeniusEquiv R p).symm x ^ p = x
            theorem frobeniusEquiv_symm_pow (R : Type u_1) (p : โ„•) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (x : R) :
            (frobeniusEquiv R p).symm (x ^ p) = x

            Variant with ยท ^ p inside of frobeniusEquiv.

            @[simp]
            theorem iterate_frobeniusEquiv_symm_pow_p_pow (R : Type u_1) (p : โ„•) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (x : R) (n : โ„•) :
            (โ‡‘(frobeniusEquiv R p).symm)^[n] x ^ p ^ n = x
            theorem MonoidHom.map_frobeniusEquiv_symm {R : Type u_2} {S : Type u_3} [CommSemiring R] [CommSemiring S] (p : โ„•) [ExpChar R p] [PerfectRing R p] [ExpChar S p] [PerfectRing S p] (f : R โ†’* S) (x : R) :
            f ((frobeniusEquiv R p).symm x) = (frobeniusEquiv S p).symm (f x)

            The (frobeniusEquiv R p).symm version of MonoidHom.map_frobenius. (frobeniusEquiv R p).symm commute with any monoid homomorphisms.

            theorem RingHom.map_frobeniusEquiv_symm {R : Type u_2} {S : Type u_3} [CommSemiring R] [CommSemiring S] (p : โ„•) [ExpChar R p] [PerfectRing R p] [ExpChar S p] [PerfectRing S p] (f : R โ†’+* S) (x : R) :
            f ((frobeniusEquiv R p).symm x) = (frobeniusEquiv S p).symm (f x)
            theorem MonoidHom.map_iterate_frobeniusEquiv_symm {R : Type u_2} {S : Type u_3} [CommSemiring R] [CommSemiring S] (p : โ„•) [ExpChar R p] [PerfectRing R p] [ExpChar S p] [PerfectRing S p] (f : R โ†’* S) (n : โ„•) (x : R) :
            f ((โ‡‘(frobeniusEquiv R p).symm)^[n] x) = (โ‡‘(frobeniusEquiv S p).symm)^[n] (f x)
            theorem RingHom.map_iterate_frobeniusEquiv_symm {R : Type u_2} {S : Type u_3} [CommSemiring R] [CommSemiring S] (p : โ„•) [ExpChar R p] [PerfectRing R p] [ExpChar S p] [PerfectRing S p] (f : R โ†’+* S) (n : โ„•) (x : R) :
            f ((โ‡‘(frobeniusEquiv R p).symm)^[n] x) = (โ‡‘(frobeniusEquiv S p).symm)^[n] (f x)
            theorem injective_pow_p (R : Type u_1) (p : โ„•) [CommSemiring R] [ExpChar R p] [PerfectRing R p] {x y : R} (h : x ^ p = y ^ p) :
            x = y
            class PerfectField (K : Type u_1) [Field K] :

            A perfect field.

            See also PerfectRing for a generalisation in positive characteristic.

            Instances
              instance PerfectField.toPerfectRing {K : Type u_1} [Field K] [PerfectField K] (p : โ„•) [hp : ExpChar K p] :

              A perfect field of characteristic p (prime) is a perfect ring.

              If L / K is an algebraic extension, K is a perfect field, then L / K is separable.

              If L / K is an algebraic extension, K is a perfect field, then so is L.

              theorem Polynomial.roots_X_pow_char_pow_sub_C_pow {R : Type u_1} [CommRing R] [IsDomain R] {p n : โ„•} [ExpChar R p] [PerfectRing R p] {y : R} {m : โ„•} :
              ((X ^ p ^ n - C y) ^ m).roots = (m * p ^ n) โ€ข {(iterateFrobeniusEquiv R p n).symm y}
              theorem Polynomial.roots_X_pow_char_sub_C_pow {R : Type u_1} [CommRing R] [IsDomain R] {p : โ„•} [ExpChar R p] [PerfectRing R p] {y : R} {m : โ„•} :
              ((X ^ p - C y) ^ m).roots = (m * p) โ€ข {(frobeniusEquiv R p).symm y}
              noncomputable def Polynomial.rootsExpandToRoots {R : Type u_1} [CommRing R] [IsDomain R] (p : โ„•) [ExpChar R p] (f : Polynomial R) [DecidableEq R] :
              โ†ฅ((expand R p) f).roots.toFinset โ†ช โ†ฅf.roots.toFinset

              If f is a polynomial over an integral domain R of characteristic p, then there is a map from the set of roots of Polynomial.expand R p f to the set of roots of f. It's given by x โ†ฆ x ^ p, see rootsExpandToRoots_apply.

              Equations
                Instances For
                  @[simp]
                  theorem Polynomial.rootsExpandToRoots_apply {R : Type u_1} [CommRing R] [IsDomain R] (p : โ„•) [ExpChar R p] (f : Polynomial R) [DecidableEq R] (x : โ†ฅ((expand R p) f).roots.toFinset) :
                  โ†‘((rootsExpandToRoots p f) x) = โ†‘x ^ p
                  noncomputable def Polynomial.rootsExpandPowToRoots {R : Type u_1} [CommRing R] [IsDomain R] (p n : โ„•) [ExpChar R p] (f : Polynomial R) [DecidableEq R] :
                  โ†ฅ((expand R (p ^ n)) f).roots.toFinset โ†ช โ†ฅf.roots.toFinset

                  If f is a polynomial over an integral domain R of characteristic p, then there is a map from the set of roots of Polynomial.expand R (p ^ n) f to the set of roots of f. It's given by x โ†ฆ x ^ (p ^ n), see rootsExpandPowToRoots_apply.

                  Equations
                    Instances For
                      @[simp]
                      theorem Polynomial.rootsExpandPowToRoots_apply {R : Type u_1} [CommRing R] [IsDomain R] (p n : โ„•) [ExpChar R p] (f : Polynomial R) [DecidableEq R] (x : โ†ฅ((expand R (p ^ n)) f).roots.toFinset) :
                      โ†‘((rootsExpandPowToRoots p n f) x) = โ†‘x ^ p ^ n
                      noncomputable def Polynomial.rootsExpandEquivRoots {R : Type u_1} [CommRing R] [IsDomain R] (p : โ„•) [ExpChar R p] (f : Polynomial R) [DecidableEq R] [PerfectRing R p] :
                      โ†ฅ((expand R p) f).roots.toFinset โ‰ƒ โ†ฅf.roots.toFinset

                      If f is a polynomial over a perfect integral domain R of characteristic p, then there is a bijection from the set of roots of Polynomial.expand R p f to the set of roots of f. It's given by x โ†ฆ x ^ p, see rootsExpandEquivRoots_apply.

                      Equations
                        Instances For
                          @[simp]
                          theorem Polynomial.rootsExpandEquivRoots_apply {R : Type u_1} [CommRing R] [IsDomain R] (p : โ„•) [ExpChar R p] (f : Polynomial R) [DecidableEq R] [PerfectRing R p] (x : โ†ฅ((expand R p) f).roots.toFinset) :
                          โ†‘((rootsExpandEquivRoots p f) x) = โ†‘x ^ p
                          noncomputable def Polynomial.rootsExpandPowEquivRoots {R : Type u_1} [CommRing R] [IsDomain R] (p : โ„•) [ExpChar R p] (f : Polynomial R) [DecidableEq R] [PerfectRing R p] (n : โ„•) :
                          โ†ฅ((expand R (p ^ n)) f).roots.toFinset โ‰ƒ โ†ฅf.roots.toFinset

                          If f is a polynomial over a perfect integral domain R of characteristic p, then there is a bijection from the set of roots of Polynomial.expand R (p ^ n) f to the set of roots of f. It's given by x โ†ฆ x ^ (p ^ n), see rootsExpandPowEquivRoots_apply.

                          Equations
                            Instances For
                              @[simp]
                              theorem Polynomial.rootsExpandPowEquivRoots_apply {R : Type u_1} [CommRing R] [IsDomain R] (p : โ„•) [ExpChar R p] (f : Polynomial R) [DecidableEq R] [PerfectRing R p] (n : โ„•) (x : โ†ฅ((expand R (p ^ n)) f).roots.toFinset) :
                              โ†‘((rootsExpandPowEquivRoots p f n) x) = โ†‘x ^ p ^ n