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 : ) [Pow R ] :

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).

  • bijective_frobenius : Function.Bijective fun (x : R) => x ^ p

    A ring is perfect if the Frobenius map is bijective.

Instances
    instance one (M : Type u_1) [CommMonoid M] :
    instance mul (M : Type u_1) (p q : ) [CommMonoid M] [PerfectRing M p] [PerfectRing M q] :
    PerfectRing M (p * q)
    instance pow (M : Type u_1) (p : ) [CommMonoid M] [PerfectRing M p] (n : ) :
    PerfectRing M (p ^ n)
    noncomputable def powMulEquiv (M : Type u_1) (p : ) [CommMonoid M] [PerfectRing M p] :
    M ≃* M

    The p-th power automorphism for a perfect monoid.

    Equations
    Instances For
      @[simp]
      theorem powMulEquiv_apply (M : Type u_1) (p : ) [CommMonoid M] [PerfectRing M p] (a : M) :
      (powMulEquiv M p) a = a ^ p
      @[simp]
      theorem powMulEquiv_symm_pow_p (M : Type u_1) (p : ) [CommMonoid M] [PerfectRing M p] (x : M) :
      (powMulEquiv M p).symm x ^ p = x
      @[simp]
      theorem powMulEquiv_mul (M : Type u_1) (p q : ) [CommMonoid M] [PerfectRing M p] [PerfectRing M q] :
      theorem powMulEquiv_mul' (M : Type u_1) (p q : ) [CommMonoid M] [PerfectRing M p] [PerfectRing M q] :
      theorem powMulEquiv_pow (M : Type u_1) (p : ) [CommMonoid M] [PerfectRing M p] (n : ) :
      powMulEquiv M (p ^ n) = powMulEquiv M p ^ n
      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.

      @[simp]
      theorem bijective_frobenius (R : Type u_1) (p : ) [CommSemiring R] [ExpChar R p] [PerfectRing R p] :
      @[simp]
      theorem injective_frobenius (R : Type u_1) (p : ) [CommSemiring R] [ExpChar R p] [PerfectRing R p] :
      @[simp]
      theorem surjective_frobenius (R : Type u_1) (p : ) [CommSemiring R] [ExpChar R p] [PerfectRing R p] :
      noncomputable def frobeniusEquiv (R : Type u_1) (p : ) [CommSemiring R] [ExpChar R p] [PerfectRing R p] :
      R ≃+* R

      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] :
        R ≃+* R

        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] :
          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
          theorem iterateFrobeniusEquiv_add_apply (R : Type u_1) (p m n : ) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (x : R) :
          theorem iterateFrobeniusEquiv_zero_apply (R : Type u_1) (p : ) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (x : R) :
          theorem iterateFrobeniusEquiv_one_apply (R : Type u_1) (p : ) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (x : R) :
          (iterateFrobeniusEquiv R p 1) x = x ^ p
          @[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
          theorem polynomial_expand_eq (R : Type u_1) (p : ) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (f : Polynomial R) :
          @[simp]
          theorem not_irreducible_expand (R : Type u_2) (p : ) [CommSemiring R] [Fact (Nat.Prime p)] [CharP R p] [PerfectRing R p] (f : Polynomial R) :
          instance instPerfectRingProd (R : Type u_1) (p : ) [CommSemiring R] [ExpChar R p] [PerfectRing R p] (S : Type u_2) [CommSemiring S] [ExpChar S p] [PerfectRing S p] :
          PerfectRing (R × S) p
          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_expand_pow {R : Type u_1} [CommRing R] [IsDomain R] {p n : } [ExpChar R p] {f : Polynomial R} [PerfectRing R p] :
            ((expand R (p ^ n)) f).roots = p ^ n Multiset.map (⇑(iterateFrobeniusEquiv R p n).symm) f.roots
            theorem Polynomial.roots_expand {R : Type u_1} [CommRing R] [IsDomain R] {p : } [ExpChar R p] {f : Polynomial R} [PerfectRing R p] :
            theorem Polynomial.roots_X_pow_char_pow_sub_C {R : Type u_1} [CommRing R] [IsDomain R] {p n : } [ExpChar R p] [PerfectRing R p] {y : R} :
            (X ^ p ^ n - C y).roots = p ^ n {(iterateFrobeniusEquiv R p n).symm y}
            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 {R : Type u_1} [CommRing R] [IsDomain R] {p : } [ExpChar R p] [PerfectRing R p] {y : R} :
            (X ^ p - C y).roots = p {(frobeniusEquiv R p).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}
            theorem Polynomial.roots_expand_pow_map_iterateFrobenius {R : Type u_1} [CommRing R] [IsDomain R] {p n : } [ExpChar R p] {f : Polynomial R} [PerfectRing R p] :
            Multiset.map (⇑(iterateFrobenius R p n)) ((expand R (p ^ n)) f).roots = p ^ n f.roots
            theorem Polynomial.roots_expand_map_frobenius {R : Type u_1} [CommRing R] [IsDomain R] {p : } [ExpChar R p] {f : Polynomial R} [PerfectRing R p] :
            Multiset.map (⇑(frobenius R p)) ((expand R p) f).roots = p f.roots
            noncomputable def Polynomial.rootsExpandToRoots {R : Type u_1} [CommRing R] [IsDomain R] (p : ) [ExpChar R p] (f : Polynomial R) [DecidableEq R] :

            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] :

                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