|
| 1 | +/- |
| 2 | +Copyright (c) 2026 Xavier Roblot. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Xavier Roblot |
| 5 | +-/ |
| 6 | +module |
| 7 | + |
| 8 | +public import Mathlib.Data.ZMod.Units |
| 9 | +public import Mathlib.NumberTheory.Cyclotomic.Gal |
| 10 | + |
| 11 | +/-! |
| 12 | +# Galois theory for cyclotomic fields |
| 13 | +
|
| 14 | +In this file, we study the Galois theory of cyclotomic extensions of `ℚ`. |
| 15 | +
|
| 16 | +## Main definitions and results |
| 17 | +
|
| 18 | +- `IsCyclotomicExtension.Rat.galEquivZMod`: the isomorphism between `Gal(ℚ(ζₙ)/ℚ)` and `(ℤ/nℤ)ˣ` |
| 19 | + that sends `σ` to the class `a` such that `σ (ζₙ) = ζₙ ^ a`. |
| 20 | +
|
| 21 | +-/ |
| 22 | + |
| 23 | +@[expose] public section |
| 24 | + |
| 25 | +namespace IsCyclotomicExtension.Rat |
| 26 | + |
| 27 | +open NumberField IsCyclotomicExtension |
| 28 | + |
| 29 | +variable (n : ℕ) [NeZero n] (K : Type*) [Field K] [NumberField K] |
| 30 | + [hK : IsCyclotomicExtension {n} ℚ K] |
| 31 | + |
| 32 | +include hK in |
| 33 | +/-- |
| 34 | +The isomorphism between `Gal(ℚ(ζₙ)/ℚ)` and `(ℤ/nℤ)ˣ` that sends `σ` to the class `a` such that |
| 35 | +`σ (ζₙ) = ζₙ ^ a`. |
| 36 | +-/ |
| 37 | +noncomputable abbrev galEquivZMod : Gal(K/ℚ) ≃* (ZMod n)ˣ := |
| 38 | + IsCyclotomicExtension.autEquivPow K <| Polynomial.cyclotomic.irreducible_rat (NeZero.pos n) |
| 39 | + |
| 40 | +theorem galEquivZMod_apply_of_pow_eq (σ : Gal(K/ℚ)) {x : K} (hx : x ^ n = 1) : |
| 41 | + σ x = x ^ (galEquivZMod n K σ).val.val := by |
| 42 | + obtain ⟨a, -, rfl⟩ := (zeta_spec n ℚ K).eq_pow_of_pow_eq_one hx |
| 43 | + rw [map_pow, pow_right_comm, galEquivZMod, autEquivPow_apply, OneHom.toFun_eq_coe, |
| 44 | + MonoidHom.toOneHom_coe, IsPrimitiveRoot.autToPow_spec] |
| 45 | + |
| 46 | +theorem galEquivZMod_smul_of_pow_eq (σ : Gal(K/ℚ)) {x : 𝓞 K} (hx : x ^ n = 1) : |
| 47 | + σ • x = x ^ (galEquivZMod n K σ).val.val := by |
| 48 | + apply FaithfulSMul.algebraMap_injective (𝓞 K) K |
| 49 | + apply galEquivZMod_apply_of_pow_eq n K σ <| by rw [← Subalgebra.coe_pow, hx, OneMemClass.coe_one] |
| 50 | + |
| 51 | +section restrict |
| 52 | + |
| 53 | +variable {m : ℕ} [NeZero m] (F : Type*) [Field F] [NumberField F] |
| 54 | + [hF : IsCyclotomicExtension {m} ℚ F] [Algebra F K] [IsGalois ℚ F] |
| 55 | + |
| 56 | +/-- |
| 57 | +Let `m ∣ n`. Then, the following diagram commutes: |
| 58 | +Gal(ℚ(ζₙ)/ℚ) → (ℤ/nℤ)ˣ |
| 59 | + ↓ ↓ |
| 60 | +Gal(ℚ(ζₘ)/ℚ) → (ℤ/mℤ)ˣ |
| 61 | +where the horizontal maps are `galEquivZMod`, the left map is the restriction map and the right map |
| 62 | +is the natural map. |
| 63 | +-/ |
| 64 | +theorem galEquivZMod_restrictNormal_apply (h : m ∣ n) (σ : Gal(K/ℚ)) : |
| 65 | + galEquivZMod m F (σ.restrictNormal F) = ZMod.unitsMap h (galEquivZMod n K σ) := by |
| 66 | + have hζ := IsCyclotomicExtension.zeta_spec m ℚ F |
| 67 | + let ζ := IsCyclotomicExtension.zeta m ℚ F |
| 68 | + suffices ζ ^ (galEquivZMod m F (σ.restrictNormal F)).val.val = ζ ^ (galEquivZMod n K σ).val.val by |
| 69 | + rw [(hζ.isOfFinOrder (NeZero.ne _)).pow_inj_mod, ← hζ.eq_orderOf, |
| 70 | + ← ZMod.natCast_eq_natCast_iff', ZMod.natCast_val, ZMod.natCast_val, ZMod.cast_id] at this |
| 71 | + rwa [Units.ext_iff] |
| 72 | + apply FaithfulSMul.algebraMap_injective F K |
| 73 | + rw [map_pow, map_pow, ← galEquivZMod_apply_of_pow_eq, ← AlgEquiv.restrictNormal_commutes, |
| 74 | + galEquivZMod_apply_of_pow_eq m _ _ hζ.pow_eq_one, map_pow] |
| 75 | + rw [← map_pow, (hζ.pow_eq_one_iff_dvd _).mpr h, map_one] |
| 76 | + |
| 77 | +end restrict |
| 78 | + |
| 79 | +end IsCyclotomicExtension.Rat |
0 commit comments