Module

ProfiniteIntegerCore.lean

Nyll.GaloisCohomology.ProfiniteIntegers.ProfiniteIntegerCore
24 declarations indexed from sourceView source ↗

Profinite completion of the integers

We construct ℤ̂ as the topological closure of the diagonal image of ℤ inside the product of all positive cyclic quotients ZMod n. This realizes the canonical reduction maps and the dense integer embedding directly in Mathlib.

Declarations

ClassFormation.ZHatIndex
Source context 2 commands

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

namespace ClassFormation
open scoped Topology
structure ZHatIndex where
  modulus : ℕ
  positive : 0 < modulus
Source context 2 commands

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

namespace ClassFormation
open scoped Topology
instance (i : ZHatIndex) : NeZero i.modulus
ClassFormation.zHatIndex
Source context 2 commands

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

namespace ClassFormation
open scoped Topology
def zHatIndex (n : ℕ) (hn : 0 < n) : ZHatIndex
ClassFormation.ZHatAmbient
Source context 2 commands

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

namespace ClassFormation
open scoped Topology
abbrev ZHatAmbient : Type 0
ClassFormation.zHatDiagonal
Source context 2 commands

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

namespace ClassFormation
open scoped Topology
def zHatDiagonal : ℤ →+* ZHatAmbient where
  toFun a i := (a : ZMod i.modulus)
  map_zero' := by
    funext i
    exact Int.cast_zero
  map_one' := by
    funext i
    exact Int.cast_one
  map_add' a b := by
    funext i
    exact Int.cast_add a b
  map_mul' a b := by
    funext i
    exact Int.cast_mul a b
ClassFormation.zHatIntegerSubring
Source context 2 commands

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

namespace ClassFormation
open scoped Topology
def zHatIntegerSubring : Subring ZHatAmbient
ClassFormation.ZHatClosureModel
Source context 2 commands

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

namespace ClassFormation
open scoped Topology
abbrev ZHatClosureModel : Type 0
ClassFormation.ZHat

The profinite completion ℤ̂ = lim ℤ/nℤ over all positive moduli.

This is deliberately a def, rather than an abbrev: clients use the reduction maps and the representation equivalence below instead of depending on the closure subtype.

Source context 2 commands

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

namespace ClassFormation
open scoped Topology
def ZHat : Type 0

The closure model equips ZHat with its canonical commutative ring structure.

Source context 2 commands

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

namespace ClassFormation
open scoped Topology
instance : CommRing ZHat

The closure model equips ZHat with its subspace topology.

Source context 2 commands

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

namespace ClassFormation
open scoped Topology
instance : TopologicalSpace ZHat

Ring operations on ZHat are continuous for the closure-model topology.

Source context 2 commands

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

namespace ClassFormation
open scoped Topology
instance : IsTopologicalRing ZHat

The closure-model topology on ZHat is Hausdorff.

Source context 2 commands

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

namespace ClassFormation
open scoped Topology
instance : T2Space ZHat

The profinite integer model is totally disconnected.

Source context 2 commands

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

namespace ClassFormation
open scoped Topology
instance : TotallyDisconnectedSpace ZHat

The profinite integer closure model is compact.

Source context 2 commands

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

namespace ClassFormation
open scoped Topology
instance : CompactSpace ZHat
ClassFormation.zHatProfiniteAddGrp

ZHat as Mathlib's bundled profinite additive group.

Source context 2 commands

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

namespace ClassFormation
open scoped Topology
def zHatProfiniteAddGrp : ProfiniteAddGrp

The multiplicative presentation of ZHat remains totally disconnected.

Source context 2 commands

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

namespace ClassFormation
open scoped Topology
instance : TotallyDisconnectedSpace (Multiplicative ZHat)
ClassFormation.zHatMulProfiniteGrp

The multiplicative presentation of ZHat as Mathlib's bundled profinite group. Its multiplication is addition in ZHat.

Source context 2 commands

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

namespace ClassFormation
open scoped Topology
def zHatMulProfiniteGrp : ProfiniteGrp
ClassFormation.zHatReduction

The canonical continuous reduction ℤ̂ → ℤ/nℤ.

Source context 2 commands

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

namespace ClassFormation
open scoped Topology
def zHatReduction (n : ℕ) (hn : 0 < n) :
    ContinuousAddMonoidHom ZHat (ZMod n) where
  toFun x := (show ZHatClosureModel from x).1 (zHatIndex n hn)
  map_zero' := rfl
  map_add' _ _ := rfl
  continuous_toFun := by
    change Continuous
      (fun x : ZHatClosureModel => x.1 (zHatIndex n hn))
    exact (continuous_apply (zHatIndex n hn)).comp continuous_subtype_val
ClassFormation.zHatReduction_intCast

Reduction agrees with the ordinary integer cast. This is the public computation rule; it does not expose the closure model used to construct ZHat.

Source context 2 commands

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

namespace ClassFormation
open scoped Topology
theorem zHatReduction_intCast (n : ℕ) (hn : 0 < n) (a : ℤ) :
    zHatReduction n hn (a : ZHat) = (a : ZMod n)
ClassFormation.zHatReduction_one

Reduction modulo one sends every profinite integer to the unique residue class.

Source context 2 commands

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

namespace ClassFormation
open scoped Topology
theorem zHatReduction_one (n : ℕ) (hn : 0 < n) :
    zHatReduction n hn (1 : ZHat) = 1
ClassFormation.ZHat.ext

Profinite integers are determined by all positive-modulus reductions.

Source context 3 commands

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

namespace ClassFormation
open scoped Topology
namespace ZHat
theorem ext {x y : ZHat}
    (h : ∀ n (hn : 0 < n), zHatReduction n hn x = zHatReduction n hn y) :
    x = y
ClassFormation.zHatReduction_transition

Reduction maps commute with reduction along a divisibility relation.

Source context 2 commands

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

namespace ClassFormation
open scoped Topology
theorem zHatReduction_transition {m n : ℕ}
    (hm : 0 < m) (hn : 0 < n) (hmn : m ∣ n) (x : ZHat) :
    ZMod.castHom hmn (ZMod m) (zHatReduction n hn x) =
      zHatReduction m hm x
ClassFormation.denseRange_intCast_zHat

The ordinary integers have dense image in their profinite completion.

Source context 2 commands

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

namespace ClassFormation
open scoped Topology
theorem denseRange_intCast_zHat :
    DenseRange (Int.castRingHom ZHat)
ClassFormation.zHatOne_topologicallyGenerates

The element 1 topologically generates the additive profinite integers, written multiplicatively.

Source context 2 commands

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

namespace ClassFormation
open scoped Topology
theorem zHatOne_topologicallyGenerates :
    TopologicallyGenerates
      (G := Multiplicative ZHat)
      ({Multiplicative.ofAdd (1 : ZHat)} : Set (Multiplicative ZHat))