Module

Narrow.lean

Nyll.ClassFieldTheory.AlgebraicNumberTheory.RayClass.Narrow
29 declarations indexed from sourceView source ↗

Narrow ideal classes

This file proves the exact sequence from global unit signs through the narrow and ordinary class groups.

Declarations

RayClass.finiteCongruenceSubgroup_zero
Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
theorem finiteCongruenceSubgroup_zero :
    finiteCongruenceSubgroup (0 : FiniteModulus K) =
      FiniteIdeleGroup.integralSubgroup (K := K)
RayClass.narrowIdeleCongruenceSubgroup_zero_le_integral
Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
theorem narrowIdeleCongruenceSubgroup_zero_le_integral :
    (Modulus.narrowOfFinite (0 : FiniteModulus K)).ideleCongruenceSubgroup ≤
      IdeleGroup.integralAtFinitePlaces (K := K)
RayClass.narrowDenominator

The subgroup generated by the zero-modulus congruence subgroup and the principal ideles; its quotient is the narrow class group.

Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
def narrowDenominator :
    Subgroup (IdeleGroup K)
RayClass.NarrowClassGroup

The narrow class group realized as an idele quotient.

Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
abbrev NarrowClassGroup
    (K : Type*) [Field K] [NumberField K]
RayClass.rayClassGroupNarrowZeroEquivNarrowClassGroup

The ray class group with zero finite part and every real place selected is the narrow class group.

Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
def rayClassGroupNarrowZeroEquivNarrowClassGroup :
    RayClassGroup (Modulus.narrowOfFinite (0 : FiniteModulus K)) ≃*
      NarrowClassGroup K
RayClass.narrowToClassGroup

The canonical map from the narrow class group to the ordinary ideal class group.

Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
def narrowToClassGroup :
    NarrowClassGroup K →* ClassGroup (𝓞 K)
RayClass.narrowToClassGroup_mk
Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
theorem narrowToClassGroup_mk (a : IdeleGroup K) :
    narrowToClassGroup
      (QuotientGroup.mk' (narrowDenominator (K := K)) a) =
      IdeleGroup.idealClass a
RayClass.narrowToClassGroup_surjective
Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
theorem narrowToClassGroup_surjective :
    Function.Surjective
      (narrowToClassGroup (K := K))
RayClass.realSignGroup

The quotient of infinite ideles by the positive congruence subgroup.

Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
abbrev realSignGroup
    (K : Type*) [Field K] [NumberField K]
RayClass.infiniteToIdele

Embed an infinite idele as an idele with trivial finite component.

Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
def infiniteToIdele :
    InfiniteIdeleGroup K →* IdeleGroup K where
  toFun a := (a, 1)
  map_one' := rfl
  map_mul' _ _ := by simp
RayClass.infiniteToNarrow

Map an infinite idele to its narrow ideal class.

Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
def infiniteToNarrow :
    InfiniteIdeleGroup K →* NarrowClassGroup K
RayClass.narrowInfiniteCongruenceSubgroup_le_infiniteToNarrow_ker
Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
theorem narrowInfiniteCongruenceSubgroup_le_infiniteToNarrow_ker :
    narrowInfiniteCongruenceSubgroup (K := K) ≤
      (infiniteToNarrow (K := K)).ker
RayClass.signToNarrow

The homomorphism from real sign classes to the narrow class group.

Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
def signToNarrow :
    realSignGroup K →* NarrowClassGroup K
RayClass.signToNarrow_mk
Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
theorem signToNarrow_mk (a : InfiniteIdeleGroup K) :
    signToNarrow
        (QuotientGroup.mk'
          (narrowInfiniteCongruenceSubgroup (K := K)) a) =
      QuotientGroup.mk' (narrowDenominator (K := K))
        (infiniteToIdele (K := K) a)
RayClass.signToNarrow_range_eq_narrowToClassGroup_ker
Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
theorem signToNarrow_range_eq_narrowToClassGroup_ker :
    (signToNarrow (K := K)).range =
      (narrowToClassGroup (K := K)).ker
RayClass.integralUnitToFieldUnit

The inclusion of global integral units into the field units.

Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
def integralUnitToFieldUnit :
    (𝓞 K)ˣ →* Kˣ
RayClass.toPrincipalIdeal_eq_one_iff_mem_integralUnits

A field unit generates the unit fractional ideal exactly when it comes from a global integral unit.

Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
theorem toPrincipalIdeal_eq_one_iff_mem_integralUnits
    (x : Kˣ) :
    toPrincipalIdeal (𝓞 K) K x = 1 ↔
      x ∈ (integralUnitToFieldUnit (K := K)).range
RayClass.integralUnitToInfiniteIdele

The archimedean image of a global integral unit.

Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
def integralUnitToInfiniteIdele :
    (𝓞 K)ˣ →* InfiniteIdeleGroup K
RayClass.totallyPositiveUnitSubgroup

The totally positive global units.

Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
def totallyPositiveUnitSubgroup :
    Subgroup ((𝓞 K)ˣ)
RayClass.IntegralUnitSignGroup

The sign classes of global integral units.

Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
abbrev IntegralUnitSignGroup
RayClass.integralUnitToRealSign

Send a global integral unit to its real sign class.

Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
def integralUnitToRealSign :
    (𝓞 K)ˣ →* realSignGroup K
RayClass.totallyPositiveUnitSubgroup_le_integralUnitToRealSign_ker
Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
theorem totallyPositiveUnitSubgroup_le_integralUnitToRealSign_ker :
    totallyPositiveUnitSubgroup (K := K) ≤
      (integralUnitToRealSign (K := K)).ker
RayClass.integralUnitSignToRealSign

The induced map from integral-unit sign classes to real sign classes.

Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
def integralUnitSignToRealSign :
    IntegralUnitSignGroup (K := K) →* realSignGroup K
RayClass.integralUnitSignToRealSign_mk
Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
theorem integralUnitSignToRealSign_mk (u : (𝓞 K)ˣ) :
    integralUnitSignToRealSign
        (QuotientGroup.mk'
          (totallyPositiveUnitSubgroup (K := K)) u) =
      QuotientGroup.mk'
        (narrowInfiniteCongruenceSubgroup (K := K))
        (integralUnitToInfiniteIdele (K := K) u)
RayClass.integralUnitSignToRealSign_injective
Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
theorem integralUnitSignToRealSign_injective :
    Function.Injective
      (integralUnitSignToRealSign (K := K))
RayClass.principalIdele_integralUnit_finite_integral
Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
theorem principalIdele_integralUnit_finite_integral
    (u : (𝓞 K)ˣ) :
    (IdeleGroup.principalIdele K
        (integralUnitToFieldUnit (K := K) u)).2 ∈
      FiniteIdeleGroup.integralSubgroup (K := K)
RayClass.signToNarrow_integralUnit
Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
theorem signToNarrow_integralUnit (u : (𝓞 K)ˣ) :
    signToNarrow
        (QuotientGroup.mk'
          (narrowInfiniteCongruenceSubgroup (K := K))
          (integralUnitToInfiniteIdele (K := K) u)) = 1
RayClass.integralUnitSignToRealSign_range_eq_signToNarrow_ker
Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
theorem integralUnitSignToRealSign_range_eq_signToNarrow_ker :
    (integralUnitSignToRealSign (K := K)).range =
      (signToNarrow (K := K)).ker
RayClass.narrowClassGroup_exact_sequence

The exact sequence

1 → 𝓞_Kˣ / 𝓞_{K,+}ˣ → ∏_{v real} ℝˣ / ℝ_{>0}ˣ → Cl_K¹ → Cl_K → 1.

Here complex places contribute a trivial sign quotient, so realSignGroup may uniformly be defined using all infinite places.

Source context 5 commands

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

open scoped NumberField
open NumberField IsDedekindDomain
noncomputable section
variable {K : Type*} [Field K] [NumberField K]
namespace RayClass
theorem narrowClassGroup_exact_sequence :
    Function.Injective
        (integralUnitSignToRealSign (K := K)) ∧
      (integralUnitSignToRealSign (K := K)).range =
        (signToNarrow (K := K)).ker ∧
      (signToNarrow (K := K)).range =
        (narrowToClassGroup (K := K)).ker ∧
      Function.Surjective (narrowToClassGroup (K := K))