ReidemeisterSchreier.Profinite.OpenSubgroups.SchreierTransversals

58 Theorem | 21 Definition | 1 Abbreviation | 1 Structure | 1 Inductive | 4 Instance

This module supplies the topological part of the construction. It checks continuity and stagewise neighborhood properties so that the completed object inherits the required topology.

import
Imported by

Declarations

noncomputable abbrev openSubgroupLeftSchreierSection (H : OpenSubgroup F) :
    F ⧸ (H : Subgroup F) → F :=
  ProCGroups.ProC.quotientOpenSubgroupSection (H : Subgroup F)

The normalized continuous section of the left quotient by an open subgroup.

theorem openSubgroupLeftSchreierSection_rightInverse (H : OpenSubgroup F) :
    Function.RightInverse (openSubgroupLeftSchreierSection (F := F) H)
      (QuotientGroup.mk (s := (H : Subgroup F)))

The left Schreier generator or next-coset formula is obtained by evaluating the chosen section cocycle.

Show proof
theorem continuous_openSubgroupLeftSchreierSection (H : OpenSubgroup F) :
    Continuous (openSubgroupLeftSchreierSection (F := F) H)

The corresponding Schreier section is continuous.

Show proof
@[simp] theorem openSubgroupLeftSchreierSection_mk
    (H : OpenSubgroup F) (q : F ⧸ (H : Subgroup F)) :
    QuotientGroup.mk (s := (H : Subgroup F))
        (openSubgroupLeftSchreierSection (F := F) H q) = q

The Schreier generator component used in the corresponding rewriting calculation.

Show proof
@[simp] theorem openSubgroupLeftSchreierSection_one
    (H : OpenSubgroup F) :
    openSubgroupLeftSchreierSection (F := F) H
        (QuotientGroup.mk (s := (H : Subgroup F)) (1 : F)) = 1

The left Schreier generator or next-coset formula is obtained by evaluating the chosen section cocycle.

Show proof
noncomputable def openSubgroupRightQuotientEquivLeftQuotientOfNormal
    (H : OpenSubgroup F) [Subgroup.Normal (H : Subgroup F)] :
    OpenSubgroupRightQuotient H ≃ F ⧸ (H : Subgroup F) where
  toFun :=
    Quotient.map' id fun a b hab => by
      rw [QuotientGroup.leftRel_apply]
      exact Subgroup.Normal.mem_comm (show Subgroup.Normal (H : Subgroup F) by infer_instance)
        (QuotientGroup.rightRel_apply.mp hab)
  invFun :=
    Quotient.map' id fun a b hab => by
      rw [QuotientGroup.rightRel_apply]
      exact Subgroup.Normal.mem_comm (show Subgroup.Normal (H : Subgroup F) by infer_instance)
        (QuotientGroup.leftRel_apply.mp hab)
  left_inv := by
    intro q
    refine Quotient.inductionOn' q ?_
    intro g
    rfl
  right_inv := by
    intro q
    refine Quotient.inductionOn' q ?_
    intro g
    rfl

For a normal open subgroup, right and left cosets can be identified by the same representative. It packages mutually inverse maps as an algebraic or topological equivalence.

theorem rightCosetSection_eq_leftCosetSection_of_normal
    (H : OpenSubgroup F) [Subgroup.Normal (H : Subgroup F)]
    (q : OpenSubgroupRightQuotient H) :
    Quotient.mk'' (openSubgroupLeftSchreierSection (F := F) H
      (openSubgroupRightQuotientEquivLeftQuotientOfNormal (F := F) H q)) = q

Under normality, the left Schreier section also represents the corresponding right coset.

Show proof
inductive SchreierOrientation where
  | left
  | right
deriving DecidableEq

The two cocycle orientations used by left- and right-coset Schreier generators.

def cocycle {Q : Type u} (o : SchreierOrientation)
    (sec : Q → F) (next : Q → X → Q) (ι : X → F) (q : Q) (x : X) : F :=
  match o with
  | left => (sec (next q x))⁻¹ * sec q * ι x
  | right => sec q * ι x * (sec (next q x))⁻¹

The oriented Schreier cocycle associated to a section and a next-coset operation.

structure SchreierSection where
  Q : Type u
  orientation : SchreierOrientation
  sectionMap : Q → F
  next : (X → F) → Q → X → Q
  cocycle_mem :
    ∀ (ι : X → F) (q : Q) (x : X),
      orientation.cocycle sectionMap (next ι) ι q x ∈ (H : Subgroup F)

A section-level Schreier generator package. It abstracts over the quotient type, the left/right cocycle orientation, and the next-coset operation, so the common generator-set, continuity, closure, and cardinality formulation can be formulated once.

noncomputable def generator (S : SchreierSection (F := F) (X := X) H)
    (ι : X → F) (q : S.Q) (x : X) : ↥(H : Subgroup F) :=
  ⟨S.orientation.cocycle S.sectionMap (S.next ι) ι q x, S.cocycle_mem ι q x⟩

The subgroup-valued generator attached to an abstract Schreier section.

@[simp] theorem generator_coe (S : SchreierSection (F := F) (X := X) H)
    (ι : X → F) (q : S.Q) (x : X) :
    ((S.generator ι q x : ↥(H : Subgroup F)) : F) =
      S.orientation.cocycle S.sectionMap (S.next ι) ι q x

The Schreier generator component used in the corresponding rewriting calculation.

Show proof
def generatorSet (S : SchreierSection (F := F) (X := X) H)
    (ι : X → F) : Set ↥(H : Subgroup F) :=
  {z | ∃ q : S.Q, ∃ x : X, z = S.generator ι q x ∧ z ≠ 1}

Nontrivial generator values of an abstract Schreier section.

def NontrivialPairs (S : SchreierSection (F := F) (X := X) H)
    (ι : X → F) : Type (max u v) :=
  {p : S.Q × X // S.generator ι p.1 p.2 ≠ 1}

This type records the nontrivial Schreier pairs whose cocycle values form the abstract Schreier generator set.

instance finite_nontrivialPairs
    (S : SchreierSection (F := F) (X := X) H) (ι : X → F)
    [Finite X] [Finite S.Q] :
    Finite (S.NontrivialPairs ι) :=
  Finite.of_injective (fun p : S.NontrivialPairs ι => p.1) (by
    intro a b h
    exact Subtype.ext h)

The abstract Schreier generator or next-coset formula is obtained by evaluating the chosen section cocycle.

noncomputable def nontrivialPairsToGeneratorSet
    (S : SchreierSection (F := F) (X := X) H) (ι : X → F) :
    S.NontrivialPairs ι → ↥(S.generatorSet ι) := fun p =>
  ⟨S.generator ι p.1.1 p.1.2, ⟨p.1.1, p.1.2, rfl, p.2⟩⟩

The tautological map from nontrivial abstract Schreier pairs to the generator value set.

theorem surjective_nontrivialPairsToGeneratorSet
    (S : SchreierSection (F := F) (X := X) H) (ι : X → F) :
    Function.Surjective (S.nontrivialPairsToGeneratorSet ι)

The map from nontrivial abstract Schreier pairs onto the abstract Schreier generator set is surjective.

Show proof
theorem natCard_generatorSet_le_nontrivialPairs
    (S : SchreierSection (F := F) (X := X) H) (ι : X → F)
    [Finite X] [Finite S.Q] :
    Nat.card (S.generatorSet ι) ≤ Nat.card (S.NontrivialPairs ι)

The number of nontrivial abstract Schreier pairs is bounded by the corresponding finite coset-generator product.

Show proof
theorem natCard_nontrivialPairs_le
    (S : SchreierSection (F := F) (X := X) H) (ι : X → F)
    [Finite X] [Finite S.Q] :
    Nat.card (S.NontrivialPairs ι) ≤ Nat.card S.Q * Nat.card X

The number of nontrivial abstract Schreier pairs is bounded by the corresponding finite coset-generator product.

Show proof
theorem natCard_generatorSet_le
    (S : SchreierSection (F := F) (X := X) H) (ι : X → F)
    [Finite X] [Finite S.Q] :
    Nat.card (S.generatorSet ι) ≤ Nat.card S.Q * Nat.card X

The abstract Schreier generator set has the corresponding finite cardinality bound.

Show proof
theorem subgroupClosure_generatorSet_eq_closure_range
    (S : SchreierSection (F := F) (X := X) H) (ι : X → F) :
    Subgroup.closure (S.generatorSet ι) =
      Subgroup.closure (Set.range fun p : S.Q × X => S.generator ι p.1 p.2)

The subgroup closure of the abstract Schreier generator set is the closure of the corresponding generator-map range.

Show proof
theorem topologicallyGenerates_generatorSet_iff
    (S : SchreierSection (F := F) (X := X) H) (ι : X → F) :
    ProCGroups.Generation.TopologicallyGenerates (G := ↥(H : Subgroup F))
        (S.generatorSet ι) ↔
      ProCGroups.Generation.TopologicallyGenerates (G := ↥(H : Subgroup F))
        (Set.range fun p : S.Q × X => S.generator ι p.1 p.2)

The Schreier generator family topologically generates precisely when the corresponding subgroup-generation condition holds.

Show proof
theorem generator_eq_one_iff_left
    (S : SchreierSection (F := F) (X := X) H)
    (hleft : S.orientation = SchreierOrientation.left)
    (ι : X → F) (q : S.Q) (x : X) :
    S.generator ι q x = 1 ↔ S.sectionMap (S.next ι q x) = S.sectionMap q * ι x

It characterizes exactly when generator identity with the unit equivalence left is equal to the unit. The proof is tied to the chosen Schreier transversal, the induced coset representatives, and the rewritten subgroup generators.

Show proof
theorem generator_eq_one_iff_right
    (S : SchreierSection (F := F) (X := X) H)
    (hright : S.orientation = SchreierOrientation.right)
    (ι : X → F) (q : S.Q) (x : X) :
    S.generator ι q x = 1 ↔ S.sectionMap (S.next ι q x) = S.sectionMap q * ι x

The right Schreier generator is trivial exactly in the corresponding unit-representative case.

Show proof
theorem generator_eq_of_section_next_eq_one
    (S : SchreierSection (F := F) (X := X) H)
    (ι : X → F) (q : S.Q) (x : X)
    (hnext : S.sectionMap (S.next ι q x) = 1)
    (hmem : S.sectionMap q * ι x ∈ (H : Subgroup F)) :
    S.generator ι q x = ⟨S.sectionMap q * ι x, hmem⟩

The rewritten Reidemeister--Schreier generator evaluates to the identity when the next section value is the basepoint.

Show proof
theorem continuous_generator
    (S : SchreierSection (F := F) (X := X) H)
    [TopologicalSpace S.Q] [TopologicalSpace X]
    (ι : X → F)
    (hsection : Continuous S.sectionMap)
    (hnext : Continuous (fun p : S.Q × X => S.next ι p.1 p.2))
    (hι : Continuous ι) :
    Continuous (fun p : S.Q × X => S.generator ι p.1 p.2)

The abstract Schreier section generator is the cocycle value determined by the chosen section and next coset.

Show proof
Definition sectionCocycle GitHub
def sectionCocycle {Q : Type u} (σ : Q → F) (next : Q → X → Q) (ι : X → F) :
    Q → X → F :=
  fun q x => (σ (next q x))⁻¹ * σ q * ι x

The raw Schreier section cocycle for a section, a next-coset operation, and ambient generators.

def leftSchreierNextCoset (q : F ⧸ (H : Subgroup F)) (x : X) : F ⧸ (H : Subgroup F) :=
  QuotientGroup.mk (s := (H : Subgroup F)) (σ q * ι x)

The next left coset obtained from a chosen representative and a generator.

noncomputable def leftSchreierGenerator
    (hσ : Function.RightInverse σ (QuotientGroup.mk (s := (H : Subgroup F))))
    (q : F ⧸ (H : Subgroup F)) (x : X) :
    ↥(H : Subgroup F) := by
  let qx := leftSchreierNextCoset (F := F) H σ ι q x
  refine ⟨sectionCocycle (F := F) (X := X) σ
    (leftSchreierNextCoset (F := F) H σ ι) ι q x, ?_⟩
  have hqx :
      QuotientGroup.mk (s := (H : Subgroup F)) (σ qx) =
        QuotientGroup.mk (s := (H : Subgroup F)) (σ q * ι x) := by
    simpa [qx, leftSchreierNextCoset] using hσ qx
  simpa [sectionCocycle, mul_assoc] using (QuotientGroup.eq.1 hqx)

Left-coset Schreier generator attached to a section of the quotient by an open subgroup.

noncomputable def leftSchreierSection :
    SchreierSection (F := F) (X := X) H where
  Q := F ⧸ (H : Subgroup F)
  orientation := SchreierOrientation.left
  sectionMap := σ
  next := fun ι q x => leftSchreierNextCoset (F := F) H σ ι q x
  cocycle_mem := by
    intro ι q x
    exact (leftSchreierGenerator (F := F) (H := H) (σ := σ) (hσ := hσ) (ι := ι) q x).property

The left-coset Schreier data as an instance of the abstract section formulation.

@[simp] theorem leftSchreierSection_generator
    (q : F ⧸ (H : Subgroup F)) (x : X) :
    (leftSchreierSection (F := F) (H := H) (σ := σ) (hσ := hσ) :
        SchreierSection (F := F) (X := X) H).generator ι q x =
      leftSchreierGenerator (F := F) (H := H) (σ := σ) (hσ := hσ) (ι := ι) q x

The left Schreier section generator is the cocycle value determined by the chosen section and next coset.

Show proof
noncomputable def chosenLeftSchreierSection :
    SchreierSection (F := F) (X := X) H :=
  leftSchreierSection (F := F) (H := H)
    (σ := openSubgroupLeftSchreierSection (F := F) H)
    (hσ := openSubgroupLeftSchreierSection_rightInverse (F := F) H)

The normalized left quotient section as abstract Schreier section data.

theorem leftSchreierNextCoset_eq_of_mem
    (hσ : Function.RightInverse σ (QuotientGroup.mk (s := (H : Subgroup F))))
    {q : F ⧸ (H : Subgroup F)} {x : X}
    (hx : ι x ∈ (H : Subgroup F)) :
    leftSchreierNextCoset (F := F) H σ ι q x = q

The next left Schreier coset has the stated value under the membership hypothesis.

Show proof
theorem leftSchreierNextCoset_eq_basepoint_of_mul_mem
    {q : F ⧸ (H : Subgroup F)} {x : X}
    (hx : σ q * ι x ∈ (H : Subgroup F)) :
    leftSchreierNextCoset (F := F) H σ ι q x =
      QuotientGroup.mk (s := (H : Subgroup F)) (1 : F)

The next left Schreier coset is the basepoint when the chosen representative times the generator image lies in the subgroup.

Show proof
theorem leftSchreierGenerator_eq_of_mem
    {q : F ⧸ (H : Subgroup F)} {x : X}
    (hx : ι x ∈ (H : Subgroup F)) :
    leftSchreierGenerator (F := F) (H := H) (σ := σ) (hσ := hσ) (ι := ι) q x = ⟨ι x, hx⟩

The left Schreier generator has the displayed value under the subgroup-membership hypothesis.

Show proof
theorem leftSchreierGenerator_eq_one
    {q : F ⧸ (H : Subgroup F)} {x : X}
    (hx : ι x = 1) :
    leftSchreierGenerator (F := F) (H := H) (σ := σ) (hσ := hσ) (ι := ι) q x = 1

The left Schreier generator evaluates to the identity in the target subgroup presentation.

Show proof
theorem leftSchreierGenerator_eq_one_iff
    {H : OpenSubgroup F}
    {σ : F ⧸ (H : Subgroup F) → F}
    (hσ : Function.RightInverse σ (QuotientGroup.mk (s := (H : Subgroup F))))
    {ι : X → F}
    {q : F ⧸ (H : Subgroup F)} {x : X} :
    leftSchreierGenerator (F := F) (H := H) (σ := σ) (hσ := hσ) (ι := ι) q x = 1 ↔
      σ (leftSchreierNextCoset (F := F) H σ ι q x) = σ q * ι x

The Schreier generator is trivial exactly under the corresponding coset condition.

Show proof
theorem leftSchreierGenerator_eq_one_of_section_eq
    {q : F ⧸ (H : Subgroup F)} {x : X}
    (hrep : σ (leftSchreierNextCoset (F := F) H σ ι q x) = σ q * ι x) :
    leftSchreierGenerator (F := F) (H := H) (σ := σ) (hσ := hσ) (ι := ι) q x = 1

When the section representative is unchanged, the left Schreier generator evaluates to the identity.

Show proof
theorem leftSchreierGenerator_eq_of_mul_mem
    (hσ1 : σ (QuotientGroup.mk (s := (H : Subgroup F)) (1 : F)) = 1)
    {q : F ⧸ (H : Subgroup F)} {x : X}
    (hx : σ q * ι x ∈ (H : Subgroup F)) :
    leftSchreierGenerator (F := F) (H := H) (σ := σ) (hσ := hσ) (ι := ι) q x =
      ⟨σ q * ι x, hx⟩

The left Schreier generator evaluates to the displayed subgroup element under the multiplication-membership hypothesis.

Show proof
theorem continuous_leftSchreierNextCoset
    (hσcont : Continuous σ) (hιcont : Continuous ι) :
    Continuous (fun p : (F ⧸ (H : Subgroup F)) × X =>
      leftSchreierNextCoset (F := F) H σ ι p.1 p.2)

The corresponding Schreier next-coset map is continuous.

Show proof
theorem continuous_leftSchreierGenerator
    (hσcont : Continuous σ) (hιcont : Continuous ι) :
    Continuous (fun p : (F ⧸ (H : Subgroup F)) × X =>
      leftSchreierGenerator (F := F) (H := H) (σ := σ) (hσ := hσ) (ι := ι) p.1 p.2)

The corresponding Schreier generator map is continuous.

Show proof
theorem natCard_range_leftSchreierGenerator_le
    [Finite X] [Finite (F ⧸ (H : Subgroup F))] :
    Nat.card
        (Set.range fun p : (F ⧸ (H : Subgroup F)) × X =>
          leftSchreierGenerator (F := F) (H := H) (σ := σ) (hσ := hσ) (ι := ι) p.1 p.2) ≤
      Nat.card (F ⧸ (H : Subgroup F)) * Nat.card X

The range of the left Schreier generator map has the corresponding finite cardinality bound.

Show proof
def leftSchreierGeneratorSet : Set ↥(H : Subgroup F) :=
  {z | ∃ q : F ⧸ (H : Subgroup F), ∃ x : X,
    z = leftSchreierGenerator (F := F) (H := H) (σ := σ) (hσ := hσ) (ι := ι) q x ∧
      z ≠ 1}

The nontrivial left-coset Schreier generators attached to a section.

def leftNontrivialSchreierPairs : Type (max u v) :=
  {p : (F ⧸ (H : Subgroup F)) × X //
    leftSchreierGenerator (F := F) (H := H) (σ := σ) (hσ := hσ) (ι := ι) p.1 p.2 ≠ 1}

Nontrivial left Schreier pairs for a chosen section.

instance finite_leftNontrivialSchreierPairs
    [Finite X] [Finite (F ⧸ (H : Subgroup F))] :
    Finite (leftNontrivialSchreierPairs (F := F) H σ hσ ι) :=
  Finite.of_injective
    (fun p : leftNontrivialSchreierPairs (F := F) H σ hσ ι => p.1)
    (by
      intro a b h
      exact Subtype.ext h)

The left Schreier generator or next-coset formula is obtained by evaluating the chosen section cocycle.

theorem natCard_leftNontrivialSchreierPairs_le
    [Finite X] [Finite (F ⧸ (H : Subgroup F))] :
    Nat.card (leftNontrivialSchreierPairs (F := F) H σ hσ ι) ≤
      Nat.card (F ⧸ (H : Subgroup F)) * Nat.card X

The number of nontrivial left Schreier pairs is bounded by the corresponding finite coset-generator product.

Show proof
noncomputable def leftNontrivialSchreierPairsToGeneratorSet :
    leftNontrivialSchreierPairs (F := F) H σ hσ ι →
      ↥(leftSchreierGeneratorSet (F := F) H σ hσ ι) := fun p =>
  ⟨leftSchreierGenerator (F := F) (H := H) (σ := σ) (hσ := hσ) (ι := ι) p.1.1 p.1.2,
    ⟨p.1.1, p.1.2, rfl, p.2⟩⟩

The tautological map from nontrivial left Schreier pairs to the nontrivial generator set.

@[simp] theorem leftNontrivialSchreierPairsToGeneratorSet_apply
    (p : leftNontrivialSchreierPairs (F := F) H σ hσ ι) :
    ((leftNontrivialSchreierPairsToGeneratorSet (F := F) H σ hσ ι p :
        ↥(leftSchreierGeneratorSet (F := F) H σ hσ ι)) : ↥(H : Subgroup F)) =
      leftSchreierGenerator (F := F) (H := H) (σ := σ) (hσ := hσ) (ι := ι)
        p.1.1 p.1.2

The map from nontrivial left Schreier pairs to the generator set evaluates to the corresponding generator value.

Show proof
theorem surjective_leftNontrivialSchreierPairsToGeneratorSet :
    Function.Surjective
      (leftNontrivialSchreierPairsToGeneratorSet (F := F) H σ hσ ι)

The map from nontrivial left Schreier pairs onto the left Schreier generator set is surjective.

Show proof
theorem natCard_leftSchreierGeneratorSet_le_nontrivialPairs
    [Finite X] [Finite (F ⧸ (H : Subgroup F))] :
    Nat.card (leftSchreierGeneratorSet (F := F) H σ hσ ι) ≤
      Nat.card (leftNontrivialSchreierPairs (F := F) H σ hσ ι)

The number of nontrivial left Schreier pairs is bounded by the corresponding finite coset-generator product.

Show proof
theorem mem_leftSchreierGeneratorSet
    {H : OpenSubgroup F}
    {σ : F ⧸ (H : Subgroup F) → F}
    {hσ : Function.RightInverse σ (QuotientGroup.mk (s := (H : Subgroup F)))}
    {ι : X → F} {z : ↥(H : Subgroup F)} :
    z ∈ leftSchreierGeneratorSet (F := F) H σ hσ ι ↔
      ∃ q : F ⧸ (H : Subgroup F), ∃ x : X,
        z = leftSchreierGenerator (F := F) (H := H) (σ := σ) (hσ := hσ) (ι := ι) q x ∧
          z ≠ 1

The Schreier generator formula records the element determined by the chosen representative associated to the chosen transversal and letter.

Show proof
theorem leftSchreierGeneratorSet_subset_range :
    leftSchreierGeneratorSet (F := F) H σ hσ ι ⊆
      Set.range (fun p : (F ⧸ (H : Subgroup F)) × X =>
        leftSchreierGenerator (F := F) (H := H) (σ := σ) (hσ := hσ) (ι := ι) p.1 p.2)

The left Schreier generator set is contained in the range of the corresponding generator map.

Show proof
theorem subgroupClosure_leftSchreierGeneratorSet_eq_closure_range :
    Subgroup.closure (leftSchreierGeneratorSet (F := F) H σ hσ ι) =
      Subgroup.closure (Set.range fun p : (F ⧸ (H : Subgroup F)) × X =>
        leftSchreierGenerator (F := F) (H := H) (σ := σ) (hσ := hσ) (ι := ι) p.1 p.2)

The subgroup closure of the left Schreier generator set is the closure of the corresponding generator-map range.

Show proof
theorem topologicallyGenerates_leftSchreierGeneratorSet_iff
    {H : OpenSubgroup F}
    {σ : F ⧸ (H : Subgroup F) → F}
    {hσ : Function.RightInverse σ (QuotientGroup.mk (s := (H : Subgroup F)))}
    {ι : X → F} :
    ProCGroups.Generation.TopologicallyGenerates (G := ↥(H : Subgroup F))
        (leftSchreierGeneratorSet (F := F) H σ hσ ι) ↔
      ProCGroups.Generation.TopologicallyGenerates (G := ↥(H : Subgroup F))
        (Set.range fun p : (F ⧸ (H : Subgroup F)) × X =>
          leftSchreierGenerator (F := F) (H := H) (σ := σ) (hσ := hσ) (ι := ι) p.1 p.2)

The Schreier generator family topologically generates precisely when the corresponding subgroup-generation condition holds.

Show proof
theorem natCard_leftSchreierGeneratorSet_le
    [Finite X] [Finite (F ⧸ (H : Subgroup F))] :
    Nat.card (leftSchreierGeneratorSet (F := F) H σ hσ ι) ≤
      Nat.card (F ⧸ (H : Subgroup F)) * Nat.card X

The left Schreier generator set has the corresponding finite cardinality bound.

Show proof
instance instMulActionOpenSubgroupRightQuotient :
    MulAction F (OpenSubgroupRightQuotient H) :=
  rightCosetMulAction (H : Subgroup F)

The right quotient by an open subgroup carries the natural multiplication action.

def rightSchreierNextCoset (q : OpenSubgroupRightQuotient H) (x : X) :
    OpenSubgroupRightQuotient H :=
  (ι x)⁻¹ • q

The next right Schreier coset is obtained by acting on the current right coset by the inverse of the chosen generator image.

theorem rightSchreierNextCoset_basepoint_eq_of_mem
    {x : X} (hx : ι x ∈ (H : Subgroup F)) :
    rightSchreierNextCoset (F := F) H ι (openSubgroupRightCoset H (1 : F)) x =
      openSubgroupRightCoset H (1 : F)

The next right Schreier coset is the basepoint when the relevant representative-generator product lies in the subgroup.

Show proof
theorem rightSchreierNextCoset_eq_basepoint_of_mul_mem
    (hτ : ∀ q, Quotient.mk'' (τ q) = q)
    {q : OpenSubgroupRightQuotient H} {x : X}
    (hx : τ q * ι x ∈ (H : Subgroup F)) :
    rightSchreierNextCoset (F := F) H ι q x = openSubgroupRightCoset H (1 : F)

The next right Schreier coset is the basepoint when the relevant representative-generator product lies in the subgroup.

Show proof
noncomputable def rightSchreierGenerator (q : OpenSubgroupRightQuotient H) (x : X) :
    ↥(H : Subgroup F) :=
  rightQuotientSectionCocycle (H := (H : Subgroup F)) τ hτ (ι x) q

The Schreier generator formula records the element determined by the chosen representative associated to the chosen transversal and letter.

noncomputable def rightSchreierSection :
    SchreierSection (F := F) (X := X) H where
  Q := OpenSubgroupRightQuotient H
  orientation := SchreierOrientation.right
  sectionMap := τ
  next := fun ι q x => rightSchreierNextCoset (F := F) H ι q x
  cocycle_mem := by
    intro ι q x
    exact (rightSchreierGenerator (F := F) (H := H) (τ := τ) (hτ := hτ) (ι := ι) q x).property

The right-coset Schreier data as an instance of the abstract section formulation.

@[simp] theorem rightSchreierSection_generator
    (q : OpenSubgroupRightQuotient H) (x : X) :
    (rightSchreierSection (F := F) (H := H) (τ := τ) (hτ := hτ) :
        SchreierSection (F := F) (X := X) H).generator ι q x =
      rightSchreierGenerator (F := F) (H := H) (τ := τ) (hτ := hτ) (ι := ι) q x

The right Schreier section generator is the cocycle value determined by the chosen section and next coset.

Show proof
noncomputable def chosenRightSchreierSection :
    SchreierSection (F := F) (X := X) H :=
  rightSchreierSection (F := F) (H := H)
    (τ := openSubgroupRightCosetSection (F := F) H)
    (hτ := openSubgroupRightCosetSection_spec (F := F) H)

The normalized right quotient section as abstract Schreier section data.

theorem rightSchreierGenerator_eq_one
    {q : OpenSubgroupRightQuotient H} {x : X}
    (hx : ι x = 1) :
    rightSchreierGenerator (F := F) (H := H) (τ := τ) (hτ := hτ) (ι := ι) q x = 1

The right Schreier generator evaluates to the identity in the target subgroup presentation.

Show proof
theorem rightSchreierGenerator_eq_one_iff
    {H : OpenSubgroup F}
    {τ : OpenSubgroupRightQuotient H → F}
    (hτ : ∀ q, Quotient.mk'' (τ q) = q)
    {ι : X → F}
    {q : OpenSubgroupRightQuotient H} {x : X} :
    rightSchreierGenerator (F := F) (H := H) (τ := τ) (hτ := hτ) (ι := ι) q x = 1 ↔
      τ ((ι x)⁻¹ • q) = τ q * ι x

The Schreier generator is trivial exactly under the corresponding coset condition.

Show proof
theorem rightSchreierGenerator_eq_one_iff_nextCoset
    {H : OpenSubgroup F}
    {τ : OpenSubgroupRightQuotient H → F}
    (hτ : ∀ q, Quotient.mk'' (τ q) = q)
    {ι : X → F}
    {q : OpenSubgroupRightQuotient H} {x : X} :
    rightSchreierGenerator (F := F) (H := H) (τ := τ) (hτ := hτ) (ι := ι) q x = 1 ↔
      τ (rightSchreierNextCoset (F := F) H ι q x) = τ q * ι x

It characterizes exactly when right Schreier generator identity with the unit equivalence next coset is equal to the unit. The proof is tied to the chosen Schreier transversal, the induced coset representatives, and the rewritten subgroup generators.

Show proof
theorem rightSchreierGenerator_eq_one_of_section_eq
    {q : OpenSubgroupRightQuotient H} {x : X}
    (hrep : τ ((ι x)⁻¹ • q) = τ q * ι x) :
    rightSchreierGenerator (F := F) (H := H) (τ := τ) (hτ := hτ) (ι := ι) q x = 1

When the section representative is unchanged, the right Schreier generator evaluates to the identity.

Show proof
theorem rightSchreierGenerator_eq_of_mul_mem
    (hτ1 : τ (openSubgroupRightCoset H (1 : F)) = 1)
    {q : OpenSubgroupRightQuotient H} {x : X}
    (hx : τ q * ι x ∈ (H : Subgroup F)) :
    rightSchreierGenerator (F := F) (H := H) (τ := τ) (hτ := hτ) (ι := ι) q x =
      ⟨τ q * ι x, hx⟩

The right Schreier generator evaluates to the displayed subgroup element under the multiplication-membership hypothesis.

Show proof
theorem rightSchreierGenerator_basepoint_eq_of_mem
    (hτ1 : τ (openSubgroupRightCoset H (1 : F)) = 1)
    {x : X} (hx : ι x ∈ (H : Subgroup F)) :
    rightSchreierGenerator (F := F) (H := H) (τ := τ) (hτ := hτ) (ι := ι)
        (openSubgroupRightCoset H (1 : F)) x =
      ⟨ι x, hx⟩

The right Schreier generator has the displayed value under the subgroup-membership hypothesis.

Show proof
theorem continuous_rightSchreierNextCoset
    (hιcont : Continuous ι) :
    Continuous (fun p : OpenSubgroupRightQuotient H × X =>
      rightSchreierNextCoset (F := F) H ι p.1 p.2)

The corresponding Schreier next-coset map is continuous.

Show proof
theorem continuous_rightSchreierGenerator
    (hτcont : Continuous τ) (hιcont : Continuous ι) :
    Continuous (fun p : OpenSubgroupRightQuotient H × X =>
      rightSchreierGenerator (F := F) (H := H) (τ := τ) (hτ := hτ) (ι := ι) p.1 p.2)

The corresponding Schreier generator map is continuous.

Show proof
theorem natCard_range_rightSchreierGenerator_le
    [CompactSpace F] [Finite X] :
    Nat.card
        (Set.range fun p : OpenSubgroupRightQuotient H × X =>
          rightSchreierGenerator (F := F) (H := H) (τ := τ) (hτ := hτ) (ι := ι) p.1 p.2) ≤
      Nat.card (OpenSubgroupRightQuotient H) * Nat.card X

The range of the right Schreier generator map has the corresponding finite cardinality bound.

Show proof
def rightSchreierGeneratorSet : Set ↥(H : Subgroup F) :=
  {z | ∃ q : OpenSubgroupRightQuotient H, ∃ x : X,
    z = rightSchreierGenerator (F := F) (H := H) (τ := τ) (hτ := hτ) (ι := ι) q x ∧
      z ≠ 1}

The nontrivial right-coset Schreier generators attached to a section.

def rightNontrivialSchreierPairs : Type (max u v) :=
  {p : OpenSubgroupRightQuotient H × X //
    rightSchreierGenerator (F := F) (H := H) (τ := τ) (hτ := hτ) (ι := ι) p.1 p.2 ≠ 1}

Nontrivial right Schreier pairs for a chosen section.

instance finite_rightNontrivialSchreierPairs
    [Finite X] [Finite (OpenSubgroupRightQuotient H)] :
    Finite (rightNontrivialSchreierPairs (F := F) H τ hτ ι) :=
  Finite.of_injective
    (fun p : rightNontrivialSchreierPairs (F := F) H τ hτ ι => p.1)
    (by
      intro a b h
      exact Subtype.ext h)

The right Schreier generator or next-coset formula is obtained by evaluating the chosen section cocycle.

theorem natCard_rightNontrivialSchreierPairs_le
    [Finite X] [Finite (OpenSubgroupRightQuotient H)] :
    Nat.card (rightNontrivialSchreierPairs (F := F) H τ hτ ι) ≤
      Nat.card (OpenSubgroupRightQuotient H) * Nat.card X

The number of nontrivial right Schreier pairs is bounded by the corresponding finite coset-generator product.

Show proof
noncomputable def rightNontrivialSchreierPairsToGeneratorSet :
    rightNontrivialSchreierPairs (F := F) H τ hτ ι →
      ↥(rightSchreierGeneratorSet (F := F) H τ hτ ι) := fun p =>
  ⟨rightSchreierGenerator (F := F) (H := H) (τ := τ) (hτ := hτ) (ι := ι) p.1.1 p.1.2,
    ⟨p.1.1, p.1.2, rfl, p.2⟩⟩

The tautological map from nontrivial right Schreier pairs to the nontrivial generator set.

@[simp] theorem rightNontrivialSchreierPairsToGeneratorSet_apply
    (p : rightNontrivialSchreierPairs (F := F) H τ hτ ι) :
    ((rightNontrivialSchreierPairsToGeneratorSet (F := F) H τ hτ ι p :
        ↥(rightSchreierGeneratorSet (F := F) H τ hτ ι)) : ↥(H : Subgroup F)) =
      rightSchreierGenerator (F := F) (H := H) (τ := τ) (hτ := hτ) (ι := ι)
        p.1.1 p.1.2

The map from nontrivial right Schreier pairs to the generator set evaluates to the corresponding generator value.

Show proof
theorem surjective_rightNontrivialSchreierPairsToGeneratorSet :
    Function.Surjective
      (rightNontrivialSchreierPairsToGeneratorSet (F := F) H τ hτ ι)

The map from nontrivial right Schreier pairs onto the right Schreier generator set is surjective.

Show proof
theorem natCard_rightSchreierGeneratorSet_le_nontrivialPairs
    [Finite X] [Finite (OpenSubgroupRightQuotient H)] :
    Nat.card (rightSchreierGeneratorSet (F := F) H τ hτ ι) ≤
      Nat.card (rightNontrivialSchreierPairs (F := F) H τ hτ ι)

The number of nontrivial right Schreier pairs is bounded by the corresponding finite coset-generator product.

Show proof
theorem mem_rightSchreierGeneratorSet
    {H : OpenSubgroup F}
    {τ : OpenSubgroupRightQuotient H → F}
    {hτ : ∀ q, Quotient.mk'' (τ q) = q}
    {ι : X → F} {z : ↥(H : Subgroup F)} :
    z ∈ rightSchreierGeneratorSet (F := F) H τ hτ ι ↔
      ∃ q : OpenSubgroupRightQuotient H, ∃ x : X,
        z = rightSchreierGenerator (F := F) (H := H) (τ := τ) (hτ := hτ) (ι := ι) q x ∧
          z ≠ 1

The Schreier generator formula records the element determined by the chosen representative associated to the chosen transversal and letter.

Show proof
theorem rightSchreierGeneratorSet_subset_range :
    rightSchreierGeneratorSet (F := F) H τ hτ ι ⊆
      Set.range (fun p : OpenSubgroupRightQuotient H × X =>
        rightSchreierGenerator (F := F) (H := H) (τ := τ) (hτ := hτ) (ι := ι) p.1 p.2)

The right Schreier generator set is contained in the range of the corresponding generator map.

Show proof
theorem subgroupClosure_rightSchreierGeneratorSet_eq_closure_range :
    Subgroup.closure (rightSchreierGeneratorSet (F := F) H τ hτ ι) =
      Subgroup.closure (Set.range fun p : OpenSubgroupRightQuotient H × X =>
        rightSchreierGenerator (F := F) (H := H) (τ := τ) (hτ := hτ) (ι := ι) p.1 p.2)

The subgroup closure of the right Schreier generator set is the closure of the corresponding generator-map range.

Show proof
theorem topologicallyGenerates_rightSchreierGeneratorSet_iff
    {H : OpenSubgroup F}
    {τ : OpenSubgroupRightQuotient H → F}
    {hτ : ∀ q, Quotient.mk'' (τ q) = q}
    {ι : X → F} :
    ProCGroups.Generation.TopologicallyGenerates (G := ↥(H : Subgroup F))
        (rightSchreierGeneratorSet (F := F) H τ hτ ι) ↔
      ProCGroups.Generation.TopologicallyGenerates (G := ↥(H : Subgroup F))
        (Set.range fun p : OpenSubgroupRightQuotient H × X =>
          rightSchreierGenerator (F := F) (H := H) (τ := τ) (hτ := hτ) (ι := ι) p.1 p.2)

The Schreier generator family topologically generates precisely when the corresponding subgroup-generation condition holds.

Show proof
theorem natCard_rightSchreierGeneratorSet_le
    [CompactSpace F] [Finite X] :
    Nat.card (rightSchreierGeneratorSet (F := F) H τ hτ ι) ≤
      Nat.card (OpenSubgroupRightQuotient H) * Nat.card X

The right Schreier generator set has the corresponding finite cardinality bound.

Show proof
theorem rightQuotientBasepointProjectionHom_rightSchreierGenerator
    {A : Type*} [Group A]
    (ψ : F →* PermutationalWreathProduct A (OpenSubgroupRightQuotient H) F)
    (hψ :
      (SemidirectProduct.rightHom :
          PermutationalWreathProduct A (OpenSubgroupRightQuotient H) F →* F).comp ψ =
        MonoidHom.id F)
    (hτpure :
      ∀ q : OpenSubgroupRightQuotient H,
        wreathLeftCoordinate ψ
            (openSubgroupRightCoset H (1 : F)) (τ q) = 1)
    (q : OpenSubgroupRightQuotient H) (x : X) :
    rightQuotientBasepointProjectionHom (H : Subgroup F) ψ hψ
        (rightSchreierGenerator (F := F) (H := H) (τ := τ) (hτ := hτ) (ι := ι) q x) =
      wreathLeftCoordinate ψ q (ι x)

The basepoint projection induced by a wreath-product homomorphism evaluates a right Schreier generator by the corresponding left coordinate.

Show proof