Module

IdealPowerRadicalRank.lean

Nyll.SawinTotallyRealTowers.UnramifiedProPRelationRank.Radical.IdealPowerRadicalRank
4 declarations indexed from sourceView source ↗

The rank of the ideal-power radical

This file converts the cardinality formula for the empty-support ideal-power radical into the dimension formula used in Shafarevich's relation-rank bound.

Declarations

ClassFieldTower.Martinet.Shafarevich.card_pClassGroup_eq_pow_pClassRank

The cardinality of the elementary p-class quotient is p to its canonical ZMod p-dimension.

Source context 7 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped NumberField
noncomputable section
namespace ClassFieldTower.Martinet.Shafarevich
open ClassFieldTower.Martinet
open KummerTheory
variable (F : Type*) [Field F] [NumberField F]
variable (p : ℕ) [Fact p.Prime]
theorem card_pClassGroup_eq_pow_pClassRank :
    Nat.card (PClassGroup F p) = p ^ pClassRank F p
ClassFieldTower.Martinet.Shafarevich.finrank_idealPowerRadicalModP

The exact dimension of the empty-support ideal-power radical.

Source context 7 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped NumberField
noncomputable section
namespace ClassFieldTower.Martinet.Shafarevich
open ClassFieldTower.Martinet
open KummerTheory
variable (F : Type*) [Field F] [NumberField F]
variable (p : ℕ) [Fact p.Prime]
theorem finrank_idealPowerRadicalModP :
    Module.finrank (ZMod p) (idealPowerRadicalModP F p) =
      pClassRank F p +
        (NumberField.InfinitePlace.nrRealPlaces F +
          NumberField.InfinitePlace.nrComplexPlaces F - 1 +
            (if (primitiveRoots p F).Nonempty then 1 else 0)) := by
  apply Nat.pow_right_injective (Fact.out : p.Prime).two_le
  calc
    p ^ Module.finrank (ZMod p) (idealPowerRadicalModP F p) =
        p ^ (NumberField.InfinitePlace.nrRealPlaces F +
            NumberField.InfinitePlace.nrComplexPlaces F - 1 +
              (if (primitiveRoots p F).Nonempty then 1 else 0)) *
          Nat.card (PClassGroup F p) :=
      pow_finrank_idealPowerRadicalModP F p
    _ = p ^ (NumberField.InfinitePlace.nrRealPlaces F +
            NumberField.InfinitePlace.nrComplexPlaces F - 1 +
              (if (primitiveRoots p F).Nonempty then 1 else 0)) *
          p ^ pClassRank F p := by
      rw [card_pClassGroup_eq_pow_pClassRank F p]
    _ = p ^ (pClassRank F p +
          (NumberField.InfinitePlace.nrRealPlaces F +
            NumberField.InfinitePlace.nrComplexPlaces F - 1 +
              (if (primitiveRoots p F).Nonempty then 1 else 0))) := by
      rw [← pow_add, Nat.add_comm]
ClassFieldTower.Martinet.Shafarevich.finrank_idealPowerRadicalModP_eq_pClassRank_add_infinitePlaces

The radical rank formula with the root-of-unity correction written in the form used by the external Shafarevich statement.

Source context 7 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped NumberField
noncomputable section
namespace ClassFieldTower.Martinet.Shafarevich
open ClassFieldTower.Martinet
open KummerTheory
variable (F : Type*) [Field F] [NumberField F]
variable (p : ℕ) [Fact p.Prime]
theorem finrank_idealPowerRadicalModP_eq_pClassRank_add_infinitePlaces :
    (open Classical in
      Module.finrank (ZMod p) (idealPowerRadicalModP F p) =
        pClassRank F p +
          (NumberField.InfinitePlace.nrRealPlaces F +
            NumberField.InfinitePlace.nrComplexPlaces F - 1) +
          (if ∃ ζ : F, IsPrimitiveRoot ζ p then 1 else 0)) := by
  classical
  have hroots :
      (primitiveRoots p F).Nonempty ↔ ∃ ζ : F, IsPrimitiveRoot ζ p := by
    constructor
    · rintro ⟨ζ, hζ⟩
      exact ⟨ζ, (mem_primitiveRoots (Fact.out : p.Prime).pos).mp hζ⟩
    · rintro ⟨ζ, hζ⟩
      exact ⟨ζ, (mem_primitiveRoots (Fact.out : p.Prime).pos).mpr hζ⟩
  rw [finrank_idealPowerRadicalModP F p]
  simp only [hroots]
  rw [Nat.add_assoc]
ClassFieldTower.Martinet.Shafarevich.finrank_idealPowerRadicalModPDual

Passing to the linear dual does not change the radical dimension.

Source context 7 commands

Surrounding namespaces, section variables, and local commands at this declaration.

open scoped NumberField
noncomputable section
namespace ClassFieldTower.Martinet.Shafarevich
open ClassFieldTower.Martinet
open KummerTheory
variable (F : Type*) [Field F] [NumberField F]
variable (p : ℕ) [Fact p.Prime]
theorem finrank_idealPowerRadicalModPDual :
    (open Classical in
      Module.finrank (ZMod p)
          (Module.Dual (ZMod p) (idealPowerRadicalModP F p)) =
        pClassRank F p +
          (NumberField.InfinitePlace.nrRealPlaces F +
            NumberField.InfinitePlace.nrComplexPlaces F - 1) +
          (if ∃ ζ : F, IsPrimitiveRoot ζ p then 1 else 0)) := by
  classical
  let _ : FiniteDimensional (ZMod p) (idealPowerRadicalModP F p) :=
    idealPowerRadicalModP_finiteDimensional F p
  rw [Subspace.dual_finrank_eq,
    finrank_idealPowerRadicalModP_eq_pClassRank_add_infinitePlaces F p]