Module

HilbertClassFieldComparison.lean

Nyll.ClassFieldTheory.GlobalClassFieldTheory.GlobalClassFields.HilbertClassFieldComparison
24 declarations indexed from sourceView source ↗

Comparison of the big and small Hilbert class fields

This file identifies the canonical transition from the big-Hilbert reciprocity quotient to the small-Hilbert reciprocity quotient with the canonical map from the narrow class group to the ordinary class group. It then transports the archimedean sign exact sequence to a precise description of the kernel of that transition.

Declarations

GlobalClassFieldTheory.GlobalClassFields.hilbertClassFieldComparison_ideleClassGroupIsMulCommutative

Fix the canonical commutativity needed for Hilbert norm-subgroup quotients in this module.

Source context 6 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
theorem hilbertClassFieldComparison_ideleClassGroupIsMulCommutative :
    IsMulCommutative (IdeleClassGroup K)
GlobalClassFieldTheory.GlobalClassFields.hilbertClassFieldComparison_realSignGroupIsMulCommutative

Keep the real-sign quotient normality instance stable across declarations.

Source context 7 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K)
GlobalClassFieldTheory.GlobalClassFields.bigHilbertClassFieldQuotientEquivNarrowClassGroup_mk

On an idele representative, the big-Hilbert quotient equivalence is the canonical representative in the narrow class group.

Source context 8 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
/-- Keep the real-sign quotient normality instance stable across declarations. -/
local instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem bigHilbertClassFieldQuotientEquivNarrowClassGroup_mk
    (a : IdeleGroup K) :
    bigHilbertClassFieldQuotientEquivNarrowClassGroup
        (K := K)
        (QuotientGroup.mk'
          (bigHilbertClassFieldNormSubgroup (K := K))
          (QuotientGroup.mk'
            (IdeleGroup.principalSubgroup K) a)) =
      QuotientGroup.mk'
        (RayClass.narrowDenominator (K := K)) a
GlobalClassFieldTheory.GlobalClassFields.smallHilbertClassFieldQuotientEquivClassGroup_mk

On an idele representative, the small-Hilbert quotient equivalence is the ordinary ideal-class map.

Source context 8 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
/-- Keep the real-sign quotient normality instance stable across declarations. -/
local instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem smallHilbertClassFieldQuotientEquivClassGroup_mk
    (a : IdeleGroup K) :
    smallHilbertClassFieldQuotientEquivClassGroup
        (K := K)
        (QuotientGroup.mk'
          (smallHilbertClassFieldNormSubgroup (K := K))
          (QuotientGroup.mk'
            (IdeleGroup.principalSubgroup K) a)) =
      IdeleGroup.idealClass a
GlobalClassFieldTheory.GlobalClassFields.bigToSmallHilbertQuotient_compatible_with_narrowToClassGroup

Under the canonical quotient equivalences, the big-to-small Hilbert transition is the map from the narrow class group to the ordinary class group.

Source context 8 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
/-- Keep the real-sign quotient normality instance stable across declarations. -/
local instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem bigToSmallHilbertQuotient_compatible_with_narrowToClassGroup
    (q : IdeleClassGroup K ⧸
      bigHilbertClassFieldNormSubgroup (K := K)) :
    smallHilbertClassFieldQuotientEquivClassGroup
        (K := K)
        (bigHilbertClassFieldQuotientToSmallHilbertClassFieldQuotient
          (K := K) q) =
      RayClass.narrowToClassGroup
        (bigHilbertClassFieldQuotientEquivNarrowClassGroup
          (K := K) q)
GlobalClassFieldTheory.GlobalClassFields.bigToSmallHilbertQuotient_compatibility

Homomorphism form of the compatibility between the Hilbert quotient transition and the narrow-to-ordinary class-group map.

Source context 8 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
/-- Keep the real-sign quotient normality instance stable across declarations. -/
local instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem bigToSmallHilbertQuotient_compatibility :
    (smallHilbertClassFieldQuotientEquivClassGroup
        (K := K)).toMonoidHom.comp
        (bigHilbertClassFieldQuotientToSmallHilbertClassFieldQuotient
          (K := K)) =
      (RayClass.narrowToClassGroup (K := K)).comp
        (bigHilbertClassFieldQuotientEquivNarrowClassGroup
          (K := K)).toMonoidHom
GlobalClassFieldTheory.GlobalClassFields.realSignToBigHilbertClassFieldQuotient

The canonical map from real sign classes to the big-Hilbert reciprocity quotient.

Source context 8 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
/-- Keep the real-sign quotient normality instance stable across declarations. -/
local instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
def realSignToBigHilbertClassFieldQuotient :
    RayClass.realSignGroup K →*
      (IdeleClassGroup K ⧸
        bigHilbertClassFieldNormSubgroup (K := K))
GlobalClassFieldTheory.GlobalClassFields.realSignToBigHilbertClassFieldQuotient_apply

The real-sign map to the big-Hilbert quotient is the composite used in its definition.

Source context 8 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
/-- Keep the real-sign quotient normality instance stable across declarations. -/
local instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem realSignToBigHilbertClassFieldQuotient_apply
    (s : RayClass.realSignGroup K) :
    realSignToBigHilbertClassFieldQuotient (K := K) s =
      (bigHilbertClassFieldQuotientEquivNarrowClassGroup
        (K := K)).symm
          (RayClass.signToNarrow (K := K) s)
GlobalClassFieldTheory.GlobalClassFields.integralUnitSign_range_eq_realSignToBigHilbertClassFieldQuotient_ker

The kernel of the real-sign map to the big-Hilbert quotient is the image of the sign classes of global integral units.

Source context 8 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
/-- Keep the real-sign quotient normality instance stable across declarations. -/
local instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem
    integralUnitSign_range_eq_realSignToBigHilbertClassFieldQuotient_ker :
    (RayClass.integralUnitSignToRealSign (K := K)).range =
      (realSignToBigHilbertClassFieldQuotient (K := K)).ker
GlobalClassFieldTheory.GlobalClassFields.realSignToBigHilbertClassFieldQuotient_range_le_bigToSmallHilbertKernel
Source context 8 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
/-- Keep the real-sign quotient normality instance stable across declarations. -/
local instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem
    realSignToBigHilbertClassFieldQuotient_range_le_bigToSmallHilbertKernel :
    (realSignToBigHilbertClassFieldQuotient (K := K)).range ≤
      MonoidHom.ker
        (bigHilbertClassFieldQuotientToSmallHilbertClassFieldQuotient
          (K := K))
GlobalClassFieldTheory.GlobalClassFields.bigToSmallHilbertKernel_le_realSignToBigHilbertClassFieldQuotient_range
Source context 8 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
/-- Keep the real-sign quotient normality instance stable across declarations. -/
local instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem
    bigToSmallHilbertKernel_le_realSignToBigHilbertClassFieldQuotient_range :
    MonoidHom.ker
        (bigHilbertClassFieldQuotientToSmallHilbertClassFieldQuotient
          (K := K)) ≤
      (realSignToBigHilbertClassFieldQuotient (K := K)).range
GlobalClassFieldTheory.GlobalClassFields.realSignToBigHilbertClassFieldQuotient_range_eq_bigToSmallHilbertKernel

The image of the real-sign map in the big-Hilbert quotient is exactly the kernel of the transition to the small-Hilbert quotient.

Source context 8 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
/-- Keep the real-sign quotient normality instance stable across declarations. -/
local instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem
    realSignToBigHilbertClassFieldQuotient_range_eq_bigToSmallHilbertKernel :
    (realSignToBigHilbertClassFieldQuotient (K := K)).range =
      MonoidHom.ker
        (bigHilbertClassFieldQuotientToSmallHilbertClassFieldQuotient
          (K := K))
GlobalClassFieldTheory.GlobalClassFields.hilbertClassFieldSign_exact_sequence

The archimedean sign exact sequence written directly on the big and small Hilbert reciprocity quotients:

1 → unit signs → real signs → big Hilbert quotient → small Hilbert quotient → 1.

Source context 8 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
/-- Keep the real-sign quotient normality instance stable across declarations. -/
local instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem hilbertClassFieldSign_exact_sequence :
    Function.Injective
        (RayClass.integralUnitSignToRealSign (K := K)) ∧
      (RayClass.integralUnitSignToRealSign (K := K)).range =
        (realSignToBigHilbertClassFieldQuotient (K := K)).ker ∧
      (realSignToBigHilbertClassFieldQuotient (K := K)).range =
        MonoidHom.ker
          (bigHilbertClassFieldQuotientToSmallHilbertClassFieldQuotient
            (K := K)) ∧
      Function.Surjective
        (bigHilbertClassFieldQuotientToSmallHilbertClassFieldQuotient
          (K := K))
GlobalClassFieldTheory.GlobalClassFields.bigHilbertQuotientEquiv_mem_narrowClassKernel
Source context 8 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
/-- Keep the real-sign quotient normality instance stable across declarations. -/
local instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem bigHilbertQuotientEquiv_mem_narrowClassKernel
    (q : MonoidHom.ker
      (bigHilbertClassFieldQuotientToSmallHilbertClassFieldQuotient
        (K := K))) :
    bigHilbertClassFieldQuotientEquivNarrowClassGroup
        (K := K) q.1 ∈
      MonoidHom.ker (RayClass.narrowToClassGroup (K := K))
GlobalClassFieldTheory.GlobalClassFields.bigHilbertQuotientEquiv_symm_mem_bigToSmallKernel
Source context 8 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
/-- Keep the real-sign quotient normality instance stable across declarations. -/
local instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem bigHilbertQuotientEquiv_symm_mem_bigToSmallKernel
    (c : MonoidHom.ker
      (RayClass.narrowToClassGroup (K := K))) :
    (bigHilbertClassFieldQuotientEquivNarrowClassGroup
        (K := K)).symm c.1 ∈
      MonoidHom.ker
        (bigHilbertClassFieldQuotientToSmallHilbertClassFieldQuotient
          (K := K))
GlobalClassFieldTheory.GlobalClassFields.bigToSmallHilbertKernelEquivNarrowClassKernel

The kernel of the big-to-small Hilbert quotient transition is canonically the kernel of the map from narrow to ordinary ideal classes.

Source context 8 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
/-- Keep the real-sign quotient normality instance stable across declarations. -/
local instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
def bigToSmallHilbertKernelEquivNarrowClassKernel :
    MonoidHom.ker
        (bigHilbertClassFieldQuotientToSmallHilbertClassFieldQuotient
          (K := K)) ≃*
      MonoidHom.ker (RayClass.narrowToClassGroup (K := K)) where
  toFun q :=
    ⟨bigHilbertClassFieldQuotientEquivNarrowClassGroup
        (K := K) q.1,
      bigHilbertQuotientEquiv_mem_narrowClassKernel
        (K := K) q⟩
  invFun c :=
    ⟨(bigHilbertClassFieldQuotientEquivNarrowClassGroup
        (K := K)).symm c.1,
      bigHilbertQuotientEquiv_symm_mem_bigToSmallKernel
        (K := K) c⟩
  left_inv q := by
    apply Subtype.ext
    exact
      (bigHilbertClassFieldQuotientEquivNarrowClassGroup
        (K := K)).symm_apply_apply q.1
  right_inv c := by
    apply Subtype.ext
    exact
      (bigHilbertClassFieldQuotientEquivNarrowClassGroup
        (K := K)).apply_symm_apply c.1
  map_mul' q r := by
    apply Subtype.ext
    exact
      (bigHilbertClassFieldQuotientEquivNarrowClassGroup
        (K := K)).map_mul q.1 r.1
GlobalClassFieldTheory.GlobalClassFields.signToNarrow_mem_narrowClassKernel
Source context 8 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
/-- Keep the real-sign quotient normality instance stable across declarations. -/
local instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem signToNarrow_mem_narrowClassKernel
    (s : RayClass.realSignGroup K) :
    RayClass.signToNarrow (K := K) s ∈
      MonoidHom.ker (RayClass.narrowToClassGroup (K := K))
GlobalClassFieldTheory.GlobalClassFields.realSignToNarrowClassKernel

The real-sign map with codomain restricted to the kernel of the narrow-to-ordinary class-group map.

Source context 8 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
/-- Keep the real-sign quotient normality instance stable across declarations. -/
local instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
def realSignToNarrowClassKernel :
    RayClass.realSignGroup K →*
      MonoidHom.ker (RayClass.narrowToClassGroup (K := K)) where
  toFun s :=
    ⟨RayClass.signToNarrow (K := K) s,
      signToNarrow_mem_narrowClassKernel (K := K) s⟩
  map_one' := by
    apply Subtype.ext
    exact map_one (RayClass.signToNarrow (K := K))
  map_mul' s t := by
    apply Subtype.ext
    exact map_mul (RayClass.signToNarrow (K := K)) s t
GlobalClassFieldTheory.GlobalClassFields.realSignToNarrowClassKernel_apply

The restricted real-sign map has the same underlying narrow ideal class as RayClass.signToNarrow.

Source context 8 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
/-- Keep the real-sign quotient normality instance stable across declarations. -/
local instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem realSignToNarrowClassKernel_apply
    (s : RayClass.realSignGroup K) :
    (realSignToNarrowClassKernel (K := K) s :
      RayClass.NarrowClassGroup K) =
      RayClass.signToNarrow (K := K) s
GlobalClassFieldTheory.GlobalClassFields.realSignToNarrowClassKernel_surjective

Every narrow ideal class mapping trivially to the ordinary class group is represented by a real sign class.

Source context 8 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
/-- Keep the real-sign quotient normality instance stable across declarations. -/
local instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem realSignToNarrowClassKernel_surjective :
    Function.Surjective
      (realSignToNarrowClassKernel (K := K))
GlobalClassFieldTheory.GlobalClassFields.realSignToNarrowClassKernel_ker

Restricting the codomain of the real-sign map does not change its kernel.

Source context 8 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
/-- Keep the real-sign quotient normality instance stable across declarations. -/
local instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem realSignToNarrowClassKernel_ker :
    (realSignToNarrowClassKernel (K := K)).ker =
      (RayClass.signToNarrow (K := K)).ker
GlobalClassFieldTheory.GlobalClassFields.realSignModuloIntegralUnitSignsEquivNarrowClassKernel

The kernel of the narrow-to-ordinary class-group map is the quotient of real sign classes by the sign classes of global integral units.

Source context 8 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
/-- Keep the real-sign quotient normality instance stable across declarations. -/
local instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
def realSignModuloIntegralUnitSignsEquivNarrowClassKernel :
    RayClass.realSignGroup K ⧸
        (RayClass.integralUnitSignToRealSign (K := K)).range ≃*
      MonoidHom.ker (RayClass.narrowToClassGroup (K := K))
GlobalClassFieldTheory.GlobalClassFields.realSignModuloIntegralUnitSignsEquivBigToSmallHilbertKernel

The relative big/small Hilbert kernel is exactly the quotient of real sign classes by the sign classes contributed by global integral units.

Source context 8 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
/-- Keep the real-sign quotient normality instance stable across declarations. -/
local instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
def realSignModuloIntegralUnitSignsEquivBigToSmallHilbertKernel :
    RayClass.realSignGroup K ⧸
        (RayClass.integralUnitSignToRealSign (K := K)).range ≃*
      MonoidHom.ker
        (bigHilbertClassFieldQuotientToSmallHilbertClassFieldQuotient
          (K := K))
GlobalClassFieldTheory.GlobalClassFields.bigToSmallHilbertKernel_card_eq_realSignQuotient_card

The order of the relative big/small Hilbert kernel is the order of the real-sign quotient modulo signs of global integral units.

Source context 8 commands

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

open scoped IsMulCommutative NumberField
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField
variable {K : Type*} [Field K] [NumberField K]
attribute [local instance] hilbertClassFieldComparison_ideleClassGroupIsMulCommutative
/-- Keep the real-sign quotient normality instance stable across declarations. -/
local instance
    hilbertClassFieldComparison_realSignGroupIsMulCommutative :
    IsMulCommutative (RayClass.realSignGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem bigToSmallHilbertKernel_card_eq_realSignQuotient_card :
    Nat.card
        (MonoidHom.ker
          (bigHilbertClassFieldQuotientToSmallHilbertClassFieldQuotient
            (K := K))) =
      Nat.card
        (RayClass.realSignGroup K ⧸
          (RayClass.integralUnitSignToRealSign (K := K)).range)