Definitions/Def_NumberField_LevelArithmeticModP.lean
Level arithmetic mod : units, class groups, places
For intermediate fields K \le L of \bar{\mathbb{Q}}/\mathbb{Q} this module builds the mod-p arithmetic data of the pair. The bridge part views L as an intermediate field L' of \bar{\mathbb{Q}} over K (levelField, via extension of scalars, with levelFieldEquiv the evident identification L \cong L' and instances making L' a number field when L/\mathbb{Q} is finite), sets LevelGal = \mathrm{Aut}_K(L'), and, when L'/K is normal, defines levelGal, the homomorphism from the subgroup of \mathrm{Aut}_\mathbb{Q}(\bar{\mathbb{Q}}) fixing K pointwise to \mathrm{Aut}_K(L') given by restriction; elements fixing L pointwise map to 1. inflLevel is inflation of representations along levelGal.
The mod-p part works with a commutative ring k and a group G: for \rho a k-representation on V, the submodules (p)V (the pointwise p-multiple of \top) and V[p] are \rho-stable, p annihilates both V/(p)V and V[p], and modP, torsionP are the resulting \mathbb{Z}/p-representations; repModP, repTorsionP give functors \mathrm{Rep}_k(G) \to \mathrm{Rep}_{\mathbb{Z}/p}(G), with repModPMap, repTorsionPMap on morphisms.
For a number field F over E, classGroupAut makes \mathrm{Aut}_E(F) act on \mathrm{Cl}(\mathcal{O}_F) through the functoriality of class groups, giving classGroupRep on \mathrm{Cl}(\mathcal{O}_F) written additively. placesOverPrimes collects the height-one primes of \mathcal{O}_F containing a rational prime from a set S (finite when S is), primeClass their classes, and sPrimeClasses is the largest Galois-stable subgroup inside the subgroup they generate, i.e. the c with \sigma \cdot c in that subgroup for every \sigma; sClassGroupRep is the quotient representation by it, with the quotient morphism toSClassGroupRep.
The quartet unitsModP, sClassTorsionP, sClassModP inflate to the fixing subgroup of K the mod-p reduction of the S-unit representation of L' (for the places above the primes of \mathcal{O}_K over S) and the p-torsion and mod-p reduction of the S-class group representation. Finally, IsNormalLevel asserts that the fixing subgroup of K normalises that of L; under it the fixing subgroup of K acts on the set of orbits of the fixing subgroup of L on any \mathrm{Aut}_\mathbb{Q}(\bar{\mathbb{Q}})-set, elements fixing L acting trivially. Applied to \mathrm{Aut}_\mathbb{Q}(\bar{\mathbb{Q}}) modulo the image of the local group at an index v of \mathrm{Unit} \sqcup S, this yields placesAbove, the permutation representation placesRep on \mathbb{Z}/p-valued finitely supported functions, and the augmentation placesAug to the trivial representation.
Relation to Mathlib
Mathlib supplies the functoriality of class groups under ring isomorphisms and S-unit subgroups, but not the Galois action on class groups, the Galois-stable subgroup of S-prime classes, or the mod-p and p-torsion functors on Rep; these are the project's own. The permutation representation is built from a vendored copy of a Mathlib definition of the finitely-supported permutation representation, kept under the name Representation.ofMulActionFinsupp.
Where it is used
These representations are the global input to the Greenberg–Wiles style counting of Selmer groups over a number field: units and class groups modulo p, together with the permutation modules on places above the archimedean place and the primes of a fixed finite set, are the objects whose invariants and local conditions enter the Euler-characteristic comparison used in the cyclotomic endgame of the argument.
References
- H. Darmon, F. Diamond and R. Taylor, Fermat's Last Theorem, in: Current Developments in Mathematics 1995, International Press, 1995, 1–154
- L. C. Washington, Introduction to Cyclotomic Fields, 2nd ed., Graduate Texts in Mathematics 83, Springer, 1997
- J. Neukirch, Algebraic Number Theory, Grundlehren der mathematischen Wissenschaften 322, Springer, 1999
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 314 lines
- 64 declarations
- used in the statements of 107 theorems and imported by 110 proofs
- imports 4 definition modules
Source file: Definitions/Def_NumberField_LevelArithmeticModP.lean
Imports
Declarations
- abbrev
NumberField.LevelArith.levelField - abbrev
NumberField.LevelArith.LevelGal - def
NumberField.LevelArith.levelFieldEquiv - lemma
NumberField.LevelArith.coe_levelFieldEquiv - lemma
NumberField.LevelArith.coe_levelFieldEquiv_symm - instance
NumberField.LevelArith.instFiniteDimensionalLevelField - instance
NumberField.LevelArith.instNumberFieldLevelField - instance
NumberField.LevelArith.instNumberFieldBase - def
NumberField.LevelArith.levelGal - lemma
NumberField.LevelArith.levelGal_apply_coe - lemma
NumberField.LevelArith.levelGal_eq_one_of_mem - abbrev
NumberField.LevelArith.inflLevel - lemma
NumberField.LevelArith.inflLevel_ρ_apply - theorem
NumberField.LevelArith.torsionBy_le_comap - theorem
NumberField.LevelArith.smul_top_le_comap - theorem
NumberField.LevelArith.nsmul_quot_eq_zero - theorem
NumberField.LevelArith.nsmul_torsionBy_eq_zero - instance
NumberField.LevelArith.instModuleZModQuot - instance
NumberField.LevelArith.instModuleZModTorsion - def
NumberField.LevelArith.toZMod - theorem
NumberField.LevelArith.toZMod_apply - def
NumberField.LevelArith.modP - def
NumberField.LevelArith.torsionP - theorem
NumberField.LevelArith.modP_apply_mk - theorem
NumberField.LevelArith.torsionP_apply_coe - abbrev
NumberField.LevelArith.repModP - abbrev
NumberField.LevelArith.repTorsionP - def
NumberField.LevelArith.repModPMap - theorem
NumberField.LevelArith.repModPMap_hom_mk - def
NumberField.LevelArith.repTorsionPMap - theorem
NumberField.LevelArith.repTorsionPMap_hom_apply_coe - abbrev
NumberField.LevelArith.ringOfIntegersAut - def
NumberField.LevelArith.classGroupAut - instance
NumberField.LevelArith.instMulDistribMulActionClassGroup - lemma
NumberField.LevelArith.smul_classGroup_def - lemma
NumberField.LevelArith.smul_mk0 - abbrev
NumberField.LevelArith.classGroupRep - def
NumberField.LevelArith.placesOverPrimes - lemma
NumberField.LevelArith.mem_placesOverPrimes_iff - theorem
NumberField.LevelArith.placesOverPrimes_finite - def
NumberField.LevelArith.placesOverPrimesFinset - lemma
NumberField.LevelArith.mem_placesOverPrimesFinset - def
NumberField.LevelArith.primeClass - def
NumberField.LevelArith.sPrimeClasses - lemma
NumberField.LevelArith.mem_sPrimeClasses_iff - lemma
NumberField.LevelArith.smul_mem_sPrimeClasses - def
NumberField.LevelArith.sPrimeClassesSubmodule - lemma
NumberField.LevelArith.mem_sPrimeClassesSubmodule - abbrev
NumberField.LevelArith.sClassGroupRep - def
NumberField.LevelArith.toSClassGroupRep - lemma
NumberField.LevelArith.toSClassGroupRep_hom_apply - lemma
NumberField.LevelArith.toSClassGroupRep_hom_surjective - abbrev
NumberField.LevelArith.unitsModP - abbrev
NumberField.LevelArith.sClassTorsionP - abbrev
NumberField.LevelArith.sClassModP - abbrev
NumberField.LevelArith.IsNormalLevel - def
NumberField.LevelArith.orbitQuotientAction - lemma
NumberField.LevelArith.orbitQuotientAction_smul_mk - lemma
NumberField.LevelArith.orbitQuotientAction_smul_eq_of_mem - abbrev
NumberField.LevelArith.placesAbove - def
NumberField.LevelArith.placesRep - lemma
NumberField.LevelArith.placesRep_ρ_single - def
NumberField.LevelArith.placesAug - lemma
NumberField.LevelArith.placesAug_hom_single
Source
import Mathlib import Definitions.Def_NumberField_SUnitsModule import Definitions.Def_ExtEndgame_ProductionDatum import Definitions.Def_ClassGroup_GaloisAction import Definitions.Def_Compat_Mathlib430 set_option autoImplicit false noncomputable section open CategoryTheory IsDedekindDomain open scoped Pointwise NumberField nonZeroDivisors namespace NumberField.LevelArith section Bridge variable (K L : IntermediateField ℚ (AlgebraicClosure ℚ)) (hKL : K ≤ L) abbrev levelField : IntermediateField ↥K (AlgebraicClosure ℚ) := IntermediateField.extendScalars hKL abbrev LevelGal : Type := ↥(levelField K L hKL) ≃ₐ[↥K] ↥(levelField K L hKL) def levelFieldEquiv : ↥L ≃+* ↥(levelField K L hKL) where toFun x := ⟨(x : AlgebraicClosure ℚ), (IntermediateField.mem_extendScalars hKL).2 x.2⟩ invFun y := ⟨(y : AlgebraicClosure ℚ), (IntermediateField.mem_extendScalars hKL).1 y.2⟩ left_inv _ := rfl right_inv _ := rfl map_mul' _ _ := rfl map_add' _ _ := rfl @[simp] lemma coe_levelFieldEquiv (x : ↥L) : ((levelFieldEquiv K L hKL x : ↥(levelField K L hKL)) : AlgebraicClosure ℚ) = x := rfl @[simp] lemma coe_levelFieldEquiv_symm (y : ↥(levelField K L hKL)) : (((levelFieldEquiv K L hKL).symm y : ↥L) : AlgebraicClosure ℚ) = y := rfl scoped instance instFiniteDimensionalLevelField [FiniteDimensional ℚ ↥L] : FiniteDimensional ℚ ↥(levelField K L hKL) := LinearEquiv.finiteDimensional ((levelFieldEquiv K L hKL).toAddEquiv.toLinearEquiv fun c x => map_rat_smul _ c x) scoped instance instNumberFieldLevelField [FiniteDimensional ℚ ↥L] : NumberField ↥(levelField K L hKL) where to_charZero := inferInstance to_finiteDimensional := inferInstance scoped instance instNumberFieldBase [FiniteDimensional ℚ ↥K] : NumberField ↥K where to_charZero := inferInstance to_finiteDimensional := inferInstance def levelGal [Normal ↥K ↥(levelField K L hKL)] : ↥K.fixingSubgroup →* LevelGal K L hKL := (AlgEquiv.restrictNormalHom ↥(levelField K L hKL)).comp (IntermediateField.fixingSubgroupEquiv K).toMonoidHom lemma levelGal_apply_coe [Normal ↥K ↥(levelField K L hKL)] (γ : ↥K.fixingSubgroup) (x : ↥(levelField K L hKL)) : ((levelGal K L hKL γ x : ↥(levelField K L hKL)) : AlgebraicClosure ℚ) = (γ : AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ) (x : AlgebraicClosure ℚ) := AlgEquiv.restrictNormal_commutes (IntermediateField.fixingSubgroupEquiv K γ) ↥(levelField K L hKL) x lemma levelGal_eq_one_of_mem [Normal ↥K ↥(levelField K L hKL)] (γ : ↥K.fixingSubgroup) (hγ : (γ : AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ) ∈ L.fixingSubgroup) : levelGal K L hKL γ = 1 := AlgEquiv.ext fun x => Subtype.ext (by rw [levelGal_apply_coe] exact (IntermediateField.mem_fixingSubgroup_iff _ _).1 hγ _ ((IntermediateField.mem_extendScalars hKL).1 x.2)) abbrev inflLevel [Normal ↥K ↥(levelField K L hKL)] {k : Type} [CommRing k] (M : Rep k (LevelGal K L hKL)) : Rep k ↥K.fixingSubgroup := Rep.res (levelGal K L hKL) M lemma inflLevel_ρ_apply [Normal ↥K ↥(levelField K L hKL)] {k : Type} [CommRing k] (M : Rep k (LevelGal K L hKL)) (γ : ↥K.fixingSubgroup) : (inflLevel K L hKL M).ρ γ = M.ρ (levelGal K L hKL γ) := rfl end Bridge section ModP variable {k : Type} [CommRing k] {G : Type} [Group G] theorem torsionBy_le_comap {M : Type} [AddCommGroup M] {iM : Module k M} (ρ : Representation k G M) (a : k) (g : G) : Submodule.torsionBy k M a ≤ (Submodule.torsionBy k M a).comap (ρ g) := fun x hx => by rw [Submodule.mem_comap, Submodule.mem_torsionBy_iff, ← map_smul] rw [Submodule.mem_torsionBy_iff] at hx rw [hx, map_zero] theorem smul_top_le_comap {M : Type} [AddCommGroup M] {iM : Module k M} (ρ : Representation k G M) (a : k) (g : G) : (a • (⊤ : Submodule k M)) ≤ (a • (⊤ : Submodule k M)).comap (ρ g) := fun x hx => by rw [Submodule.mem_comap] obtain ⟨y, -, rfl⟩ := (Submodule.mem_smul_pointwise_iff_exists _ _ _).1 hx rw [map_smul] exact Submodule.smul_mem_pointwise_smul _ _ _ Submodule.mem_top theorem nsmul_quot_eq_zero {V : Type} [AddCommGroup V] {iV : Module k V} (p : ℕ) (x : V ⧸ ((p : k) • (⊤ : Submodule k V))) : p • x = 0 := by obtain ⟨a, rfl⟩ := Submodule.Quotient.mk_surjective _ x rw [← Submodule.mkQ_apply, ← map_nsmul, Submodule.mkQ_apply, Submodule.Quotient.mk_eq_zero, ← Nat.cast_smul_eq_nsmul k] exact Submodule.smul_mem_pointwise_smul _ _ _ Submodule.mem_top theorem nsmul_torsionBy_eq_zero {V : Type} [AddCommGroup V] {iV : Module k V} (p : ℕ) (x : ↥(Submodule.torsionBy k V (p : k))) : p • x = 0 := by rw [← Nat.cast_smul_eq_nsmul k] exact Subtype.ext ((Submodule.mem_torsionBy_iff (p : k) (x : V)).1 x.2) scoped instance instModuleZModQuot {V : Type} [AddCommGroup V] {iV : Module k V} (p : ℕ) : Module (ZMod p) (V ⧸ ((p : k) • (⊤ : Submodule k V))) := AddCommGroup.zmodModule (nsmul_quot_eq_zero p) scoped instance instModuleZModTorsion {V : Type} [AddCommGroup V] {iV : Module k V} (p : ℕ) : Module (ZMod p) ↥(Submodule.torsionBy k V (p : k)) := AddCommGroup.zmodModule (nsmul_torsionBy_eq_zero p) def toZMod (p : ℕ) {M : Type} [AddCommGroup M] [Module (ZMod p) M] {inst : Module k M} (σ : Representation k G M) : Representation (ZMod p) G M where toFun g := (σ g).toAddMonoidHom.toZModLinearMap p map_one' := by ext; simp map_mul' g h := by ext; simp @[simp] theorem toZMod_apply (p : ℕ) {M : Type} [AddCommGroup M] [Module (ZMod p) M] {inst : Module k M} (σ : Representation k G M) (g : G) (m : M) : toZMod p σ g m = σ g m := rfl def modP (p : ℕ) {V : Type} [AddCommGroup V] {iV : Module k V} (ρ : Representation k G V) : Representation (ZMod p) G (V ⧸ ((p : k) • (⊤ : Submodule k V))) := toZMod p (ρ.quotient _ (smul_top_le_comap ρ (p : k))) def torsionP (p : ℕ) {V : Type} [AddCommGroup V] {iV : Module k V} (ρ : Representation k G V) : Representation (ZMod p) G ↥(Submodule.torsionBy k V (p : k)) := toZMod p (ρ.subrepresentation _ (torsionBy_le_comap ρ (p : k))) @[simp] theorem modP_apply_mk (p : ℕ) {V : Type} [AddCommGroup V] {iV : Module k V} (ρ : Representation k G V) (g : G) (v : V) : modP p ρ g (Submodule.Quotient.mk v) = Submodule.Quotient.mk (ρ g v) := rfl @[simp] theorem torsionP_apply_coe (p : ℕ) {V : Type} [AddCommGroup V] {iV : Module k V} (ρ : Representation k G V) (g : G) (v : ↥(Submodule.torsionBy k V (p : k))) : ((torsionP p ρ g v : ↥(Submodule.torsionBy k V (p : k))) : V) = ρ g v := rfl abbrev repModP (p : ℕ) (A : Rep k G) : Rep (ZMod p) G := Rep.of (modP p A.ρ) abbrev repTorsionP (p : ℕ) (A : Rep k G) : Rep (ZMod p) G := Rep.of (torsionP p A.ρ) def repModPMap (p : ℕ) {A B : Rep k G} (f : A ⟶ B) : repModP p A ⟶ repModP p B := Rep.ofHom ⟨(Submodule.mapQ ((p : k) • (⊤ : Submodule k A)) ((p : k) • (⊤ : Submodule k B)) f.hom.toLinearMap (fun x hx => by obtain ⟨y, -, rfl⟩ := (Submodule.mem_smul_pointwise_iff_exists _ _ _).1 hx rw [Submodule.mem_comap, map_smul] exact Submodule.smul_mem_pointwise_smul _ _ _ Submodule.mem_top)).toAddMonoidHom.toZModLinearMap p, fun g => LinearMap.ext fun x => by obtain ⟨a, rfl⟩ := Submodule.Quotient.mk_surjective _ x change Submodule.Quotient.mk (f.hom (A.ρ g a)) = Submodule.Quotient.mk (B.ρ g (f.hom a)) rw [Rep.hom_comm_apply]⟩ @[simp] theorem repModPMap_hom_mk (p : ℕ) {A B : Rep k G} (f : A ⟶ B) (a : A) : (repModPMap p f).hom (Submodule.Quotient.mk a) = Submodule.Quotient.mk (f.hom a) := rfl def repTorsionPMap (p : ℕ) {A B : Rep k G} (f : A ⟶ B) : repTorsionP p A ⟶ repTorsionP p B := Rep.ofHom ⟨(f.hom.toLinearMap.restrict (p := Submodule.torsionBy k A (p : k)) (q := Submodule.torsionBy k B (p : k)) (fun x hx => by rw [Submodule.mem_torsionBy_iff] at hx ⊢ rw [← map_smul, hx, map_zero])).toAddMonoidHom.toZModLinearMap p, fun g => LinearMap.ext fun x => Subtype.ext (Rep.hom_comm_apply f g (x : A))⟩ @[simp] theorem repTorsionPMap_hom_apply_coe (p : ℕ) {A B : Rep k G} (f : A ⟶ B) (a : ↥(Submodule.torsionBy k A (p : k))) : (((repTorsionPMap p f).hom a : ↥(Submodule.torsionBy k B (p : k))) : B) = f.hom a := rfl end ModP section ClassGroups variable (E F : Type) [Field E] [Field F] [NumberField F] [Algebra E F] abbrev ringOfIntegersAut (σ : F ≃ₐ[E] F) : 𝓞 F ≃+* 𝓞 F := NumberField.RingOfIntegers.mapRingEquiv (σ : F ≃+* F) def classGroupAut : (F ≃ₐ[E] F) →* MulAut (ClassGroup (𝓞 F)) where toFun σ := ClassGroup.mulEquiv (ringOfIntegersAut E F σ) map_one' := MulEquiv.ext fun C => by change ClassGroup.mulEquiv (ringOfIntegersAut E F 1) C = C have : ringOfIntegersAut E F 1 = RingEquiv.refl _ := RingEquiv.ext fun _ => rfl rw [this, ClassGroup.mulEquiv_refl_apply] map_mul' σ τ := MulEquiv.ext fun C => by change ClassGroup.mulEquiv (ringOfIntegersAut E F (σ * τ)) C = ClassGroup.mulEquiv (ringOfIntegersAut E F σ) (ClassGroup.mulEquiv (ringOfIntegersAut E F τ) C) have : ringOfIntegersAut E F (σ * τ) = (ringOfIntegersAut E F τ).trans (ringOfIntegersAut E F σ) := RingEquiv.ext fun _ => rfl rw [this, ClassGroup.mulEquiv_trans_apply] scoped instance instMulDistribMulActionClassGroup : MulDistribMulAction (F ≃ₐ[E] F) (ClassGroup (𝓞 F)) := MulDistribMulAction.compHom _ (classGroupAut E F) lemma smul_classGroup_def (σ : F ≃ₐ[E] F) (C : ClassGroup (𝓞 F)) : σ • C = ClassGroup.mulEquiv (ringOfIntegersAut E F σ) C := rfl lemma smul_mk0 (σ : F ≃ₐ[E] F) (P : (Ideal (𝓞 F))⁰) : σ • ClassGroup.mk0 P = ClassGroup.mk0 (Ideal.mapNonZero (ringOfIntegersAut E F σ) P) := ClassGroup.mulEquiv_mk0 _ P abbrev classGroupRep : Rep ℤ (F ≃ₐ[E] F) := Rep.ofMulDistribMulAction (F ≃ₐ[E] F) (ClassGroup (𝓞 F)) def placesOverPrimes (S : Set Nat.Primes) : Set (HeightOneSpectrum (𝓞 F)) := {w | ∃ p ∈ S, ((p : ℕ) : 𝓞 F) ∈ w.asIdeal} omit [NumberField F] in lemma mem_placesOverPrimes_iff (S : Set Nat.Primes) (w : HeightOneSpectrum (𝓞 F)) : w ∈ placesOverPrimes F S ↔ ∃ p ∈ S, ((p : ℕ) : 𝓞 F) ∈ w.asIdeal := Iff.rfl theorem placesOverPrimes_finite (S : Finset Nat.Primes) : (placesOverPrimes F (S : Set Nat.Primes)).Finite := by refine (S.finite_toSet.biUnion fun p _ => (Ideal.finite_factors (I := Ideal.span {((p : ℕ) : 𝓞 F)}) ?_)).subset ?_ · rw [Ideal.zero_eq_bot, Ne, Ideal.span_singleton_eq_bot] exact_mod_cast p.2.ne_zero · rintro w ⟨p, hp, hw⟩ exact Set.mem_biUnion hp ((Ideal.dvd_iff_le).2 ((Ideal.span_singleton_le_iff_mem _).2 hw)) def placesOverPrimesFinset (S : Finset Nat.Primes) : Finset (HeightOneSpectrum (𝓞 F)) := (placesOverPrimes_finite F S).toFinset lemma mem_placesOverPrimesFinset (S : Finset Nat.Primes) (w : HeightOneSpectrum (𝓞 F)) : w ∈ placesOverPrimesFinset F S ↔ w ∈ placesOverPrimes F (S : Set Nat.Primes) := Set.Finite.mem_toFinset _ def primeClass (w : HeightOneSpectrum (𝓞 F)) : ClassGroup (𝓞 F) := ClassGroup.mk0 ⟨w.asIdeal, mem_nonZeroDivisors_iff_ne_zero.2 (by simpa using w.ne_bot)⟩ def sPrimeClasses (S : Set Nat.Primes) : Subgroup (ClassGroup (𝓞 F)) := ⨅ σ : F ≃ₐ[E] F, (Subgroup.closure (primeClass F '' placesOverPrimes F S)).comap (MulDistribMulAction.toMonoidHom (ClassGroup (𝓞 F)) σ) lemma mem_sPrimeClasses_iff (S : Set Nat.Primes) (c : ClassGroup (𝓞 F)) : c ∈ sPrimeClasses E F S ↔ ∀ σ : F ≃ₐ[E] F, σ • c ∈ Subgroup.closure (primeClass F '' placesOverPrimes F S) := by simp only [sPrimeClasses, Subgroup.mem_iInf, Subgroup.mem_comap, MulDistribMulAction.toMonoidHom_apply] lemma smul_mem_sPrimeClasses (S : Set Nat.Primes) (τ : F ≃ₐ[E] F) {c : ClassGroup (𝓞 F)} (hc : c ∈ sPrimeClasses E F S) : τ • c ∈ sPrimeClasses E F S := by rw [mem_sPrimeClasses_iff] at hc ⊢ intro σ rw [← mul_smul] exact hc (σ * τ) def sPrimeClassesSubmodule (S : Set Nat.Primes) : Submodule ℤ (Additive (ClassGroup (𝓞 F))) := (Subgroup.toAddSubgroup (sPrimeClasses E F S)).toIntSubmodule lemma mem_sPrimeClassesSubmodule (S : Set Nat.Primes) (x : Additive (ClassGroup (𝓞 F))) : x ∈ sPrimeClassesSubmodule E F S ↔ Additive.toMul x ∈ sPrimeClasses E F S := Iff.rfl abbrev sClassGroupRep (S : Set Nat.Primes) : Rep ℤ (F ≃ₐ[E] F) := Rep.of ((classGroupRep E F).ρ.quotient (sPrimeClassesSubmodule E F S) fun σ _ hx => smul_mem_sPrimeClasses E F S σ hx) def toSClassGroupRep (S : Set Nat.Primes) : classGroupRep E F ⟶ sClassGroupRep E F S := Rep.ofHom ⟨Submodule.mkQ _, fun _ => rfl⟩ lemma toSClassGroupRep_hom_apply (S : Set Nat.Primes) (x : classGroupRep E F) : (toSClassGroupRep E F S).hom x = Submodule.Quotient.mk x := rfl lemma toSClassGroupRep_hom_surjective (S : Set Nat.Primes) : Function.Surjective (toSClassGroupRep E F S).hom := Submodule.mkQ_surjective _ end ClassGroups section Quartet variable (K L : IntermediateField ℚ (AlgebraicClosure ℚ)) (hKL : K ≤ L) [Normal ↥K ↥(levelField K L hKL)] [FiniteDimensional ℚ ↥K] [FiniteDimensional ℚ ↥L] (S : Finset Nat.Primes) (p : ℕ) abbrev unitsModP : Rep (ZMod p) ↥K.fixingSubgroup := inflLevel K L hKL (repModP p (NumberField.SUnits.sUnitsRep ↥K ↥(levelField K L hKL) (placesOverPrimesFinset ↥K S))) abbrev sClassTorsionP : Rep (ZMod p) ↥K.fixingSubgroup := inflLevel K L hKL (repTorsionP p (sClassGroupRep ↥K ↥(levelField K L hKL) (S : Set Nat.Primes))) abbrev sClassModP : Rep (ZMod p) ↥K.fixingSubgroup := inflLevel K L hKL (repModP p (sClassGroupRep ↥K ↥(levelField K L hKL) (S : Set Nat.Primes))) end Quartet section Places variable (K L : IntermediateField ℚ (AlgebraicClosure ℚ)) abbrev IsNormalLevel : Prop := ∀ g ∈ K.fixingSubgroup, ∀ s ∈ L.fixingSubgroup, g * s * g⁻¹ ∈ L.fixingSubgroup @[reducible] def orbitQuotientAction (hnorm : IsNormalLevel K L) (X : Type) [MulAction (AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ) X] : MulAction ↥K.fixingSubgroup (MulAction.orbitRel.Quotient ↥L.fixingSubgroup X) where smul γ := Quotient.map' (fun x : X => (γ : (AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ)) • x) (fun a b hab => by rw [MulAction.orbitRel_apply, MulAction.mem_orbit_iff] at hab ⊢ obtain ⟨s, rfl⟩ := hab refine ⟨⟨(γ : (AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ)) * s * (γ : (AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ))⁻¹, hnorm _ γ.2 _ s.2⟩, ?_⟩ show ((γ : (AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ)) * s * (γ : (AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ))⁻¹) • ((γ : (AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ)) • b) = (γ : (AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ)) • ((s : (AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ)) • b) rw [← mul_smul, ← mul_smul, inv_mul_cancel_right]) one_smul q := Quotient.inductionOn' q fun x => congrArg (Quotient.mk'' (s₁ := MulAction.orbitRel ↥L.fixingSubgroup X)) (one_smul (AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ) x) mul_smul γ δ q := Quotient.inductionOn' q fun x => congrArg (Quotient.mk'' (s₁ := MulAction.orbitRel ↥L.fixingSubgroup X)) (mul_smul (γ : (AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ)) (δ : (AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ)) x) lemma orbitQuotientAction_smul_mk (hnorm : IsNormalLevel K L) (X : Type) [MulAction (AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ) X] (γ : ↥K.fixingSubgroup) (x : X) : (letI := orbitQuotientAction K L hnorm X γ • (Quotient.mk'' x : MulAction.orbitRel.Quotient ↥L.fixingSubgroup X)) = Quotient.mk'' ((γ : (AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ)) • x) := rfl lemma orbitQuotientAction_smul_eq_of_mem (hnorm : IsNormalLevel K L) (X : Type) [MulAction (AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ) X] (γ : ↥K.fixingSubgroup) (hγ : (γ : (AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ)) ∈ L.fixingSubgroup) (q : MulAction.orbitRel.Quotient ↥L.fixingSubgroup X) : (letI := orbitQuotientAction K L hnorm X; γ • q) = q := by induction q using Quotient.inductionOn' with | h x => exact Quotient.sound' ((MulAction.orbitRel_apply).2 (MulAction.mem_orbit_iff.2 ⟨⟨_, hγ⟩, rfl⟩)) abbrev placesAbove (S : Finset Nat.Primes) (v : ExtCitation.extArithIndex S) : Type := MulAction.orbitRel.Quotient ↥L.fixingSubgroup ((AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ) ⧸ (ExtCitation.extArithLoc S v).range) def placesRep (hnorm : IsNormalLevel K L) (S : Finset Nat.Primes) (v : ExtCitation.extArithIndex S) (p : ℕ) : Rep (ZMod p) ↥K.fixingSubgroup := Rep.of (@Representation.ofMulActionFinsupp (ZMod p) _ ↥K.fixingSubgroup _ (placesAbove L S v) (orbitQuotientAction K L hnorm _)) lemma placesRep_ρ_single (hnorm : IsNormalLevel K L) (S : Finset Nat.Primes) (v : ExtCitation.extArithIndex S) (p : ℕ) (γ : ↥K.fixingSubgroup) (x : (AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ) ⧸ (ExtCitation.extArithLoc S v).range) (c : ZMod p) : (placesRep K L hnorm S v p).ρ γ (Finsupp.single (Quotient.mk'' x) c) = Finsupp.single (Quotient.mk'' ((γ : (AlgebraicClosure ℚ ≃ₐ[ℚ] AlgebraicClosure ℚ)) • x)) c := Finsupp.mapDomain_single def placesAug (hnorm : IsNormalLevel K L) (S : Finset Nat.Primes) (v : ExtCitation.extArithIndex S) (p : ℕ) : placesRep K L hnorm S v p ⟶ Rep.trivial (ZMod p) ↥K.fixingSubgroup (ZMod p) := Rep.ofHom ⟨Finsupp.linearCombination (ZMod p) (fun _ => (1 : ZMod p)), fun γ => Finsupp.lhom_ext fun q c => by change Finsupp.linearCombination (ZMod p) (fun _ => (1 : ZMod p)) (Finsupp.mapDomain _ (Finsupp.single q c)) = Finsupp.linearCombination (ZMod p) (fun _ => (1 : ZMod p)) (Finsupp.single q c) rw [Finsupp.mapDomain_single, Finsupp.linearCombination_single, Finsupp.linearCombination_single]⟩ lemma placesAug_hom_single (hnorm : IsNormalLevel K L) (S : Finset Nat.Primes) (v : ExtCitation.extArithIndex S) (p : ℕ) (q : placesAbove L S v) (c : ZMod p) : (placesAug K L hnorm S v p).hom (Finsupp.single q c) = c := by change Finsupp.linearCombination (ZMod p) (fun _ => (1 : ZMod p)) (Finsupp.single q c) = c rw [Finsupp.linearCombination_single, smul_eq_mul, mul_one] end Places end NumberField.LevelArith end
Statements phrased using this module (107)
- Equivariant mod-p S-unit rank formula with coefficients
NumberField.LevelArith.finrank_invariants_unitsModP_tensor_add_finrank_invariants_eq48 below · depth 19 - Normality of the level field under conjugation-stability
NumberField.LevelArith.normal_levelField_of_isNormalLevel0 below · depth 19 - Kummer rank formula for H¹_S(K, N(1))
groupCohomology.finiteDimensional_and_finrank_continuousH1Sr_twist_eq_unitsModP_add_sClassTorsionP33 below · depth 19 - Dimension of H²_S(K,N(1)) via S-class group and places
groupCohomology.finiteDimensional_and_finrank_continuousH2Sr_twist_add_eq_sClassTorsionP_add_sum_placesRep492 below · depth 19 - Infinite places of a Galois extension as a G-set
NumberField.InfPlaceDecomp.exists_equiv_sigma_quotient_decomp_above0 below · depth 20 - Archimedean places of a level as Γ_L-orbits
NumberField.LevelArith.exists_placesAbove_inl_equiv_infinitePlace0 below · depth 20 - Places of the level above q as primes of 𝒪_{L'}
NumberField.LevelArith.exists_placesAbove_inr_embedding_heightOneSpectrum11 below · depth 20 - Invariant S-level classes have the dimension of Selmer tensor invariants
NumberField.LevelArith.finiteDimensional_and_finrank_continuousH1Sr_res_inf_eq_finrank_invariants_selmerRep_tensor23 below · depth 20 - Additivity of twisted invariants in the S-Selmer sequence
NumberField.LevelArith.finrank_invariants_selmerRep_tensor_eq_unitsModP_add_sClassTorsionP7 below · depth 20 - Order of Gal(L/K) as a relative index
NumberField.LevelArith.natCard_levelGal_eq_relIndex0 below · depth 20 - p-torsion of the S-units is 𝔽ₚ(χ)
NumberField.LevelArith.nonempty_inflLevel_repTorsionP_sUnitsRep_iso_twist_cycloChar0 below · depth 20 - Places above S as a disjoint union of coset spaces
NumberField.PlaceTransport.exists_equiv_placesAbove_sigma_quotient_decomp_above2 below · depth 20 - Equivariant mod-p S-unit rank identity with coefficients
NumberField.SUnits.finrank_invariants_repModP_sUnitsRep_tensor_add28 below · depth 20 - Finite primes of subfields of ℚ̄ lift to valuation subrings
NumberField.exists_valuationSubring_algebraicClosure_forall_mem_iff_valuation_le_one4 below · depth 20 - S-level H¹ via restriction to an index-prime-to-p subgroup
groupCohomology.exists_continuousH1Sr_linearEquiv_inf_of_isTrivial_of_coprime4 below · depth 20 - Equivariant splitting of S-ramified H² with μₚ coefficients
groupCohomology.finiteDimensional_and_nonempty_cyclotomicQuotientH2Rep_biprod_trivial_iso489 below · depth 20 - H²_S with cyclotomic twist as tensor invariants
groupCohomology.nonempty_continuousH2Sr_twist_linearEquiv_invariants_cyclotomicQuotientH2Rep_tensor1 below · depth 20 - Embedding of H¹_S into the S-class group
NumberField.LevelArith.exists_continuousH1Sr_sUnitsMaxRep_linearMap_sClassGroupRep_injective17 below · depth 21 - Equivariant embedding of H¹_S into the S-class group
NumberField.LevelArith.exists_continuousH1Sr_sUnitsMaxRep_linearMap_sClassGroupRep_injective_natural17 below · depth 21 - Capitulation of p-power-torsion ideal classes in a Galois S-level
NumberField.LevelArith.exists_le_isUnramifiedOutside_isGalois_forall_map_isPrincipal8 below · depth 21 - Primes above q as Γ_L-orbits on Γ/D_q
NumberField.LevelArith.exists_placesAbove_inr_equiv_primesOver12 below · depth 21 - Transporting p-torsion of the S-class group to the level representation
NumberField.LevelArith.exists_restrict_and_torsionBy_sClassGroupRep_linearEquiv_sClassTorsionP1 below · depth 21 - Kummer isomorphism for the mod p Selmer module, twisted
NumberField.LevelArith.exists_selmerRep_linearEquiv_levelConstantHom16 below · depth 21 - Finiteness of the mod p S-unit, class and Selmer modules
NumberField.LevelArith.finiteDimensional_unitsModP_sClass_selmerRep2 below · depth 21 - A[p] ≅ A/pA as ℤ/p-representations when p ∤ |G|
NumberField.LevelArith.nonempty_repTorsionP_iso_repModP1 below · depth 21 - S-prime classes: Galois-stable part equals the closure
NumberField.LevelArith.sPrimeClasses_eq_closure0 below · depth 21 - Galois stability of the maximal S-unit group
NumberField.LevelArith.sUnitsMaxStable_eq_sUnitsMax0 below · depth 21 - Galois-stable Selmer subgroup equals the Selmer group
NumberField.LevelArith.selmerStable_eq_selmer0 below · depth 21 - Additivity of Γ-invariants of (-⊗ N) along a split short exact sequence
Rep.finrank_invariants_tensor_eq_add_of_shortExact_of_trivial_of_coprime1 below · depth 21 - Pinned relative Shapiro isomorphism in degree two
groupCohomology.exists_continuousH2Sr_cyclotomicQuotientRep_equiv_pin4 below · depth 21 - Natural Kummer–Brauer exact sequence for H²_S with μₚ
groupCohomology.exists_kummerBrauer_maps_continuousH2Sr_cyclotomic_natural470 below · depth 21 - H¹ of a trivial module as equivariant level-constant homomorphisms
groupCohomology.nonempty_continuousH1Sr_inf_linearEquiv_eqLevelConstantHom0 below · depth 21 - Invariants of C ⊗ N as equivariant level-constant maps
groupCohomology.nonempty_invariants_tensor_linearEquiv_eqLevelConstantHom0 below · depth 21 - Every continuous ℤ/p-character is a Kummer character
NumberField.LevelArith.exists_kummerChar_eq_of_continuous4 below · depth 22 - Inertia above w ∤ p fixes p-th roots
NumberField.LevelArith.inertia_apply_eq_of_dvd_valuation0 below · depth 22 - Conjugation rule for the Kummer character: cyclotomic twist
NumberField.LevelArith.kummerChar_conj_eq_cycloChar_mul0 below · depth 22 - Vanishing of the Kummer character detects p-th powers
NumberField.LevelArith.kummerChar_eq_zero_iff0 below · depth 22 - Level-constancy of the Kummer character via divisibility of valuations
NumberField.LevelArith.kummerChar_isLevelConstant_iff_forall_dvd_valuation7 below · depth 22 - Kummer character: bi-additive and trivial on Gal(ℚ̄/F(y))
NumberField.LevelArith.kummerChar_mul_and_add_and_level0 below · depth 22 - Mod p torsion of the S-units is 𝔽ₚ(1)
NumberField.LevelArith.nonempty_repTorsionP_sUnitsMaxRep_iso_trivial_twist_cycloChar2 below · depth 22 - Smoothness and p-divisibility of the S-unit module
NumberField.LevelArith.sUnitsMaxRep_smooth_and_divisible2 below · depth 22 - Pinned degree-two Shapiro isomorphism for ℤ/p(1)
groupCohomology.exists_continuousH2Sr_cyclotomicQuotientRep_equiv_apply_eq3 below · depth 22 - p-power-torsion level-constant 3-cocycles on S-units are coboundaries
groupCohomology.exists_isLevelConstant_d_two_three_eq_of_pPow_smul_sUnitsMax486 below · depth 22 - Kummer maps δ,ι on S-level cohomology
groupCohomology.exists_kummer_connecting_maps_continuousHSr_of_smooth_of_divisible4 below · depth 22 - Local invariants of the p-primary S-unit H²
groupCohomology.exists_natural_localInv_pPrimary_continuousH2Sr_sUnitsMax464 below · depth 22 - Local invariants on p-torsion of H²_S, with naturality
groupCohomology.exists_natural_localInv_torsionBy_continuousH2Sr_sUnitsMax465 below · depth 22 - Kummer exactness in degrees 2–3 for S-level cohomology
groupCohomology.kummer_degreeThree_exactness_continuousH2Sr_of_smooth_of_divisible4 below · depth 22 - Naturality of Brauer local invariants under automorphisms of L
NumberField.LevelArith.apply_eq_apply_of_isBrauerLocalInv_of_algEquiv125 below · depth 23 - Cochain identities descend along inflation to a layer
NumberField.LevelArith.d_eq_zero_and_d_eq_pow_smul_of_level_presentation_sUnitsMaxRep0 below · depth 23 - Existence of a local invariant map on p-primary H²_S
NumberField.LevelArith.exists_isBrauerLocalInv152 below · depth 23 - Inflating a layer coboundary to a level-constant 2-cochain
NumberField.LevelArith.exists_isLevelConstant_d_two_three_eq_of_level_coboundary_sUnitsMaxRep0 below · depth 23 - Inflating a layer cochain to a larger layer
NumberField.LevelArith.exists_level_comp_eq_of_le_sUnitsMaxRep0 below · depth 23 - Presenting a level-constant cochain at a finite Galois level
NumberField.LevelArith.exists_level_eq_comp_of_isLevelConstant_sUnitsMaxRep5 below · depth 23 - Inflation kills p-power-torsion 3-cocycles of S-units
NumberField.LevelArith.exists_level_inhomogeneousCochains_d_two_three_eq_of_pow_smul480 below · depth 23 - Inertia above w moves a p-th root when p ∤ v_w(x)
NumberField.LevelArith.exists_valuationSubring_inertia_apply_ne_of_not_dvd_valuation3 below · depth 23 - Reciprocity for p-primary S-ramified classes over L
NumberField.LevelArith.finsum_apply_eq_zero_of_isBrauerLocalInv403 below · depth 23 - Injectivity of any Brauer local-invariant map on p-primary classes
NumberField.LevelArith.injective_of_isBrauerLocalInv280 below · depth 23 - Realisation of sum-zero p-primary families of local invariants
NumberField.LevelArith.mem_range_of_isBrauerLocalInv_of_finsum_eq_zero422 below · depth 23 - Hasse principle for the p-primary part of H² of S-units
groupCohomology.eq_zero_of_forall_continuousH2Map_primeLocal_eq_zero_pPrimary_continuousH2Sr_sUnitsMax258 below · depth 23 - 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 - Uniqueness of the Brauer local invariant at a place
NumberField.LevelArith.eq_of_hasBrauerLocalInvAt146 below · depth 24 - Invariants of the maximal S-units are the S-units of F
NumberField.LevelArith.exists_addEquiv_quotientToInvariants_sUnitsMaxRep_sUnitsRep7 below · depth 24 - Conjugating an inflated level 2-cocycle by σ
NumberField.LevelArith.exists_cocyclesTwo_conj_transport_continuousH2SrInflation_eq4 below · depth 24 - Brauer class with prescribed invariants from an idèle class
NumberField.LevelArith.exists_forall_hasBrauerLocalInvAt_of_ideleClass_hasLocalInv175 below · depth 24 - Existence of a local Brauer invariant at a place above S
NumberField.LevelArith.exists_hasBrauerLocalInvAt118 below · depth 24 - One layer presentation for a p-primary H²_S class
NumberField.LevelArith.exists_layer_presentation_and_pow_smul_eq_zero18 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 - Capitulation at a larger level of S-unit 2-cocycles
NumberField.LevelArith.exists_level_coboundary_of_isPGroup_of_map_diag_H2pi_eq_zero_sUnitsMaxRep143 below · depth 24 - Prime-to-p descent of degree-3 S-unit coboundaries
NumberField.LevelArith.exists_level_d_two_three_eq_of_restrict_coboundary_of_not_dvd3 below · depth 24 - Realising p-primary sum-zero families as local invariants of idèle classes
NumberField.LevelArith.exists_level_ideleClass_hasLocalInv_of_finsum_eq_zero385 below · depth 24 - Killing a degree-three S-unit cocycle at a deeper level
NumberField.LevelArith.exists_level_inhomogeneousCochains_d_two_three_eq_of_pow_smul_of_isPGroup479 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 - Restriction of degree-3 S-unit cochain data to a larger base
NumberField.LevelArith.exists_three_cochain_val_eq_of_le_sUnitsMaxRep1 below · depth 24 - Additivity of Brauer local invariants at a place
NumberField.LevelArith.hasBrauerLocalInvAt_add144 below · depth 24 - Local w-components of σ-transported H² classes agree
NumberField.LevelArith.map_prG_conj_transport_eq_map_prG_map_psi1 below · depth 24 - Local component at w ∤ S of an S-unit class vanishes
NumberField.LevelArith.map_prG_map_principalIdele_eq_zero_of_forall_comap_ne22 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 - Hasse principle for p-primary S-unit classes H²_S(Γ_L, E_S)
groupCohomology.eq_zero_of_forall_continuousH2Map_primeLocal_archimedean_eq_zero_pPrimary_continuousH2Sr_sUnitsMax262 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 - Archimedean local splitting of an S-unit 2-cocycle
NumberField.LevelArith.exists_coboundary_localUnits_infinitePlace_of_forall_conj_archimedeanDecomposition0 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 - Presenting a p-primary S-Brauer class with prescribed local invariants
NumberField.LevelArith.exists_forall_hasBrauerLocalInvAt_of_cocycles_sUnitsRep1 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 - Galois S-levels with p^k-divisible local degrees above S
NumberField.LevelArith.exists_isUnramifiedOutside_isGalois_pow_dvd_natCard_decomp11 below · depth 25 - Local coboundaries yield a coboundary in an adic completion
NumberField.LevelArith.exists_layer_coboundary_adicCompletion_of_forall_conj_primeLocal_coboundary9 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 - Cocycles with equal inflated class differ by a coboundary at a deeper level
NumberField.LevelArith.exists_level_sub_eq_coboundary_of_continuousH2SrInflation_eq4 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 - Surjectivity and kernel of Γ_L → Gal(F/L)
NumberField.LevelArith.levelGal_surjective_and_ker0 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 - Layer order p^k kills degree-3 cocycles at cochain level
NumberField.LevelArith.exists_card_eq_pow_and_d_two_three_eq_pow_smul_of_isPGroup1 below · depth 26 - 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 - Inflation of degree-3 cochain data to a larger layer
NumberField.LevelArith.exists_three_cochain_val_eq_of_le_level_sUnitsMaxRep0 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 - Change of base field within a fixed layer F
NumberField.LevelArith.exists_ringEquiv_monoidHom_equiv_heightOneSpectrum_levelField_of_le_le1 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 - Γ_L/U_F a p-group forces Gal(F_L/L) a p-group
NumberField.LevelArith.isPGroup_levelGal_of_isPGroup_quotient1 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