Documentation

Mathlib.RingTheory.RootsOfUnity.Basic

Roots of unity #

We define roots of unity in the context of an arbitrary commutative monoid, as a subgroup of the group of units.

Main definitions #

Main results #

Implementation details #

It is desirable that rootsOfUnity is a subgroup, and it will mainly be applied to rings (e.g. the ring of integers in a number field) and fields. We therefore implement it as a subgroup of the units of a commutative monoid.

We have chosen to define rootsOfUnity n for n : β„• and add a [NeZero n] typeclass assumption when we need n to be non-zero (which is the case for most interesting statements). Note that rootsOfUnity 0 M is the top subgroup of MΛ£ (as the condition ΞΆ^0 = 1 is satisfied for all units).

def rootsOfUnity (k : β„•) (M : Type u_7) [CommMonoid M] :

rootsOfUnity k M is the subgroup of elements m : MΛ£ that satisfy m ^ k = 1.

Instances For
    @[simp]
    theorem mem_rootsOfUnity {M : Type u_1} [CommMonoid M] (k : β„•) (ΞΆ : MΛ£) :
    ΞΆ ∈ rootsOfUnity k M ↔ ΞΆ ^ k = 1
    theorem mem_rootsOfUnity' {M : Type u_1} [CommMonoid M] (k : β„•) (ΞΆ : MΛ£) :
    ΞΆ ∈ rootsOfUnity k M ↔ ↑΢ ^ k = 1

    A variant of mem_rootsOfUnity using ΞΆ : MΛ£.

    theorem rootsOfUnity.coe_injective {M : Type u_1} [CommMonoid M] {n : β„•} :
    Function.Injective fun (x : β†₯(rootsOfUnity n M)) => ↑↑x
    def rootsOfUnity.mkOfPowEq {M : Type u_1} [CommMonoid M] (ΞΆ : M) {n : β„•} [NeZero n] (h : ΞΆ ^ n = 1) :
    β†₯(rootsOfUnity n M)

    Make an element of rootsOfUnity from a member of the base ring, and a proof that it has a positive power equal to one.

    Instances For
      @[simp]
      theorem rootsOfUnity.val_mkOfPowEq_coe {M : Type u_1} [CommMonoid M] (ΞΆ : M) {n : β„•} [NeZero n] (h : ΞΆ ^ n = 1) :
      ↑↑(mkOfPowEq ΞΆ h) = ΞΆ
      @[simp]
      theorem rootsOfUnity.coe_mkOfPowEq {M : Type u_1} [CommMonoid M] {ΞΆ : M} {n : β„•} [NeZero n] (h : ΞΆ ^ n = 1) :
      ↑↑(mkOfPowEq ΞΆ h) = ΞΆ
      theorem rootsOfUnity_le_of_dvd {M : Type u_1} [CommMonoid M] {k l : β„•} (h : k ∣ l) :
      theorem rootsOfUnity_inf_rootsOfUnity {M : Type u_1} [CommMonoid M] {m n : β„•} :
      rootsOfUnity m M βŠ“ rootsOfUnity n M = rootsOfUnity (m.gcd n) M
      theorem disjoint_rootsOfUnity_of_coprime {M : Type u_1} [CommMonoid M] {m n : β„•} (h : m.Coprime n) :
      theorem rootsOfUnity.coe_pow {R : Type u_4} {k : β„•} [CommMonoid R] (ΞΆ : β†₯(rootsOfUnity k R)) (m : β„•) :
      ↑↑(ΞΆ ^ m) = ↑↑΢ ^ m
      def rootsOfUnityUnitsMulEquiv (M : Type u_7) [CommMonoid M] (n : β„•) :
      β†₯(rootsOfUnity n MΛ£) ≃* β†₯(rootsOfUnity n M)

      The canonical isomorphism from the nth roots of unity in MΛ£ to the nth roots of unity in M.

      Instances For
        def restrictRootsOfUnity {R : Type u_4} {S : Type u_5} {F : Type u_6} [CommMonoid R] [CommMonoid S] [FunLike F R S] [MonoidHomClass F R S] (Οƒ : F) (n : β„•) :
        β†₯(rootsOfUnity n R) β†’* β†₯(rootsOfUnity n S)

        Restrict a ring homomorphism to the nth roots of unity.

        Instances For
          @[simp]
          theorem restrictRootsOfUnity_coe_apply {R : Type u_4} {S : Type u_5} {F : Type u_6} {k : β„•} [CommMonoid R] [CommMonoid S] [FunLike F R S] [MonoidHomClass F R S] (Οƒ : F) (ΞΆ : β†₯(rootsOfUnity k R)) :
          ↑↑((restrictRootsOfUnity Οƒ k) ΞΆ) = Οƒ ↑↑΢
          def MulEquiv.restrictRootsOfUnity {R : Type u_4} {S : Type u_5} [CommMonoid R] [CommMonoid S] (Οƒ : R ≃* S) (n : β„•) :
          β†₯(rootsOfUnity n R) ≃* β†₯(rootsOfUnity n S)

          Restrict a monoid isomorphism to the nth roots of unity.

          Instances For
            @[simp]
            theorem MulEquiv.restrictRootsOfUnity_coe_apply {R : Type u_4} {S : Type u_5} {k : β„•} [CommMonoid R] [CommMonoid S] (Οƒ : R ≃* S) (ΞΆ : β†₯(rootsOfUnity k R)) :
            ↑↑((Οƒ.restrictRootsOfUnity k) ΞΆ) = Οƒ ↑↑΢
            @[simp]
            theorem MulEquiv.restrictRootsOfUnity_symm {R : Type u_4} {S : Type u_5} {k : β„•} [CommMonoid R] [CommMonoid S] (Οƒ : R ≃* S) :
            @[simp]
            theorem Units.val_set_image_rootsOfUnity {R : Type u_4} {k : β„•} [CommMonoid R] [NeZero k] :
            val '' ↑(rootsOfUnity k R) = {z : R | z ^ k = 1}
            theorem mem_rootsOfUnity_iff_isRoot {R : Type u_4} [CommRing R] (k : β„•) (ΞΆ : RΛ£) :
            ΞΆ ∈ rootsOfUnity k R ↔ (Polynomial.X ^ k - 1).IsRoot ↑΢
            theorem mem_rootsOfUnity_iff_mem_nthRoots {R : Type u_4} {k : β„•} [NeZero k] [CommRing R] [IsDomain R] {ΞΆ : RΛ£} :
            ΞΆ ∈ rootsOfUnity k R ↔ ↑΢ ∈ Polynomial.nthRoots k 1
            def rootsOfUnityEquivNthRoots (R : Type u_4) (k : β„•) [NeZero k] [CommRing R] [IsDomain R] :
            β†₯(rootsOfUnity k R) ≃ { x : R // x ∈ Polynomial.nthRoots k 1 }

            Equivalence between the k-th roots of unity in R and the k-th roots of 1.

            This is implemented as equivalence of subtypes, because rootsOfUnity is a subgroup of the group of units, whereas nthRoots is a multiset.

            Instances For
              @[simp]
              theorem rootsOfUnityEquivNthRoots_apply {R : Type u_4} {k : β„•} [NeZero k] [CommRing R] [IsDomain R] (x : β†₯(rootsOfUnity k R)) :
              ↑((rootsOfUnityEquivNthRoots R k) x) = ↑↑x
              @[simp]
              theorem rootsOfUnityEquivNthRoots_symm_apply {R : Type u_4} {k : β„•} [NeZero k] [CommRing R] [IsDomain R] (x : { x : R // x ∈ Polynomial.nthRoots k 1 }) :
              ↑↑((rootsOfUnityEquivNthRoots R k).symm x) = ↑x
              @[implicit_reducible]
              noncomputable instance rootsOfUnity.fintype (R : Type u_4) (k : β„•) [NeZero k] [CommRing R] [IsDomain R] :
              Fintype β†₯(rootsOfUnity k R)
              instance rootsOfUnity.isCyclic (R : Type u_4) (k : β„•) [NeZero k] [CommRing R] [IsDomain R] :
              IsCyclic β†₯(rootsOfUnity k R)
              theorem card_rootsOfUnity (R : Type u_4) (k : β„•) [NeZero k] [CommRing R] [IsDomain R] :
              theorem map_rootsOfUnity_eq_pow_self {R : Type u_4} {F : Type u_6} {k : β„•} [NeZero k] [CommRing R] [IsDomain R] [FunLike F R R] [MonoidHomClass F R R] (Οƒ : F) (ΞΆ : β†₯(rootsOfUnity k R)) :
              βˆƒ (m : β„•), Οƒ ↑↑΢ = ↑↑΢ ^ m
              theorem mem_rootsOfUnity_prime_pow_mul_iff (R : Type u_4) [CommRing R] [IsReduced R] (p k m : β„•) [ExpChar R p] {ΞΆ : RΛ£} :
              ΞΆ ∈ rootsOfUnity (p ^ k * m) R ↔ ΞΆ ∈ rootsOfUnity m R
              @[simp]
              theorem mem_rootsOfUnity_prime_pow_mul_iff' (R : Type u_4) [CommRing R] [IsReduced R] (p k m : β„•) [ExpChar R p] {ΞΆ : RΛ£} :
              ΞΆ ^ (p ^ k * m) = 1 ↔ ΞΆ ∈ rootsOfUnity m R

              A variant of mem_rootsOfUnity_prime_pow_mul_iff in terms of ΞΆ ^ _

              noncomputable def IsCyclic.monoidHomMulEquivRootsOfUnityOfGenerator {G : Type u_7} [CommGroup G] {g : G} (hg : βˆ€ (x : G), x ∈ Subgroup.zpowers g) (G' : Type u_8) [CommGroup G'] :
              (G β†’* G') ≃* β†₯(rootsOfUnity (Nat.card G) G')

              The isomorphism from the group of group homomorphisms from a finite cyclic group G of order n into another group G' to the group of nth roots of unity in G' determined by a generator g of G. It sends Ο† : G β†’* G' to Ο† g.

              Instances For
                theorem IsCyclic.monoidHom_mulEquiv_rootsOfUnity (G : Type u_7) [CommGroup G] [IsCyclic G] (G' : Type u_8) [CommGroup G'] :
                Nonempty ((G β†’* G') ≃* β†₯(rootsOfUnity (Nat.card G) G'))

                The group of group homomorphisms from a finite cyclic group G of order n into another group G' is (noncanonically) isomorphic to the group of nth roots of unity in G'.