Definitions/Def_GroupCohomology_Kummer.lean
Kummer cocycles and the Kummer map to
For a field extension L/K the module attaches to each \alpha \in L^\times the function \kappa_\alpha \colon \mathrm{Aut}_K(L) \to L^\times, \kappa_\alpha(\sigma) = \sigma(\alpha)/\alpha (kummerCocycle), and records its basic algebra: it is a multiplicative 1-cocycle for the natural action of L \simeq_\alpha[K] L on L^\times (indeed a coboundary there), it is multiplicative in \alpha, it is p-torsion as soon as \alpha^p lies in the image of K, and for two units \alpha,\beta with \alpha^p = \beta^p = a the quotient \kappa_\alpha/\kappa_\beta is the coboundary \sigma \mapsto \sigma(\alpha/\beta)/(\alpha/\beta) of the p-th root of unity \alpha/\beta. The action of L \simeq_\alpha[K] L on L^\times restricts to the subgroup \mu_p(L) = rootsOfUnity p L, and this restriction is registered as a MulDistribMulAction; kummerRep K L p is the resulting \mathbb{Z}-linear representation of L \simeq_\alpha[K] L on (the additive copy of) \mu_p(L), so that Mathlib's H1 of it is H^1(\mathrm{Aut}_K(L), \mu_p(L)).
Given a \in K^\times, \alpha \in L^\times and a proof that a = \alpha^p in L, kummerCocycleRoots is \kappa_\alpha viewed as a cocycle with values in \mu_p(L), kummerCocycles its incarnation as an element of cocycles₁ (kummerRep K L p), and kummerClass its image in H^1; by the coboundary computation this class depends only on a, not on the chosen root. The subgroup powerSubgroup K L p of K^\times consists of those a whose image in L is the p-th power of a unit of L, i.e. K^\times \cap (L^\times)^p; it contains the image of a \mapsto a^p on K^\times. Choosing for each of its elements a p-th root (chosenRoot, by choice) yields the group homomorphism kummerHom K L p from K^\times \cap (L^\times)^p to H^1(\mathrm{Aut}_K(L),\mu_p(L)) written multiplicatively, a \mapsto [\kappa_{a^{1/p}}]; its value on an explicitly presented element \langle a, \alpha, \alpha^p = a\rangle is [\kappa_\alpha]. No hypothesis beyond the extension L/K and the natural number p enters these definitions.
Relation to Mathlib
The cohomological scaffolding is Mathlib's: IsMulCocycle₁, IsMulCoboundary₁, cocycles₁, H1, H1π and Rep.ofMulDistribMulAction. The MulDistribMulAction of L ≃ₐ[K] L on rootsOfUnity p L is added here as the restriction of the Mathlib action on Lˣ; the Kummer cocycle, the class kummerClass, the subgroup powerSubgroup and the map kummerHom are the project's own.
Where it is used
These constructions supply the Kummer-theoretic dictionary between p-th power classes in K^\times and classes in H^1(\mathrm{Aut}_K(L), \mu_p(L)); the kernel and surjectivity statements for kummerHom, proved elsewhere under Galois hypotheses, are what make it usable in the descent and Galois-cohomology computations of the argument.
References
- J. Neukirch, A. Schmidt and K. Wingberg, Cohomology of Number Fields, Grundlehren der mathematischen Wissenschaften 323, Springer, 2nd ed., 2008, §6.1
- J.-P. Serre, Local Fields, Graduate Texts in Mathematics 67, Springer, 1979, Ch. X §3
- J. S. Milne, Arithmetic Duality Theorems, Academic Press, 1986, Ch. I §1
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 210 lines
- 34 declarations
- used in the statements of 31 theorems and imported by 46 proofs
- imports 0 definition modules
Source file: Definitions/Def_GroupCohomology_Kummer.lean
Declarations
- lemma
groupCohomology.Kummer.val_smul_units - lemma
groupCohomology.Kummer.smul_units_div - lemma
groupCohomology.Kummer.smul_units_pow - lemma
groupCohomology.Kummer.smul_units_eq_self_of_mem_range - def
groupCohomology.Kummer.kummerCocycle - lemma
groupCohomology.Kummer.kummerCocycle_apply - lemma
groupCohomology.Kummer.isMulCoboundary₁_kummerCocycle - theorem
groupCohomology.Kummer.isMulCocycle₁_kummerCocycle - theorem
groupCohomology.Kummer.kummerCocycle_mul - theorem
groupCohomology.Kummer.kummerCocycle_pow_eq_one - theorem
groupCohomology.Kummer.kummerCocycle_div_kummerCocycle_of_pow_eq - lemma
groupCohomology.Kummer.smul_mem_rootsOfUnity - instance
groupCohomology.Kummer.instMulDistribMulActionRootsOfUnity - lemma
groupCohomology.Kummer.coe_smul_rootsOfUnity - lemma
groupCohomology.Kummer.coe_div_rootsOfUnity - abbrev
groupCohomology.Kummer.kummerRep - def
groupCohomology.Kummer.kummerCocycleRoots - lemma
groupCohomology.Kummer.coe_kummerCocycleRoots - theorem
groupCohomology.Kummer.isMulCocycle₁_kummerCocycleRoots - def
groupCohomology.Kummer.kummerCocycles - lemma
groupCohomology.Kummer.coe_kummerCocycles - def
groupCohomology.Kummer.kummerClass - theorem
groupCohomology.Kummer.kummerClass_eq_of_pow_eq - theorem
groupCohomology.Kummer.mul_pow_eq - theorem
groupCohomology.Kummer.kummerClass_mul - theorem
groupCohomology.Kummer.inv_pow_eq - def
groupCohomology.Kummer.powerSubgroup - theorem
groupCohomology.Kummer.mem_powerSubgroup_iff - theorem
groupCohomology.Kummer.range_powMonoidHom_le_powerSubgroup - def
groupCohomology.Kummer.chosenRoot - theorem
groupCohomology.Kummer.chosenRoot_spec - def
groupCohomology.Kummer.kummerHom - theorem
groupCohomology.Kummer.kummerHom_apply - theorem
groupCohomology.Kummer.kummerHom_apply_mk
Source
import Mathlib set_option autoImplicit false universe u v namespace groupCohomology namespace Kummer section Unbundled variable {K : Type u} {L : Type v} [Field K] [Field L] [Algebra K L] @[simp] lemma val_smul_units (σ : L ≃ₐ[K] L) (α : Lˣ) : ((σ • α : Lˣ) : L) = σ (α : L) := rfl lemma smul_units_div (σ : L ≃ₐ[K] L) (x y : Lˣ) : σ • (x / y) = σ • x / σ • y := by ext simp only [val_smul_units, Units.val_div_eq_div_val, map_div₀] lemma smul_units_pow (σ : L ≃ₐ[K] L) (x : Lˣ) (n : ℕ) : σ • (x ^ n) = (σ • x) ^ n := by ext simp only [val_smul_units, Units.val_pow_eq_pow_val, map_pow] lemma smul_units_eq_self_of_mem_range (σ : L ≃ₐ[K] L) {α : Lˣ} (hα : (α : L) ∈ Set.range (algebraMap K L)) : σ • α = α := by obtain ⟨b, hb⟩ := hα ext rw [val_smul_units, ← hb, AlgEquiv.commutes] def kummerCocycle (α : Lˣ) (σ : L ≃ₐ[K] L) : Lˣ := σ • α / α lemma kummerCocycle_apply (α : Lˣ) (σ : L ≃ₐ[K] L) : kummerCocycle α σ = σ • α / α := rfl lemma isMulCoboundary₁_kummerCocycle (α : Lˣ) : IsMulCoboundary₁ (kummerCocycle (K := K) α) := ⟨α, fun _ => rfl⟩ theorem isMulCocycle₁_kummerCocycle (α : Lˣ) : IsMulCocycle₁ (kummerCocycle (K := K) α) := by intro σ τ show (σ * τ) • α / α = σ • (τ • α / α) * (σ • α / α) rw [mul_smul, smul_units_div, div_mul_div_cancel] theorem kummerCocycle_mul (α β : Lˣ) (σ : L ≃ₐ[K] L) : kummerCocycle (α * β) σ = kummerCocycle α σ * kummerCocycle β σ := by show σ • (α * β) / (α * β) = (σ • α / α) * (σ • β / β) rw [smul_mul', mul_div_mul_comm] theorem kummerCocycle_pow_eq_one {p : ℕ} {a : K} {α : Lˣ} (hα : algebraMap K L a = (α : L) ^ p) (σ : L ≃ₐ[K] L) : kummerCocycle α σ ^ p = 1 := by have hmem : ((α ^ p : Lˣ) : L) ∈ Set.range (algebraMap K L) := ⟨a, by rw [hα, Units.val_pow_eq_pow_val]⟩ rw [kummerCocycle_apply, div_pow, ← smul_units_pow, smul_units_eq_self_of_mem_range σ hmem, div_self'] theorem kummerCocycle_div_kummerCocycle_of_pow_eq {p : ℕ} {a : K} {α β : Lˣ} (hα : algebraMap K L a = (α : L) ^ p) (hβ : algebraMap K L a = (β : L) ^ p) : (α / β) ^ p = 1 ∧ ∀ σ : L ≃ₐ[K] L, kummerCocycle α σ / kummerCocycle β σ = σ • (α / β) / (α / β) := by refine ⟨?_, fun σ => ?_⟩ · rw [div_pow, div_eq_one] ext rw [Units.val_pow_eq_pow_val, Units.val_pow_eq_pow_val, ← hα, ← hβ] · rw [kummerCocycle_apply, kummerCocycle_apply, smul_units_div, div_div_div_comm] lemma smul_mem_rootsOfUnity {p : ℕ} (σ : L ≃ₐ[K] L) {ζ : Lˣ} (hζ : ζ ∈ rootsOfUnity p L) : σ • ζ ∈ rootsOfUnity p L := by rw [mem_rootsOfUnity] at hζ ⊢ rw [← smul_units_pow, hζ, smul_one] instance instMulDistribMulActionRootsOfUnity (p : ℕ) : MulDistribMulAction (L ≃ₐ[K] L) (rootsOfUnity p L) where smul σ ζ := ⟨σ • (ζ : Lˣ), smul_mem_rootsOfUnity σ ζ.2⟩ one_smul ζ := Subtype.ext (one_smul _ (ζ : Lˣ)) mul_smul σ τ ζ := Subtype.ext (mul_smul σ τ (ζ : Lˣ)) smul_mul σ ζ η := Subtype.ext (smul_mul' σ (ζ : Lˣ) (η : Lˣ)) smul_one σ := Subtype.ext (smul_one σ) @[simp] lemma coe_smul_rootsOfUnity {p : ℕ} (σ : L ≃ₐ[K] L) (ζ : rootsOfUnity p L) : ((σ • ζ : rootsOfUnity p L) : Lˣ) = σ • (ζ : Lˣ) := rfl lemma coe_div_rootsOfUnity {p : ℕ} (ζ η : rootsOfUnity p L) : ((ζ / η : rootsOfUnity p L) : Lˣ) = (ζ : Lˣ) / (η : Lˣ) := rfl end Unbundled section RepLevel variable {K L : Type} [Field K] [Field L] [Algebra K L] noncomputable abbrev kummerRep (K L : Type) [Field K] [Field L] [Algebra K L] (p : ℕ) : Rep ℤ (L ≃ₐ[K] L) := Rep.ofMulDistribMulAction (L ≃ₐ[K] L) (rootsOfUnity p L) variable {p : ℕ} {a : Kˣ} {α : Lˣ} def kummerCocycleRoots (hα : algebraMap K L (a : K) = (α : L) ^ p) (σ : L ≃ₐ[K] L) : rootsOfUnity p L := ⟨kummerCocycle α σ, kummerCocycle_pow_eq_one hα σ⟩ @[simp] lemma coe_kummerCocycleRoots (hα : algebraMap K L (a : K) = (α : L) ^ p) (σ : L ≃ₐ[K] L) : (kummerCocycleRoots hα σ : Lˣ) = kummerCocycle α σ := rfl theorem isMulCocycle₁_kummerCocycleRoots (hα : algebraMap K L (a : K) = (α : L) ^ p) : IsMulCocycle₁ (kummerCocycleRoots hα) := fun σ τ => Subtype.ext (isMulCocycle₁_kummerCocycle α σ τ) noncomputable def kummerCocycles (hα : algebraMap K L (a : K) = (α : L) ^ p) : cocycles₁ (kummerRep K L p) := cocyclesOfIsMulCocycle₁ (isMulCocycle₁_kummerCocycleRoots hα) lemma coe_kummerCocycles (hα : algebraMap K L (a : K) = (α : L) ^ p) : ⇑(kummerCocycles hα) = Additive.ofMul ∘ kummerCocycleRoots hα := rfl noncomputable def kummerClass (hα : algebraMap K L (a : K) = (α : L) ^ p) : H1 (kummerRep K L p) := H1π (kummerRep K L p) (kummerCocycles hα) theorem kummerClass_eq_of_pow_eq {β : Lˣ} (hα : algebraMap K L (a : K) = (α : L) ^ p) (hβ : algebraMap K L (a : K) = (β : L) ^ p) : kummerClass hα = kummerClass hβ := by obtain ⟨hpow, hcob⟩ := kummerCocycle_div_kummerCocycle_of_pow_eq hα hβ rw [kummerClass, kummerClass, H1π_eq_iff] exact (coboundariesOfIsMulCoboundary₁ (f := fun σ => kummerCocycleRoots hα σ / kummerCocycleRoots hβ σ) ⟨⟨α / β, hpow⟩, fun σ => Subtype.ext (hcob σ).symm⟩).2 theorem mul_pow_eq {b : Kˣ} {β : Lˣ} (hα : algebraMap K L (a : K) = (α : L) ^ p) (hβ : algebraMap K L (b : K) = (β : L) ^ p) : algebraMap K L ((a * b : Kˣ) : K) = ((α * β : Lˣ) : L) ^ p := by rw [Units.val_mul, map_mul, hα, hβ, Units.val_mul, mul_pow] theorem kummerClass_mul {b : Kˣ} {β : Lˣ} (hα : algebraMap K L (a : K) = (α : L) ^ p) (hβ : algebraMap K L (b : K) = (β : L) ^ p) : kummerClass (mul_pow_eq hα hβ) = kummerClass hα + kummerClass hβ := by rw [kummerClass, kummerClass, kummerClass, ← map_add] congr 1 ext σ exact congrArg Additive.ofMul (Subtype.ext (kummerCocycle_mul α β σ)) theorem inv_pow_eq {a : Kˣ} {α : Lˣ} (hα : algebraMap K L (a : K) = (α : L) ^ p) : algebraMap K L ((a⁻¹ : Kˣ) : K) = ((α⁻¹ : Lˣ) : L) ^ p := by rw [Units.val_inv_eq_inv_val, map_inv₀, hα, Units.val_inv_eq_inv_val, inv_pow] def powerSubgroup (K L : Type) [Field K] [Field L] [Algebra K L] (p : ℕ) : Subgroup Kˣ where carrier := {a : Kˣ | ∃ α : Lˣ, algebraMap K L (a : K) = (α : L) ^ p} one_mem' := ⟨1, by simp⟩ mul_mem' := fun ⟨α, hα⟩ ⟨β, hβ⟩ => ⟨α * β, mul_pow_eq hα hβ⟩ inv_mem' := fun ⟨α, hα⟩ => ⟨α⁻¹, inv_pow_eq hα⟩ @[simp] theorem mem_powerSubgroup_iff {a : Kˣ} : a ∈ powerSubgroup K L p ↔ ∃ α : Lˣ, algebraMap K L (a : K) = (α : L) ^ p := Iff.rfl theorem range_powMonoidHom_le_powerSubgroup : (powMonoidHom p : Kˣ →* Kˣ).range ≤ powerSubgroup K L p := by rintro _ ⟨b, rfl⟩ refine ⟨Units.map (algebraMap K L).toMonoidHom b, ?_⟩ show algebraMap K L (((b ^ p : Kˣ) : K)) = (algebraMap K L (b : K)) ^ p rw [Units.val_pow_eq_pow_val, map_pow] noncomputable def chosenRoot (a : powerSubgroup K L p) : Lˣ := (mem_powerSubgroup_iff.mp a.2).choose theorem chosenRoot_spec (a : powerSubgroup K L p) : algebraMap K L ((a : Kˣ) : K) = ((chosenRoot a : Lˣ) : L) ^ p := (mem_powerSubgroup_iff.mp a.2).choose_spec noncomputable def kummerHom (K L : Type) [Field K] [Field L] [Algebra K L] (p : ℕ) : powerSubgroup K L p →* Multiplicative (H1 (kummerRep K L p)) := MonoidHom.mk' (fun a => Multiplicative.ofAdd (kummerClass (chosenRoot_spec a))) fun a b => by have h : kummerClass (chosenRoot_spec (a * b)) = kummerClass (chosenRoot_spec a) + kummerClass (chosenRoot_spec b) := by rw [kummerClass_eq_of_pow_eq (chosenRoot_spec (a * b)) (mul_pow_eq (chosenRoot_spec a) (chosenRoot_spec b))] exact kummerClass_mul _ _ show Multiplicative.ofAdd (kummerClass (chosenRoot_spec (a * b))) = Multiplicative.ofAdd (kummerClass (chosenRoot_spec a)) * Multiplicative.ofAdd (kummerClass (chosenRoot_spec b)) rw [← ofAdd_add, h] @[simp] theorem kummerHom_apply (a : powerSubgroup K L p) : kummerHom K L p a = Multiplicative.ofAdd (kummerClass (chosenRoot_spec a)) := rfl theorem kummerHom_apply_mk (a : Kˣ) (α : Lˣ) (hα : algebraMap K L (a : K) = (α : L) ^ p) : kummerHom K L p ⟨a, α, hα⟩ = Multiplicative.ofAdd (kummerClass hα) := by show Multiplicative.ofAdd (kummerClass (chosenRoot_spec ⟨a, α, hα⟩)) = _ rw [kummerClass_eq_of_pow_eq (chosenRoot_spec ⟨a, α, hα⟩) hα] end RepLevel end Kummer end groupCohomology
Statements phrased using this module (31)
- Level coboundary of χ∪κ_α forces p ∣ vₚ(a)
PadicAlgCl.dvd_valuation_of_smul_kummerCocycle_pairing_mem_levelCoboundaries2121 below · depth 14 - Thickening: the χ-twisted Kummer cochain is a level coboundary
PadicAlgCl.smul_kummerCocycle_pairing_mem_levelCoboundaries2_of_thickening0 below · depth 14 - Locally constant μₚ-valued cocycles are Kummer cocycles
groupCohomology.Kummer.exists_kummerCocycle_eq_of_isMulCocycle1_of_level1 below · depth 14 - Units in an algebraically closed field are n-th powers
IsAlgClosed.exists_units_pow_eq0 below · depth 15 - Surjectivity of the Kummer map via Hilbert 90
groupCohomology.Kummer.exists_kummerCocycle_eq_of_isMulCocycle10 below · depth 15 - Kummer count: K^×/(K^×)ᵖ versus level-constant p-torsion characters
groupCohomology.Kummer.natCard_quotient_range_pow_eq_natCard_levelHom10 below · depth 15 - Local invariant of χsmileκₐ equals χ(Frob) v_q(a)
groupCohomology.localInv_smul_kummerCocycle_eq_apply_frobenius_mul_valuation120 below · depth 15 - Kummer theory for K(√[n]u : u ∈ S)
KummerTheory.powerSubgroup_eq_closure_sup_range_of_isSplittingField10 below · depth 16 - Kummer characters from p-torsion homomorphisms when μₚ⊂ K
groupCohomology.Kummer.exists_kummerCocycle_eq_of_monoidHom_fixingSubgroup3 below · depth 16 - Kummer cocycle is a coboundary of a root of unity
groupCohomology.Kummer.exists_pow_eq_iff_exists_rootOfUnity_coboundary0 below · depth 16 - Triviality of the Kummer cocycle when μₚ⊆ K
groupCohomology.Kummer.exists_pow_eq_iff_forall_kummerCocycle_eq_one2 below · depth 16 - Independence of the Kummer cocycle of the chosen p-th root
groupCohomology.Kummer.kummerCocycle_eq_of_pow_eq_of_mem_fixingSubgroup0 below · depth 16 - Kummer cocycle is right-invariant under Gal(L/K(α))
groupCohomology.Kummer.kummerCocycle_mul_eq_of_mem_fixingSubgroup_adjoin1 below · depth 16 - Kummer cocycle is multiplicative on Gal(Ω/K)
groupCohomology.Kummer.kummerCocycle_mul_of_mem_fixingSubgroup0 below · depth 16 - Kummer cocycle of a p-th root is μₚ-valued on Gal(Ω/K)
groupCohomology.Kummer.kummerCocycle_pow_eq_one_of_mem_fixingSubgroup0 below · depth 16 - Pairing cochain χsmileκₐ differs from inflated carry by a level coboundary
groupCohomology.smul_kummerCocycle_sub_unitsInflate2_carryFun_mem_levelCoboundaries20 below · depth 16 - Kummer theory: #Gal(L/K) as a power-subgroup index
KummerTheory.natCard_algEquiv_eq_natCard_powerSubgroup_quotient7 below · depth 17 - Kummer description of p-torsion cocycles on a fixing subgroup
groupCohomology.Kummer.exists_kummerCocycle_eq_of_isMulCocycle1_fixingSubgroup2 below · depth 17 - Kummer descent criterion on the fixing subgroup of K
groupCohomology.Kummer.exists_pow_eq_iff_of_fixingSubgroup1 below · depth 17 - Right-invariance of the Kummer cocycle under stabilisers of α
groupCohomology.Kummer.kummerCocycle_mul_eq_of_apply_eq0 below · depth 17 - Kummer isomorphism as a cardinality identity
groupCohomology.Kummer.natCard_H1_eq_natCard_quotient6 below · depth 18 - Continuous Kummer map H²(G_K,μₚ)→ H²(G_K,Ω^×): injective with p-torsion image
groupCohomology.continuousH2Map_kummerRep_injective_and_range_iff_smul_eq_zero15 below · depth 18 - dim_{mathbb F_p} H²_{cts}(G_K,μₚ)=1 for K/mathbb Q_q finite
groupCohomology.finrank_continuousH2_eq_one_of_equiv_rootsOfUnity_of_padic107 below · depth 18 - Kernel of the Kummer map is the group of p-th powers
groupCohomology.Kummer.ker_kummerHom2 below · depth 19 - Surjectivity of the Kummer map for finite Galois L/K
groupCohomology.Kummer.kummerHom_surjective2 below · depth 19 - χ∪κₐ is not a level coboundary over a p-adic field
groupCohomology.exists_smul_kummerCocycle_not_mem_levelCoboundaries2_of_padic60 below · depth 19 - Surjectivity of the Kummer map onto H¹(Gal(L/K),μₚ)
groupCohomology.Kummer.exists_kummerClass_eq1 below · depth 20 - Vanishing of the Kummer class and p-th powers
groupCohomology.Kummer.kummerClass_eq_zero_iff1 below · depth 20 - Galois equivariance of the Kummer cocycle
groupCohomology.Kummer.kummerCocycle_conj0 below · depth 20 - Pairing χsmileκₐ is a level coboundary iff a is a norm
groupCohomology.smul_kummerCocycle_mem_levelCoboundaries2_iff_exists_norm_eq22 below · depth 20 - Level 2-cocycles in μₚ bound over an unramified layer
groupCohomology.exists_restrict_adjoin_rootsOfUnity_mem_levelCoboundaries2_kummerRep_of_padic105 below · depth 22