Module

FullModulus.lean

Nyll.ClassFieldTheory.AlgebraicNumberTheory.RayClass.FullModulus
46 declarations indexed from sourceView source ↗

Ray moduli with selected real places

A ray modulus consists of a finite modulus together with the real places at which positivity is imposed. This file defines the corresponding idèle and idèle-class congruence subgroups without fixing an archimedean convention.

Declarations

RayClass.RealPlace

A real infinite place of a number field.

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 RealPlace (K : Type*) [Field K] [NumberField K]
RayClass.Modulus

A ray modulus consists of its finite part and the selected real places at which the positivity condition is imposed.

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
structure Modulus (K : Type*) [Field K] [NumberField K] where
  /-- The finite prime-power part of the modulus. -/
  finitePart : FiniteModulus K
  /-- The real places at which positivity is imposed. -/
  infinitePart : Finset (RealPlace K)
RayClass.Modulus.ofFinite

The full modulus with a prescribed finite part and no archimedean positivity condition.

Source context 6 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
namespace Modulus
def ofFinite (m : FiniteModulus K) : Modulus K where
  finitePart := m
  infinitePart := ∅
RayClass.Modulus.narrowOfFinite

The full modulus with a prescribed finite part and positivity at every real place.

Source context 7 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
namespace Modulus
open scoped Classical in
def narrowOfFinite (m : FiniteModulus K) : Modulus K where
  finitePart := m
  infinitePart := Finset.univ
Source context 6 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
namespace Modulus
instance : Zero (Modulus K) where
  zero := ofFinite 0
RayClass.Modulus.finitePart_ofFinite
Source context 6 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
namespace Modulus
theorem finitePart_ofFinite (m : FiniteModulus K) :
    (ofFinite m).finitePart = m
RayClass.Modulus.infinitePart_ofFinite
Source context 6 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
namespace Modulus
theorem infinitePart_ofFinite (m : FiniteModulus K) :
    (ofFinite m).infinitePart = ∅
RayClass.Modulus.finitePart_narrowOfFinite
Source context 6 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
namespace Modulus
theorem finitePart_narrowOfFinite (m : FiniteModulus K) :
    (narrowOfFinite m).finitePart = m
RayClass.Modulus.infinitePart_narrowOfFinite
Source context 7 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
namespace Modulus
open scoped Classical in
theorem infinitePart_narrowOfFinite (m : FiniteModulus K) :
    (narrowOfFinite m).infinitePart = Finset.univ
RayClass.Modulus.finitePart_zero
Source context 6 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
namespace Modulus
theorem finitePart_zero :
    (0 : Modulus K).finitePart = 0
RayClass.Modulus.infinitePart_zero
Source context 6 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
namespace Modulus
theorem infinitePart_zero :
    (0 : Modulus K).infinitePart = ∅
theorem

ext

L89 ↗
RayClass.Modulus.ext
Source context 6 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
namespace Modulus
theorem ext {m n : Modulus K}
    (hfinite : m.finitePart = n.finitePart)
    (hinfinite : m.infinitePart = n.infinitePart) :
    m = n
Source context 6 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
namespace Modulus
instance : LE (Modulus K) where
  le m n :=
    m.finitePart ≤ n.finitePart ∧ m.infinitePart ⊆ n.infinitePart
RayClass.Modulus.le_iff
Source context 6 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
namespace Modulus
theorem le_iff {m n : Modulus K} :
    m ≤ n ↔
      m.finitePart ≤ n.finitePart ∧ m.infinitePart ⊆ n.infinitePart
Source context 6 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
namespace Modulus
instance : PartialOrder (Modulus K) where
  le_refl m := ⟨le_rfl, fun _ hx => hx⟩
  le_trans m n p hmn hnp :=
    ⟨hmn.1.trans hnp.1, fun x hx => hnp.2 (hmn.2 hx)⟩
  le_antisymm m n hmn hnm :=
    ext (le_antisymm hmn.1 hnm.1) (by
      apply Finset.ext
      intro x
      exact ⟨fun hx => hmn.2 hx, fun hx => hnm.2 hx⟩)
Source context 7 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
namespace Modulus
open scoped Classical in
instance : SemilatticeInf (Modulus K) where
  inf m n :=
    { finitePart := m.finitePart ⊓ n.finitePart
      infinitePart := m.infinitePart ∩ n.infinitePart }
  inf_le_left _ _ :=
    ⟨inf_le_left, fun _ hx => (Finset.mem_inter.mp hx).1⟩
  inf_le_right _ _ :=
    ⟨inf_le_right, fun _ hx => (Finset.mem_inter.mp hx).2⟩
  le_inf _ _ _ hmn hmp :=
    ⟨le_inf hmn.1 hmp.1,
      fun _ hx => Finset.mem_inter.mpr ⟨hmn.2 hx, hmp.2 hx⟩⟩
Source context 7 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
namespace Modulus
open scoped Classical in
instance : SemilatticeSup (Modulus K) where
  sup m n :=
    { finitePart := m.finitePart ⊔ n.finitePart
      infinitePart := m.infinitePart ∪ n.infinitePart }
  le_sup_left _ _ :=
    ⟨le_sup_left, fun _ hx => Finset.mem_union.mpr (Or.inl hx)⟩
  le_sup_right _ _ :=
    ⟨le_sup_right, fun _ hx => Finset.mem_union.mpr (Or.inr hx)⟩
  sup_le _ _ _ hmp hnp :=
    ⟨sup_le hmp.1 hnp.1, fun _ hx => by
      rcases Finset.mem_union.mp hx with hx | hx
      · exact hmp.2 hx
      · exact hnp.2 hx⟩
Source context 6 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
namespace Modulus
instance : Bot (Modulus K) where
  bot := 0
Source context 6 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
namespace Modulus
instance : OrderBot (Modulus K) where
  bot_le _ := ⟨bot_le, Finset.empty_subset _⟩
RayClass.Modulus.replaceFinitePart

Replace the finite part of a full modulus while retaining exactly its selected real places.

Source context 6 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
namespace Modulus
def replaceFinitePart
    (m : Modulus K) (f : FiniteModulus K) : Modulus K where
  finitePart := f
  infinitePart := m.infinitePart
RayClass.Modulus.finitePart_replaceFinitePart
Source context 6 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
namespace Modulus
theorem finitePart_replaceFinitePart
    (m : Modulus K) (f : FiniteModulus K) :
    (m.replaceFinitePart f).finitePart = f
RayClass.Modulus.infinitePart_replaceFinitePart
Source context 6 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
namespace Modulus
theorem infinitePart_replaceFinitePart
    (m : Modulus K) (f : FiniteModulus K) :
    (m.replaceFinitePart f).infinitePart = m.infinitePart
RayClass.Modulus.eraseRealPlace

Remove the positivity condition at one real place.

Source context 7 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
namespace Modulus
open scoped Classical in
def eraseRealPlace
    (m : Modulus K) (v : RealPlace K) : Modulus K where
  finitePart := m.finitePart
  infinitePart := m.infinitePart.erase v
RayClass.Modulus.finitePart_eraseRealPlace
Source context 6 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
namespace Modulus
theorem finitePart_eraseRealPlace
    (m : Modulus K) (v : RealPlace K) :
    (m.eraseRealPlace v).finitePart = m.finitePart
RayClass.Modulus.infinitePart_eraseRealPlace
Source context 7 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
namespace Modulus
open scoped Classical in
theorem infinitePart_eraseRealPlace
    (m : Modulus K) (v : RealPlace K) :
    (m.eraseRealPlace v).infinitePart = m.infinitePart.erase v
RayClass.Modulus.eraseRealPlaces

Remove the positivity conditions at a finite set of real places.

Source context 7 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
namespace Modulus
open scoped Classical in
def eraseRealPlaces
    (m : Modulus K) (s : Finset (RealPlace K)) : Modulus K where
  finitePart := m.finitePart
  infinitePart := m.infinitePart \ s
RayClass.Modulus.finitePart_eraseRealPlaces
Source context 6 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
namespace Modulus
theorem finitePart_eraseRealPlaces
    (m : Modulus K) (s : Finset (RealPlace K)) :
    (m.eraseRealPlaces s).finitePart = m.finitePart
RayClass.Modulus.infinitePart_eraseRealPlaces
Source context 7 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
namespace Modulus
open scoped Classical in
theorem infinitePart_eraseRealPlaces
    (m : Modulus K) (s : Finset (RealPlace K)) :
    (m.eraseRealPlaces s).infinitePart = m.infinitePart \ s
RayClass.Modulus.eraseRealPlaces_empty
Source context 7 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
namespace Modulus
open scoped Classical in
theorem eraseRealPlaces_empty (m : Modulus K) :
    m.eraseRealPlaces ∅ = m
RayClass.Modulus.eraseRealPlaces_insert
Source context 7 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
namespace Modulus
open scoped Classical in
theorem eraseRealPlaces_insert
    (m : Modulus K) (s : Finset (RealPlace K)) (v : RealPlace K) :
    m.eraseRealPlaces (insert v s) =
      (m.eraseRealPlaces s).eraseRealPlace v
RayClass.Modulus.localInfiniteCongruenceSubgroup

The local infinite congruence condition at an infinite place. It is the positive subgroup exactly at a real place selected by the modulus, and the whole local group otherwise.

Source context 6 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
namespace Modulus
def localInfiniteCongruenceSubgroup (m : Modulus K)
    (w : InfinitePlace K) : Subgroup w.Completionˣ
RayClass.Modulus.localInfiniteCongruenceSubgroup_replaceFinitePart
Source context 6 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
namespace Modulus
theorem localInfiniteCongruenceSubgroup_replaceFinitePart
    (m : Modulus K) (f : FiniteModulus K) (w : InfinitePlace K) :
    (m.replaceFinitePart f).localInfiniteCongruenceSubgroup w =
      m.localInfiniteCongruenceSubgroup w
RayClass.Modulus.localInfiniteCongruenceSubgroup_of_mem
Source context 6 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
namespace Modulus
theorem localInfiniteCongruenceSubgroup_of_mem
    (m : Modulus K) (v : RealPlace K) (hv : v ∈ m.infinitePart) :
    m.localInfiniteCongruenceSubgroup v.1 = infinitePositiveSubgroup v.1
RayClass.Modulus.localInfiniteCongruenceSubgroup_of_not_mem
Source context 6 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
namespace Modulus
theorem localInfiniteCongruenceSubgroup_of_not_mem
    (m : Modulus K) (v : RealPlace K) (hv : v ∉ m.infinitePart) :
    m.localInfiniteCongruenceSubgroup v.1 = ⊤
RayClass.Modulus.localInfiniteCongruenceSubgroup_of_not_isReal
Source context 6 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
namespace Modulus
theorem localInfiniteCongruenceSubgroup_of_not_isReal
    (m : Modulus K) (w : InfinitePlace K) (hw : ¬ w.IsReal) :
    m.localInfiniteCongruenceSubgroup w = ⊤
RayClass.Modulus.infiniteCongruenceSubgroup

The subgroup of infinite idèles positive at the real places selected by the modulus.

Source context 6 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
namespace Modulus
def infiniteCongruenceSubgroup (m : Modulus K) :
    Subgroup (InfiniteIdeleGroup K)
RayClass.Modulus.mem_infiniteCongruenceSubgroup_iff_local
Source context 6 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
namespace Modulus
theorem mem_infiniteCongruenceSubgroup_iff_local
    (m : Modulus K) (a : InfiniteIdeleGroup K) :
    a ∈ m.infiniteCongruenceSubgroup ↔
      ∀ w, ContinuousMulEquiv.piUnits a w ∈ m.localInfiniteCongruenceSubgroup w
RayClass.Modulus.mem_infiniteCongruenceSubgroup_iff
Source context 7 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
namespace Modulus
open scoped Classical in
theorem mem_infiniteCongruenceSubgroup_iff
    (m : Modulus K) (a : InfiniteIdeleGroup K) :
    a ∈ m.infiniteCongruenceSubgroup ↔
      ∀ v : RealPlace K, v ∈ m.infinitePart →
        ContinuousMulEquiv.piUnits a v.1 ∈ infinitePositiveSubgroup v.1
RayClass.Modulus.infiniteCongruenceSubgroup_narrowOfFinite

Selecting every real place recovers the narrow infinite congruence subgroup.

Source context 7 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
namespace Modulus
open scoped Classical in
theorem infiniteCongruenceSubgroup_narrowOfFinite (f : FiniteModulus K) :
    (narrowOfFinite f).infiniteCongruenceSubgroup =
      narrowInfiniteCongruenceSubgroup (K := K)
RayClass.Modulus.ideleCongruenceSubgroup

The idèle congruence subgroup attached to a full ray modulus.

Source context 6 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
namespace Modulus
def ideleCongruenceSubgroup (m : Modulus K) :
    Subgroup (IdeleGroup K)
RayClass.Modulus.mem_ideleCongruenceSubgroup_iff
Source context 6 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
namespace Modulus
theorem mem_ideleCongruenceSubgroup_iff
    (m : Modulus K) (a : IdeleGroup K) :
    a ∈ m.ideleCongruenceSubgroup ↔
      a.1 ∈ m.infiniteCongruenceSubgroup ∧
        a.2 ∈ finiteCongruenceSubgroup m.finitePart
RayClass.Modulus.ideleCongruenceSubgroup_narrowOfFinite

Selecting every real place recovers the narrow idèle congruence subgroup.

Source context 6 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
namespace Modulus
theorem ideleCongruenceSubgroup_narrowOfFinite (f : FiniteModulus K) :
    (narrowOfFinite f).ideleCongruenceSubgroup =
      (narrowInfiniteCongruenceSubgroup (K := K)).prod
        (finiteCongruenceSubgroup f)
RayClass.Modulus.congruenceSubgroup

The ray congruence subgroup of the idèle class group attached to a full modulus.

Source context 6 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
namespace Modulus
def congruenceSubgroup (m : Modulus K) :
    Subgroup (IdeleClassGroup K)
RayClass.Modulus.congruenceSubgroup_normal

The full ray congruence subgroup is normal in the idèle class group.

Source context 6 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
namespace Modulus
instance congruenceSubgroup_normal (m : Modulus K) :
    m.congruenceSubgroup.Normal
RayClass.RayClassGroup

The ray class group attached to a full modulus.

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 RayClassGroup (m : Modulus K)
RayClass.rayClassGroupEquivIdeleQuotient

The ray class group is equivalently the idèle group modulo the product of its congruence subgroup with the principal idèles.

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 rayClassGroupEquivIdeleQuotient (m : Modulus K) :
    RayClassGroup m ≃*
      IdeleGroup K ⧸
        (m.ideleCongruenceSubgroup ⊔ IdeleGroup.principalSubgroup K)