Module

Basic.lean

Nyll.ProCGroups.InverseSystems.Basic
91 declarations indexed from sourceView source ↗

Concrete inverse systems and their limits

This module defines preorder-indexed inverse systems of topological spaces and realizes their inverse limit as the subtype of compatible families. It proves the topological universal property and equips limits of group, additive-group, module, and ring systems with their coordinatewise algebraic structures and canonical projection homomorphisms.

Declarations

ProCGroups.InverseSystems.InverseSystem

An inverse system of topological spaces indexed by a preorder.

Source context 7 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
structure InverseSystem where
  /-- The topological space assigned to each index of the system. -/
  X : I → Type v
  /-- The chosen topology on every stage; this field supplies the stagewise topology instance. -/
  topologicalSpace : ∀ i, TopologicalSpace (X i)
  /-- The contravariant transition map from stage `j` to stage `i` whenever `i ≤ j`. -/
  map : ∀ {i j : I}, i ≤ j → X j → X i
  /-- Every transition map is continuous for the chosen stage topologies. -/
  continuous_map : ∀ {i j : I} (hij : i ≤ j), Continuous (map hij)
  /-- Transition along a reflexive comparison is the identity map. -/
  map_id : ∀ i, map (le_rfl : i ≤ i) = id
  /-- Transition maps compose according to transitivity of the indexing preorder. -/
  map_comp : ∀ {i j k : I} (hij : i ≤ j) (hjk : j ≤ k),
    map hij ∘ map hjk = map (hij.trans hjk)
ProCGroups.InverseSystems.InverseSystem.map_id_apply

The transition map along \(i \le i\) is the identity on points.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
theorem map_id_apply (i : I) (x : S.X i) :
    S.map (le_rfl : i ≤ i) x = x
ProCGroups.InverseSystems.InverseSystem.map_comp_apply

Following the transition from k to j by the transition from j to i agrees pointwise with the direct transition from k to i.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
theorem map_comp_apply {i j k : I} (hij : i ≤ j) (hjk : j ≤ k) (x : S.X k) :
    S.map hij (S.map hjk x) = S.map (hij.trans hjk) x
ProCGroups.InverseSystems.InverseSystem.Compatible

Compatibility of a family of points in the product.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
def Compatible (x : ∀ i, S.X i) : Prop
ProCGroups.InverseSystems.InverseSystem.CompatibleMaps

Compatibility of a family of maps into an inverse system.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
def CompatibleMaps {Y : Type w} (ψ : ∀ i, Y → S.X i) : Prop
ProCGroups.InverseSystems.InverseSystem.inverseLimit

The inverse limit realized as a subtype of the product.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
abbrev inverseLimit : Type _
ProCGroups.InverseSystems.InverseSystem.projection

The canonical projection from the inverse limit to the \(i\)-th component.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
def projection (i : I) : S.inverseLimit → S.X i
ProCGroups.InverseSystems.InverseSystem.IsLinearSystem

Linearity data for an inverse system and its concrete inverse-limit cone. This companion predicate packages the scalar-compatibility facts used by Hom-comparison formulations, without installing them as global typeclass instances.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
def IsLinearSystem {R : Type w} [Semiring R] (S : InverseSystem (I := I))
    [∀ i, AddCommMonoid (S.X i)] [∀ i, Module R (S.X i)]
    [AddCommMonoid S.inverseLimit] [Module R S.inverseLimit] : Prop
ProCGroups.InverseSystems.InverseSystem.IsLinearSystem.map_smul

Maps in a linear inverse system commute with scalar multiplication.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
namespace IsLinearSystem
theorem map_smul {R : Type w} [Semiring R] {S : InverseSystem (I := I)}
    [∀ i, AddCommMonoid (S.X i)] [∀ i, Module R (S.X i)]
    [AddCommMonoid S.inverseLimit] [Module R S.inverseLimit]
    (hS : IsLinearSystem (R := R) S) {i j : I} (hij : i ≤ j) (r : R) (x : S.X j) :
    S.map hij (r • x) = r • S.map hij x
ProCGroups.InverseSystems.InverseSystem.IsLinearSystem.projection_smul

The finite-stage projection commutes with scalar multiplication by coefficients.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
namespace IsLinearSystem
theorem projection_smul {R : Type w} [Semiring R] {S : InverseSystem (I := I)}
    [∀ i, AddCommMonoid (S.X i)] [∀ i, Module R (S.X i)]
    [AddCommMonoid S.inverseLimit] [Module R S.inverseLimit]
    (hS : IsLinearSystem (R := R) S) (i : I) (r : R) (x : S.inverseLimit) :
    S.projection i (r • x) = r • S.projection i x
ProCGroups.InverseSystems.InverseSystem.projection_apply

Applying a projection to an inverse-limit element returns its corresponding stage coordinate.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
theorem projection_apply (i : I) (x : S.inverseLimit) :
    S.projection i x = x.1 i
ProCGroups.InverseSystems.InverseSystem.projection_compatible

Projections from the inverse limit are compatible with the transition maps.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
theorem projection_compatible (x : S.inverseLimit) (i j : I) (hij : i ≤ j) :
    S.map hij (S.projection j x) = S.projection i x
ProCGroups.InverseSystems.InverseSystem.projection_compatibleMaps

The canonical projections form a compatible family of maps.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
theorem projection_compatibleMaps : S.CompatibleMaps S.projection
ProCGroups.InverseSystems.InverseSystem.continuous_projection

Each canonical projection from an inverse limit is continuous.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
theorem continuous_projection (i : I) : Continuous (S.projection i)
ProCGroups.InverseSystems.InverseSystem.ext

Two inverse-limit points are equal when all their projections are equal.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
theorem ext {x y : S.inverseLimit}
    (h : ∀ i, S.projection i x = S.projection i y) : x = y
ProCGroups.InverseSystems.InverseSystem.inverseLimitLift

The concrete map induced by a compatible family of maps into the subtype inverse limit.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
def inverseLimitLift {Y : Type w} (ψ : ∀ i, Y → S.X i)
    (hcompat : S.CompatibleMaps ψ) :
    Y → S.inverseLimit
ProCGroups.InverseSystems.InverseSystem.projection_comp_inverseLimitLift

Composing a canonical projection with the lift recovers the corresponding compatible map.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
theorem projection_comp_inverseLimitLift {Y : Type w} (ψ : ∀ i, Y → S.X i)
    (hcompat : S.CompatibleMaps ψ) (i : I) :
    S.projection i ∘ S.inverseLimitLift ψ hcompat = ψ i
ProCGroups.InverseSystems.InverseSystem.projection_inverseLimitLift_apply

Applying a projection to an inverse-limit lift returns the corresponding stage map value.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
theorem projection_inverseLimitLift_apply {Y : Type w} (ψ : ∀ i, Y → S.X i)
    (hcompat : S.CompatibleMaps ψ) (i : I) (y : Y) :
    S.projection i (S.inverseLimitLift ψ hcompat y) = ψ i y
ProCGroups.InverseSystems.InverseSystem.inverseLimitLift_unique

A map into the subtype inverse limit is uniquely determined by its projections.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
theorem inverseLimitLift_unique {Y : Type w} (ψ : ∀ i, Y → S.X i)
    (hcompat : S.CompatibleMaps ψ) {f : Y → S.inverseLimit}
    (hf : ∀ i, S.projection i ∘ f = ψ i) :
    f = S.inverseLimitLift ψ hcompat
ProCGroups.InverseSystems.InverseSystem.continuous_inverseLimitLift

A lift from a topological space is continuous when all of its component maps are continuous.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
theorem continuous_inverseLimitLift {Y : Type w} [TopologicalSpace Y] (ψ : ∀ i, Y → S.X i)
    (hψ : ∀ i, Continuous (ψ i))
    (hcompat : S.CompatibleMaps ψ) :
    Continuous (S.inverseLimitLift ψ hcompat)
ProCGroups.InverseSystems.InverseSystem.IsInverseLimit

The universal property of an inverse limit.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
structure IsInverseLimit {L : Type w} [TopologicalSpace L] (π : ∀ i, L → S.X i) : Prop where
  /-- Each leg of the proposed limiting cone is continuous. -/
  continuous_proj : ∀ i, Continuous (π i)
  /-- The cone legs commute with every transition map of the inverse system. -/
  compatible : S.CompatibleMaps π
  /--
  Every continuous compatible cone, including one in the designated larger source universe,
  factors through `L` by a unique continuous map.
  -/
  existsUnique_lift :
    ∀ {Y : Type max u v w} [TopologicalSpace Y] (ψ : ∀ i, Y → S.X i)
      (_hψ : ∀ i, Continuous (ψ i)) (_hcompat : S.CompatibleMaps ψ),
      ∃! f : Y → L, Continuous f ∧ ∀ i, π i ∘ f = ψ i
ProCGroups.InverseSystems.InverseSystem.IsInverseLimit.existsUnique_lift_sameUniverse

The large-universe universal property induces the usual universal property for sources in the carrier universe. The ULift is essential: universe levels cannot themselves be quantified inside a structure field.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
namespace IsInverseLimit
variable {S : InverseSystem.{u, v} (I := I)}
variable {L : Type w} [TopologicalSpace L] {π : ∀ i, L → S.X i}
theorem existsUnique_lift_sameUniverse (hπ : S.IsInverseLimit π)
    {Y : Type w} [TopologicalSpace Y]
    (ψ : ∀ i, Y → S.X i) (hψ : ∀ i, Continuous (ψ i))
    (hcompat : S.CompatibleMaps ψ) :
    ∃! f : Y → L, Continuous f ∧ ∀ i, π i ∘ f = ψ i
ProCGroups.InverseSystems.InverseSystem.IsInverseLimit.lift

A compatible family of maps to the stages lifts uniquely to a map into the inverse limit.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
namespace IsInverseLimit
variable {S : InverseSystem.{u, v} (I := I)}
variable {L : Type w} [TopologicalSpace L] {π : ∀ i, L → S.X i}
def lift (hπ : S.IsInverseLimit π)
    {Y : Type w} [TopologicalSpace Y]
    (ψ : ∀ i, Y → S.X i) (hψ : ∀ i, Continuous (ψ i)) (hcompat : S.CompatibleMaps ψ) :
    Y → L
ProCGroups.InverseSystems.InverseSystem.IsInverseLimit.lift_spec

The universal-property lift is continuous and has the prescribed projections.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
namespace IsInverseLimit
variable {S : InverseSystem.{u, v} (I := I)}
variable {L : Type w} [TopologicalSpace L] {π : ∀ i, L → S.X i}
theorem lift_spec (hπ : S.IsInverseLimit π)
    {Y : Type w} [TopologicalSpace Y]
    (ψ : ∀ i, Y → S.X i) (hψ : ∀ i, Continuous (ψ i)) (hcompat : S.CompatibleMaps ψ) :
    Continuous (hπ.lift ψ hψ hcompat) ∧
      ∀ i, π i ∘ hπ.lift ψ hψ hcompat = ψ i
ProCGroups.InverseSystems.InverseSystem.IsInverseLimit.continuous_lift

The lift into the inverse limit is continuous when all coordinate maps are continuous.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
namespace IsInverseLimit
variable {S : InverseSystem.{u, v} (I := I)}
variable {L : Type w} [TopologicalSpace L] {π : ∀ i, L → S.X i}
theorem continuous_lift (hπ : S.IsInverseLimit π)
    {Y : Type w} [TopologicalSpace Y]
    (ψ : ∀ i, Y → S.X i) (hψ : ∀ i, Continuous (ψ i)) (hcompat : S.CompatibleMaps ψ) :
    Continuous (hπ.lift ψ hψ hcompat)
ProCGroups.InverseSystems.InverseSystem.IsInverseLimit.fac

The universal-property lift has the prescribed i-th projection.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
namespace IsInverseLimit
variable {S : InverseSystem.{u, v} (I := I)}
variable {L : Type w} [TopologicalSpace L] {π : ∀ i, L → S.X i}
theorem fac (hπ : S.IsInverseLimit π)
    {Y : Type w} [TopologicalSpace Y]
    (ψ : ∀ i, Y → S.X i) (hψ : ∀ i, Continuous (ψ i)) (hcompat : S.CompatibleMaps ψ)
    (i : I) :
    π i ∘ hπ.lift ψ hψ hcompat = ψ i
ProCGroups.InverseSystems.InverseSystem.IsInverseLimit.uniq

The universal-property lift is the unique continuous map with the prescribed projections.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
namespace IsInverseLimit
variable {S : InverseSystem.{u, v} (I := I)}
variable {L : Type w} [TopologicalSpace L] {π : ∀ i, L → S.X i}
theorem uniq (hπ : S.IsInverseLimit π)
    {Y : Type w} [TopologicalSpace Y]
    (ψ : ∀ i, Y → S.X i) (hψ : ∀ i, Continuous (ψ i)) (hcompat : S.CompatibleMaps ψ)
    {f : Y → L} (hf : Continuous f) (hfac : ∀ i, π i ∘ f = ψ i) :
    f = hπ.lift ψ hψ hcompat
ProCGroups.InverseSystems.InverseSystem.IsInverseLimit.lift_self

Lifting the projection family of an inverse limit gives the identity map.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
namespace IsInverseLimit
variable {S : InverseSystem.{u, v} (I := I)}
variable {L : Type w} [TopologicalSpace L] {π : ∀ i, L → S.X i}
theorem lift_self (hπ : S.IsInverseLimit π) :
    hπ.lift (Y := L) π hπ.continuous_proj hπ.compatible = id
ProCGroups.InverseSystems.InverseSystem.IsInverseLimit.existsUnique_lift_from_inverseLimit

The large-universe universal property also supplies the comparison map from the concrete compatible-family model; this is a theorem, not duplicate structure data.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
namespace IsInverseLimit
variable {S : InverseSystem.{u, v} (I := I)}
variable {L : Type w} [TopologicalSpace L] {π : ∀ i, L → S.X i}
theorem existsUnique_lift_from_inverseLimit (hπ : S.IsInverseLimit π) :
    ∃! f : S.inverseLimit → L,
      Continuous f ∧ ∀ i, π i ∘ f = S.projection i
ProCGroups.InverseSystems.InverseSystem.IsInverseLimit.liftFromInverseLimit

The lift from the concrete compatible-family inverse limit.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
namespace IsInverseLimit
variable {S : InverseSystem.{u, v} (I := I)}
variable {L : Type w} [TopologicalSpace L] {π : ∀ i, L → S.X i}
def liftFromInverseLimit (hπ : S.IsInverseLimit π) :
    S.inverseLimit → L
ProCGroups.InverseSystems.InverseSystem.IsInverseLimit.liftFromInverseLimit_spec

The concrete inverse-limit lift is continuous and has the prescribed projections.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
namespace IsInverseLimit
variable {S : InverseSystem.{u, v} (I := I)}
variable {L : Type w} [TopologicalSpace L] {π : ∀ i, L → S.X i}
theorem liftFromInverseLimit_spec (hπ : S.IsInverseLimit π) :
    Continuous hπ.liftFromInverseLimit ∧
      ∀ i, π i ∘ hπ.liftFromInverseLimit = S.projection i
ProCGroups.InverseSystems.InverseSystem.IsInverseLimit.homeomorphToInverseLimit

Every abstract inverse-limit cone is canonically homeomorphic to the concrete compatible-family model. Factoring comparison through this model makes the construction independent of the carrier's universe.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
namespace IsInverseLimit
variable {S : InverseSystem.{u, v} (I := I)}
variable {L : Type w} [TopologicalSpace L] {π : ∀ i, L → S.X i}
def homeomorphToInverseLimit (hπ : S.IsInverseLimit π) :
    L ≃ₜ S.inverseLimit where
  toFun := S.inverseLimitLift π hπ.compatible
  invFun := hπ.liftFromInverseLimit
  left_inv := by
    intro x
    let f : L → S.inverseLimit := S.inverseLimitLift π hπ.compatible
    let g : S.inverseLimit → L := hπ.liftFromInverseLimit
    have hgf : g ∘ f = id := by
      exact (hπ.existsUnique_lift_sameUniverse π hπ.continuous_proj hπ.compatible).unique
        (by
          refine ⟨hπ.liftFromInverseLimit_spec.1.comp
            (S.continuous_inverseLimitLift π hπ.continuous_proj hπ.compatible), ?_⟩
          intro i
          calc
            π i ∘ (g ∘ f) = (π i ∘ g) ∘ f := by rfl
            _ = S.projection i ∘ f := by
              rw [hπ.liftFromInverseLimit_spec.2 i]
            _ = π i := S.projection_comp_inverseLimitLift π hπ.compatible i)
        ⟨continuous_id, fun _ => rfl⟩
    exact congrFun hgf x
  right_inv := by
    intro x
    apply S.ext
    intro i
    rw [S.projection_inverseLimitLift_apply]
    exact congrFun
      (hπ.liftFromInverseLimit_spec.2 i) x
  continuous_toFun :=
    S.continuous_inverseLimitLift π hπ.continuous_proj hπ.compatible
  continuous_invFun := hπ.liftFromInverseLimit_spec.1
ProCGroups.InverseSystems.InverseSystem.IsInverseLimit.homeomorph

Inverse limits are unique up to unique homeomorphism.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
namespace IsInverseLimit
variable {S : InverseSystem.{u, v} (I := I)}
variable {L : Type w} [TopologicalSpace L] {π : ∀ i, L → S.X i}
def homeomorph {L' : Type z} [TopologicalSpace L'] {π' : ∀ i, L' → S.X i}
    (hπ : S.IsInverseLimit π) (hπ' : S.IsInverseLimit π') :
    L ≃ₜ L'
ProCGroups.InverseSystems.InverseSystem.isInverseLimit_projection

The subtype model carries the inverse-limit universal property.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
theorem isInverseLimit_projection : S.IsInverseLimit S.projection
ProCGroups.InverseSystems.InverseSystem.isClosed_setOf_compatible

The inverse limit is a closed subspace of the product.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
theorem isClosed_setOf_compatible [∀ i, T2Space (S.X i)] :
    IsClosed {x : ∀ i, S.X i | S.Compatible x}
ProCGroups.InverseSystems.InverseSystem.instCompactSpaceInverseLimit

The constructed object carries the compact space structure inherited from its profinite construction.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
instance instCompactSpaceInverseLimit [∀ i, CompactSpace (S.X i)] [∀ i, T2Space (S.X i)] :
    CompactSpace S.inverseLimit
ProCGroups.InverseSystems.InverseSystem.t2Space_inverseLimit

Inverse limits of Hausdorff spaces are Hausdorff.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
theorem t2Space_inverseLimit [∀ i, T2Space (S.X i)] :
    T2Space S.inverseLimit
ProCGroups.InverseSystems.InverseSystem.totallyDisconnectedSpace_inverseLimit

Inverse limits of totally disconnected spaces are totally disconnected.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
theorem totallyDisconnectedSpace_inverseLimit [∀ i, TotallyDisconnectedSpace (S.X i)] :
    TotallyDisconnectedSpace S.inverseLimit
ProCGroups.InverseSystems.InverseSystem.isQuotientMap_projection_of_surjective

A surjective projection from a compact inverse limit to a Hausdorff stage is a quotient map.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
namespace InverseSystem
variable (S : InverseSystem.{u, v} (I := I))
theorem isQuotientMap_projection_of_surjective [∀ i, CompactSpace (S.X i)]
    [∀ i, T2Space (S.X i)] {i : I} (hsurj : Function.Surjective (S.projection i)) :
    Topology.IsQuotientMap (S.projection i)
ProCGroups.InverseSystems.IsGroupSystem

A group-valued inverse system whose transition maps are group homomorphisms.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section GroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
class IsGroupSystem (S : InverseSystem (I := I)) [∀ i, Group (S.X i)] : Prop where
  /-- Transition maps preserve the identity element at every pair of comparable stages. -/
  map_one : ∀ {i j : I} (hij : i ≤ j), S.map hij 1 = 1
  /-- Transition maps preserve products at every pair of comparable stages. -/
  map_mul : ∀ {i j : I} (hij : i ≤ j) (x y : S.X j),
    S.map hij (x * y) = S.map hij x * S.map hij y
  /-- Transition maps preserve inverses at every pair of comparable stages. -/
  map_inv : ∀ {i j : I} (hij : i ≤ j) (x : S.X j),
    S.map hij x⁻¹ = (S.map hij x)⁻¹
ProCGroups.InverseSystems.instOneInverseLimit

The unit of the inverse limit is the compatible family of units at all stages.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section GroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Group (S.X i)] [IsGroupSystem S]
instance instOneInverseLimit : One S.inverseLimit where
  one := ⟨fun i => 1, by
    intro i j hij
    simpa using IsGroupSystem.map_one (S := S) hij⟩
ProCGroups.InverseSystems.instMulInverseLimit

Multiplication on the inverse limit is defined coordinatewise through the stage multiplications.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section GroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Group (S.X i)] [IsGroupSystem S]
instance instMulInverseLimit : Mul S.inverseLimit where
  mul x y := ⟨fun i => S.projection i x * S.projection i y, by
    intro i j hij
    calc
      S.map hij (S.projection j x * S.projection j y)
          = S.map hij (S.projection j x) * S.map hij (S.projection j y) := by
              simpa using IsGroupSystem.map_mul (S := S) hij (S.projection j x)
                (S.projection j y)
      _ = S.projection i x * S.projection i y := by
          rw [S.projection_compatible x i j hij, S.projection_compatible y i j hij]⟩
ProCGroups.InverseSystems.instInvInverseLimit

The inverse-limit object carries the structure induced coordinatewise from the finite stages.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section GroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Group (S.X i)] [IsGroupSystem S]
instance instInvInverseLimit : Inv S.inverseLimit where
  inv x := ⟨fun i => (S.projection i x)⁻¹, by
    intro i j hij
    calc
      S.map hij ((S.projection j x)⁻¹) = (S.map hij (S.projection j x))⁻¹ := by
        simpa using IsGroupSystem.map_inv (S := S) hij (S.projection j x)
      _ = (S.projection i x)⁻¹ := by rw [S.projection_compatible x i j hij]⟩
ProCGroups.InverseSystems.projection_one

The projection of the identity element is the identity at each stage.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section GroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Group (S.X i)] [IsGroupSystem S]
theorem projection_one (i : I) : S.projection i (1 : S.inverseLimit) = 1
ProCGroups.InverseSystems.projection_mul

Projection commutes with multiplication in a group-valued inverse system.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section GroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Group (S.X i)] [IsGroupSystem S]
theorem projection_mul (i : I) (x y : S.inverseLimit) :
    S.projection i (x * y) = S.projection i x * S.projection i y
ProCGroups.InverseSystems.projection_inv

Projection commutes with inversion in a group-valued inverse system.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section GroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Group (S.X i)] [IsGroupSystem S]
theorem projection_inv (i : I) (x : S.inverseLimit) :
    S.projection i x⁻¹ = (S.projection i x)⁻¹
ProCGroups.InverseSystems.instGroupInverseLimit

The constructed carrier inherits its group structure from the coordinatewise group structure of the construction.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section GroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Group (S.X i)] [IsGroupSystem S]
instance instGroupInverseLimit : Group S.inverseLimit where
  one := 1
  mul := (· * ·)
  inv := Inv.inv
  mul_assoc x y z := by
    apply S.ext
    intro i
    change ((x.1 i * y.1 i) * z.1 i) = (x.1 i * (y.1 i * z.1 i))
    simp only [mul_assoc]
  one_mul x := by
    apply S.ext
    intro i
    change 1 * x.1 i = x.1 i
    simp only [one_mul]
  mul_one x := by
    apply S.ext
    intro i
    change x.1 i * 1 = x.1 i
    simp only [mul_one]
  inv_mul_cancel x := by
    apply S.ext
    intro i
    change (x.1 i)⁻¹ * x.1 i = 1
    simp only [inv_mul_cancel]
ProCGroups.InverseSystems.instIsTopologicalGroupInverseLimit

The object is a topological group with the induced group operations and topology.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section GroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Group (S.X i)] [IsGroupSystem S]
instance instIsTopologicalGroupInverseLimit [∀ i, IsTopologicalGroup (S.X i)] :
    IsTopologicalGroup S.inverseLimit where
  continuous_mul := by
    exact Continuous.subtype_mk
      (continuous_pi fun i =>
        ((S.continuous_projection i).comp continuous_fst).mul
          ((S.continuous_projection i).comp continuous_snd))
      (fun xy => by
        intro i j hij
        change S.map hij (S.projection j xy.1 * S.projection j xy.2) =
          S.projection i xy.1 * S.projection i xy.2
        rw [IsGroupSystem.map_mul (S := S) hij,
          S.projection_compatible xy.1 i j hij, S.projection_compatible xy.2 i j hij])
  continuous_inv := by
    exact Continuous.subtype_mk
      (continuous_pi fun i => continuous_inv.comp (S.continuous_projection i))
      (fun x => by
        intro i j hij
        change S.map hij ((S.projection j x)⁻¹) = (S.projection i x)⁻¹
        rw [IsGroupSystem.map_inv (S := S) hij, S.projection_compatible x i j hij])
ProCGroups.InverseSystems.projectionHom

The canonical projections from a group-valued inverse limit are homomorphisms.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section GroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Group (S.X i)] [IsGroupSystem S]
def projectionHom (i : I) : S.inverseLimit →* S.X i where
  toFun := S.projection i
  map_one' := projection_one (S := S) i
  map_mul' := by
    intro x y
    exact projection_mul (S := S) i x y
ProCGroups.InverseSystems.projectionHom_apply

Applying a homomorphic projection to an inverse-limit element returns its corresponding stage coordinate.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section GroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Group (S.X i)] [IsGroupSystem S]
theorem projectionHom_apply (i : I) (x : S.inverseLimit) :
    projectionHom (S := S) i x = S.projection i x
ProCGroups.InverseSystems.IsAddGroupSystem

An additive-group-valued inverse system whose transition maps are additive homomorphisms.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section AddGroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
class IsAddGroupSystem (S : InverseSystem (I := I)) [∀ i, AddCommGroup (S.X i)] : Prop where
  /-- Transition maps preserve zero at every pair of comparable stages. -/
  map_zero : ∀ {i j : I} (hij : i ≤ j), S.map hij 0 = 0
  /-- Transition maps preserve addition at every pair of comparable stages. -/
  map_add : ∀ {i j : I} (hij : i ≤ j) (x y : S.X j),
    S.map hij (x + y) = S.map hij x + S.map hij y
  /-- Transition maps preserve additive inverses at every pair of comparable stages. -/
  map_neg : ∀ {i j : I} (hij : i ≤ j) (x : S.X j),
    S.map hij (-x) = -S.map hij x
ProCGroups.InverseSystems.IsModuleSystem

A module-valued inverse system whose transition maps are linear over a fixed semiring.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section AddGroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, AddCommGroup (S.X i)] [IsAddGroupSystem S]
class IsModuleSystem (R : Type w) [Semiring R] (S : InverseSystem (I := I))
    [∀ i, AddCommGroup (S.X i)] [∀ i, Module R (S.X i)] : Prop where
  /-- Transition maps commute with the fixed `R`-scalar action on all stages. -/
  map_smul : ∀ {i j : I} (hij : i ≤ j) (r : R) (x : S.X j),
    S.map hij (r • x) = r • S.map hij x
ProCGroups.InverseSystems.instZeroAddInverseLimit

The zero element of the inverse limit is the compatible family of zero elements at all stages.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section AddGroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, AddCommGroup (S.X i)] [IsAddGroupSystem S]
instance instZeroAddInverseLimit : Zero S.inverseLimit where
  zero := ⟨fun i => 0, by
    intro i j hij
    simpa using IsAddGroupSystem.map_zero (S := S) hij⟩
ProCGroups.InverseSystems.instAddAddInverseLimit

Addition in the additive inverse limit is defined coordinatewise.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section AddGroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, AddCommGroup (S.X i)] [IsAddGroupSystem S]
instance instAddAddInverseLimit : Add S.inverseLimit where
  add x y := ⟨fun i => S.projection i x + S.projection i y, by
    intro i j hij
    calc
      S.map hij (S.projection j x + S.projection j y)
          = S.map hij (S.projection j x) + S.map hij (S.projection j y) := by
              simpa using IsAddGroupSystem.map_add (S := S) hij (S.projection j x)
                (S.projection j y)
      _ = S.projection i x + S.projection i y := by
          rw [S.projection_compatible x i j hij, S.projection_compatible y i j hij]⟩
ProCGroups.InverseSystems.instNegAddInverseLimit

Negation on an additive inverse limit is defined coordinatewise through the stage negations.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section AddGroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, AddCommGroup (S.X i)] [IsAddGroupSystem S]
instance instNegAddInverseLimit : Neg S.inverseLimit where
  neg x := ⟨fun i => -S.projection i x, by
    intro i j hij
    calc
      S.map hij (-S.projection j x) = -S.map hij (S.projection j x) := by
        simpa using IsAddGroupSystem.map_neg (S := S) hij (S.projection j x)
      _ = -S.projection i x := by rw [S.projection_compatible x i j hij]⟩
ProCGroups.InverseSystems.instSubAddInverseLimit

Subtraction in the inverse limit is defined coordinatewise through the stage subtractions.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section AddGroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, AddCommGroup (S.X i)] [IsAddGroupSystem S]
instance instSubAddInverseLimit : Sub S.inverseLimit where
  sub x y := ⟨fun i => S.projection i x - S.projection i y, by
    intro i j hij
    change S.map hij (S.projection j x - S.projection j y) =
      S.projection i x - S.projection i y
    rw [sub_eq_add_neg, IsAddGroupSystem.map_add, IsAddGroupSystem.map_neg,
      S.projection_compatible x i j hij, S.projection_compatible y i j hij, sub_eq_add_neg]⟩
ProCGroups.InverseSystems.instSMulNatAddInverseLimit

An additive inverse limit carries natural-number scalar multiplication coordinatewise.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section AddGroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, AddCommGroup (S.X i)] [IsAddGroupSystem S]
instance instSMulNatAddInverseLimit : SMul ℕ S.inverseLimit where
  smul n x := ⟨fun i => n • S.projection i x, by
    intro i j hij
    change S.map hij (n • S.projection j x) = n • S.projection i x
    induction n with
    | zero =>
        simp only [InverseSystem.projection_apply, zero_nsmul, IsAddGroupSystem.map_zero]
    | succ n ihn =>
        rw [succ_nsmul, succ_nsmul]
        calc
          S.map hij (n • S.projection j x + S.projection j x)
              = S.map hij (n • S.projection j x) + S.map hij (S.projection j x) := by
                  exact IsAddGroupSystem.map_add (S := S) hij (n • S.projection j x)
                    (S.projection j x)
          _ = n • S.projection i x + S.projection i x := by
              rw [ihn, S.projection_compatible x i j hij]⟩
ProCGroups.InverseSystems.instSMulIntAddInverseLimit

An additive inverse limit carries integer scalar multiplication coordinatewise.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section AddGroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, AddCommGroup (S.X i)] [IsAddGroupSystem S]
instance instSMulIntAddInverseLimit : SMul ℤ S.inverseLimit where
  smul n x := ⟨fun i => n • S.projection i x, by
    intro i j hij
    change S.map hij (n • S.projection j x) = n • S.projection i x
    let f : S.X j →+ S.X i :=
      { toFun := S.map hij
        map_zero' := IsAddGroupSystem.map_zero (S := S) hij
        map_add' := IsAddGroupSystem.map_add (S := S) hij }
    calc
      S.map hij (n • S.projection j x) = f (n • S.projection j x) := rfl
      _ = n • f (S.projection j x) := f.map_zsmul n (S.projection j x)
      _ = n • S.projection i x := by
        change n • S.map hij (S.projection j x) = n • S.projection i x
        rw [S.projection_compatible x i j hij]⟩
ProCGroups.InverseSystems.projection_zero

The projection of zero is zero at each stage.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section AddGroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, AddCommGroup (S.X i)] [IsAddGroupSystem S]
theorem projection_zero (i : I) : S.projection i (0 : S.inverseLimit) = 0
ProCGroups.InverseSystems.projection_add

Projection commutes with addition in an additive inverse system.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section AddGroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, AddCommGroup (S.X i)] [IsAddGroupSystem S]
theorem projection_add (i : I) (x y : S.inverseLimit) :
    S.projection i (x + y) = S.projection i x + S.projection i y
ProCGroups.InverseSystems.projection_neg

Projection commutes with negation in an additive inverse system.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section AddGroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, AddCommGroup (S.X i)] [IsAddGroupSystem S]
theorem projection_neg (i : I) (x : S.inverseLimit) :
    S.projection i (-x) = -S.projection i x
ProCGroups.InverseSystems.projection_sub

Projection commutes with subtraction in an additive inverse system.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section AddGroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, AddCommGroup (S.X i)] [IsAddGroupSystem S]
theorem projection_sub (i : I) (x y : S.inverseLimit) :
    S.projection i (x - y) = S.projection i x - S.projection i y
ProCGroups.InverseSystems.instAddCommGroupAddInverseLimit

The additive-group structure on an additive inverse limit; kept named rather than global to avoid a parent-instance diamond with ring inverse limits.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section AddGroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, AddCommGroup (S.X i)] [IsAddGroupSystem S]
def instAddCommGroupAddInverseLimit : AddCommGroup S.inverseLimit
ProCGroups.InverseSystems.instSMulInverseLimitOfIsModuleSystem

An inverse-limit module carries scalar multiplication by applying the scalar action at every stage.

Source context 15 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section AddGroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, AddCommGroup (S.X i)] [IsAddGroupSystem S]
attribute [local instance] instAddCommGroupAddInverseLimit
section ModuleSystems
variable {R : Type w} [Semiring R]
variable [∀ i, Module R (S.X i)] [IsModuleSystem (I := I) R S]
instance instSMulInverseLimitOfIsModuleSystem : SMul R S.inverseLimit where
  smul r x := ⟨fun i => r • S.projection i x, by
    intro i j hij
    change S.map hij (r • S.projection j x) = r • S.projection i x
    rw [IsModuleSystem.map_smul (S := S) hij, S.projection_compatible x i j hij]⟩
ProCGroups.InverseSystems.projection_smul_of_isModuleSystem

Projection commutes with scalar multiplication in a module-valued inverse system.

Source context 16 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section AddGroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, AddCommGroup (S.X i)] [IsAddGroupSystem S]
attribute [local instance] instAddCommGroupAddInverseLimit
section ModuleSystems
variable {R : Type w} [Semiring R]
variable [∀ i, Module R (S.X i)] [IsModuleSystem (I := I) R S]
omit [IsAddGroupSystem S] in
theorem projection_smul_of_isModuleSystem (i : I) (r : R) (x : S.inverseLimit) :
    S.projection i (r • x) = r • S.projection i x
ProCGroups.InverseSystems.instModuleInverseLimitOfIsModuleSystem

The inverse limit is a module when all stages form a compatible module system.

Source context 15 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section AddGroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, AddCommGroup (S.X i)] [IsAddGroupSystem S]
attribute [local instance] instAddCommGroupAddInverseLimit
section ModuleSystems
variable {R : Type w} [Semiring R]
variable [∀ i, Module R (S.X i)] [IsModuleSystem (I := I) R S]
instance instModuleInverseLimitOfIsModuleSystem : Module R S.inverseLimit
ProCGroups.InverseSystems.instContinuousSMulInverseLimitOfIsModuleSystem

Scalar multiplication is continuous for the relevant inverse-limit topology.

Source context 15 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section AddGroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, AddCommGroup (S.X i)] [IsAddGroupSystem S]
attribute [local instance] instAddCommGroupAddInverseLimit
section ModuleSystems
variable {R : Type w} [Semiring R]
variable [∀ i, Module R (S.X i)] [IsModuleSystem (I := I) R S]
instance instContinuousSMulInverseLimitOfIsModuleSystem
    [TopologicalSpace R] [∀ i, ContinuousSMul R (S.X i)] :
    ContinuousSMul R S.inverseLimit where
  continuous_smul := by
    exact Continuous.subtype_mk
      (continuous_pi fun i =>
        continuous_fst.smul ((S.continuous_projection i).comp continuous_snd))
      (fun p => by
        intro i j hij
        change S.map hij (p.1 • S.projection j p.2) = p.1 • S.projection i p.2
        rw [IsModuleSystem.map_smul (S := S) hij, S.projection_compatible p.2 i j hij])
ProCGroups.InverseSystems.instIsTopologicalAddGroupAddInverseLimit

The additive inverse-limit object has addition defined coordinatewise on compatible families.

Source context 12 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section AddGroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, AddCommGroup (S.X i)] [IsAddGroupSystem S]
attribute [local instance] instAddCommGroupAddInverseLimit
instance instIsTopologicalAddGroupAddInverseLimit [∀ i, IsTopologicalAddGroup (S.X i)] :
    IsTopologicalAddGroup S.inverseLimit where
  continuous_add := by
    exact Continuous.subtype_mk
      (continuous_pi fun i =>
        ((S.continuous_projection i).comp continuous_fst).add
          ((S.continuous_projection i).comp continuous_snd))
      (fun xy => by
        intro i j hij
        change S.map hij (S.projection j xy.1 + S.projection j xy.2) =
          S.projection i xy.1 + S.projection i xy.2
        rw [IsAddGroupSystem.map_add (S := S) hij,
          S.projection_compatible xy.1 i j hij, S.projection_compatible xy.2 i j hij])
  continuous_neg := by
    exact Continuous.subtype_mk
      (continuous_pi fun i => continuous_neg.comp (S.continuous_projection i))
      (fun x => by
        intro i j hij
        change S.map hij (-S.projection j x) = -S.projection i x
        rw [IsAddGroupSystem.map_neg (S := S) hij, S.projection_compatible x i j hij])
ProCGroups.InverseSystems.projectionAddHom

The canonical projections from an additive inverse limit are additive homomorphisms.

Source context 12 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section AddGroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, AddCommGroup (S.X i)] [IsAddGroupSystem S]
attribute [local instance] instAddCommGroupAddInverseLimit
def projectionAddHom (i : I) : S.inverseLimit →+ S.X i where
  toFun := S.projection i
  map_zero' := projection_zero (S := S) i
  map_add' := by
    intro x y
    exact projection_add (S := S) i x y
ProCGroups.InverseSystems.projectionAddHom_apply

Applying an additive projection to an inverse-limit element returns its corresponding stage coordinate.

Source context 12 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section AddGroupSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, AddCommGroup (S.X i)] [IsAddGroupSystem S]
attribute [local instance] instAddCommGroupAddInverseLimit
theorem projectionAddHom_apply (i : I) (x : S.inverseLimit) :
    projectionAddHom (S := S) i x = S.projection i x
ProCGroups.InverseSystems.IsRingSystem

A ring-valued inverse system whose transition maps are ring homomorphisms.

Source context 10 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section RingSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
class IsRingSystem (S : InverseSystem (I := I)) [∀ i, Ring (S.X i)] : Prop where
  /-- Transition maps preserve the additive identity. -/
  map_zero : ∀ {i j : I} (hij : i ≤ j), S.map hij 0 = 0
  /-- Transition maps preserve the multiplicative identity. -/
  map_one : ∀ {i j : I} (hij : i ≤ j), S.map hij 1 = 1
  /-- Transition maps preserve addition. -/
  map_add : ∀ {i j : I} (hij : i ≤ j) (x y : S.X j),
    S.map hij (x + y) = S.map hij x + S.map hij y
  /-- Transition maps preserve multiplication. -/
  map_mul : ∀ {i j : I} (hij : i ≤ j) (x y : S.X j),
    S.map hij (x * y) = S.map hij x * S.map hij y
ProCGroups.InverseSystems.mapRingHom

A transition map in a ring-valued inverse system is bundled as a ring homomorphism.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section RingSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Ring (S.X i)] [IsRingSystem S]
def mapRingHom {i j : I} (hij : i ≤ j) : S.X j →+* S.X i where
  toFun := S.map hij
  map_zero' := IsRingSystem.map_zero (S := S) hij
  map_one' := IsRingSystem.map_one (S := S) hij
  map_add' := IsRingSystem.map_add (S := S) hij
  map_mul' := IsRingSystem.map_mul (S := S) hij
ProCGroups.InverseSystems.mapRingHom_apply

The bundled ring homomorphism has the same underlying function as the coordinatewise construction.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section RingSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Ring (S.X i)] [IsRingSystem S]
theorem mapRingHom_apply {i j : I} (hij : i ≤ j) (x : S.X j) :
    mapRingHom (S := S) hij x = S.map hij x
ProCGroups.InverseSystems.isAddGroupSystemOfIsRingSystem

The additive system underlying a ring system. This remains explicit so that importing ring systems does not install a second global path to the additive inverse-limit instances.

Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section RingSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Ring (S.X i)] [IsRingSystem S]
theorem isAddGroupSystemOfIsRingSystem : IsAddGroupSystem S where
  map_zero := IsRingSystem.map_zero (S := S)
  map_add := IsRingSystem.map_add (S := S)
  map_neg := by
    intro i j hij x
    exact (mapRingHom (S := S) hij).map_neg x
Source context 11 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section RingSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Ring (S.X i)] [IsRingSystem S]
instance : IsAddGroupSystem S
ProCGroups.InverseSystems.instMulRingInverseLimit

Ring multiplication on the inverse limit is defined coordinatewise through the stage ring multiplications.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section RingSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Ring (S.X i)] [IsRingSystem S]
local instance : IsAddGroupSystem S := isAddGroupSystemOfIsRingSystem S
attribute [local instance] instAddCommGroupAddInverseLimit
instance instMulRingInverseLimit : Mul S.inverseLimit where
  mul x y := ⟨fun i => S.projection i x * S.projection i y, by
    intro i j hij
    calc
      S.map hij (S.projection j x * S.projection j y)
          = S.map hij (S.projection j x) * S.map hij (S.projection j y) := by
              exact IsRingSystem.map_mul (S := S) hij (S.projection j x)
                (S.projection j y)
      _ = S.projection i x * S.projection i y := by
          rw [S.projection_compatible x i j hij, S.projection_compatible y i j hij]⟩
ProCGroups.InverseSystems.instOneRingInverseLimit

The unit of the ring inverse limit is the compatible family of units at all stages.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section RingSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Ring (S.X i)] [IsRingSystem S]
local instance : IsAddGroupSystem S := isAddGroupSystemOfIsRingSystem S
attribute [local instance] instAddCommGroupAddInverseLimit
instance instOneRingInverseLimit : One S.inverseLimit where
  one := ⟨fun i => 1, by
    intro i j hij
    exact IsRingSystem.map_one (S := S) hij⟩
ProCGroups.InverseSystems.instPowNatRingInverseLimit

Powers in the inverse-limit ring are computed at every stage coordinate.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section RingSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Ring (S.X i)] [IsRingSystem S]
local instance : IsAddGroupSystem S := isAddGroupSystemOfIsRingSystem S
attribute [local instance] instAddCommGroupAddInverseLimit
instance instPowNatRingInverseLimit : Pow S.inverseLimit ℕ where
  pow x n := ⟨fun i => S.projection i x ^ n, by
    intro i j hij
    change S.map hij (S.projection j x ^ n) = S.projection i x ^ n
    rw [← mapRingHom_apply (S := S) hij, map_pow, mapRingHom_apply,
      S.projection_compatible x i j hij]⟩
ProCGroups.InverseSystems.instNatCastRingInverseLimit

Natural number casts in a ring inverse limit are computed coordinatewise from finite-stage natural number casts.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section RingSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Ring (S.X i)] [IsRingSystem S]
local instance : IsAddGroupSystem S := isAddGroupSystemOfIsRingSystem S
attribute [local instance] instAddCommGroupAddInverseLimit
instance instNatCastRingInverseLimit : NatCast S.inverseLimit where
  natCast n := ⟨fun _ => n, by
    intro i j hij
    change S.map hij (Nat.cast n) = Nat.cast n
    exact map_natCast (mapRingHom (S := S) hij) n⟩
ProCGroups.InverseSystems.instIntCastRingInverseLimit

Integer casts in a ring inverse limit are computed coordinatewise from finite-stage integer casts.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section RingSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Ring (S.X i)] [IsRingSystem S]
local instance : IsAddGroupSystem S := isAddGroupSystemOfIsRingSystem S
attribute [local instance] instAddCommGroupAddInverseLimit
instance instIntCastRingInverseLimit : IntCast S.inverseLimit where
  intCast n := ⟨fun _ => n, by
    intro i j hij
    change S.map hij (Int.cast n) = Int.cast n
    exact map_intCast (mapRingHom (S := S) hij) n⟩
ProCGroups.InverseSystems.projection_ring_one

The inverse-limit projection preserves \(1\).

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section RingSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Ring (S.X i)] [IsRingSystem S]
local instance : IsAddGroupSystem S := isAddGroupSystemOfIsRingSystem S
attribute [local instance] instAddCommGroupAddInverseLimit
theorem projection_ring_one (i : I) : S.projection i (1 : S.inverseLimit) = 1
ProCGroups.InverseSystems.projection_ring_mul

The inverse-limit projection preserves multiplication.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section RingSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Ring (S.X i)] [IsRingSystem S]
local instance : IsAddGroupSystem S := isAddGroupSystemOfIsRingSystem S
attribute [local instance] instAddCommGroupAddInverseLimit
theorem projection_ring_mul (i : I) (x y : S.inverseLimit) :
    S.projection i (x * y) = S.projection i x * S.projection i y
ProCGroups.InverseSystems.projection_ring_pow

The inverse-limit projection preserves powers.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section RingSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Ring (S.X i)] [IsRingSystem S]
local instance : IsAddGroupSystem S := isAddGroupSystemOfIsRingSystem S
attribute [local instance] instAddCommGroupAddInverseLimit
theorem projection_ring_pow (i : I) (x : S.inverseLimit) (n : ℕ) :
    S.projection i (x ^ n) = S.projection i x ^ n
ProCGroups.InverseSystems.projection_ring_natCast

The inverse-limit projection preserves natural number casts.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section RingSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Ring (S.X i)] [IsRingSystem S]
local instance : IsAddGroupSystem S := isAddGroupSystemOfIsRingSystem S
attribute [local instance] instAddCommGroupAddInverseLimit
theorem projection_ring_natCast (i : I) (n : ℕ) :
    S.projection i (Nat.cast n : S.inverseLimit) = Nat.cast n
ProCGroups.InverseSystems.projection_ring_intCast

The inverse-limit projection preserves integer casts.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section RingSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Ring (S.X i)] [IsRingSystem S]
local instance : IsAddGroupSystem S := isAddGroupSystemOfIsRingSystem S
attribute [local instance] instAddCommGroupAddInverseLimit
theorem projection_ring_intCast (i : I) (n : ℤ) :
    S.projection i (Int.cast n : S.inverseLimit) = Int.cast n
ProCGroups.InverseSystems.instRingInverseLimit

A ring inverse limit is a ring because all operations and axioms are inherited coordinatewise from the stage rings.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section RingSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Ring (S.X i)] [IsRingSystem S]
local instance : IsAddGroupSystem S := isAddGroupSystemOfIsRingSystem S
attribute [local instance] instAddCommGroupAddInverseLimit
instance instRingInverseLimit : Ring S.inverseLimit
ProCGroups.InverseSystems.instContinuousMulRingInverseLimit

Multiplication in a ring inverse limit is continuous for the inverse-limit topology.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section RingSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Ring (S.X i)] [IsRingSystem S]
local instance : IsAddGroupSystem S := isAddGroupSystemOfIsRingSystem S
attribute [local instance] instAddCommGroupAddInverseLimit
instance instContinuousMulRingInverseLimit [∀ i, ContinuousMul (S.X i)] :
    ContinuousMul S.inverseLimit where
  continuous_mul := by
    exact Continuous.subtype_mk
      (continuous_pi fun i =>
        ((S.continuous_projection i).comp continuous_fst).mul
          ((S.continuous_projection i).comp continuous_snd))
      (fun xy => by
        intro i j hij
        change S.map hij (S.projection j xy.1 * S.projection j xy.2) =
          S.projection i xy.1 * S.projection i xy.2
        rw [IsRingSystem.map_mul (S := S) hij,
          S.projection_compatible xy.1 i j hij, S.projection_compatible xy.2 i j hij])
ProCGroups.InverseSystems.instIsTopologicalRingRingInverseLimit

A ring inverse limit inherits a topological-ring structure from the compatible stage topological rings.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section RingSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Ring (S.X i)] [IsRingSystem S]
local instance : IsAddGroupSystem S := isAddGroupSystemOfIsRingSystem S
attribute [local instance] instAddCommGroupAddInverseLimit
instance instIsTopologicalRingRingInverseLimit [∀ i, IsTopologicalRing (S.X i)] :
    IsTopologicalRing S.inverseLimit
ProCGroups.InverseSystems.projectionRingHom

The canonical projection from a ring-valued inverse limit is bundled as a ring homomorphism.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section RingSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Ring (S.X i)] [IsRingSystem S]
local instance : IsAddGroupSystem S := isAddGroupSystemOfIsRingSystem S
attribute [local instance] instAddCommGroupAddInverseLimit
def projectionRingHom (i : I) : S.inverseLimit →+* S.X i where
  toFun := S.projection i
  map_zero' := projection_zero (S := S) i
  map_one' := projection_ring_one (S := S) i
  map_add' := by
    intro x y
    exact projection_add (S := S) i x y
  map_mul' := by
    intro x y
    exact projection_ring_mul (S := S) i x y
ProCGroups.InverseSystems.projectionRingHom_apply

The ring-homomorphism projection has the same underlying coordinate map as the finite-stage projection.

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section RingSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Ring (S.X i)] [IsRingSystem S]
local instance : IsAddGroupSystem S := isAddGroupSystemOfIsRingSystem S
attribute [local instance] instAddCommGroupAddInverseLimit
theorem projectionRingHom_apply (i : I) (x : S.inverseLimit) :
    projectionRingHom (S := S) i x = S.projection i x
ProCGroups.InverseSystems.mapRingHom_comp_projectionRingHom

Composing the ring-valued transition from \(j\) to \(i\) with the projection at \(j\) gives the projection at \(i\).

Source context 13 commands

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

open Set
open scoped Topology
namespace ProCGroups
namespace InverseSystems
universe u v w z
section
variable {I : Type u} [Preorder I]
attribute [instance] InverseSystem.topologicalSpace
section RingSystems
variable {I : Type u} [Preorder I] (S : InverseSystem (I := I))
variable [∀ i, Ring (S.X i)] [IsRingSystem S]
local instance : IsAddGroupSystem S := isAddGroupSystemOfIsRingSystem S
attribute [local instance] instAddCommGroupAddInverseLimit
theorem mapRingHom_comp_projectionRingHom {i j : I} (hij : i ≤ j) :
    (mapRingHom (S := S) hij).comp (projectionRingHom (S := S) j) =
      projectionRingHom (S := S) i