Module

SmallHilbertNormCharacterization.lean

Nyll.ClassFieldTheory.GlobalClassFieldTheory.GlobalClassFields.SmallHilbertNormCharacterization
18 declarations indexed from sourceView source ↗

Small Hilbert norm subgroups and everywhere-unramified extensions

For a finite Galois extension which is unramified at both finite and infinite places, every idele integral at all finite places is an actual relative-idele norm. It follows that the actual idele-class norm range contains the small-Hilbert norm subgroup.

This realizes the maximality of the small Hilbert class field on the norm-subgroup side. The resulting quotient transition gives a canonical surjection from the ordinary class group, its exact kernel factorization, and the divisibility of the extension norm quotient order by the class number.

Declarations

GlobalClassFieldTheory.GlobalClassFields.smallHilbertNormCharacterization_ideleClassGroupIsMulCommutative

Keep norm-range quotient normality out of exported declaration types.

Source context 6 commands

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

open scoped IsMulCommutative NumberField NumberField.LiesOver
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField IsDedekindDomain
variable
    {K L : Type}
    [Field K] [NumberField K]
    [Field L] [NumberField L] [Algebra K L]
    [FiniteDimensional K L] [IsGalois K L]
instance
    smallHilbertNormCharacterization_ideleClassGroupIsMulCommutative :
    IsMulCommutative (IdeleClassGroup K)
GlobalClassFieldTheory.GlobalClassFields.infiniteTensorNormSubgroup_eq_top_of_isUnramifiedAtInfinitePlaces

At an extension unramified at all infinite places, the determinant norm image of every infinite tensor factor is the whole local multiplicative group.

Source context 8 commands

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

open scoped IsMulCommutative NumberField NumberField.LiesOver
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField IsDedekindDomain
variable
    {K L : Type}
    [Field K] [NumberField K]
    [Field L] [NumberField L] [Algebra K L]
    [FiniteDimensional K L] [IsGalois K L]
/-- Keep norm-range quotient normality out of exported declaration types. -/
local instance
    smallHilbertNormCharacterization_ideleClassGroupIsMulCommutative :
    IsMulCommutative (IdeleClassGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
omit [FiniteDimensional K L] in
theorem
    infiniteTensorNormSubgroup_eq_top_of_isUnramifiedAtInfinitePlaces
    [_root_.IsUnramifiedAtInfinitePlaces K L]
    (v : InfinitePlace K) :
    _root_.infiniteTensorNormSubgroup
        (K := K) (L := L) v = ⊤
GlobalClassFieldTheory.GlobalClassFields.chosenFinitePlaceIsUnramified_of_no_ramifiedFinitePlaces

If the finite ramification support is empty, the chosen completion above every finite base place is unramified.

Source context 7 commands

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

open scoped IsMulCommutative NumberField NumberField.LiesOver
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField IsDedekindDomain
variable
    {K L : Type}
    [Field K] [NumberField K]
    [Field L] [NumberField L] [Algebra K L]
    [FiniteDimensional K L] [IsGalois K L]
/-- Keep norm-range quotient normality out of exported declaration types. -/
local instance
    smallHilbertNormCharacterization_ideleClassGroupIsMulCommutative :
    IsMulCommutative (IdeleClassGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem chosenFinitePlaceIsUnramified_of_no_ramifiedFinitePlaces
    (hunramifiedFinite :
      _root_.ramifiedBaseFinitePlaces
          (K := K) (L := L) = ∅)
    (v : HeightOneSpectrum (𝓞 K)) :
    _root_.ChosenFinitePlaceIsUnramified
      (K := K) (L := L) v
GlobalClassFieldTheory.GlobalClassFields.integralAtFinitePlaces_le_relativeIdeleNorm_range_of_everywhereUnramified

In an extension unramified at every finite and infinite place, every idele integral at all finite places is an actual relative-idele norm.

Source context 7 commands

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

open scoped IsMulCommutative NumberField NumberField.LiesOver
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField IsDedekindDomain
variable
    {K L : Type}
    [Field K] [NumberField K]
    [Field L] [NumberField L] [Algebra K L]
    [FiniteDimensional K L] [IsGalois K L]
/-- Keep norm-range quotient normality out of exported declaration types. -/
local instance
    smallHilbertNormCharacterization_ideleClassGroupIsMulCommutative :
    IsMulCommutative (IdeleClassGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem
    integralAtFinitePlaces_le_relativeIdeleNorm_range_of_everywhereUnramified
    [_root_.IsUnramifiedAtInfinitePlaces K L]
    (hunramifiedFinite :
      _root_.ramifiedBaseFinitePlaces
          (K := K) (L := L) = ∅) :
    IdeleGroup.integralAtFinitePlaces (K := K) ≤
      (RelativeIdeleGroup.norm K L).range
GlobalClassFieldTheory.GlobalClassFields.integralIdeleClass_mem_ideleClassNorm_range_of_everywhereUnramified
Source context 7 commands

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

open scoped IsMulCommutative NumberField NumberField.LiesOver
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField IsDedekindDomain
variable
    {K L : Type}
    [Field K] [NumberField K]
    [Field L] [NumberField L] [Algebra K L]
    [FiniteDimensional K L] [IsGalois K L]
/-- Keep norm-range quotient normality out of exported declaration types. -/
local instance
    smallHilbertNormCharacterization_ideleClassGroupIsMulCommutative :
    IsMulCommutative (IdeleClassGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem integralIdeleClass_mem_ideleClassNorm_range_of_everywhereUnramified
    [_root_.IsUnramifiedAtInfinitePlaces K L]
    (hunramifiedFinite :
      _root_.ramifiedBaseFinitePlaces
          (K := K) (L := L) = ∅)
    {a : IdeleGroup K}
    (ha : a ∈ IdeleGroup.integralAtFinitePlaces (K := K)) :
    QuotientGroup.mk'
        (IdeleGroup.principalSubgroup K) a ∈
      (_root_.ideleClassNorm K L).range
GlobalClassFieldTheory.GlobalClassFields.principalIdeleClass_mem_ideleClassNorm_range
Source context 8 commands

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

open scoped IsMulCommutative NumberField NumberField.LiesOver
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField IsDedekindDomain
variable
    {K L : Type}
    [Field K] [NumberField K]
    [Field L] [NumberField L] [Algebra K L]
    [FiniteDimensional K L] [IsGalois K L]
/-- Keep norm-range quotient normality out of exported declaration types. -/
local instance
    smallHilbertNormCharacterization_ideleClassGroupIsMulCommutative :
    IsMulCommutative (IdeleClassGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
omit [FiniteDimensional K L] [IsGalois K L] in
theorem principalIdeleClass_mem_ideleClassNorm_range
    {a : IdeleGroup K}
    (ha : a ∈ IdeleGroup.principalSubgroup K) :
    QuotientGroup.mk'
        (IdeleGroup.principalSubgroup K) a ∈
      (_root_.ideleClassNorm K L).range
GlobalClassFieldTheory.GlobalClassFields.smallHilbertClassFieldNormSubgroup_le_ideleClassNorm_range_of_everywhereUnramified

The norm subgroup of an everywhere-unramified finite Galois extension contains the small-Hilbert norm subgroup.

Source context 7 commands

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

open scoped IsMulCommutative NumberField NumberField.LiesOver
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField IsDedekindDomain
variable
    {K L : Type}
    [Field K] [NumberField K]
    [Field L] [NumberField L] [Algebra K L]
    [FiniteDimensional K L] [IsGalois K L]
/-- Keep norm-range quotient normality out of exported declaration types. -/
local instance
    smallHilbertNormCharacterization_ideleClassGroupIsMulCommutative :
    IsMulCommutative (IdeleClassGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem
    smallHilbertClassFieldNormSubgroup_le_ideleClassNorm_range_of_everywhereUnramified
    [_root_.IsUnramifiedAtInfinitePlaces K L]
    (hunramifiedFinite :
      _root_.ramifiedBaseFinitePlaces
          (K := K) (L := L) = ∅) :
    smallHilbertClassFieldNormSubgroup (K := K) ≤
      (_root_.ideleClassNorm K L).range
GlobalClassFieldTheory.GlobalClassFields.smallHilbertClassFieldQuotientToIdeleClassNormQuotient

The canonical transition from the small-Hilbert reciprocity quotient to the actual norm quotient of an everywhere-unramified extension.

Source context 7 commands

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

open scoped IsMulCommutative NumberField NumberField.LiesOver
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField IsDedekindDomain
variable
    {K L : Type}
    [Field K] [NumberField K]
    [Field L] [NumberField L] [Algebra K L]
    [FiniteDimensional K L] [IsGalois K L]
/-- Keep norm-range quotient normality out of exported declaration types. -/
local instance
    smallHilbertNormCharacterization_ideleClassGroupIsMulCommutative :
    IsMulCommutative (IdeleClassGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
def smallHilbertClassFieldQuotientToIdeleClassNormQuotient
    [_root_.IsUnramifiedAtInfinitePlaces K L]
    (hunramifiedFinite :
      _root_.ramifiedBaseFinitePlaces
          (K := K) (L := L) = ∅) :
    (IdeleClassGroup K ⧸
        smallHilbertClassFieldNormSubgroup (K := K)) →*
      (IdeleClassGroup K ⧸
        (_root_.ideleClassNorm K L).range)
GlobalClassFieldTheory.GlobalClassFields.smallHilbertClassFieldQuotientToIdeleClassNormQuotient_mk

The small-Hilbert quotient transition sends an idele class to the same class modulo the actual norm subgroup.

Source context 7 commands

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

open scoped IsMulCommutative NumberField NumberField.LiesOver
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField IsDedekindDomain
variable
    {K L : Type}
    [Field K] [NumberField K]
    [Field L] [NumberField L] [Algebra K L]
    [FiniteDimensional K L] [IsGalois K L]
/-- Keep norm-range quotient normality out of exported declaration types. -/
local instance
    smallHilbertNormCharacterization_ideleClassGroupIsMulCommutative :
    IsMulCommutative (IdeleClassGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem smallHilbertClassFieldQuotientToIdeleClassNormQuotient_mk
    [_root_.IsUnramifiedAtInfinitePlaces K L]
    (hunramifiedFinite :
      _root_.ramifiedBaseFinitePlaces
          (K := K) (L := L) = ∅)
    (x : IdeleClassGroup K) :
    smallHilbertClassFieldQuotientToIdeleClassNormQuotient
        (K := K) (L := L) hunramifiedFinite
        (QuotientGroup.mk'
          (smallHilbertClassFieldNormSubgroup (K := K)) x) =
      QuotientGroup.mk'
        ((_root_.ideleClassNorm K L).range) x
GlobalClassFieldTheory.GlobalClassFields.smallHilbertClassFieldQuotientToIdeleClassNormQuotient_surjective

The transition from the small-Hilbert quotient to an everywhere-unramified actual norm quotient is surjective.

Source context 7 commands

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

open scoped IsMulCommutative NumberField NumberField.LiesOver
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField IsDedekindDomain
variable
    {K L : Type}
    [Field K] [NumberField K]
    [Field L] [NumberField L] [Algebra K L]
    [FiniteDimensional K L] [IsGalois K L]
/-- Keep norm-range quotient normality out of exported declaration types. -/
local instance
    smallHilbertNormCharacterization_ideleClassGroupIsMulCommutative :
    IsMulCommutative (IdeleClassGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem
    smallHilbertClassFieldQuotientToIdeleClassNormQuotient_surjective
    [_root_.IsUnramifiedAtInfinitePlaces K L]
    (hunramifiedFinite :
      _root_.ramifiedBaseFinitePlaces
          (K := K) (L := L) = ∅) :
    Function.Surjective
      (smallHilbertClassFieldQuotientToIdeleClassNormQuotient
        (K := K) (L := L) hunramifiedFinite)
GlobalClassFieldTheory.GlobalClassFields.smallHilbertClassFieldQuotientToIdeleClassNormQuotient_ker

The kernel of the small-Hilbert quotient transition is the image of the actual norm subgroup modulo the small-Hilbert norm subgroup.

Source context 7 commands

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

open scoped IsMulCommutative NumberField NumberField.LiesOver
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField IsDedekindDomain
variable
    {K L : Type}
    [Field K] [NumberField K]
    [Field L] [NumberField L] [Algebra K L]
    [FiniteDimensional K L] [IsGalois K L]
/-- Keep norm-range quotient normality out of exported declaration types. -/
local instance
    smallHilbertNormCharacterization_ideleClassGroupIsMulCommutative :
    IsMulCommutative (IdeleClassGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem
    smallHilbertClassFieldQuotientToIdeleClassNormQuotient_ker
    [_root_.IsUnramifiedAtInfinitePlaces K L]
    (hunramifiedFinite :
      _root_.ramifiedBaseFinitePlaces
          (K := K) (L := L) = ∅) :
    MonoidHom.ker
        (smallHilbertClassFieldQuotientToIdeleClassNormQuotient
          (K := K) (L := L) hunramifiedFinite) =
      Subgroup.map
        (QuotientGroup.mk'
          (smallHilbertClassFieldNormSubgroup (K := K)))
        ((_root_.ideleClassNorm K L).range)
GlobalClassFieldTheory.GlobalClassFields.smallHilbertNormImageQuotientEquivIdeleClassNormQuotient

Quotienting the small-Hilbert reciprocity quotient by the image of the actual norm subgroup recovers the actual norm quotient.

Source context 7 commands

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

open scoped IsMulCommutative NumberField NumberField.LiesOver
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField IsDedekindDomain
variable
    {K L : Type}
    [Field K] [NumberField K]
    [Field L] [NumberField L] [Algebra K L]
    [FiniteDimensional K L] [IsGalois K L]
/-- Keep norm-range quotient normality out of exported declaration types. -/
local instance
    smallHilbertNormCharacterization_ideleClassGroupIsMulCommutative :
    IsMulCommutative (IdeleClassGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
def smallHilbertNormImageQuotientEquivIdeleClassNormQuotient
    [_root_.IsUnramifiedAtInfinitePlaces K L]
    (hunramifiedFinite :
      _root_.ramifiedBaseFinitePlaces
          (K := K) (L := L) = ∅) :
    ((IdeleClassGroup K ⧸
          smallHilbertClassFieldNormSubgroup (K := K)) ⧸
        Subgroup.map
          (QuotientGroup.mk'
            (smallHilbertClassFieldNormSubgroup (K := K)))
          ((_root_.ideleClassNorm K L).range)) ≃*
      (IdeleClassGroup K ⧸
        (_root_.ideleClassNorm K L).range)
GlobalClassFieldTheory.GlobalClassFields.classGroupToIdeleClassNormQuotient

The ordinary class group maps canonically onto the actual norm quotient of every everywhere-unramified finite Galois extension.

Source context 7 commands

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

open scoped IsMulCommutative NumberField NumberField.LiesOver
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField IsDedekindDomain
variable
    {K L : Type}
    [Field K] [NumberField K]
    [Field L] [NumberField L] [Algebra K L]
    [FiniteDimensional K L] [IsGalois K L]
/-- Keep norm-range quotient normality out of exported declaration types. -/
local instance
    smallHilbertNormCharacterization_ideleClassGroupIsMulCommutative :
    IsMulCommutative (IdeleClassGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
def classGroupToIdeleClassNormQuotient
    [_root_.IsUnramifiedAtInfinitePlaces K L]
    (hunramifiedFinite :
      _root_.ramifiedBaseFinitePlaces
          (K := K) (L := L) = ∅) :
    ClassGroup (𝓞 K) →*
      (IdeleClassGroup K ⧸
        (_root_.ideleClassNorm K L).range)
GlobalClassFieldTheory.GlobalClassFields.classGroupToIdeleClassNormQuotient_surjective

The canonical map from the ordinary class group to the actual norm quotient of an everywhere-unramified extension is surjective.

Source context 7 commands

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

open scoped IsMulCommutative NumberField NumberField.LiesOver
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField IsDedekindDomain
variable
    {K L : Type}
    [Field K] [NumberField K]
    [Field L] [NumberField L] [Algebra K L]
    [FiniteDimensional K L] [IsGalois K L]
/-- Keep norm-range quotient normality out of exported declaration types. -/
local instance
    smallHilbertNormCharacterization_ideleClassGroupIsMulCommutative :
    IsMulCommutative (IdeleClassGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem classGroupToIdeleClassNormQuotient_surjective
    [_root_.IsUnramifiedAtInfinitePlaces K L]
    (hunramifiedFinite :
      _root_.ramifiedBaseFinitePlaces
          (K := K) (L := L) = ∅) :
    Function.Surjective
      (classGroupToIdeleClassNormQuotient
        (K := K) (L := L) hunramifiedFinite)
GlobalClassFieldTheory.GlobalClassFields.ideleClassNormQuotient_card_dvd_classNumber_of_everywhereUnramified

The actual norm quotient of an everywhere-unramified finite Galois extension has order dividing the class number.

Source context 7 commands

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

open scoped IsMulCommutative NumberField NumberField.LiesOver
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField IsDedekindDomain
variable
    {K L : Type}
    [Field K] [NumberField K]
    [Field L] [NumberField L] [Algebra K L]
    [FiniteDimensional K L] [IsGalois K L]
/-- Keep norm-range quotient normality out of exported declaration types. -/
local instance
    smallHilbertNormCharacterization_ideleClassGroupIsMulCommutative :
    IsMulCommutative (IdeleClassGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem
    ideleClassNormQuotient_card_dvd_classNumber_of_everywhereUnramified
    [_root_.IsUnramifiedAtInfinitePlaces K L]
    (hunramifiedFinite :
      _root_.ramifiedBaseFinitePlaces
          (K := K) (L := L) = ∅) :
    Nat.card
        (IdeleClassGroup K ⧸
          (_root_.ideleClassNorm K L).range) ∣
      NumberField.classNumber K
GlobalClassFieldTheory.GlobalClassFields.classNumber_eq_unramifiedNormKernel_card_mul_normQuotient_card

The class number factors as the kernel order of the canonical class group map times the order of an everywhere-unramified actual norm quotient.

Source context 7 commands

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

open scoped IsMulCommutative NumberField NumberField.LiesOver
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField IsDedekindDomain
variable
    {K L : Type}
    [Field K] [NumberField K]
    [Field L] [NumberField L] [Algebra K L]
    [FiniteDimensional K L] [IsGalois K L]
/-- Keep norm-range quotient normality out of exported declaration types. -/
local instance
    smallHilbertNormCharacterization_ideleClassGroupIsMulCommutative :
    IsMulCommutative (IdeleClassGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem
    classNumber_eq_unramifiedNormKernel_card_mul_normQuotient_card
    [_root_.IsUnramifiedAtInfinitePlaces K L]
    (hunramifiedFinite :
      _root_.ramifiedBaseFinitePlaces
          (K := K) (L := L) = ∅) :
    NumberField.classNumber K =
      Nat.card
          (MonoidHom.ker
            (classGroupToIdeleClassNormQuotient
              (K := K) (L := L) hunramifiedFinite)) *
        Nat.card
          (IdeleClassGroup K ⧸
            (_root_.ideleClassNorm K L).range)
GlobalClassFieldTheory.GlobalClassFields.cyclicEverywhereUnramifiedExtensionDegree_dvd_classNumber

The degree of every finite cyclic extension unramified at all finite and infinite places divides the class number.

Source context 7 commands

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

open scoped IsMulCommutative NumberField NumberField.LiesOver
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField IsDedekindDomain
variable
    {K L : Type}
    [Field K] [NumberField K]
    [Field L] [NumberField L] [Algebra K L]
    [FiniteDimensional K L] [IsGalois K L]
/-- Keep norm-range quotient normality out of exported declaration types. -/
local instance
    smallHilbertNormCharacterization_ideleClassGroupIsMulCommutative :
    IsMulCommutative (IdeleClassGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem cyclicEverywhereUnramifiedExtensionDegree_dvd_classNumber
    [_root_.IsUnramifiedAtInfinitePlaces K L]
    [IsCyclic (L ≃ₐ[K] L)]
    (hunramifiedFinite :
      _root_.ramifiedBaseFinitePlaces
          (K := K) (L := L) = ∅) :
    Module.finrank K L ∣
      NumberField.classNumber K
GlobalClassFieldTheory.GlobalClassFields.classNumber_eq_unramifiedCyclicNormKernel_card_mul_extensionDegree

For a finite cyclic extension unramified at all finite and infinite places, the class number is the kernel order of the canonical class group reciprocity map times the extension degree.

Source context 7 commands

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

open scoped IsMulCommutative NumberField NumberField.LiesOver
noncomputable section
namespace GlobalClassFieldTheory
namespace GlobalClassFields
open NumberField IsDedekindDomain
variable
    {K L : Type}
    [Field K] [NumberField K]
    [Field L] [NumberField L] [Algebra K L]
    [FiniteDimensional K L] [IsGalois K L]
/-- Keep norm-range quotient normality out of exported declaration types. -/
local instance
    smallHilbertNormCharacterization_ideleClassGroupIsMulCommutative :
    IsMulCommutative (IdeleClassGroup K) :=
  ⟨⟨fun a b => mul_comm a b⟩⟩
theorem
    classNumber_eq_unramifiedCyclicNormKernel_card_mul_extensionDegree
    [_root_.IsUnramifiedAtInfinitePlaces K L]
    [IsCyclic (L ≃ₐ[K] L)]
    (hunramifiedFinite :
      _root_.ramifiedBaseFinitePlaces
          (K := K) (L := L) = ∅) :
    NumberField.classNumber K =
      Nat.card
          (MonoidHom.ker
            (classGroupToIdeleClassNormQuotient
              (K := K) (L := L) hunramifiedFinite)) *
        Module.finrank K L