Module

PrincipalNorm.lean

Nyll.ClassFieldTheory.AlgebraicNumberTheory.Idele.PrincipalNorm
15 declarations indexed from sourceView source ↗

The product formula for principal ideles

This file proves that the absolute idele norm is trivial on the diagonal copy of Kˣ, and hence descends to the idele class group.

Declarations

InfiniteIdeleGroup.archimedeanNorm_principalIdele

The archimedean norm of a principal idele is the absolute field norm.

Source context 5 commands

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

open scoped NumberField RestrictedProduct NNReal WithZero
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace InfiniteIdeleGroup
theorem archimedeanNorm_principalIdele (x : Kˣ) :
    ((archimedeanNorm
        (IdeleGroup.principalIdele K x).1 : ℝ≥0ˣ) : ℝ≥0) =
      ⟨|(Algebra.norm ℚ) (x : K)|, abs_nonneg _⟩
FractionalIdealGroup.absoluteNorm

The positive absolute norm of a nonzero fractional ideal.

Source context 5 commands

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

open scoped NumberField RestrictedProduct NNReal WithZero
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace FractionalIdealGroup
def absoluteNorm :
    FractionalIdealGroup K →* ℝ≥0ˣ where
  toFun I :=
    Units.mk0
      ⟨(FractionalIdeal.absNorm
          (I : FractionalIdeal (nonZeroDivisors (𝓞 K)) K) : ℝ),
        Rat.cast_nonneg.mpr
          (FractionalIdeal.absNorm_nonneg
            (I : FractionalIdeal (nonZeroDivisors (𝓞 K)) K))⟩
      (by
        intro h
        have hr := congrArg (fun z : ℝ≥0 => z.1) h
        change
          ((FractionalIdeal.absNorm
            (I : FractionalIdeal
              (nonZeroDivisors (𝓞 K)) K) : ℚ) : ℝ) = 0 at hr
        have hq : FractionalIdeal.absNorm
            (I : FractionalIdeal
              (nonZeroDivisors (𝓞 K)) K) = 0 := by
          exact_mod_cast hr
        exact Units.ne_zero I
          (FractionalIdeal.absNorm_eq_zero_iff.mp hq))
  map_one' := by
    apply Units.ext
    apply NNReal.eq
    change
      ((FractionalIdeal.absNorm
        (1 : FractionalIdeal
          (nonZeroDivisors (𝓞 K)) K) : ℚ) : ℝ) = 1
    rw [FractionalIdeal.absNorm_one]
    norm_num
  map_mul' I J := by
    apply Units.ext
    change
      (⟨(FractionalIdeal.absNorm
          ((I * J : FractionalIdealGroup K) :
            FractionalIdeal (nonZeroDivisors (𝓞 K)) K) : ℝ),
        Rat.cast_nonneg.mpr
          (FractionalIdeal.absNorm_nonneg
            ((I * J : FractionalIdealGroup K) :
              FractionalIdeal (nonZeroDivisors (𝓞 K)) K))⟩ : ℝ≥0) =
      ⟨(FractionalIdeal.absNorm
          (I : FractionalIdeal
            (nonZeroDivisors (𝓞 K)) K) : ℝ),
        Rat.cast_nonneg.mpr
          (FractionalIdeal.absNorm_nonneg
            (I : FractionalIdeal
              (nonZeroDivisors (𝓞 K)) K))⟩ *
      ⟨(FractionalIdeal.absNorm
          (J : FractionalIdeal
            (nonZeroDivisors (𝓞 K)) K) : ℝ),
        Rat.cast_nonneg.mpr
          (FractionalIdeal.absNorm_nonneg
            (J : FractionalIdeal
              (nonZeroDivisors (𝓞 K)) K))⟩
    apply NNReal.eq
    change
      ((FractionalIdeal.absNorm
        ((I * J : FractionalIdealGroup K) :
          FractionalIdeal (nonZeroDivisors (𝓞 K)) K) : ℚ) : ℝ) =
      ((FractionalIdeal.absNorm
        (I : FractionalIdeal
          (nonZeroDivisors (𝓞 K)) K) : ℚ) : ℝ) *
      ((FractionalIdeal.absNorm
        (J : FractionalIdeal
          (nonZeroDivisors (𝓞 K)) K) : ℚ) : ℝ)
    norm_cast
    simpa only [Units.val_mul] using
      (map_mul FractionalIdeal.absNorm
        (I : FractionalIdeal (nonZeroDivisors (𝓞 K)) K)
        (J : FractionalIdeal (nonZeroDivisors (𝓞 K)) K))
FractionalIdealGroup.absoluteNorm_prime
Source context 5 commands

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

open scoped NumberField RestrictedProduct NNReal WithZero
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace FractionalIdealGroup
theorem absoluteNorm_prime (v : HeightOneSpectrum (𝓞 K)) :
    absoluteNorm (prime v) = FiniteIdeleGroup.primeNorm v
FractionalIdealGroup.absoluteNorm_factorization

The explicit prime-factor norm commutes with the factorization of a fractional ideal.

Source context 5 commands

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

open scoped NumberField RestrictedProduct NNReal WithZero
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace FractionalIdealGroup
theorem absoluteNorm_factorization
    (e : Multiplicative
      (HeightOneSpectrum (𝓞 K) →₀ ℤ)) :
    absoluteNorm (factorization e) =
      FiniteIdeleGroup.divisorNorm e
FractionalIdealGroup.absoluteNorm_toPrincipalIdeal

The norm of the principal fractional ideal (x) is the absolute field norm of x.

Source context 5 commands

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

open scoped NumberField RestrictedProduct NNReal WithZero
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace FractionalIdealGroup
theorem absoluteNorm_toPrincipalIdeal (x : Kˣ) :
    ((absoluteNorm
      (toPrincipalIdeal (𝓞 K) K x) : ℝ≥0ˣ) : ℝ≥0) =
      ⟨|((Algebra.norm ℚ) (x : K) : ℝ)|, abs_nonneg _⟩
FiniteIdeleGroup.absoluteNorm_eq_fractionalIdealAbsoluteNorm

The finite idele norm is the absolute norm of its associated fractional ideal.

Source context 5 commands

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

open scoped NumberField RestrictedProduct NNReal WithZero
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace FiniteIdeleGroup
theorem absoluteNorm_eq_fractionalIdealAbsoluteNorm
    (a : FiniteIdeleGroup K) :
    absoluteNorm a =
      FractionalIdealGroup.absoluteNorm (fractionalIdeal a)
FiniteIdeleGroup.absoluteNorm_principalIdele

The finite norm of a principal idele is the absolute field norm.

Source context 5 commands

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

open scoped NumberField RestrictedProduct NNReal WithZero
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace FiniteIdeleGroup
theorem absoluteNorm_principalIdele (x : Kˣ) :
    ((absoluteNorm
      (IdeleGroup.principalIdele K x).2 : ℝ≥0ˣ) : ℝ≥0) =
      ⟨|((Algebra.norm ℚ) (x : K) : ℝ)|, abs_nonneg _⟩
IdeleGroup.finite_absoluteNorm_eq_archimedeanNorm_principalIdele

The finite and archimedean norm factors agree on a principal idele.

Source context 5 commands

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

open scoped NumberField RestrictedProduct NNReal WithZero
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace IdeleGroup
theorem finite_absoluteNorm_eq_archimedeanNorm_principalIdele
    (x : Kˣ) :
    FiniteIdeleGroup.absoluteNorm (principalIdele K x).2 =
      InfiniteIdeleGroup.archimedeanNorm
        (principalIdele K x).1
IdeleGroup.absoluteNorm_principalIdele

The number-field product formula in idelic form: every principal idele has global absolute norm one.

Source context 5 commands

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

open scoped NumberField RestrictedProduct NNReal WithZero
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace IdeleGroup
theorem absoluteNorm_principalIdele (x : Kˣ) :
    absoluteNorm (principalIdele K x) = 1
IdeleGroup.principalSubgroup_le_normOneSubgroup

Principal ideles lie in the norm-one subgroup.

Source context 5 commands

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

open scoped NumberField RestrictedProduct NNReal WithZero
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace IdeleGroup
theorem principalSubgroup_le_normOneSubgroup :
    principalSubgroup K ≤ normOneSubgroup (K := K)
IdeleClassGroup.absoluteNorm

The absolute idele norm descended through C_K = I_K / Kˣ.

Source context 5 commands

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

open scoped NumberField RestrictedProduct NNReal WithZero
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace IdeleClassGroup
def absoluteNorm :
    IdeleClassGroup K →* ℝ≥0ˣ
IdeleClassGroup.absoluteNorm_mk
Source context 5 commands

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

open scoped NumberField RestrictedProduct NNReal WithZero
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace IdeleClassGroup
theorem absoluteNorm_mk (a : IdeleGroup K) :
    absoluteNorm
      (QuotientGroup.mk' (IdeleGroup.principalSubgroup K) a) =
        IdeleGroup.absoluteNorm a
IdeleClassGroup.normOneSubgroup

The norm-one idele classes.

Source context 5 commands

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

open scoped NumberField RestrictedProduct NNReal WithZero
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace IdeleClassGroup
def normOneSubgroup : Subgroup (IdeleClassGroup K)
IdeleClassGroup.comap_normOneSubgroup

Pulling the norm-one idele classes back to the idele group recovers exactly the norm-one ideles.

Source context 5 commands

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

open scoped NumberField RestrictedProduct NNReal WithZero
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace IdeleClassGroup
theorem comap_normOneSubgroup :
    Subgroup.comap
      (QuotientGroup.mk' (IdeleGroup.principalSubgroup K))
      (normOneSubgroup (K := K)) =
        IdeleGroup.normOneSubgroup (K := K)
IdeleClassGroup.mk_mem_normOneSubgroup_iff
Source context 5 commands

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

open scoped NumberField RestrictedProduct NNReal WithZero
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace IdeleClassGroup
theorem mk_mem_normOneSubgroup_iff (a : IdeleGroup K) :
    QuotientGroup.mk' (IdeleGroup.principalSubgroup K) a ∈
        normOneSubgroup (K := K) ↔
      a ∈ IdeleGroup.normOneSubgroup (K := K)