The cyclotomic compositum M = L(μ_m) and its joint restriction isomorphism #
Let L / K be a Galois extension of number fields and let M = L(μ_m) be obtained from L
by adjoining the m-th roots of unity. When m is coprime to the discriminant of L, the
two restriction maps out of Gal(M/K) — to Gal(L/K), and to (ZMod m)ˣ via the cyclotomic
character — are jointly bijective:
Gal(M/K) ≃* Gal(L/K) × (ZMod m)ˣ.
Main results #
IsCyclotomicExtension.isGalois_of_isGalois_of_isCyclotomicExtension:M / Kis itself Galois, soGal(M/K)below is not an extra assumption.IsPrimitiveRoot.autToPow_bijective: the cyclotomic characterGal(M/L) → (ZMod m)ˣis bijective.IsCyclotomicExtension.restrictNormalHom_prod_autToPow_injective: the joint restriction is faithful (no arithmetic hypothesis needed).IsCyclotomicExtension.galEquivProd: that map packaged as aMulEquiv, withIsCyclotomicExtension.galEquivProd_applycomputing both of its components, andIsCyclotomicExtension.restrictNormal_galEquivProd_symmtogether withIsCyclotomicExtension.autToPow_galEquivProd_symmeliminating its inverse. Those threesimplemmas are the whole interface: no consumer needs theMulEquiv.ofBijectivethat packages the equivalence, in either direction.IsCyclotomicExtension.ker_autToPow_eq_comap_galEquivProdandIsCyclotomicExtension.ker_restrictNormalHom_eq_comap_galEquivProd: the same interface one level up, on subgroups rather than elements — each component's kernel is whatgalEquivProdreads off as the opposite factor.
The two general prerequisites this rests on are stated where they belong rather than here:
the degree identity [M : K] = φ m is IsCyclotomicExtension.finrank_eq_totient in
TauCeti.NumberTheory.NumberField.Cyclotomic.Finrank, and the compositum step
K(ζ) ⊔ L = ⊤ is TauCeti.IntermediateField.adjoin_sup_fieldRange_eq_top in
TauCeti.FieldTheory.IntermediateField.Adjoin.EqTop.
Implementation notes #
The file is split by hypothesis strength, in three steps.
restrictNormalHom_prod_autToPow_injective comes first and assumes only [Normal K L]:
normality is exactly what defines
AlgEquiv.restrictNormalHom L, and the faithfulness argument never separates anything, so
requiring IsGalois K L there would be an avoidable hypothesis. Next
isGalois_of_isGalois_of_isCyclotomicExtension turns on [IsGalois K L], needing no hypothesis
beyond the tower itself (algebraicity and separability of M / K are both derived inside the
proof from IsGalois K L and the cyclotomic tower). Both are pure field theory and carry no
NumberField instances. Only the results downstream of the degree count, which mention
discr L, take number fields.
isGalois_of_isGalois_of_isCyclotomicExtension is a theorem and not an instance because
neither L nor m can be recovered from the goal IsGalois K M, so there is no synthesization
order for it; call sites introduce it with have.
That M / K is Galois is derived, not assumed: M is the compositum of L with K(ζ),
both of which are normal over K, and the engine for a compositum of two normal extensions is
Mathlib's IntermediateField.normal_sup. So Gal(M/K) below rests on no hypothesis beyond
IsGalois K L and the cyclotomic tower. Separability comes from transitivity along the same
tower: L / K is separable because it is Galois, and M / L because a cyclotomic extension is
(IsCyclotomicExtension.isSeparable). No characteristic assumption is needed, since a primitive
m-th root of unity exists in M only if the characteristic does not divide m.
Faithfulness of the joint restriction is not re-derived here: it is Mathlib's compositum
engine IntermediateField.fixingSubgroup_sup (with fixingSubgroup_top), applied to K(ζ)
and the image of L inside M. We invoke that shared lemma rather than
IntermediateField.restrictRestrictAlgEquivMapHom_injective, which is built from it, because
the latter concerns Gal(M/L) →* Gal(K(ζ)/K) whereas the map here is defined on Gal(M/K);
using it would first require transporting an element of Gal(M/K) that fixes L into
Gal(M/L), which is strictly more work than calling the underlying lemma directly.
Surjectivity does go through a degree count. That is not an oversight: surjectivity onto the
(ZMod m)ˣ factor is the assertion that the m-th cyclotomic polynomial stays irreducible
over L, which is exactly what the coprimality hypothesis hcop buys. Mathlib's companion
restrictRestrictAlgEquivMapHom_surjective needs K(ζ) ⊓ L = ⊥, and the proof of that
intersection statement is the same discriminant input, so it would not avoid the arithmetic.
Adapted from the Birkbeck–Brasca Chebotarev density project.
The cyclotomic character of the top layer is bijective. For M = L(μ_m) with m
coprime to discr L, the character Gal(M/L) → (ZMod m)ˣ is a bijection, so the top layer of
the tower realises every prescribed action on the m-th roots of unity.
Stated in IsPrimitiveRoot beside Mathlib's IsPrimitiveRoot.autToPow_injective, and with the
same binder shape, so that hζ.autToPow_bijective L reads like its injective counterpart.
Faithfulness of the joint restriction needs only that L / K is normal — enough to
define AlgEquiv.restrictNormalHom L — not that it is Galois. Separability of L / K enters
only with the compositum-Galois and degree-count results below.
The joint restriction is faithful. An automorphism of M = L(μ_m) over K that is
trivial on L and trivial on the m-th roots of unity is the identity. No arithmetic
hypothesis is needed, only normality of L / K.
The cyclotomic compositum of a Galois extension is Galois. If L / K is Galois and
M = L(μ_m), then M / K is Galois, so Gal(M/K) is available without a further hypothesis.
Both tower hypotheses are needed, which is what the name records: the cyclotomic extension is
M / L, and L / K is Galois. Mathlib's IsCyclotomicExtension.isGalois is the one-step
statement, for a cyclotomic extension of the base itself. Call sites introduce this with
have; see the module Implementation notes.
The remaining results are arithmetic: they need the discriminant of L, hence number
fields rather than bare characteristic-zero fields. Only the base fields K and L carry
NumberField; M does not, because a cyclotomic extension of a number field is finite over it
and so is a number field already — the instances it needs are installed locally where used.
The joint restriction Gal(M/K) ≃* Gal(L/K) × (ZMod m)ˣ, packaged as a MulEquiv.
Instances For
Both components of galEquivProd: it sends σ to its restriction to L paired with its
cyclotomic character. Consumers should compute with this rather than unfolding the
MulEquiv.ofBijective that packages it.
Elimination for the inverse of galEquivProd, first component: the automorphism it produces
restricts on L to the prescribed element of Gal(L/K). Together with
autToPow_galEquivProd_symm this characterises (galEquivProd ...).symm, so consumers never
need the MulEquiv.ofBijective that packages it.
Elimination for the inverse of galEquivProd, second component: the automorphism it produces
has the prescribed cyclotomic character.
The cyclotomic character's kernel is the first factor of the joint restriction. The
automorphisms of M acting trivially on the m-th roots of unity are exactly those that
galEquivProd sends into Gal(L/K) × 1; equivalently, the kernel of the cyclotomic character
is the part of Gal(M/K) that the equivalence reads off as pure Gal(L/K).
This is the subgroup-level companion to galEquivProd_apply: that lemma computes the
equivalence on elements, this one transports a distinguished subgroup across it.
Source: the identification of Gal(M/K(μ_m)) with the Gal(L/K) × 1 factor is credited to
CBirkbeck/chebotarev-density (Apache-2.0,
Birkbeck--Brasca) at commit 55a89985d47a3befcf6069aca1da250ff088b5c7, which states it in the
docstring of the private autToPow_eq_one_of_fixes (CebotarevDensity/Abelian.lean:659) and
performs the step inline; isolating it as a lemma over galEquivProd is not the source's.
The restriction's kernel is the second factor of the joint restriction. The automorphisms
of M acting trivially on L are exactly those that galEquivProd sends into 1 × (ZMod m)ˣ.
This is the mirror of ker_autToPow_eq_comap_galEquivProd: between them the two components of
the equivalence are each characterised on subgroups, so a consumer holding either
Gal(M/L) or Gal(M/K(μ_m)) can transport it without unfolding galEquivProd.
Source: as for ker_autToPow_eq_comap_galEquivProd.