Module

FreeBasis.lean

Nyll.ProCGroups.ReidemeisterSchreier.Discrete.OpenSubgroups.FreeBasis
15 declarations indexed from sourceView source ↗

Reidemeister Schreier / Discrete / Open Subgroups / Free Basis

Using the action groupoid and Schreier prefix tree, this module constructs a free basis indexed by complement edges and transports it to the canonical type of nontrivial Schreier pairs.

Declarations

ReidemeisterSchreier.Discrete.OpenSubgroups.FreeGroupBasis.actionGroupoidGeneratorTotalEquiv

The total generator arrows in the action groupoid attached to a chosen free basis are indexed by a pair consisting of a vertex and a basis element.

Source context 2 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
def FreeGroupBasis.actionGroupoidGeneratorTotalEquiv
    {ι G A : Type u} [Group G] [MulAction G A] (b : FreeGroupBasis ι G) :
    letI : IsFreeGroupoid (CategoryTheory.ActionCategory G A) :=
      FreeGroupBasis.actionGroupoidIsFree b
    Quiver.Total (IsFreeGroupoid.Generators (CategoryTheory.ActionCategory G A)) ≃ A × ι := by
  refine
    { toFun := fun e =>
        ((@Quiver.Total.left (IsFreeGroupoid.Generators (CategoryTheory.ActionCategory G A))
            (FreeGroupBasis.actionGroupoidIsFree b).quiverGenerators e).back,
          (@Quiver.Total.hom (IsFreeGroupoid.Generators (CategoryTheory.ActionCategory G A))
            (FreeGroupBasis.actionGroupoidIsFree b).quiverGenerators e).1)
      invFun := fun ai =>
        @Quiver.Total.mk (IsFreeGroupoid.Generators (CategoryTheory.ActionCategory G A))
          (FreeGroupBasis.actionGroupoidIsFree b).quiverGenerators
          (ai.1 : CategoryTheory.ActionCategory G A)
          ((b ai.2 • ai.1 : A) : CategoryTheory.ActionCategory G A) ⟨ai.2, rfl⟩
      left_inv := ?_
      right_inv := ?_ }
  · intro e
    cases e with
    | mk left right hom =>
        induction left with
        | mk a =>
            induction right with
            | mk a' =>
                cases hom with
                | mk i hi =>
                    dsimp
                    cases hi
                    rfl
  · intro ai
    rfl
ReidemeisterSchreier.Discrete.OpenSubgroups.schreierComplementEdges

Complement edges of the symmetrized Schreier prefix tree. These are the canonical indexing objects for the Schreier free basis.

Source context 2 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
abbrev schreierComplementEdges
    {X : Type u} [DecidableEq X] {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
    (hT : IsRightSchreierTransversal (X := X) L T) : Type u
ReidemeisterSchreier.Discrete.OpenSubgroups.schreierComplementEdgesBasis

The Schreier basis indexed by complement edges of the prefix tree.

Source context 2 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
def schreierComplementEdgesBasis
    {X : Type u} [DecidableEq X] {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
    (hT : IsRightSchreierTransversal (X := X) L T) :
    FreeGroupBasis (schreierComplementEdges (X := X) hT) L
ReidemeisterSchreier.Discrete.OpenSubgroups.schreierComplementEdgesEquivNontrivialPairs

Complement edges are equivalent to nontrivial Schreier pairs.

Source context 2 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
def schreierComplementEdgesEquivNontrivialPairs
    {X : Type u} [DecidableEq X] {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
    (hT : IsRightSchreierTransversal (X := X) L T) :
    schreierComplementEdges (X := X) hT ≃ NontrivialSchreierPair (X := X) hT
ReidemeisterSchreier.Discrete.OpenSubgroups.nontrivialSchreierPairsEquivSchreierGeneratorSet

Auxiliary bridge from nontrivial Schreier pairs to the classical Schreier generator value set.

Source context 2 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
def nontrivialSchreierPairsEquivSchreierGeneratorSet
    {X : Type u} [DecidableEq X] {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
    (hT : IsRightSchreierTransversal (X := X) L T) :
    NontrivialSchreierPair (X := X) hT ≃ ↥(schreierGeneratorSet (X := X) hT)
ReidemeisterSchreier.Discrete.OpenSubgroups.nontrivialSchreierPairBasis

The Schreier free basis indexed by nontrivial Schreier pairs. This is the preferred Schreier-basis formulation; the classical value-set basis is a reindexing of this one.

Source context 2 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
def nontrivialSchreierPairBasis
    {X : Type u} [DecidableEq X] {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
    (hT : IsRightSchreierTransversal (X := X) L T) :
    FreeGroupBasis (NontrivialSchreierPair (X := X) hT) L
ReidemeisterSchreier.Discrete.OpenSubgroups.nontrivialSchreierPairBasisEquiv

The free group equivalence obtained directly from the preferred pair-indexed Schreier basis.

Source context 2 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
def nontrivialSchreierPairBasisEquiv
    {X : Type u} [DecidableEq X] {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
    (hT : IsRightSchreierTransversal (X := X) L T) :
    FreeGroup (NontrivialSchreierPair (X := X) hT) ≃* L
ReidemeisterSchreier.Discrete.OpenSubgroups.nontrivialSchreierPairBasisEquiv_of

The preferred pair-indexed basis equivalence sends each free generator to its Schreier basis element.

Source context 2 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
theorem nontrivialSchreierPairBasisEquiv_of
    {X : Type u} [DecidableEq X] {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
    (hT : IsRightSchreierTransversal (X := X) L T)
    (p : NontrivialSchreierPair (X := X) hT) :
    nontrivialSchreierPairBasisEquiv (X := X) hT (FreeGroup.of p) =
      nontrivialSchreierPairBasis (X := X) hT p
ReidemeisterSchreier.Discrete.OpenSubgroups.nontrivialSchreierPairsEquivSchreierGeneratorSet_apply

The Reidemeister--Schreier equivalence is evaluated by the chosen nontrivial Schreier pair and its associated generator.

Source context 2 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
theorem nontrivialSchreierPairsEquivSchreierGeneratorSet_apply
    {X : Type u} [DecidableEq X] {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
    (hT : IsRightSchreierTransversal (X := X) L T)
    (p : NontrivialSchreierPair (X := X) hT) :
    ((nontrivialSchreierPairsEquivSchreierGeneratorSet (X := X) hT p :
        ↥(schreierGeneratorSet (X := X) hT)) : L) =
      schreierGenerator (X := X) hT ((p.1.1 : T) : FreeGroup X) p.1.2
ReidemeisterSchreier.Discrete.OpenSubgroups.schreierGenerator_injective_of_nontrivial

The Schreier-generator map is injective on nontrivial Schreier pairs.

Source context 2 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
theorem schreierGenerator_injective_of_nontrivial
    {X : Type u} [DecidableEq X] {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
    (hT : IsRightSchreierTransversal (X := X) L T) :
    Function.Injective
      (nontrivialSchreierPairGenerator (X := X) hT)
ReidemeisterSchreier.Discrete.OpenSubgroups.natCard_schreierTransversal_eq_index

A right Schreier transversal has cardinality equal to the corresponding right-coset index.

Source context 2 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
theorem natCard_schreierTransversal_eq_index
    {X : Type u} [DecidableEq X]
    {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
    (hT : IsRightSchreierTransversal (X := X) L T) :
    Nat.card T = Nat.card (Quotient (QuotientGroup.rightRel L))
ReidemeisterSchreier.Discrete.OpenSubgroups.natCard_schreierComplementEdges_eq_rankTransform_direct

The direct combinatorial count of complement edges in the Schreier prefix tree: all labelled edges minus tree edges.

Source context 2 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
theorem natCard_schreierComplementEdges_eq_rankTransform_direct
    {X : Type u} [DecidableEq X] [Finite X]
    {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
    [Finite T]
    (hT : IsRightSchreierTransversal (X := X) L T) :
    Nat.card (schreierComplementEdges (X := X) hT) =
      _root_.ReidemeisterSchreier.Schreier.rankTransform (Nat.card X) (Nat.card T)
ReidemeisterSchreier.Discrete.OpenSubgroups.natCard_nontrivialSchreierPairs_eq_rankTransform_direct

The preferred pair-indexed generator type has cardinality equal to the Schreier rank-transform count.

Source context 2 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
theorem natCard_nontrivialSchreierPairs_eq_rankTransform_direct
    {X : Type u} [DecidableEq X] [Finite X]
    {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
    [Finite T]
    (hT : IsRightSchreierTransversal (X := X) L T) :
    Nat.card (NontrivialSchreierPair (X := X) hT) =
      _root_.ReidemeisterSchreier.Schreier.rankTransform (Nat.card X) (Nat.card T)
ReidemeisterSchreier.Discrete.OpenSubgroups.natCard_nontrivialSchreierPairs_eq_rankTransform

The number of nontrivial Schreier pairs equals the Schreier rank-transform count, with the index written as the usual left-coset quotient.

Source context 2 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
theorem natCard_nontrivialSchreierPairs_eq_rankTransform
    {X : Type u} [DecidableEq X] [Finite X]
    {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
    [Finite (FreeGroup X ⧸ L)]
    (hT : IsRightSchreierTransversal (X := X) L T) :
    Nat.card (NontrivialSchreierPair (X := X) hT) =
      _root_.ReidemeisterSchreier.Schreier.rankTransform (Nat.card X) (Nat.card (FreeGroup X ⧸
          L))
ReidemeisterSchreier.Discrete.OpenSubgroups.exists_freeBasis_subgroupOfFreeGroup_of_rankTransform

A finite-index subgroup of a free group admits a free basis of Schreier-transformed cardinality.

Source context 2 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
theorem exists_freeBasis_subgroupOfFreeGroup_of_rankTransform
    {X : Type u} {L : Subgroup (FreeGroup X)} [Finite X] [Finite (FreeGroup X ⧸ L)] :
    ∃ Y : Type u, Nonempty (FreeGroupBasis Y L) ∧
      Nat.card Y = _root_.ReidemeisterSchreier.Schreier.rankTransform
        (Nat.card X) (Nat.card (FreeGroup X ⧸ L))