Module

OrdinaryUnitModP.lean

Nyll.SawinTotallyRealTowers.UnramifiedProPRelationRank.Radical.OrdinaryUnitModP
12 declarations indexed from sourceView source ↗

Ordinary units modulo prime powers

This file computes the cardinality and ZMod p-dimension of the ordinary number-field unit group modulo p-th powers. The torsion correction is one exactly when the field contains a primitive p-th root of unity. The module structure is exposed explicitly and is not installed as a global instance.

Declarations

ClassFieldTower.Martinet.Shafarevich.emptySUnitEquivNumberFieldUnits

The empty finite set gives the ordinary global unit group.

Source context 5 commands

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

open scoped NumberField
noncomputable section
namespace ClassFieldTower.Martinet.Shafarevich
open NumberField IsDedekindDomain
variable (K : Type*) [Field K] [NumberField K]
def emptySUnitEquivNumberFieldUnits :
    SUnitGroup (K := K) (∅ : Finset (HeightOneSpectrum (𝓞 K))) ≃*
      (𝓞 K)ˣ
ClassFieldTower.Martinet.Shafarevich.OrdinaryUnitNthPowerQuotient

Ordinary global units modulo n-th powers.

Source context 5 commands

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

open scoped NumberField
noncomputable section
namespace ClassFieldTower.Martinet.Shafarevich
open NumberField IsDedekindDomain
variable (K : Type*) [Field K] [NumberField K]
abbrev OrdinaryUnitNthPowerQuotient (n : ℕ)
ClassFieldTower.Martinet.Shafarevich.ordinaryUnitNthPowerQuotient_pow_eq_one

Every class modulo p-th powers has exponent dividing p.

Source context 6 commands

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

open scoped NumberField
noncomputable section
namespace ClassFieldTower.Martinet.Shafarevich
open NumberField IsDedekindDomain
variable (K : Type*) [Field K] [NumberField K]
omit [NumberField K] in
theorem ordinaryUnitNthPowerQuotient_pow_eq_one
    (p : ℕ) (x : OrdinaryUnitNthPowerQuotient K p) :
    x ^ p = 1
ClassFieldTower.Martinet.Shafarevich.ordinaryUnitModPModule

The canonical ZMod p-module structure on the additive presentation of ordinary units modulo p-th powers.

Source context 6 commands

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

open scoped NumberField
noncomputable section
namespace ClassFieldTower.Martinet.Shafarevich
open NumberField IsDedekindDomain
variable (K : Type*) [Field K] [NumberField K]
omit [NumberField K] in
def ordinaryUnitModPModule (p : ℕ) :
    Module (ZMod p) (Additive (OrdinaryUnitNthPowerQuotient K p))
ClassFieldTower.Martinet.Shafarevich.emptySUnitNthPowerQuotientEquiv

The empty-set S-unit power quotient is the ordinary-unit power quotient.

Source context 5 commands

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

open scoped NumberField
noncomputable section
namespace ClassFieldTower.Martinet.Shafarevich
open NumberField IsDedekindDomain
variable (K : Type*) [Field K] [NumberField K]
def emptySUnitNthPowerQuotientEquiv
    (n : ℕ) :
    SUnitGroup (K := K) (∅ : Finset (HeightOneSpectrum (𝓞 K))) ⧸
        (powMonoidHom n :
          SUnitGroup (K := K) (∅ : Finset (HeightOneSpectrum (𝓞 K))) →*
            SUnitGroup (K := K) (∅ : Finset (HeightOneSpectrum (𝓞 K)))).range ≃*
      OrdinaryUnitNthPowerQuotient K n
ClassFieldTower.Martinet.Shafarevich.finite_ordinaryUnitNthPowerQuotient

The quotient of ordinary units by positive powers is finite.

Source context 5 commands

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

open scoped NumberField
noncomputable section
namespace ClassFieldTower.Martinet.Shafarevich
open NumberField IsDedekindDomain
variable (K : Type*) [Field K] [NumberField K]
theorem finite_ordinaryUnitNthPowerQuotient (n : ℕ+) :
    Finite (OrdinaryUnitNthPowerQuotient K (n : ℕ))
ClassFieldTower.Martinet.Shafarevich.card_numberFieldTorsion_pthPowerQuotient_of_no_primitiveRoot

Without a primitive p-th root, the roots-of-unity contribution to the ordinary-unit quotient is trivial.

Source context 5 commands

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

open scoped NumberField
noncomputable section
namespace ClassFieldTower.Martinet.Shafarevich
open NumberField IsDedekindDomain
variable (K : Type*) [Field K] [NumberField K]
theorem card_numberFieldTorsion_pthPowerQuotient_of_no_primitiveRoot
    (p : ℕ) (hp : p.Prime)
    (hμ : ¬ ∃ ζ : K, IsPrimitiveRoot ζ p) :
    Nat.card
        (NumberField.Units.torsion K ⧸
          (powMonoidHom p : NumberField.Units.torsion K →*
            NumberField.Units.torsion K).range) = 1
ClassFieldTower.Martinet.Shafarevich.card_ordinaryUnitNthPowerQuotient_of_no_primitiveRoot

If K has no primitive p-th root, only the free Dirichlet-unit coordinates contribute to the ordinary-unit quotient.

Source context 5 commands

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

open scoped NumberField
noncomputable section
namespace ClassFieldTower.Martinet.Shafarevich
open NumberField IsDedekindDomain
variable (K : Type*) [Field K] [NumberField K]
theorem card_ordinaryUnitNthPowerQuotient_of_no_primitiveRoot
    (p : ℕ) (hp : p.Prime)
    (hμ : ¬ ∃ ζ : K, IsPrimitiveRoot ζ p) :
    Nat.card (OrdinaryUnitNthPowerQuotient K p) =
      p ^ (NumberField.InfinitePlace.nrRealPlaces K +
        NumberField.InfinitePlace.nrComplexPlaces K - 1)
ClassFieldTower.Martinet.Shafarevich.card_ordinaryUnitNthPowerQuotient_of_primitiveRoot

If K contains a primitive p-th root, the ordinary-unit quotient has one torsion coordinate in addition to the free unit rank.

Source context 5 commands

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

open scoped NumberField
noncomputable section
namespace ClassFieldTower.Martinet.Shafarevich
open NumberField IsDedekindDomain
variable (K : Type*) [Field K] [NumberField K]
theorem card_ordinaryUnitNthPowerQuotient_of_primitiveRoot
    (p : ℕ) (hp : p.Prime)
    (hμ : ∃ ζ : K, IsPrimitiveRoot ζ p) :
    Nat.card (OrdinaryUnitNthPowerQuotient K p) =
      p ^ (NumberField.InfinitePlace.nrRealPlaces K +
        NumberField.InfinitePlace.nrComplexPlaces K)
ClassFieldTower.Martinet.Shafarevich.card_ordinaryUnitNthPowerQuotient

The ordinary-unit quotient has Dirichlet rank, plus exactly one torsion coordinate when K contains a primitive p-th root.

Source context 5 commands

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

open scoped NumberField
noncomputable section
namespace ClassFieldTower.Martinet.Shafarevich
open NumberField IsDedekindDomain
variable (K : Type*) [Field K] [NumberField K]
theorem card_ordinaryUnitNthPowerQuotient
    (p : ℕ) (hp : p.Prime) :
    Nat.card (OrdinaryUnitNthPowerQuotient K p) =
      p ^ (NumberField.InfinitePlace.nrRealPlaces K +
        NumberField.InfinitePlace.nrComplexPlaces K - 1 +
          (if (primitiveRoots p K).Nonempty then 1 else 0)) := by
  by_cases hroots : (primitiveRoots p K).Nonempty
  · have hμ : ∃ ζ : K, IsPrimitiveRoot ζ p := by
      obtain ⟨ζ, hζ⟩ := hroots
      exact ⟨ζ, (mem_primitiveRoots hp.pos).mp hζ⟩
    rw [card_ordinaryUnitNthPowerQuotient_of_primitiveRoot K p hp hμ]
    simp only [ite_eq_left hroots]
    congr 1
    have hplaces :
        0 < NumberField.InfinitePlace.nrRealPlaces K +
          NumberField.InfinitePlace.nrComplexPlaces K := by
      rw [← NumberField.InfinitePlace.card_eq_nrRealPlaces_add_nrComplexPlaces]
      exact Fintype.card_pos
    omega
  · have hμ : ¬ ∃ ζ : K, IsPrimitiveRoot ζ p := by
      rintro ⟨ζ, hζ⟩
      exact hroots ⟨ζ, (mem_primitiveRoots hp.pos).mpr hζ⟩
    rw [card_ordinaryUnitNthPowerQuotient_of_no_primitiveRoot K p hp hμ]
    simp [hroots]
ClassFieldTower.Martinet.Shafarevich.ordinaryUnitModPFinrank

The ZMod p-dimension computed using the explicit ordinary-unit module.

Source context 5 commands

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

open scoped NumberField
noncomputable section
namespace ClassFieldTower.Martinet.Shafarevich
open NumberField IsDedekindDomain
variable (K : Type*) [Field K] [NumberField K]
def ordinaryUnitModPFinrank (p : ℕ) : ℕ
ClassFieldTower.Martinet.Shafarevich.finrank_ordinaryUnitModP

The ZMod p-dimension of ordinary units modulo p-th powers.

Source context 5 commands

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

open scoped NumberField
noncomputable section
namespace ClassFieldTower.Martinet.Shafarevich
open NumberField IsDedekindDomain
variable (K : Type*) [Field K] [NumberField K]
theorem finrank_ordinaryUnitModP
    (p : ℕ) (hp : p.Prime) :
    ordinaryUnitModPFinrank K p =
      NumberField.InfinitePlace.nrRealPlaces K +
        NumberField.InfinitePlace.nrComplexPlaces K - 1 +
          (if (primitiveRoots p K).Nonempty then 1 else 0) := by
  unfold ordinaryUnitModPFinrank
  let _ : Fact p.Prime := ⟨hp⟩
  let _ : Module (ZMod p)
      (Additive (OrdinaryUnitNthPowerQuotient K p)) :=
    ordinaryUnitModPModule K p
  let _ : Finite (Additive (OrdinaryUnitNthPowerQuotient K p)) :=
    finite_ordinaryUnitNthPowerQuotient K (p.toPNat hp.pos)
  let _ : Module.Finite (ZMod p)
      (Additive (OrdinaryUnitNthPowerQuotient K p)) :=
    Module.Finite.of_finite
  apply Nat.pow_right_injective hp.two_le
  calc
    p ^ Module.finrank (ZMod p)
        (Additive (OrdinaryUnitNthPowerQuotient K p)) =
        Nat.card (Additive (OrdinaryUnitNthPowerQuotient K p)) := by
      rw [Module.natCard_eq_pow_finrank
        (K := ZMod p)
        (V := Additive (OrdinaryUnitNthPowerQuotient K p)), Nat.card_zmod]
    _ = Nat.card (OrdinaryUnitNthPowerQuotient K p) := rfl
    _ = p ^ (NumberField.InfinitePlace.nrRealPlaces K +
          NumberField.InfinitePlace.nrComplexPlaces K - 1 +
            (if (primitiveRoots p K).Nonempty then 1 else 0)) :=
      card_ordinaryUnitNthPowerQuotient K p hp