ProCGroups.ProC.GroupPredicates.Standard

11 Theorem | 10 Definition | 9 Instance

This module sets up the finite-stage and inverse-limit description of the construction. It records the stage maps, projections, and comparison lemmas used to pass back to the completed object.

import
Imported by

Declarations

theorem finiteQuotientClass_finiteGroupClassProCPredicate_iff
    {C : FiniteGroupClass.{u}}
    (hquot : FiniteGroupClass.QuotientClosed C)
    (hiso : FiniteGroupClass.IsomClosed C)
    {Q : Type u} [Group Q] [Finite Q] :
    (ProCGroups.ProC.finiteGroupClassProCPredicate C).finiteQuotientClass Q ↔ C Q

On finite discrete groups, the finite quotient class induced by \(\mathrm{finiteGroupClassProCPredicate}\,C\) recovers \(C\), provided \(C\) is quotient- and isomorphism-closed.

Show proof
def finiteQuotientFormation_finiteGroupClassProCPredicate
    (C : FiniteGroupClass.{u}) (hForm : FiniteGroupClass.Formation C) :
    (ProCGroups.ProC.finiteGroupClassProCPredicate C).HasFiniteQuotientFormation where
  formation := by
    refine ⟨?_, ?_⟩
    · intro G _ N _ hG
      have hfiniteG : Finite G := by
        exact FiniteGroupClass.finite hG
      letI : Finite G := hfiniteG
      have hCG : C G :=
        (finiteQuotientClass_finiteGroupClassProCPredicate_iff
          hForm.quotientClosed hForm.isomClosed).1 hG
      exact
        (finiteQuotientClass_finiteGroupClassProCPredicate_iff
          hForm.quotientClosed hForm.isomClosed
          (Q := G ⧸ N)).2 (hForm.quotientClosed N hCG)
    · intro ι _ G _ H _ f hf hsurj hH
      have hfiniteH : ∀ i, Finite (H i) := by
        intro i
        exact FiniteGroupClass.finite (hH i)
      letI : ∀ i, Finite (H i) := hfiniteH
      have hCH : ∀ i, C (H i) := fun i =>
        (finiteQuotientClass_finiteGroupClassProCPredicate_iff
          hForm.quotientClosed hForm.isomClosed).1
          (hH i)
      have hCG : C G := hForm.finiteSubdirectProductClosed f hf hsurj hCH
      letI : Finite G := Finite.of_injective f hf
      exact
        (finiteQuotientClass_finiteGroupClassProCPredicate_iff
          hForm.quotientClosed hForm.isomClosed).2 hCG

Formation data transfers from a finite-group class \(C\) to the finite quotient class induced by \(\mathrm{finiteGroupClassProCPredicate}\,C\).

def finiteQuotientFullFormation_finiteGroupClassProCPredicate
    (C : FiniteGroupClass.{u}) (hFull : FiniteGroupClass.FullFormation C) :
    (ProCGroups.ProC.finiteGroupClassProCPredicate C).HasFiniteQuotientFullFormation where
  fullFormation := by
    let hForm : FiniteGroupClass.Formation C := hFull.melnikovFormation.formation
    refine
      { melnikovFormation :=
          { formation :=
              (finiteQuotientFormation_finiteGroupClassProCPredicate C hForm).formation
            normalSubgroupClosed := ?_
            extensionClosed := ?_ }
        subgroupClosed := ?_ }
    · intro G _ N _ hG
      letI : Finite G := FiniteGroupClass.finite hG
      have hCG : C G :=
        (finiteQuotientClass_finiteGroupClassProCPredicate_iff
          hForm.quotientClosed hForm.isomClosed).1 hG
      have hCN : C N := hFull.melnikovFormation.normalSubgroupClosed N hCG
      letI : Finite N := FiniteGroupClass.finite hCN
      exact
        (finiteQuotientClass_finiteGroupClassProCPredicate_iff
          hForm.quotientClosed hForm.isomClosed).2 hCN
    · intro E _ N _ hN hQ
      letI : Finite N := FiniteGroupClass.finite hN
      letI : Finite (E ⧸ N) := FiniteGroupClass.finite hQ
      have hCN : C N :=
        (finiteQuotientClass_finiteGroupClassProCPredicate_iff
          hForm.quotientClosed hForm.isomClosed).1 hN
      have hCQ : C (E ⧸ N) :=
        (finiteQuotientClass_finiteGroupClassProCPredicate_iff
          hForm.quotientClosed hForm.isomClosed).1 hQ
      have hCE : C E := hFull.melnikovFormation.extensionClosed N hCN hCQ
      letI : Finite E := FiniteGroupClass.finite hCE
      exact
        (finiteQuotientClass_finiteGroupClassProCPredicate_iff
          hForm.quotientClosed hForm.isomClosed).2 hCE
    · intro G _ H hG
      letI : Finite G := FiniteGroupClass.finite hG
      have hCG : C G :=
        (finiteQuotientClass_finiteGroupClassProCPredicate_iff
          hForm.quotientClosed hForm.isomClosed).1 hG
      have hCH : C H := hFull.subgroupClosed H hCG
      letI : Finite H := FiniteGroupClass.finite hCH
      exact
        (finiteQuotientClass_finiteGroupClassProCPredicate_iff
          hForm.quotientClosed hForm.isomClosed).2 hCH

This declaration transfers full formation data from a finite-group class \(C\) to the finite quotient class induced by \(\mathrm{finiteGroupClassProCPredicate}\,C\).

def determinedByFiniteQuotients_finiteGroupClassProCPredicate
    (C : FiniteGroupClass.{u}) (hForm : FiniteGroupClass.Formation C) :
    (ProCGroups.ProC.finiteGroupClassProCPredicate C).DeterminedByFiniteQuotients where
    holds_of_isProCGroup := by
      intro G _ _ _ hG
      refine ⟨hG.isProfinite, ?_⟩
      intro W hW h1W
      rcases hG.hasOpenNormalBasisInClass W hW h1W with ⟨U, hUW, hCU⟩
      have hfinite : Finite (G ⧸ (U : Subgroup G)) := FiniteGroupClass.finite hCU
      letI : Finite (G ⧸ (U : Subgroup G)) := hfinite
      exact ⟨U, hUW,
        (finiteQuotientClass_finiteGroupClassProCPredicate_iff
          hForm.quotientClosed hForm.isomClosed).1 hCU⟩

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

def procyclicProC : ProCGroupPredicate.{u} :=
  ProCGroups.ProC.finiteGroupClassProCPredicate FiniteGroupClass.cyclic

The standard procyclic predicate defines a pro-\(C\) class.

def proabelianProC : ProCGroupPredicate.{u} :=
  ProCGroups.ProC.finiteGroupClassProCPredicate FiniteGroupClass.abelian

The standard pro-abelian predicate defines a pro-\(C\) class.

def pronilpotentProC : ProCGroupPredicate.{u} :=
  ProCGroups.ProC.finiteGroupClassProCPredicate FiniteGroupClass.nilpotent

The standard pronilpotent predicate defines a pro-\(C\) class.

def prosolvableProC : ProCGroupPredicate.{u} :=
  ProCGroups.ProC.finiteGroupClassProCPredicate FiniteGroupClass.solvable

The standard prosolvable predicate defines a pro-\(C\) class.

def proPProC (p : ℕ) : ProCGroupPredicate.{u} :=
  ProCGroups.ProC.finiteGroupClassProCPredicate (FiniteGroupClass.pGroup p)

The standard pro-\(p\) predicate defines a pro-\(C\) class.

def proSigmaProC (sigma : Set ℕ) : ProCGroupPredicate.{u} :=
  ProCGroups.ProC.finiteGroupClassProCPredicate (FiniteGroupClass.sigmaGroup sigma)

Pro-\(\Sigma\) groups, for a set \(\Sigma\) of primes.

theorem proSigmaProC_finiteQuotientClass_iff
    {sigma : Set ℕ} {Q : Type u} [Group Q] [Finite Q] :
    (proSigmaProC sigma).finiteQuotientClass Q ↔
      FiniteGroupClass.sigmaGroup sigma Q

On finite groups, the finite quotient class of \(\mathrm{proSigmaProC}\) is exactly \(\mathrm{sigmaGroup}\).

Show proof
def abelianExponentProC (n : ℕ) : ProCGroupPredicate.{u} :=
  ProCGroups.ProC.finiteGroupClassProCPredicate (FiniteGroupClass.abelianExponent n)

This predicate consists of pro-abelian groups whose finite quotients all have exponent dividing \(n\).

instance proabelianProC_hasFiniteQuotientFormation :
  ProCGroupPredicate.HasFiniteQuotientFormation
      (proabelianProC : ProCGroupPredicate.{u}) :=
  ProCGroupPredicate.finiteQuotientFormation_finiteGroupClassProCPredicate
    FiniteGroupClass.abelian FiniteGroupClass.abelian_formation

The pro-abelian predicate is stable under the finite-quotient formation operations.

instance proabelianProC_determinedByFiniteQuotients :
  ProCGroupPredicate.DeterminedByFiniteQuotients
      (proabelianProC : ProCGroupPredicate.{u}) :=
  ProCGroupPredicate.determinedByFiniteQuotients_finiteGroupClassProCPredicate
    FiniteGroupClass.abelian FiniteGroupClass.abelian_formation

The pro-abelian predicate is determined by its finite quotients.

instance proPProC_hasFiniteQuotientFormation (p : ℕ) :
  ProCGroupPredicate.HasFiniteQuotientFormation
      (proPProC p : ProCGroupPredicate.{u}) :=
  ProCGroupPredicate.finiteQuotientFormation_finiteGroupClassProCPredicate
    (FiniteGroupClass.pGroup p) (FiniteGroupClass.pGroup_formation p)

The pro-\(p\) predicate is stable under the finite-quotient formation operations.

instance proPProC_determinedByFiniteQuotients (p : ℕ) :
  ProCGroupPredicate.DeterminedByFiniteQuotients
      (proPProC p : ProCGroupPredicate.{u}) :=
  ProCGroupPredicate.determinedByFiniteQuotients_finiteGroupClassProCPredicate
    (FiniteGroupClass.pGroup p) (FiniteGroupClass.pGroup_formation p)

The pro-\(p\) predicate is determined by its finite quotients.

instance proSigmaProC_hasFiniteQuotientFormation (sigma : Set ℕ) :
  ProCGroupPredicate.HasFiniteQuotientFormation
      (proSigmaProC sigma : ProCGroupPredicate.{u}) :=
  ProCGroupPredicate.finiteQuotientFormation_finiteGroupClassProCPredicate
    (FiniteGroupClass.sigmaGroup sigma) (FiniteGroupClass.sigmaGroup_formation sigma)

The pro-\(\Sigma\) predicate is stable under the finite-quotient formation operations.

instance proSigmaProC_hasFiniteQuotientFullFormation (sigma : Set ℕ) :
  ProCGroupPredicate.HasFiniteQuotientFullFormation
      (proSigmaProC sigma : ProCGroupPredicate.{u}) :=
  ProCGroupPredicate.finiteQuotientFullFormation_finiteGroupClassProCPredicate
    (FiniteGroupClass.sigmaGroup sigma) (FiniteGroupClass.sigmaGroup_fullFormation sigma)

The pro-\(\Sigma\) predicate has the full finite quotient formation structure.

instance proSigmaProC_determinedByFiniteQuotients (sigma : Set ℕ) :
  ProCGroupPredicate.DeterminedByFiniteQuotients
      (proSigmaProC sigma : ProCGroupPredicate.{u}) :=
  ProCGroupPredicate.determinedByFiniteQuotients_finiteGroupClassProCPredicate
    (FiniteGroupClass.sigmaGroup sigma) (FiniteGroupClass.sigmaGroup_formation sigma)

The pro-\(\Sigma\) predicate is determined by its finite quotients.

instance abelianExponentProC_hasFiniteQuotientFormation (n : ℕ) :
  ProCGroupPredicate.HasFiniteQuotientFormation
      (abelianExponentProC n : ProCGroupPredicate.{u}) :=
  ProCGroupPredicate.finiteQuotientFormation_finiteGroupClassProCPredicate
    (FiniteGroupClass.abelianExponent n) (FiniteGroupClass.abelianExponent_formation n)

The bounded-exponent abelian predicate is stable under finite-quotient formation operations.

instance abelianExponentProC_determinedByFiniteQuotients (n : ℕ) :
  ProCGroupPredicate.DeterminedByFiniteQuotients
      (abelianExponentProC n : ProCGroupPredicate.{u}) :=
  ProCGroupPredicate.determinedByFiniteQuotients_finiteGroupClassProCPredicate
    (FiniteGroupClass.abelianExponent n) (FiniteGroupClass.abelianExponent_formation n)

The bounded-exponent abelian predicate is determined by its finite quotients.

theorem procyclicProC_holds_iff
    {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G] :
    procyclicProC (G := G) ↔ IsProcyclicGroup G

The named procyclic predicate unfolds to \(\mathrm{IsProcyclicGroup}\).

Show proof
theorem proabelianProC_holds_iff
    {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G] :
    proabelianProC (G := G) ↔ IsProabelianGroup G

The named pro-abelian predicate unfolds to \(\mathrm{IsProabelianGroup}\).

Show proof
theorem pronilpotentProC_holds_iff
    {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G] :
    pronilpotentProC (G := G) ↔ IsPronilpotentGroup G

The named pronilpotent predicate is equivalent to IsPronilpotentGroup.

Show proof
theorem prosolvableProC_holds_iff
    {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G] :
    prosolvableProC (G := G) ↔ IsProsolvableGroup G

The named prosolvable predicate is equivalent to IsProsolvableGroup.

Show proof
theorem proPProC_holds_iff
    {p : ℕ} {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G] :
    proPProC p (G := G) ↔ IsProPGroup p G

The named pro-\(p\) predicate unfolds to \(\mathrm{IsProPGroup}\).

Show proof
theorem proSigmaProC_holds_iff
    {sigma : Set ℕ} {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G] :
    proSigmaProC sigma (G := G) ↔ IsProSigmaGroup sigma G

The named pro-\(\Sigma\) predicate unfolds to \(\mathrm{IsProSigmaGroup}\).

Show proof
theorem abelianExponentProC_holds_iff
    {n : ℕ} {G : Type u} [Group G] [TopologicalSpace G] [IsTopologicalGroup G] :
    abelianExponentProC n (G := G) ↔
      IsProCGroup (FiniteGroupClass.abelianExponent n) G

The named bounded-exponent abelian predicate unfolds to the corresponding concrete pro-\(C\) condition.

Show proof
  theorem isPronilpotentGroup (hG : IsProPGroup p G) : IsPronilpotentGroup G

A pro-\(p\) group is pronilpotent.

Show proof
  theorem isProsolvableGroup (hG : IsProPGroup p G) : IsProsolvableGroup G

A pro-\(p\) group is prosolvable.

Show proof