Module

ProfiniteIntegerFree.lean

Nyll.SawinTotallyRealTowers.UnramifiedProPRelationRank.Global.ProfiniteIntegerFree
18 declarations indexed from sourceView source ↗

The profinite integers as a rank-one free profinite group

The dense copy of the infinite cyclic group in ZHat has the expected universal property. A map to a finite discrete group factors through the cyclic quotient determined by the order of the image of 1; the finite-quotient criterion then gives the full pro-all-finite completion and free-profinite properties.

This production leaf is independent of every Progress module.

Declarations

ClassFieldTower.Cohomology.ProfiniteInteger.generator

The canonical topological generator 1 of the multiplicative profinite integers.

Source context 6 commands

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

open Set
open scoped Topology
noncomputable section
namespace ClassFieldTower.Cohomology.ProfiniteInteger
open ProCGroups
open ProCGroups.FreeProC
abbrev generator : ClassFormation.ZHatMul
ClassFieldTower.Cohomology.ProfiniteInteger.integersMap

The dense homomorphism from the infinite cyclic group to the profinite integers.

Source context 6 commands

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

open Set
open scoped Topology
noncomputable section
namespace ClassFieldTower.Cohomology.ProfiniteInteger
open ProCGroups
open ProCGroups.FreeProC
def integersMap : Multiplicative ℤ →ₜ* ClassFormation.ZHatMul where
  toMonoidHom := AddMonoidHom.toMultiplicative
    (Int.castRingHom ClassFormation.ZHat).toAddMonoidHom
  continuous_toFun := continuous_of_discreteTopology
ClassFieldTower.Cohomology.ProfiniteInteger.integersMap_apply

The integer map sends n to the n-th power of the canonical generator.

Source context 6 commands

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

open Set
open scoped Topology
noncomputable section
namespace ClassFieldTower.Cohomology.ProfiniteInteger
open ProCGroups
open ProCGroups.FreeProC
theorem integersMap_apply (n : ℤ) :
    integersMap (Multiplicative.ofAdd n) = generator ^ n
ClassFieldTower.Cohomology.ProfiniteInteger.denseRange_integersMap

The image of the integers is dense in the profinite integers.

Source context 6 commands

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

open Set
open scoped Topology
noncomputable section
namespace ClassFieldTower.Cohomology.ProfiniteInteger
open ProCGroups
open ProCGroups.FreeProC
theorem denseRange_integersMap : DenseRange integersMap
ClassFieldTower.Cohomology.ProfiniteInteger.reductionMul
Source context 6 commands

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

open Set
open scoped Topology
noncomputable section
namespace ClassFieldTower.Cohomology.ProfiniteInteger
open ProCGroups
open ProCGroups.FreeProC
def reductionMul (n : ℕ) (hn : 0 < n) :
    ClassFormation.ZHatMul →ₜ* Multiplicative (ZMod n) where
  toFun z := Multiplicative.ofAdd (ClassFormation.zHatReduction n hn z.toAdd)
  map_one' := by
    apply Multiplicative.ext
    exact map_zero (ClassFormation.zHatReduction n hn)
  map_mul' x y := by
    apply Multiplicative.ext
    exact map_add (ClassFormation.zHatReduction n hn) x.toAdd y.toAdd
  continuous_toFun := map_continuous (ClassFormation.zHatReduction n hn)
ClassFieldTower.Cohomology.ProfiniteInteger.cyclicIntHom
Source context 6 commands

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

open Set
open scoped Topology
noncomputable section
namespace ClassFieldTower.Cohomology.ProfiniteInteger
open ProCGroups
open ProCGroups.FreeProC
def cyclicIntHom {K : Type} [Group K] (k : K) :
    ℤ →+ Additive (Subgroup.zpowers k) where
  toFun z := Additive.ofMul ⟨k ^ z, z, rfl⟩
  map_zero' := by
    apply Additive.ext
    ext
    simp only [zpow_zero, toMul_ofMul, toMul_zero, OneMemClass.coe_one]
  map_add' := by
    intro a b
    apply Additive.ext
    ext
    simp only [zpow_add, toMul_ofMul, toMul_add, Subgroup.coe_mul]
ClassFieldTower.Cohomology.ProfiniteInteger.cyclicIntHom_order
Source context 6 commands

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

open Set
open scoped Topology
noncomputable section
namespace ClassFieldTower.Cohomology.ProfiniteInteger
open ProCGroups
open ProCGroups.FreeProC
theorem cyclicIntHom_order {K : Type} [Group K] (k : K) :
    cyclicIntHom k (orderOf k) = 0
ClassFieldTower.Cohomology.ProfiniteInteger.cyclicZModHom
Source context 6 commands

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

open Set
open scoped Topology
noncomputable section
namespace ClassFieldTower.Cohomology.ProfiniteInteger
open ProCGroups
open ProCGroups.FreeProC
def cyclicZModHom {K : Type} [Group K] (k : K) :
    ZMod (orderOf k) →+ Additive (Subgroup.zpowers k)
ClassFieldTower.Cohomology.ProfiniteInteger.cyclicStageHom
Source context 6 commands

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

open Set
open scoped Topology
noncomputable section
namespace ClassFieldTower.Cohomology.ProfiniteInteger
open ProCGroups
open ProCGroups.FreeProC
def cyclicStageHom {K : Type} [Group K] (k : K) :
    Multiplicative (ZMod (orderOf k)) →* K
ClassFieldTower.Cohomology.ProfiniteInteger.cyclicStageHom_generator
Source context 6 commands

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

open Set
open scoped Topology
noncomputable section
namespace ClassFieldTower.Cohomology.ProfiniteInteger
open ProCGroups
open ProCGroups.FreeProC
theorem cyclicStageHom_generator {K : Type} [Group K] (k : K) :
    cyclicStageHom k (Multiplicative.ofAdd (1 : ZMod (orderOf k))) = k
ClassFieldTower.Cohomology.ProfiniteInteger.reductionMul_generator
Source context 6 commands

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

open Set
open scoped Topology
noncomputable section
namespace ClassFieldTower.Cohomology.ProfiniteInteger
open ProCGroups
open ProCGroups.FreeProC
theorem reductionMul_generator (n : ℕ) (hn : 0 < n) :
    reductionMul n hn generator = Multiplicative.ofAdd (1 : ZMod n)
ClassFieldTower.Cohomology.ProfiniteInteger.finiteLift
Source context 6 commands

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

open Set
open scoped Topology
noncomputable section
namespace ClassFieldTower.Cohomology.ProfiniteInteger
open ProCGroups
open ProCGroups.FreeProC
def finiteLift
    {Q : Type} [Group Q] [TopologicalSpace Q] [IsTopologicalGroup Q]
    [Finite Q] [DiscreteTopology Q]
    (φ : Multiplicative ℤ →ₜ* Q) : ClassFormation.ZHatMul →ₜ* Q
ClassFieldTower.Cohomology.ProfiniteInteger.finiteLift_generator
Source context 6 commands

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

open Set
open scoped Topology
noncomputable section
namespace ClassFieldTower.Cohomology.ProfiniteInteger
open ProCGroups
open ProCGroups.FreeProC
theorem finiteLift_generator
    {Q : Type} [Group Q] [TopologicalSpace Q] [IsTopologicalGroup Q]
    [Finite Q] [DiscreteTopology Q]
    (φ : Multiplicative ℤ →ₜ* Q) :
    finiteLift φ generator = φ (Multiplicative.ofAdd (1 : ℤ))
ClassFieldTower.Cohomology.ProfiniteInteger.hom_from_multiplicativeInt_apply
Source context 6 commands

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

open Set
open scoped Topology
noncomputable section
namespace ClassFieldTower.Cohomology.ProfiniteInteger
open ProCGroups
open ProCGroups.FreeProC
theorem hom_from_multiplicativeInt_apply
    {Q : Type} [Group Q] (φ : Multiplicative ℤ →* Q) (n : ℤ) :
    φ (Multiplicative.ofAdd n) =
      (φ (Multiplicative.ofAdd (1 : ℤ))) ^ n
ClassFieldTower.Cohomology.ProfiniteInteger.finiteLift_comp_integersMap
Source context 6 commands

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

open Set
open scoped Topology
noncomputable section
namespace ClassFieldTower.Cohomology.ProfiniteInteger
open ProCGroups
open ProCGroups.FreeProC
theorem finiteLift_comp_integersMap
    {Q : Type} [Group Q] [TopologicalSpace Q] [IsTopologicalGroup Q]
    [Finite Q] [DiscreteTopology Q]
    (φ : Multiplicative ℤ →ₜ* Q) :
    (finiteLift φ).comp integersMap = φ
ClassFieldTower.Cohomology.ProfiniteInteger.existsUnique_finiteLift

Every map from the infinite cyclic group to a finite discrete group extends uniquely over the profinite integers.

Source context 6 commands

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

open Set
open scoped Topology
noncomputable section
namespace ClassFieldTower.Cohomology.ProfiniteInteger
open ProCGroups
open ProCGroups.FreeProC
theorem existsUnique_finiteLift
    {Q : Type} [Group Q] [TopologicalSpace Q] [IsTopologicalGroup Q]
    [Finite Q] [DiscreteTopology Q]
    (φ : Multiplicative ℤ →ₜ* Q) :
    ∃! f : ClassFormation.ZHatMul →ₜ* Q, f.comp integersMap = φ
ClassFieldTower.Cohomology.ProfiniteInteger.isProfiniteCompletion

The concrete profinite integers are the pro-all-finite completion of the infinite cyclic group.

Source context 6 commands

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

open Set
open scoped Topology
noncomputable section
namespace ClassFieldTower.Cohomology.ProfiniteInteger
open ProCGroups
open ProCGroups.FreeProC
theorem isProfiniteCompletion :
    ProCGroups.Completion.IsProCCompletion
      ProCGroups.FiniteGroupClass.allFinite (Multiplicative ℤ)
        ClassFormation.ZHatMul integersMap
ClassFieldTower.Cohomology.ProfiniteInteger.isFreeProfinite

The multiplicative profinite integers are free on their canonical generator for the all-finite class.

Source context 6 commands

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

open Set
open scoped Topology
noncomputable section
namespace ClassFieldTower.Cohomology.ProfiniteInteger
open ProCGroups
open ProCGroups.FreeProC
theorem isFreeProfinite :
    IsFreeProCGroup
      (C := ProCGroups.FiniteGroupClass.allFinite)
      (Function.const PUnit generator)