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 #
rootsOfUnity n M
, forn : ℕ
is the subgroup of the units of a commutative monoidM
consisting of elementsx
that satisfyx ^ n = 1
.
Main results #
rootsOfUnity.isCyclic
: the roots of unity in an integral domain form a cyclic group.
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).
rootsOfUnity k M
is the subgroup of elements m : Mˣ
that satisfy m ^ k = 1
.
Equations
- rootsOfUnity k M = { carrier := {ζ : Mˣ | ζ ^ k = 1}, mul_mem' := ⋯, one_mem' := ⋯, inv_mem' := ⋯ }
Instances For
A variant of mem_rootsOfUnity
using ζ : 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.
Equations
- rootsOfUnity.mkOfPowEq ζ h = ⟨Units.ofPowEqOne ζ n h ⋯, ⋯⟩
Instances For
The canonical isomorphism from the n
th roots of unity in Mˣ
to the n
th roots of unity in M
.
Equations
- rootsOfUnityUnitsMulEquiv M n = { toFun := fun (ζ : ↥(rootsOfUnity n Mˣ)) => ⟨↑↑ζ, ⋯⟩, invFun := fun (ζ : ↥(rootsOfUnity n M)) => ⟨toUnits ↑ζ, ⋯⟩, left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯ }
Instances For
Restrict a ring homomorphism to the nth roots of unity.
Equations
- restrictRootsOfUnity σ n = { toFun := fun (ξ : ↥(rootsOfUnity n R)) => ⟨(Units.map ↑σ) ↑ξ, ⋯⟩, map_one' := ⋯, map_mul' := ⋯ }
Instances For
Restrict a monoid isomorphism to the nth roots of unity.
Equations
- σ.restrictRootsOfUnity n = { toFun := ⇑(restrictRootsOfUnity σ n), invFun := ⇑(restrictRootsOfUnity σ.symm n), left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯ }
Instances For
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.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- rootsOfUnity.fintype R k = Fintype.ofEquiv { x : R // x ∈ Polynomial.nthRoots k 1 } (rootsOfUnityEquivNthRoots R k).symm
Equations
- ⋯ = ⋯