ProCGroups.ProC.GroupPredicates.Basic

33 Theorem | 30 Definition | 2 Abbreviation | 2 Structure | 9 Class | 2 Instance

This module studies basic for pro cgroups. The all-finite pro-\(C\) predicate is profiniteness. The canonical topological pro-\(C\) predicate attached to a concrete finite-group class \(C\).

import
Imported by

Declarations

def allFiniteProC : ProCGroupPredicate.{u} where
  holds := fun {G} [_] [_] [_] => IsProfiniteGroup G

The all-finite pro-\(C\) predicate is profiniteness.

protected def finiteGroupClassProCPredicate
    (C : FiniteGroupClass.{u}) : ProCGroupPredicate where
  holds := fun {G} [_] [_] [_] =>
    IsProCGroup C G

The canonical topological pro-\(C\) predicate attached to a concrete finite-group class \(C\). This declaration is protected to keep unqualified resolution stable when several pro-\(C\) namespaces are open at once.

@[simp] theorem finiteGroupClassProCPredicate_holds_iff
    {C : FiniteGroupClass.{u}}
    {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G] :
    (ProCGroups.ProC.finiteGroupClassProCPredicate C) (G := G) ↔
      IsProCGroup C G

The two defining conditions are equivalent after unfolding.

Show proof
theorem isProfiniteGroup_of_finiteGroupClassProCPredicate
    (C : FiniteGroupClass.{u})
    {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    (hG : (ProCGroups.ProC.finiteGroupClassProCPredicate C) (G := G)) :
    IsProfiniteGroup G

A group satisfying the concrete finite-class pro-\(C\) predicate is profinite.

Show proof
theorem finiteGroupClassProCPredicate_mono
    {C C' : FiniteGroupClass.{u}}
    (hmono :
      ∀ {G : Type u} [Group G], C' G → C G)
    {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G] :
    (ProCGroups.ProC.finiteGroupClassProCPredicate C') (G := G) →
      (ProCGroups.ProC.finiteGroupClassProCPredicate C) (G := G)

Concrete class inclusion induces monotonicity of the corresponding pro-\(C\) predicates.

Show proof
structure ProCTheory where
  predicate : ProCGroupPredicate.{u}
  finiteQuotientClass : FiniteGroupClass.{u}
  formation : FiniteGroupClass.Formation finiteQuotientClass
  predicate_iff_isProCGroup :
    ∀ {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G],
      predicate (G := G) ↔ IsProCGroup finiteQuotientClass G

A bundled pro-\(C\) theory: a topological predicate, the finite quotient class that controls it, and the formation data for that finite class. This is the preferred package when a theorem needs to move between an abstract pro-\(C\) predicate and finite quotient closure hypotheses without carrying several unrelated arguments.

structure ProCTheorySound where
  predicate : ProCGroupPredicate.{u}
  finiteQuotientClass : FiniteGroupClass.{u}
  formation : FiniteGroupClass.Formation finiteQuotientClass
  sound :
    ∀ {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G],
      IsProCGroup finiteQuotientClass G → predicate (G := G)

One-directional version of ProCTheory, for predicates known to contain the concrete finite-quotient pro-\(C\) groups but not known to be equivalent to them.

abbrev holds (T : ProCTheory.{u})
    {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G] : Prop :=
  T.predicate (G := G)

View a theory as its topological pro-\(C\) predicate.

abbrev IsProCGroup (T : ProCTheory.{u})
    (G : Type u) [Group G] [TopologicalSpace G] : Prop :=
  ProCGroups.ProC.IsProCGroup T.finiteQuotientClass G

The concrete pro-\(C\) group condition controlled by a theory.

def ofFiniteFormation
    (C : FiniteGroupClass.{u}) [hC : FiniteGroupClass.IsFormation C] :
    ProCTheory.{u} where
  predicate := ProCGroups.ProC.finiteGroupClassProCPredicate C
  finiteQuotientClass := C
  formation := hC.formation
  predicate_iff_isProCGroup := by
    intro G _ _ _
    exact Iff.rfl

A finite-group formation gives the corresponding concrete pro-\(C\) theory.

def ofPredicate
    (ProC : ProCGroupPredicate.{u}) (C : FiniteGroupClass.{u})
    (hForm : FiniteGroupClass.Formation C)
    (hiff :
      ∀ {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G],
        ProC (G := G) ↔ ProCGroups.ProC.IsProCGroup C G) :
    ProCTheory.{u} where
  predicate := ProC
  finiteQuotientClass := C
  formation := hForm
  predicate_iff_isProCGroup := hiff

Build a pro-\(C\) theory from an abstract predicate, its controlling finite quotient class, and an equivalence with the concrete pro-\(C\) condition.

def ofPredicateSound
    (ProC : ProCGroupPredicate.{u}) (C : FiniteGroupClass.{u})
    (hForm : FiniteGroupClass.Formation C)
    (hsound :
      ∀ {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G],
        ProCGroups.ProC.IsProCGroup C G → ProC (G := G)) :
    ProCTheorySound.{u} where
  predicate := ProC
  finiteQuotientClass := C
  formation := hForm
  sound := hsound

Build the one-directional pro-\(C\) soundness package from an abstract predicate and a soundness theorem.

theorem holds_iff_isProCGroup (T : ProCTheory.{u})
    {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G] :
    T.holds (G := G) ↔ T.IsProCGroup G

A theory predicate is equivalent to the concrete pro-\(C\) condition for its finite quotient class.

Show proof
theorem isProCGroup_of_holds (T : ProCTheory.{u})
    {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    (hG : T.holds (G := G)) : T.IsProCGroup G

The predicate side of a theory implies the concrete pro-\(C\) condition.

Show proof
theorem holds_of_isProCGroup (T : ProCTheory.{u})
    {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    (hG : T.IsProCGroup G) : T.holds (G := G)

The concrete pro-\(C\) condition implies the predicate side of a theory.

Show proof
def finiteQuotientFormation (T : ProCTheory.{u}) :
    FiniteGroupClass.Formation T.finiteQuotientClass :=
  T.formation

The finite quotient class packaged by a theory is a formation.

def quotientClosed (T : ProCTheory.{u}) :
    FiniteGroupClass.QuotientClosed T.finiteQuotientClass :=
  T.formation.quotientClosed

Formation data gives quotient closure for the finite quotient class of a theory.

def isomClosed (T : ProCTheory.{u}) :
    FiniteGroupClass.IsomClosed T.finiteQuotientClass :=
  T.formation.isomClosed

Formation data gives isomorphism closure for the finite quotient class of a theory.

def finiteQuotientClass (ProC : ProCGroupPredicate.{u}) :
    FiniteGroupClass.{u} where
  pred := fun Q [Group Q] =>
    Finite Q ∧
      letI : TopologicalSpace Q := ⊥
      letI : DiscreteTopology Q := ⟨rfl⟩
      letI : IsTopologicalGroup Q := inferInstance
      ProC (G := Q)
  finite_of_mem := fun hQ => hQ.1

The discrete finite-quotient class induced by a topological pro-\(C\) predicate.

class DeterminedByFiniteQuotients
    (ProC : ProCGroupPredicate.{u}) : Prop where
  holds_of_isProCGroup :
    ∀ {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G],
      IsProCGroup ProC.finiteQuotientClass G → ProC (G := G)

A topological pro-\(C\) predicate is determined by its finite quotient class.

class HasFiniteQuotientFormation
    (ProC : ProCGroupPredicate.{u}) : Prop where
  formation : FiniteGroupClass.Formation (ProC.finiteQuotientClass)

Formation data for the finite quotient class attached to a pro-\(C\) predicate.

class HasFiniteQuotientMelnikovFormation
    (ProC : ProCGroupPredicate.{u}) : Prop where
  melnikovFormation : FiniteGroupClass.MelnikovFormation (ProC.finiteQuotientClass)

The Melnikov formation data for the finite quotient class attached to a pro-\(C\) predicate.

class HasFiniteQuotientFullFormation
    (ProC : ProCGroupPredicate.{u}) : Prop where
  fullFormation : FiniteGroupClass.FullFormation (ProC.finiteQuotientClass)

Full formation data for the finite quotient class attached to a pro-\(C\) predicate.

class HasFiniteQuotientHereditary
    (ProC : ProCGroupPredicate.{u}) : Prop where
  hereditary : FiniteGroupClass.Hereditary (ProC.finiteQuotientClass)

Hereditary data for the finite quotient class attached to a pro-\(C\) predicate.

class HasFiniteQuotientFinite
    (ProC : ProCGroupPredicate.{u}) : Prop where
  finite : ∀ {Q : Type u} [Group Q], ProC.finiteQuotientClass Q → Finite Q

Finiteness of the finite quotient class attached to a pro-\(C\) predicate.

class HasFiniteQuotientExtensionClosed
    (ProC : ProCGroupPredicate.{u}) : Prop where
  extensionClosed : FiniteGroupClass.ExtensionClosed (ProC.finiteQuotientClass)

Extension-closure data for the finite quotient class attached to a pro-\(C\) predicate.

class ClosedUnderCommutatorKernelQuotientsFrom
    (Target Source : ProCGroupPredicate.{u}) : Prop where
  quotient_by_kernel_commutator :
    ∀ {E F : Type u} [Group E] [TopologicalSpace E] [IsTopologicalGroup E]
      [Group F] [TopologicalSpace F] [IsTopologicalGroup F]
      (φ : E →ₜ* F),
        Source (G := E) → Target (G := F) →
          Target (G := E ⧸ ⁅φ.toMonoidHom.ker, φ.toMonoidHom.ker⁆)

Permanence data for quotienting a Source pro-\(C\) group by the commutator subgroup of the kernel of a continuous homomorphism to a Target pro-\(C\) group. The mixed source/target form is useful for maximal-quotient arguments, where the source is often known to be pro-\(C\)_e while the quotient must be pro-\(C\).

theorem quotient_by_kernel_commutator
    (Target Source : ProCGroupPredicate.{u})
    [Target.ClosedUnderCommutatorKernelQuotientsFrom Source]
    {E F : Type u} [Group E] [TopologicalSpace E] [IsTopologicalGroup E]
    [Group F] [TopologicalSpace F] [IsTopologicalGroup F]
    (φ : E →ₜ* F)
    (hE : Source (G := E)) (hF : Target (G := F)) :
    Target (G := E ⧸ ⁅φ.toMonoidHom.ker, φ.toMonoidHom.ker⁆)

The quotient by the kernel commutator is compatible with open-normal finite quotients and refinement maps.

Show proof
def finiteQuotientFormation
    (ProC : ProCGroupPredicate.{u}) [ProC.HasFiniteQuotientFormation] :
    FiniteGroupClass.Formation (ProC.finiteQuotientClass) :=
  ProCGroupPredicate.HasFiniteQuotientFormation.formation

The finite quotient class packaged by a theory is a formation.

def finiteQuotientMelnikovFormation
    (ProC : ProCGroupPredicate.{u}) [ProC.HasFiniteQuotientMelnikovFormation] :
    FiniteGroupClass.MelnikovFormation (ProC.finiteQuotientClass) :=
  ProCGroupPredicate.HasFiniteQuotientMelnikovFormation.melnikovFormation

Accessor for finite quotient Melnikov-formation data attached to a pro-\(C\) predicate.

def finiteQuotientFullFormation
    (ProC : ProCGroupPredicate.{u}) [ProC.HasFiniteQuotientFullFormation] :
    FiniteGroupClass.FullFormation (ProC.finiteQuotientClass) :=
  ProCGroupPredicate.HasFiniteQuotientFullFormation.fullFormation

Accessor for finite quotient full-formation data attached to a pro-\(C\) predicate.

def finiteQuotientHereditary
    (ProC : ProCGroupPredicate.{u}) [ProC.HasFiniteQuotientHereditary] :
    FiniteGroupClass.Hereditary (ProC.finiteQuotientClass) :=
  ProCGroupPredicate.HasFiniteQuotientHereditary.hereditary

Accessor for hereditary finite quotient data attached to a pro-\(C\) predicate.

def finiteQuotientFinite
    (ProC : ProCGroupPredicate.{u}) [ProC.HasFiniteQuotientFinite] :
    ∀ {Q : Type u} [Group Q], ProC.finiteQuotientClass Q → Finite Q :=
  ProCGroupPredicate.HasFiniteQuotientFinite.finite

Accessor asserting that every member of the finite quotient class is finite.

def finiteQuotientExtensionClosed
    (ProC : ProCGroupPredicate.{u}) [ProC.HasFiniteQuotientExtensionClosed] :
    FiniteGroupClass.ExtensionClosed (ProC.finiteQuotientClass) :=
  ProCGroupPredicate.HasFiniteQuotientExtensionClosed.extensionClosed

Accessor for finite quotient extension-closure data attached to a pro-\(C\) predicate.

def finiteQuotientIsomClosed
    (ProC : ProCGroupPredicate.{u}) [ProC.HasFiniteQuotientFormation] :
    FiniteGroupClass.IsomClosed (ProC.finiteQuotientClass) :=
  ProC.finiteQuotientFormation.isomClosed

Formation data supplies isomorphism closure for the induced finite quotient class.

def finiteQuotientQuotientClosed
    (ProC : ProCGroupPredicate.{u}) [ProC.HasFiniteQuotientFormation] :
    FiniteGroupClass.QuotientClosed (ProC.finiteQuotientClass) :=
  ProC.finiteQuotientFormation.quotientClosed

Formation data supplies quotient closure for the induced finite quotient class.

def finiteQuotientFiniteProductClosed
    (ProC : ProCGroupPredicate.{u}) [ProC.HasFiniteQuotientFormation] :
    FiniteGroupClass.FiniteProductClosed (ProC.finiteQuotientClass) :=
  ProC.finiteQuotientFormation.finiteProductClosed

Formation data supplies finite-product closure for the induced finite quotient class.

def finiteQuotientContainsTrivialQuotients
    (ProC : ProCGroupPredicate.{u}) [ProC.HasFiniteQuotientFormation] :
    FiniteGroupClass.ContainsTrivialQuotients (ProC.finiteQuotientClass) :=
  ProC.finiteQuotientFormation.containsTrivialQuotients

Formation data supplies the trivial-quotient condition for the induced finite quotient class.

def finiteQuotientFullQuotientClosed
    (ProC : ProCGroupPredicate.{u}) [ProC.HasFiniteQuotientFullFormation] :
    FiniteGroupClass.QuotientClosed (ProC.finiteQuotientClass) :=
  (ProC.finiteQuotientFullFormation).quotientClosed

The full formation data supply quotient closure.

def finiteQuotientFullIsomClosed
    (ProC : ProCGroupPredicate.{u}) [ProC.HasFiniteQuotientFullFormation] :
    FiniteGroupClass.IsomClosed (ProC.finiteQuotientClass) :=
  (ProC.finiteQuotientFullFormation).isomClosed

The full formation data supply isomorphism closure.

def finiteQuotientFullFinite
    (ProC : ProCGroupPredicate.{u}) [ProC.HasFiniteQuotientFullFormation] :
    ∀ {Q : Type u} [Group Q], ProC.finiteQuotientClass Q → Finite Q :=
  (ProC.finiteQuotientFullFormation).finiteOnly

The full formation data include the fact that all members are finite.

def finiteQuotientFullExtensionClosed
    (ProC : ProCGroupPredicate.{u}) [ProC.HasFiniteQuotientFullFormation] :
    FiniteGroupClass.ExtensionClosed (ProC.finiteQuotientClass) :=
  (ProC.finiteQuotientFullFormation).extensionClosed

The full formation data include closure under extensions.

def finiteQuotientFullHereditary
    (ProC : ProCGroupPredicate.{u}) [ProC.HasFiniteQuotientFullFormation] :
    FiniteGroupClass.Hereditary (ProC.finiteQuotientClass) :=
  (ProC.finiteQuotientFullFormation).hereditary

The full formation data supply hereditary subgroup closure.

theorem finiteQuotientFullSubgroupClosed
    (ProC : ProCGroupPredicate.{u}) [ProC.HasFiniteQuotientFullFormation] :
    FiniteGroupClass.SubgroupClosed (ProC.finiteQuotientClass)

The full formation data supply ordinary subgroup closure.

Show proof
def hasFiniteQuotientFormation_of_melnikovFormation
    (ProC : ProCGroupPredicate.{u}) [ProC.HasFiniteQuotientMelnikovFormation] :
    ProC.HasFiniteQuotientFormation where
  formation := ProC.finiteQuotientMelnikovFormation.formation

A Melnikov formation supplies the underlying formation structure.

def finiteQuotientClass_containsTrivialQuotients_of_formation
    (ProC : ProCGroupPredicate.{u}) [ProC.HasFiniteQuotientFormation] :
    FiniteGroupClass.ContainsTrivialQuotients ProC.finiteQuotientClass :=
  ProC.finiteQuotientFormation.containsTrivialQuotients

Formation data supplies the trivial-quotient instance for the induced finite quotient class.

def hasFiniteQuotientFinite_of_melnikovFormation
    (ProC : ProCGroupPredicate.{u}) [ProC.HasFiniteQuotientMelnikovFormation] :
    ProC.HasFiniteQuotientFinite where
  finite := (ProC.finiteQuotientMelnikovFormation).finiteOnly

A Melnikov formation supplies finiteness of members of the induced finite quotient class.

def hasFiniteQuotientExtensionClosed_of_melnikovFormation
    (ProC : ProCGroupPredicate.{u}) [ProC.HasFiniteQuotientMelnikovFormation] :
    ProC.HasFiniteQuotientExtensionClosed where
  extensionClosed := (ProC.finiteQuotientMelnikovFormation).extensionClosed

A Melnikov formation supplies extension-closure of the induced finite quotient class.

def hasFiniteQuotientMelnikovFormation_of_fullFormation
    (ProC : ProCGroupPredicate.{u}) [ProC.HasFiniteQuotientFullFormation] :
    ProC.HasFiniteQuotientMelnikovFormation where
  melnikovFormation := ProC.finiteQuotientFullFormation.melnikovFormation

A full formation supplies the underlying Melnikov formation.

def hasFiniteQuotientHereditary_of_fullFormation
    (ProC : ProCGroupPredicate.{u}) [ProC.HasFiniteQuotientFullFormation] :
    ProC.HasFiniteQuotientHereditary where
  hereditary := (ProC.finiteQuotientFullFormation).hereditary

A full formation supplies hereditary closure of the induced finite quotient class.

theorem of_mulEquiv
    {C : FiniteGroupClass.{u}} (hiso : FiniteGroupClass.IsomClosed C)
    {G K : Type u}
    [Group G] [TopologicalSpace G]
    [Group K] [TopologicalSpace K]
    (e : G ≃* K) (hcont : Continuous e) (hcontinuous_symm : Continuous e.symm)
    (hbasis : HasOpenNormalBasisInClass C K) :
    HasOpenNormalBasisInClass C G

Transport a \(C\)-quotient open-normal basis across a continuous multiplicative equivalence.

Show proof
theorem profiniteGroup_eq_one_of_mem_all_openNormalSubgroups
    {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    (hG : IsProfiniteGroup G) {x : G}
    (hx : ∀ U : OpenNormalSubgroup G, x ∈ (U : Subgroup G)) :
    x = 1

In a profinite group, an element lying in every open normal subgroup is trivial.

Show proof
class ProCGroup (ProC : ProCGroupPredicate.{u})
    (G : Type u) [Group G] [TopologicalSpace G] [IsTopologicalGroup G] : Prop where
  isProC : ProC (G := G)
  isProCGroup : IsProCGroup ProC.finiteQuotientClass G

Typeclass form of belonging to an ambient topological pro-\(C\) predicate.

theorem profiniteGroup (ProC : ProCGroupPredicate.{u})
    (G : Type u) [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    [hG : ProCGroup ProC G] :
    IsProfiniteGroup G

A pro-\(C\) group is profinite.

Show proof
theorem isTopologicalGroup (ProC : ProCGroupPredicate.{u})
    (G : Type u) [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    [hG : ProCGroup ProC G] :
    IsTopologicalGroup G

A pro-\(C\) group is a topological group.

Show proof
theorem compactSpace (ProC : ProCGroupPredicate.{u})
    (G : Type u) [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    [hG : ProCGroup ProC G] :
    CompactSpace G

The compact-space instance on a profinite space.

Show proof
theorem t2Space (ProC : ProCGroupPredicate.{u})
    (G : Type u) [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    [hG : ProCGroup ProC G] :
    T2Space G

A pro-\(C\) group is Hausdorff.

Show proof
theorem t1Space (ProC : ProCGroupPredicate.{u})
    (G : Type u) [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    [hG : ProCGroup ProC G] :
    T1Space G

A profinite space is \(T_1\).

Show proof
theorem totallyDisconnectedSpace (ProC : ProCGroupPredicate.{u})
    (G : Type u) [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    [hG : ProCGroup ProC G] :
    TotallyDisconnectedSpace G

A pro-\(C\) group is totally disconnected.

Show proof
theorem finite_quotient (ProC : ProCGroupPredicate.{u})
    (G : Type u) [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    [hG : ProCGroup ProC G] (U : OpenNormalSubgroup G) :
    Finite (G ⧸ (U : Subgroup G))

Open normal quotients of a pro-\(C\) group are finite.

Show proof
theorem quotient_mem (ProC : ProCGroupPredicate.{u})
    (G : Type u) [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    [hG : ProCGroup ProC G] [ProC.HasFiniteQuotientFormation] (U : OpenNormalSubgroup G) :
    ProC.finiteQuotientClass (G ⧸ (U : Subgroup G))

Open normal quotients of a pro-\(C\) group lie in the induced finite quotient class.

Show proof
theorem hasOpenNormalBasisInClass (ProC : ProCGroupPredicate.{u})
    (G : Type u) [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    [hG : ProCGroup ProC G] :
    HasOpenNormalBasisInClass ProC.finiteQuotientClass G

A pro-\(C\) group has an open-normal basis whose quotients lie in the induced finite quotient class.

Show proof
theorem exists_openNormalSubgroupInClass_sub_open_nhds_of_one
    (ProC : ProCGroupPredicate.{u})
    (G : Type u) [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    [hG : ProCGroup ProC G]
    {W : Set G} (hW : IsOpen W) (h1W : (1 : G) ∈ W) :
    ∃ U : OpenNormalSubgroupInClass ProC.finiteQuotientClass G,
      (((U.1 : Subgroup G) : Set G)) ⊆ W

Every neighborhood of \(1\) in a pro-\(C\) group contains an open normal subgroup whose quotient lies in the induced finite quotient class.

Show proof
theorem openNormalSubgroupInClass_nonempty (ProC : ProCGroupPredicate.{u})
    (G : Type u) [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    [hG : ProCGroup ProC G] :
    Nonempty (OpenNormalSubgroupInClass ProC.finiteQuotientClass G)

The open-normal-in-class family of a pro-\(C\) group is nonempty.

Show proof
theorem iInf_openNormalSubgroupInClass_eq_bot (ProC : ProCGroupPredicate.{u})
    (G : Type u) [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    [hG : ProCGroup ProC G] :
    iInf (fun U : OpenNormalSubgroupInClass ProC.finiteQuotientClass G =>
      (U.1 : Subgroup G)) = (⊥ : Subgroup G)

The open-normal-in-class subgroups of a pro-\(C\) group have trivial infimum.

Show proof
theorem iInter_openNormalSubgroupInClass_eq_singleton (ProC : ProCGroupPredicate.{u})
    (G : Type u) [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    [hG : ProCGroup ProC G] :
    (⋂ U : OpenNormalSubgroupInClass ProC.finiteQuotientClass G,
      (((U.1 : Subgroup G) : Set G))) = ({1} : Set G)

The open-normal-in-class subgroups of a pro-\(C\) group intersect in the singleton \(\{1\}\).

Show proof
theorem eq_one_of_mem_all_openNormalSubgroupInClass (ProC : ProCGroupPredicate.{u})
    (G : Type u) [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    [hG : ProCGroup ProC G] {x : G}
    (hx : ∀ U : OpenNormalSubgroupInClass ProC.finiteQuotientClass G,
      x ∈ (U.1 : Subgroup G)) :
    x = 1

Membership in every open-normal-in-class subgroup of a pro-\(C\) group forces an element to be trivial.

Show proof
theorem exists_openNormalSubgroupInClass_not_mem (ProC : ProCGroupPredicate.{u})
    (G : Type u) [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    [hG : ProCGroup ProC G] {x : G} (hx : x ≠ 1) :
    ∃ U : OpenNormalSubgroupInClass ProC.finiteQuotientClass G,
      x ∉ (U.1 : Subgroup G)

A nontrivial element of a pro-\(C\) group is omitted by some open-normal-in-class subgroup.

Show proof
theorem eq_of_forall_openNormalSubgroupInClass_quotient_eq
    (ProC : ProCGroupPredicate.{u})
    (G : Type u) [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    [hG : ProCGroup ProC G] {x y : G}
    (hxy : ∀ U : OpenNormalSubgroupInClass ProC.finiteQuotientClass G,
      QuotientGroup.mk' (U.1 : Subgroup G) x = QuotientGroup.mk' (U.1 : Subgroup G) y) :
    x = y

Two elements of a pro-\(C\) group are equal when they agree in every open-normal-in-class quotient.

Show proof
theorem eq_of_forall_openNormalSubgroupInClassProj_eq
    (ProC : ProCGroupPredicate.{u})
    (G : Type u) [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    [hG : ProCGroup ProC G] {x y : G}
    (hxy : ∀ U : OrderDual (OpenNormalSubgroupInClass ProC.finiteQuotientClass G),
      openNormalSubgroupInClassProj (C := ProC.finiteQuotientClass) (G := G) U x =
        openNormalSubgroupInClassProj (C := ProC.finiteQuotientClass) (G := G) U y) :
    x = y

Coordinatewise equality in the canonical open-normal-in-class quotient system forces equality in the ambient pro-\(C\) group.

Show proof
theorem of_isProCGroup
    (ProC : ProCGroupPredicate.{u}) [ProC.DeterminedByFiniteQuotients]
    (G : Type u) [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    (hG : IsProCGroup ProC.finiteQuotientClass G) :
    ProCGroup ProC G where
  isProC

Build the public pro-\(C\)-group class from the concrete quotient condition.

Show proof
theorem of_finiteQuotientClass_mono
    {ProC ProD : ProCGroupPredicate.{u}} [ProD.DeterminedByFiniteQuotients]
    {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    [hG : ProCGroup ProC G]
    (hmono :
      ∀ {Q : Type u} [Group Q],
        ProC.finiteQuotientClass Q → ProD.finiteQuotientClass Q) :
    ProCGroup ProD G

Enlarge the finite quotient class of a bundled pro-\(C\) group.

Show proof
theorem allFiniteProC_finiteQuotientClass_of_finite
    {Q : Type u} [Group Q] [Finite Q] :
    allFiniteProC.finiteQuotientClass Q

A finite discrete group lies in the finite quotient class induced by allFiniteProC.

Show proof
theorem allFiniteProC_finiteQuotientClass_iff_finite
    {Q : Type u} [Group Q] :
    allFiniteProC.finiteQuotientClass Q ↔ Finite Q

The finite quotient class induced by allFiniteProC is exactly the all-finite class.

Show proof
instance allFiniteProC_hasFiniteQuotientFullFormation :
    ProCGroupPredicate.HasFiniteQuotientFullFormation allFiniteProC where
  fullFormation :=
    { melnikovFormation :=
        { formation :=
            { quotientClosed := by
                intro G _ N _ hG
                exact allFiniteProC_finiteQuotientClass_iff_finite.2
                  (FiniteGroupClass.allFinite_quotientClosed N
                    (allFiniteProC_finiteQuotientClass_iff_finite.1 hG))
              finiteSubdirectProductClosed := by
                intro ι _ G _ H _ f hf _hsurj hH
                exact allFiniteProC_finiteQuotientClass_iff_finite.2
                  (FiniteGroupClass.allFinite_finiteSubdirectProductClosed f hf _hsurj
                    (fun i => allFiniteProC_finiteQuotientClass_iff_finite.1 (hH i))) }
          normalSubgroupClosed := by
            intro Q _ N _ hQ
            exact allFiniteProC_finiteQuotientClass_iff_finite.2
              (FiniteGroupClass.allFinite_normalSubgroupClosed N
                (allFiniteProC_finiteQuotientClass_iff_finite.1 hQ))
          extensionClosed := by
            intro E _ N _ hN hQ
            exact allFiniteProC_finiteQuotientClass_iff_finite.2
              (FiniteGroupClass.allFinite_extensionClosed N
                (allFiniteProC_finiteQuotientClass_iff_finite.1 hN)
                (allFiniteProC_finiteQuotientClass_iff_finite.1 hQ)) }
      subgroupClosed := by
        intro G _ H hG
        exact allFiniteProC_finiteQuotientClass_iff_finite.2
          (FiniteGroupClass.allFinite_subgroupClosed H
            (allFiniteProC_finiteQuotientClass_iff_finite.1 hG)) }

The all-finite pro-\(C\) predicate has a full finite quotient formation.

instance allFiniteProC_determinedByFiniteQuotients :
    ProCGroupPredicate.DeterminedByFiniteQuotients allFiniteProC where
  holds_of_isProCGroup hG := hG.isProfinite

The all-finite pro-\(C\) predicate is determined by finite quotients.

theorem allFiniteProC_isProCGroup_of_profinite
    {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    (hG : IsProfiniteGroup G) :
    IsProCGroup allFiniteProC.finiteQuotientClass G

A profinite group is pro-\(C\) for the all-finite predicate in the concrete quotient sense.

Show proof
theorem allFiniteProCGroup_of_profinite
    {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G]
    (hG : IsProfiniteGroup G) :
    ProCGroup allFiniteProC G

A profinite group is a bundled pro-\(C\) group for the all-finite predicate.

Show proof