Module

Basic.lean

Nyll.ProCGroups.ProC.OpenNormalSubgroups.Basic
29 declarations indexed from sourceView source ↗

Basic operations on open normal subgroups

This file develops bundled open normal subgroups, their finite discrete quotients and projections, maps and comaps, transition morphisms, normal cores, and finite intersections.

Imports4
Imported by29

Declarations

ProCGroups.ProC.OpenNormalSubgroup.instTopOpenNormalSubgroup

Open normal subgroups have a top element: the whole group.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
instance instTopOpenNormalSubgroup : Top (OpenNormalSubgroup G)
ProCGroups.ProC.OpenNormalSubgroup.ker

The kernel of a continuous homomorphism into a discrete group is an open normal subgroup.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
def ker {Q : Type v} [Group Q] [TopologicalSpace Q] [DiscreteTopology Q]
    (f : G →ₜ* Q) : OpenNormalSubgroup G where
  toOpenSubgroup :=
    { toSubgroup := f.toMonoidHom.ker
      isOpen' := by
        change IsOpen (f ⁻¹' ({1} : Set Q))
        exact (isOpen_discrete _).preimage f.continuous_toFun }
  isNormal' := by
    change f.toMonoidHom.ker.Normal
    infer_instance
ProCGroups.ProC.OpenNormalSubgroup.toSubgroup_ker

The underlying subgroup of OpenNormalSubgroup.kernel is the algebraic kernel.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
theorem toSubgroup_ker {Q : Type v} [Group Q] [TopologicalSpace Q] [DiscreteTopology Q]
    (f : G →ₜ* Q) :
    ((ker f : OpenNormalSubgroup G) : Subgroup G) = f.toMonoidHom.ker
ProCGroups.ProC.OpenNormalSubgroup.mem_ker

Membership in the open normal kernel is exactly mapping to \(1\).

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
theorem mem_ker {Q : Type v} [Group Q] [TopologicalSpace Q] [DiscreteTopology Q]
    {f : G →ₜ* Q} {x : G} :
    x ∈ ker f ↔ f x = 1
ProCGroups.ProC.OpenNormalSubgroup.map

An open surjective continuous homomorphism sends open normal subgroups to open normal subgroups.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
def map {H : Type v} [Group H] [TopologicalSpace H]
    (f : G →ₜ* H) (hfopen : IsOpenMap f) (hfsurj : Function.Surjective f)
    (U : OpenNormalSubgroup G) : OpenNormalSubgroup H where
  toOpenSubgroup :=
    { toSubgroup := (U : Subgroup G).map f.toMonoidHom
      isOpen' := by
        change IsOpen (f '' ((U : Subgroup G) : Set G))
        exact hfopen _ (openNormalSubgroup_isOpen (G := G) U) }
  isNormal' := by
    change ((U : Subgroup G).map f.toMonoidHom).Normal
    exact Subgroup.Normal.map U.isNormal' f.toMonoidHom hfsurj
ProCGroups.ProC.OpenNormalSubgroup.toSubgroup_map

The underlying subgroup of the image open normal subgroup is the subgroup image.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
theorem toSubgroup_map {H : Type v} [Group H] [TopologicalSpace H]
    (f : G →ₜ* H) (hfopen : IsOpenMap f) (hfsurj : Function.Surjective f)
    (U : OpenNormalSubgroup G) :
    ((map f hfopen hfsurj U : OpenNormalSubgroup H) : Subgroup H) =
      (U : Subgroup G).map f.toMonoidHom
ProCGroups.ProC.OpenNormalSubgroup.quotientMapContinuousMulEquiv

A multiplicative homeomorphism identifies a quotient with the quotient by the image of an open normal subgroup. This is the source-producing transport used to prove that the canonical pro-C object property is invariant under isomorphism.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
def quotientMapContinuousMulEquiv
    {H : Type u} [Group H] [TopologicalSpace H]
    (e : G ≃ₜ* H) (U : OpenNormalSubgroup G) :
    G ⧸ (U : Subgroup G) ≃*
      H ⧸ ((map (ContinuousMonoidHom.toContinuousMonoidHom e)
        (Homeomorph.isOpenMap e.toHomeomorph) e.surjective U : OpenNormalSubgroup H) :
          Subgroup H)
ProCGroups.ProC.OpenNormalSubgroup.quotientProj

The canonical quotient projection attached to an open normal subgroup.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
def quotientProj (U : OpenNormalSubgroup G) : G →ₜ* G ⧸ (U : Subgroup G) where
  toMonoidHom := QuotientGroup.mk' (U : Subgroup G)
  continuous_toFun := continuous_quotient_mk'
ProCGroups.ProC.OpenNormalSubgroup.quotientFinite

Quotients by open normal subgroups of compact groups are finite.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
instance quotientFinite [ContinuousMul G] [CompactSpace G] (U : OpenNormalSubgroup G) :
    Finite (G ⧸ (U : Subgroup G))
ProCGroups.ProC.OpenNormalSubgroup.quotientDiscrete

Quotients by open normal subgroups carry the discrete topology.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
instance quotientDiscrete [ContinuousMul G] (U : OpenNormalSubgroup G) :
    DiscreteTopology (G ⧸ (U : Subgroup G))
ProCGroups.ProC.OpenNormalSubgroup.quotientProj_toMonoidHom

The induced pro-\(C\) map agrees with the corresponding finite-quotient construction.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
theorem quotientProj_toMonoidHom (U : OpenNormalSubgroup G) :
    (quotientProj U).toMonoidHom = QuotientGroup.mk' (U : Subgroup G)
ProCGroups.ProC.OpenNormalSubgroup.quotientProj_apply

The quotient projection sends an element to its quotient class.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
theorem quotientProj_apply (U : OpenNormalSubgroup G) (x : G) :
    quotientProj U x = QuotientGroup.mk' (U : Subgroup G) x
ProCGroups.ProC.OpenNormalSubgroup.quotientProj_surjective

The quotient projection by an open normal subgroup is surjective.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
theorem quotientProj_surjective (U : OpenNormalSubgroup G) :
    Function.Surjective (quotientProj U)
ProCGroups.ProC.OpenNormalSubgroup.quotientProj_eq_one_iff

The quotient projection maps an element to \(1\) exactly on the subgroup.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
theorem quotientProj_eq_one_iff {U : OpenNormalSubgroup G} {x : G} :
    quotientProj U x = 1 ↔ x ∈ (U : Subgroup G)
ProCGroups.ProC.OpenNormalSubgroup.quotientProj_eq_quotientProj_iff

Equality under a quotient projection is membership of the quotient difference in the subgroup.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
theorem quotientProj_eq_quotientProj_iff {U : OpenNormalSubgroup G} {x y : G} :
    quotientProj U x = quotientProj U y ↔ x / y ∈ (U : Subgroup G)
ProCGroups.ProC.OpenNormalSubgroup.mem_ker_quotientProj

Kernel membership for the quotient projection is subgroup membership.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
theorem mem_ker_quotientProj [ContinuousMul G] {U : OpenNormalSubgroup G} {x : G} :
    x ∈ ker (quotientProj U) ↔ x ∈ (U : Subgroup G)
ProCGroups.ProC.OpenNormalSubgroup.ker_quotientProj

The open normal kernel of the quotient projection is the original subgroup.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
theorem ker_quotientProj [ContinuousMul G] (U : OpenNormalSubgroup G) :
    ((ker (quotientProj U) : OpenNormalSubgroup G) : Subgroup G) = (U : Subgroup G)
ProCGroups.ProC.OpenNormalSubgroup.ker_comp

Kernels commute with composition of continuous homomorphisms into discrete groups.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
theorem ker_comp {H : Type v} [Group H] [TopologicalSpace H]
    {Q : Type*} [Group Q] [TopologicalSpace Q] [DiscreteTopology Q]
    (g : H →ₜ* Q) (f : G →ₜ* H) :
    ker (g.comp f) =
      OpenNormalSubgroup.comap f.toMonoidHom f.continuous_toFun (ker g)
ProCGroups.ProC.OpenNormalSubgroup.comap_ker

The comap of a kernel is the kernel of the composite.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
theorem comap_ker {H : Type v} [Group H] [TopologicalSpace H]
    {Q : Type*} [Group Q] [TopologicalSpace Q] [DiscreteTopology Q]
    (f : G →ₜ* H) (g : H →ₜ* Q) :
    OpenNormalSubgroup.comap f.toMonoidHom f.continuous_toFun (ker g) =
      ker (g.comp f)
ProCGroups.ProC.OpenNormalSubgroup.comap_quotientProj

Comapping an open normal subgroup is the kernel of the composite quotient projection.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
theorem comap_quotientProj {H : Type v} [Group H] [TopologicalSpace H] [ContinuousMul H]
    (f : G →ₜ* H) (U : OpenNormalSubgroup H) :
    OpenNormalSubgroup.comap f.toMonoidHom f.continuous_toFun U =
      ker ((quotientProj U).comp f)
ProCGroups.ProC.OpenNormalSubgroup.transition

The natural transition map between quotients by open normal subgroups \(U\le V\).

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
def transition {U V : OpenNormalSubgroup G}
    (hUV : (U : Subgroup G) ≤ (V : Subgroup G)) :
    G ⧸ (U : Subgroup G) →ₜ* G ⧸ (V : Subgroup G)
ProCGroups.ProC.OpenNormalSubgroup.transition_mk

Transition maps send quotient classes to quotient classes.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
theorem transition_mk {U V : OpenNormalSubgroup G}
    (hUV : (U : Subgroup G) ≤ (V : Subgroup G)) (x : G) :
    transition hUV (QuotientGroup.mk' (U : Subgroup G) x) =
      QuotientGroup.mk' (V : Subgroup G) x
ProCGroups.ProC.OpenNormalSubgroup.transition_comp_quotientProj

Composing a transition map with the smaller quotient projection gives the larger quotient projection.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
theorem transition_comp_quotientProj {U V : OpenNormalSubgroup G}
    (hUV : (U : Subgroup G) ≤ (V : Subgroup G)) :
    (transition hUV).comp (quotientProj U) = quotientProj V
ProCGroups.ProC.OpenNormalSubgroup.transition_surjective

Transition maps between quotients by nested open normal subgroups are surjective.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
theorem transition_surjective {U V : OpenNormalSubgroup G}
    (hUV : (U : Subgroup G) ≤ (V : Subgroup G)) :
    Function.Surjective (transition hUV)
ProCGroups.ProC.OpenNormalSubgroup.ker_transition

The kernel of the transition map is the image of the larger subgroup in the smaller quotient.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
theorem ker_transition {U V : OpenNormalSubgroup G}
    [ContinuousMul G]
    (hUV : (U : Subgroup G) ≤ (V : Subgroup G)) :
    ((ker (transition hUV) : OpenNormalSubgroup (G ⧸ (U : Subgroup G))) :
        Subgroup (G ⧸ (U : Subgroup G))) =
      (V : Subgroup G).map (QuotientGroup.mk' (U : Subgroup G))
ProCGroups.ProC.OpenNormalSubgroup.normalCore

The normal core of an open subgroup in a compact topological group is an open normal subgroup.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
def normalCore [ContinuousMul G] [CompactSpace G] (U : OpenSubgroup G) :
    OpenNormalSubgroup G where
  toOpenSubgroup :=
    { toSubgroup := Subgroup.normalCore (U : Subgroup G)
      isOpen' := by
        have hclosed : IsClosed ((U : Subgroup G) : Set G) :=
          openSubgroup_isClosed (G := G) U
        let : (U : Subgroup G).FiniteIndex :=
          Subgroup.finiteIndex_of_finite_quotient (H := (U : Subgroup G))
        exact Subgroup.isOpen_of_isClosed_of_finiteIndex _
          ((U : Subgroup G).normalCore_isClosed hclosed) }
  isNormal' := by
    change (Subgroup.normalCore (U : Subgroup G)).Normal
    infer_instance
ProCGroups.ProC.OpenNormalSubgroup.toSubgroup_normalCore

The underlying subgroup of \(\mathrm{normalCore}\) is the algebraic normal core.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
theorem toSubgroup_normalCore [ContinuousMul G] [CompactSpace G] (U : OpenSubgroup G) :
    ((normalCore U : OpenNormalSubgroup G) : Subgroup G) =
      Subgroup.normalCore (U : Subgroup G)
ProCGroups.ProC.OpenNormalSubgroup.normalCore_le

The normal core of an open subgroup is contained in that open subgroup.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
theorem normalCore_le [ContinuousMul G] [CompactSpace G] (U : OpenSubgroup G) :
    (normalCore U : Subgroup G) ≤ (U : Subgroup G)
ProCGroups.ProC.OpenNormalSubgroup.finsetInf

The infimum of a finite family of open normal subgroups.

Source context 5 commands

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

open scoped Topology
namespace ProCGroups.ProC
universe u v
variable {G : Type u} [Group G] [TopologicalSpace G]
namespace OpenNormalSubgroup
def finsetInf {ι : Type v} (s : Finset ι) (U : ι → OpenNormalSubgroup G) :
    OpenNormalSubgroup G