ℤ/k and the k-th roots of unity #
A primitive k-th root of unity generates the group of all k-th roots of unity, so Mathlib's
IsPrimitiveRoot.zmodEquivZPowers, which identifies ℤ/k with the powers of a chosen primitive
root, identifies it with the whole of μ_k.
Both halves are in Mathlib — IsPrimitiveRoot.zmodEquivZPowers and IsPrimitiveRoot.zpowers_eq —
but not the composite, which is what a consumer phrased in terms of μ_k rather than a chosen
generator needs.
Independently of any primitive root, μ_k of any commutative monoid is killed by k, so written
additively it is a ZMod k-module.
Conversely, ℤ/n written multiplicatively is itself a group of n-th roots of unity: ofAdd 1 is
a primitive n-th root of unity, and the group is cyclic, so Multiplicative (ZMod n) has enough
n-th roots of unity in the sense of Mathlib's duality theory for finite abelian groups. This is
what lets that theory serve the groups killed by n, whose characters with values in ℤ/n are
their additive homomorphisms to ZMod n.
Main results #
TauCeti.nsmul_additive_rootsOfUnity_eq_zero:kkillsμ_k, written additively, so that it is aZMod k-module.TauCeti.ZMod.isPrimitiveRoot_ofAdd_one:ofAdd 1is a primitiven-th root of unity inMultiplicative (ZMod n).TauCeti.instHasEnoughRootsOfUnityMultiplicativeZMod:Multiplicative (ZMod n)has enoughn-th roots of unity.TauCeti.hasEnoughRootsOfUnity_multiplicative_zmod_exponent:Multiplicative (ZMod n)has enoughe-th roots of unity for the exponenteof any additive monoid killed byn.IsPrimitiveRoot.zmodEquivRootsOfUnity:ℤ/k ≃+ Additive (μ_k), given a primitivek-th root.IsPrimitiveRoot.coe_zmodEquivRootsOfUnity_apply_intCastandIsPrimitiveRoot.coe_zmodEquivRootsOfUnity_apply_natCast: it sendsitoζ ^ i.IsPrimitiveRoot.zmodEquivRootsOfUnity_symm_apply_zpowandIsPrimitiveRoot.zmodEquivRootsOfUnity_symm_apply_pow: its inverse sendsζ ^ iback toi.
Provenance #
IsPrimitiveRoot.zmodEquivRootsOfUnity is ported from AINTLIB (github.com/CBirkbeck/AINTLIB,
Apache-2.0) @ a302aeacd86053f9d5f991fbbf664e1cc1051d08, source file
projects/HasseWeil/HasseWeil/HasseBound/WeilPairing/RootsOfUnity.lean, declaration
rootsOfUnity_addEquiv_zmod. Three changes: the direction is reversed to start from ZMod k, so
that it reads like IsPrimitiveRoot.zmodEquivZPowers which it extends; the base is a domain rather
than a field, which is all zpowers_eq asks for; and the four characterising lemmas below — the
equivalence and its inverse, each at an integer and at a natural exponent — are added, none of
which the source has. The remaining declarations of this file — the ZMod k-module structure on
μ_k written additively and the roots of unity of Multiplicative (ZMod n) — have no counterpart
in that source.
μ_k is killed by k: written additively, ζ ^ k = 1 reads k • ζ = 0.
μ_k, written additively, is a ZMod k-module, being killed by k.
ofAdd 1 is a primitive n-th root of unity in ℤ/n written multiplicatively: its order
is the additive order of 1 : ZMod n, which is n.
ℤ/n written multiplicatively has enough n-th roots of unity: ofAdd 1 is a primitive
one, and its roots of unity form a cyclic group, being a subgroup of the cyclic group of units of
Multiplicative (ZMod n).
ℤ/n written multiplicatively has enough roots of unity for every monoid killed by n:
the exponent of such a monoid divides n. This is the hypothesis of Mathlib's duality theory for
finite abelian groups, CommGroup.exists_apply_ne_one_of_hasEnoughRootsOfUnity and
CommGroup.card_monoidHom_of_hasEnoughRootsOfUnity, with the target Multiplicative (ZMod n).
ℤ/k is the group of k-th roots of unity, written additively, once a primitive k-th
root of unity is chosen: that root generates μ_k, so zmodEquivZPowers already lands on all of
it.
Equations
Instances For
The equivalence sends the class of an integer i to ζ ^ i, which determines it on all
of ZMod k since every class is the class of an integer.
The equivalence sends the class of a natural number i to ζ ^ i, the natural-exponent
reading of coe_zmodEquivRootsOfUnity_apply_intCast.
The inverse sends ζ ^ i back to the class of i, for an integer exponent.
The inverse sends ζ ^ i back to the class of i, for a natural exponent.