Definitions/Def_GroupCohomology_ContinuousH2Inflation.lean
Inflation from finite level quotients into continuous
Standing context: a commutative ring k, a group G, a homomorphism r \colon G \to \operatorname{Aut}_{\mathbb{Q}}(\overline{\mathbb{Q}}) (written as \mathbb{Q}-algebra automorphisms of AlgebraicClosure ℚ), a representation M of G over k, and an intermediate field F of \overline{\mathbb{Q}}/\mathbb{Q} that is normal over \mathbb{Q}; from the level-subgroup material, U_F := r^{-1}(\operatorname{Gal}(\overline{\mathbb{Q}}/F)), the comap along r of the fixing subgroup of F, is then normal in G, and of finite index once F/\mathbb{Q} is finite. The representation of G/U_F on M^{U_F} is Mathlib's Rep.quotientToInvariants.
The module defines the two inflation maps on cochains: levelInflate₁ sends y \colon G/U_F \to M^{U_F} to the k-linear cochain g \mapsto y(\bar g) \in M, and levelInflate₂ sends x \colon (G/U_F)^2 \to M^{U_F} to (g,h) \mapsto x(\bar g,\bar h). Accompanying lemmas record that the images are level-constant in the sense of the continuous-H^2 module, i.e. invariant under right translation of each argument by elements s with r(s) fixing F (witnessed by F itself, assumed finite over \mathbb{Q}), that levelInflate₂ intertwines the differentials d_{12} of G/U_F on M^{U_F} and of G on M, and that it carries 2-cocycles to 2-cocycles, hence into the level-constant 2-cocycles, and 2-coboundaries into the level-constant 2-coboundaries (those of the form d_{12} of a level-constant 1-cochain). Consequently levelInflateCocycles₂ is the induced k-linear map Z^2(G/U_F, M^{U_F}) \to Z^2_{\mathrm{lc}}(G,M), and continuousH2Inflation is the induced k-linear map H^2(G/U_F, M^{U_F}) \to H^2_{\mathrm{cts}}(G,M) from Mathlib's H^2 of the quotient representation to the quotient of level-constant 2-cocycles by level-constant 2-coboundaries, characterised by sending the class of a cocycle x to the class of its inflation.
Relation to Mathlib
The finite-level side uses Mathlib's group cohomology in low degrees (Rep.quotientToInvariants, cocycles₂, coboundaries₂, d₁₂, H2, H2π, H2Iso); the level-constant cochain/cocycle submodules and the continuous H^2 they define are the project's own, so the inflation maps landing in them are constructed here.
Where it is used
These maps let results about the cohomology of the finite quotients G/U_F be transported to continuous classes, and together over all finite normal F they exhibit H^2_{\mathrm{cts}}(G,M) as the union of the inflated images; such continuous second cohomology groups govern the obstruction and deformation computations for Galois representations in the Wiles–Taylor–Wiles argument.
References
- H. Darmon, F. Diamond and R. Taylor, Fermat's Last Theorem, in: Current Developments in Mathematics 1995, International Press, 1995, 1–154
- J.-P. Serre, Galois Cohomology, Springer, 1997
- J. Neukirch, A. Schmidt and K. Wingberg, Cohomology of Number Fields, Grundlehren der mathematischen Wissenschaften 323, Springer, 2000
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 149 lines
- 18 declarations
- used in the statements of 28 theorems and imported by 29 proofs
- imports 2 definition modules
Source file: Definitions/Def_GroupCohomology_ContinuousH2Inflation.lean
Declarations
- def
groupCohomology.levelInflate₁ - def
groupCohomology.levelInflate₂ - lemma
groupCohomology.levelInflate₁_apply - lemma
groupCohomology.levelInflate₂_apply - lemma
groupCohomology.coe_mul_eq_of_mem - lemma
groupCohomology.qti_coe - lemma
groupCohomology.qti_coe' - lemma
groupCohomology.levelInflate₁_mem_levelCochains₁ - lemma
groupCohomology.levelInflate₂_mem_levelCochains₂ - lemma
groupCohomology.levelInflate₂_d₁₂ - lemma
groupCohomology.levelInflate₂_mem_cocycles₂ - lemma
groupCohomology.levelInflate₂_mem_levelCocycles₂ - lemma
groupCohomology.levelInflate₂_mem_levelCoboundaries₂ - def
groupCohomology.levelInflateCocycles₂ - lemma
groupCohomology.coe_levelInflateCocycles₂ - lemma
groupCohomology.continuousH2π_levelInflateCocycles₂_eq_zero - def
groupCohomology.continuousH2Inflation - lemma
groupCohomology.continuousH2Inflation_H2π
Source
import Mathlib import Definitions.Def_GroupCohomology_ContinuousH2 import Definitions.Def_GroupCohomology_LevelSubgroup set_option autoImplicit false universe u open CategoryTheory noncomputable section namespace groupCohomology variable {k G : Type u} [CommRing k] [Group G] (r : G →* (AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ)) (M : Rep k G) (F : IntermediateField ℚ (AlgebraicClosure ℚ)) [Normal ℚ F] def levelInflate₁ : ((G ⧸ F.fixingSubgroup.comap r) → M.quotientToInvariants (F.fixingSubgroup.comap r)) →ₗ[k] (G → M) where toFun y g := (y (g : G ⧸ F.fixingSubgroup.comap r) : M) map_add' _ _ := rfl map_smul' _ _ := rfl def levelInflate₂ : ((G ⧸ F.fixingSubgroup.comap r) × (G ⧸ F.fixingSubgroup.comap r) → M.quotientToInvariants (F.fixingSubgroup.comap r)) →ₗ[k] (G × G → M) where toFun x p := (x ((p.1 : G ⧸ F.fixingSubgroup.comap r), (p.2 : G ⧸ F.fixingSubgroup.comap r)) : M) map_add' _ _ := rfl map_smul' _ _ := rfl @[simp] lemma levelInflate₁_apply (y : (G ⧸ F.fixingSubgroup.comap r) → M.quotientToInvariants _) (g : G) : levelInflate₁ r M F y g = (y (g : G ⧸ F.fixingSubgroup.comap r) : M) := rfl @[simp] lemma levelInflate₂_apply (x : (G ⧸ F.fixingSubgroup.comap r) × (G ⧸ F.fixingSubgroup.comap r) → M.quotientToInvariants _) (g h : G) : levelInflate₂ r M F x (g, h) = (x ((g : G ⧸ F.fixingSubgroup.comap r), (h : G ⧸ F.fixingSubgroup.comap r)) : M) := rfl section lemmas variable {r M F} omit [Normal ℚ F] in private lemma coe_mul_eq_of_mem {g s : G} (hs : r s ∈ F.fixingSubgroup) : ((g * s : G) : G ⧸ F.fixingSubgroup.comap r) = (g : G ⧸ F.fixingSubgroup.comap r) := by rw [QuotientGroup.eq]; simpa using (F.fixingSubgroup.comap r).inv_mem hs private lemma qti_coe (g : G) (v : M.quotientToInvariants (F.fixingSubgroup.comap r)) : (((M.quotientToInvariants (F.fixingSubgroup.comap r)).ρ (g : G ⧸ F.fixingSubgroup.comap r) v : M.quotientToInvariants _) : M) = M.ρ g (v : M) := rfl private lemma qti_coe' (g : G) (v : M.quotientToInvariants (F.fixingSubgroup.comap r)) : (((M.ρ.quotientToInvariants (F.fixingSubgroup.comap r)) (g : G ⧸ F.fixingSubgroup.comap r) v : M.quotientToInvariants _) : M) = M.ρ g (v : M) := rfl variable [FiniteDimensional ℚ F] lemma levelInflate₁_mem_levelCochains₁ (y : (G ⧸ F.fixingSubgroup.comap r) → M.quotientToInvariants _) : levelInflate₁ r M F y ∈ levelCochains₁ r M := ⟨F, inferInstance, fun g s hs => by simp only [levelInflate₁_apply, coe_mul_eq_of_mem hs]⟩ lemma levelInflate₂_mem_levelCochains₂ (x : (G ⧸ F.fixingSubgroup.comap r) × (G ⧸ F.fixingSubgroup.comap r) → M.quotientToInvariants _) : levelInflate₂ r M F x ∈ levelCochains₂ r M := ⟨F, inferInstance, fun g g' s s' hs hs' => by simp only [levelInflate₂_apply, coe_mul_eq_of_mem hs, coe_mul_eq_of_mem hs']⟩ omit [FiniteDimensional ℚ F] in lemma levelInflate₂_d₁₂ (y : (G ⧸ F.fixingSubgroup.comap r) → M.quotientToInvariants _) : levelInflate₂ r M F ((d₁₂ (M.quotientToInvariants (F.fixingSubgroup.comap r))).hom y) = (d₁₂ M).hom (levelInflate₁ r M F y) := by funext ⟨g, h⟩ rw [levelInflate₂_apply, d₁₂_hom_apply, d₁₂_hom_apply] simp only [levelInflate₁_apply, QuotientGroup.mk_mul, Submodule.coe_add, Submodule.coe_sub, qti_coe'] omit [FiniteDimensional ℚ F] in lemma levelInflate₂_mem_cocycles₂ {x : (G ⧸ F.fixingSubgroup.comap r) × (G ⧸ F.fixingSubgroup.comap r) → M.quotientToInvariants _} (hx : x ∈ cocycles₂ (M.quotientToInvariants (F.fixingSubgroup.comap r))) : levelInflate₂ r M F x ∈ cocycles₂ M := by rw [mem_cocycles₂_iff] at hx ⊢ intro g h j have := congrArg Subtype.val (hx (g : G ⧸ _) (h : G ⧸ _) (j : G ⧸ _)) simpa only [levelInflate₂_apply, Submodule.coe_add, qti_coe, qti_coe', QuotientGroup.mk_mul] using this lemma levelInflate₂_mem_levelCocycles₂ {x : (G ⧸ F.fixingSubgroup.comap r) × (G ⧸ F.fixingSubgroup.comap r) → M.quotientToInvariants _} (hx : x ∈ cocycles₂ (M.quotientToInvariants (F.fixingSubgroup.comap r))) : levelInflate₂ r M F x ∈ levelCocycles₂ r M := ⟨levelInflate₂_mem_cocycles₂ hx, levelInflate₂_mem_levelCochains₂ x⟩ lemma levelInflate₂_mem_levelCoboundaries₂ {x : (G ⧸ F.fixingSubgroup.comap r) × (G ⧸ F.fixingSubgroup.comap r) → M.quotientToInvariants _} (hx : x ∈ coboundaries₂ (M.quotientToInvariants (F.fixingSubgroup.comap r))) : levelInflate₂ r M F x ∈ levelCoboundaries₂ r M := by obtain ⟨y, rfl⟩ := hx exact (mem_levelCoboundaries₂_iff r M _).2 ⟨levelInflate₁ r M F y, levelInflate₁_mem_levelCochains₁ y, (levelInflate₂_d₁₂ y).symm⟩ end lemmas variable [FiniteDimensional ℚ F] def levelInflateCocycles₂ : cocycles₂ (M.quotientToInvariants (F.fixingSubgroup.comap r)) →ₗ[k] levelCocycles₂ r M := ((levelInflate₂ r M F).comp (Submodule.subtype _)).codRestrict _ fun x => levelInflate₂_mem_levelCocycles₂ x.2 @[simp] lemma coe_levelInflateCocycles₂ (x : cocycles₂ (M.quotientToInvariants (F.fixingSubgroup.comap r))) : (levelInflateCocycles₂ r M F x : G × G → M) = levelInflate₂ r M F x := rfl lemma continuousH2π_levelInflateCocycles₂_eq_zero {x : cocycles₂ (M.quotientToInvariants (F.fixingSubgroup.comap r))} (hx : (x : _ → _) ∈ coboundaries₂ (M.quotientToInvariants (F.fixingSubgroup.comap r))) : continuousH2π r M (levelInflateCocycles₂ r M F x) = 0 := (continuousH2π_eq_zero_iff r M _).2 (levelInflate₂_mem_levelCoboundaries₂ hx) def continuousH2Inflation : H2 (M.quotientToInvariants (F.fixingSubgroup.comap r)) →ₗ[k] continuousH2 r M := (Submodule.liftQ _ (continuousH2π r M ∘ₗ levelInflateCocycles₂ r M F) (by rintro x ⟨y, rfl⟩ exact continuousH2π_levelInflateCocycles₂_eq_zero r M F ⟨y, rfl⟩)) ∘ₗ (H2Iso (M.quotientToInvariants (F.fixingSubgroup.comap r))).hom.hom @[simp] lemma continuousH2Inflation_H2π (x : cocycles₂ (M.quotientToInvariants (F.fixingSubgroup.comap r))) : continuousH2Inflation r M F (H2π _ x) = continuousH2π r M (levelInflateCocycles₂ r M F x) := by have h := π_comp_H2Iso_hom_apply (M.quotientToInvariants (F.fixingSubgroup.comap r)) ((isoCocycles₂ _).inv x) simp only [Iso.inv_hom_id_apply] at h have e : (H2Iso (M.quotientToInvariants (F.fixingSubgroup.comap r))).hom.hom (H2π _ x) = (LinearMap.range (shortComplexH2 (M.quotientToInvariants (F.fixingSubgroup.comap r))).moduleCatToCycles).mkQ x := Eq.trans rfl h have key : ∀ z, z = (LinearMap.range (shortComplexH2 (M.quotientToInvariants (F.fixingSubgroup.comap r))).moduleCatToCycles).mkQ x → (LinearMap.range (shortComplexH2 (M.quotientToInvariants (F.fixingSubgroup.comap r))).moduleCatToCycles).liftQ (continuousH2π r M ∘ₗ levelInflateCocycles₂ r M F) (by rintro x ⟨y, rfl⟩; exact continuousH2π_levelInflateCocycles₂_eq_zero r M F ⟨y, rfl⟩) z = continuousH2π r M (levelInflateCocycles₂ r M F x) := by rintro _ rfl; rfl exact key _ e end groupCohomology end
Statements phrased using this module (28)
- Capitulation of p-power-torsion ideal classes in a Galois S-level
NumberField.LevelArith.exists_le_isUnramifiedOutside_isGalois_forall_map_isPrincipal8 below · depth 21 - Inflation kills p-primary S-unit classes with vanishing idèle image
NumberField.LevelArith.continuousH2SrInflation_H2pi_eq_zero_of_map_principalIdele_eq_zero_of_pow_smul_eq_zero162 below · depth 24 - Existence of a Sylow intermediate field for a finite layer
NumberField.LevelArith.exists_le_le_isPGroup_quotient_not_dvd_finrank1 below · depth 24 - Invariant maximal S-units as the S-units of F
NumberField.LevelArith.exists_monoidHom_levelGal_exists_hom_res_quotientToInvariants_sUnitsRep_bijective8 below · depth 24 - Unramifiedness off S of the layer F_L over L
NumberField.LevelArith.ramificationIdx_eq_one_of_isUnramifiedOutside_of_under_not_mem_placesOverPrimesFinset6 below · depth 24 - Inflations of two S-level 2-cocycles with equal values agree
groupCohomology.continuousH2SrInflation_H2pi_eq_of_le0 below · depth 24 - Every S-ramified continuous H² class is an inflation
groupCohomology.exists_continuousH2SrInflation_eq3 below · depth 24 - Torsion classes in H²_S inflate from torsion at a finite level
groupCohomology.exists_continuousH2SrInflation_eq_of_nsmul_eq_zero6 below · depth 24 - Inflated p-primary class vanishes after prime-to-p restriction
NumberField.LevelArith.continuousH2SrInflation_H2pi_eq_zero_of_restrict_coboundary_of_not_dvd7 below · depth 25 - Trivial decomposition at infinity in a p-group layer
NumberField.LevelArith.eq_one_of_mem_infPlaceDecomp_of_isPGroup1 below · depth 25 - Restricting an S-unit 2-cocycle to a larger base field
NumberField.LevelArith.exists_cocyclesTwo_quotientToInvariants_sUnitsMaxRep_val_eq_of_le1 below · depth 25 - Vanishing of H³ of the S-idèle module of a level
NumberField.LevelArith.exists_inhomogeneousCochains_d_two_three_eq_sIdele158 below · depth 25 - Degree-3 S-unit cocycles split at a deeper p-level
NumberField.LevelArith.exists_level_d_two_three_eq_of_sIdele_coboundary_of_isPGroup478 below · depth 25 - Transporting a degree-3 cochain to the S-units frame
NumberField.LevelArith.exists_three_cochain_sUnitsRep_val_eq_of_transport0 below · depth 25 - Local invariants unchanged on passing to a larger S-level
NumberField.LevelArith.hasLocalInv_of_hasLocalInv_of_le119 below · depth 25 - The layer F_L/L is Galois for F/ℚ finite normal
NumberField.LevelArith.isGalois_levelField0 below · depth 25 - Vanishing S-idèle class of a restricted layer 2-cocycle
NumberField.LevelArith.map_diag_H2pi_eq_zero_of_map_principalIdele_H2pi_eq_zero_of_le30 below · depth 25 - Inflated H²_S class vanishes iff cocycle bounds deeper
groupCohomology.continuousH2SrInflation_H2pi_eq_zero_iff3 below · depth 25 - Galois S-levels above a given level with p^k dividing decomposition orders
NumberField.LevelArith.exists_le_isUnramifiedOutside_isGalois_pow_dvd_natCard_decomp12 below · depth 26 - Depth splitting of a 3-cocycle of S-units
NumberField.LevelArith.exists_level_d_two_three_eq_of_sIdele_coboundary_of_smul_eq_of_dvd_natCard_decomp415 below · depth 26 - Sylow placement of a large decomposition group
NumberField.LevelArith.exists_mem_placesOverPrimesFinset_pow_dvd_natCard_decomp_above_of_isPGroup_of_not_dvd6 below · depth 26 - Torsion transfer of S-idèle cochains along a level tower
NumberField.LevelArith.exists_smul_eq_smul_add_d_add_diag_of_sIdele_coboundary_of_le43 below · depth 26 - Vanishing idèle class transfers from base L to L'
NumberField.LevelArith.map_principalIdele_H2pi_eq_zero_of_le2 below · depth 26 - Genuine base change preserves S-unit idèles and S-units
NumberField.AdeleRing.unitsMap_genuineBaseChange_mem_unitIdelesOutside_of_isScalarTower2 below · depth 27 - Capitulation step: idèlic 2-cochain gives deeper S-unit coboundary
NumberField.LevelArith.exists_level_sUnitsRep_val_d_eq_of_sIdele_coboundary_of_map_eq_add_d56 below · depth 27 - Un-transporting a degree-3 coboundary to the invariants frame
NumberField.LevelArith.exists_two_cochain_quotientToInvariants_sUnitsMaxRep_eq_d_of_transport0 below · depth 27 - Genuine base change preserves S-idèles and S-units in level towers
NumberField.LevelArith.unitsMap_genuineBaseChange_mem_unitIdelesOutside_of_le2 below · depth 27 - A Galois S-level absorbing p-power idèle classes
NumberField.LevelArith.exists_le_unitsMap_genuineBaseChange_mem_sup_of_pow_mem14 below · depth 28