Module

Transversals.lean

Nyll.ProCGroups.ReidemeisterSchreier.Discrete.OpenSubgroups.Transversals
16 declarations indexed from sourceView source ↗

Reidemeister Schreier / Discrete / Open Subgroups / Transversals

This module defines full and partial right Schreier transversals in free groups, proves their complement and prefix-closure properties, and supplies the existence and extension results used later.

Declarations

ReidemeisterSchreier.Discrete.OpenSubgroups.IsRightSchreierTransversal

A right Schreier transversal is a right transversal containing every initial segment of each of its elements.

Source context 5 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
section RightSchreierTransversals
open scoped Pointwise
open _root_.ReidemeisterSchreier.FreeGroup
def IsRightSchreierTransversal {X : Type u} [DecidableEq X]
    (L : Subgroup (FreeGroup X)) (T : Set (FreeGroup X)) : Prop
ReidemeisterSchreier.Discrete.OpenSubgroups.IsRightPartialSchreierTransversal

A right partial Schreier transversal is prefix-closed, contains 1, and meets each right coset in at most one element.

Source context 5 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
section RightSchreierTransversals
open scoped Pointwise
open _root_.ReidemeisterSchreier.FreeGroup
def IsRightPartialSchreierTransversal {X : Type u} [DecidableEq X]
    (L : Subgroup (FreeGroup X)) (T : Set (FreeGroup X)) : Prop
ReidemeisterSchreier.Discrete.OpenSubgroups.IsRightSchreierTransversal.isComplement

A right Schreier transversal gives the required complement to the subgroup action.

Source context 5 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
section RightSchreierTransversals
open scoped Pointwise
open _root_.ReidemeisterSchreier.FreeGroup
theorem IsRightSchreierTransversal.isComplement {X : Type u} [DecidableEq X]
    {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
    (hT : IsRightSchreierTransversal (X := X) L T) :
    Subgroup.IsComplement (L : Set (FreeGroup X)) T
ReidemeisterSchreier.Discrete.OpenSubgroups.IsRightSchreierTransversal.one_mem

A right Schreier transversal contains the identity word.

Source context 5 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
section RightSchreierTransversals
open scoped Pointwise
open _root_.ReidemeisterSchreier.FreeGroup
theorem IsRightSchreierTransversal.one_mem {X : Type u} [DecidableEq X]
    {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
    (hT : IsRightSchreierTransversal (X := X) L T) :
    (1 : FreeGroup X) ∈ T
ReidemeisterSchreier.Discrete.OpenSubgroups.IsRightSchreierTransversal.prefix_closed

A right Schreier transversal is closed under initial segments.

Source context 5 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
section RightSchreierTransversals
open scoped Pointwise
open _root_.ReidemeisterSchreier.FreeGroup
theorem IsRightSchreierTransversal.prefix_closed {X : Type u} [DecidableEq X]
    {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
    (hT : IsRightSchreierTransversal (X := X) L T)
    {t : FreeGroup X} (ht : t ∈ T) :
    freeGroupInitialSegments t ⊆ T
ReidemeisterSchreier.Discrete.OpenSubgroups.IsRightPartialSchreierTransversal.one_mem

A right partial Schreier transversal contains the identity word.

Source context 5 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
section RightSchreierTransversals
open scoped Pointwise
open _root_.ReidemeisterSchreier.FreeGroup
theorem IsRightPartialSchreierTransversal.one_mem {X : Type u} [DecidableEq X]
    {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
    (hT : IsRightPartialSchreierTransversal (X := X) L T) :
    (1 : FreeGroup X) ∈ T
ReidemeisterSchreier.Discrete.OpenSubgroups.IsRightPartialSchreierTransversal.prefix_closed

A right partial Schreier transversal is closed under initial segments.

Source context 5 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
section RightSchreierTransversals
open scoped Pointwise
open _root_.ReidemeisterSchreier.FreeGroup
theorem IsRightPartialSchreierTransversal.prefix_closed {X : Type u} [DecidableEq X]
    {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
    (hT : IsRightPartialSchreierTransversal (X := X) L T)
    {t : FreeGroup X} (ht : t ∈ T) :
    freeGroupInitialSegments t ⊆ T
ReidemeisterSchreier.Discrete.OpenSubgroups.IsRightPartialSchreierTransversal.eq_of_rightQuotient_eq

Two right Schreier transversal representatives are equal when their right quotients agree.

Source context 5 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
section RightSchreierTransversals
open scoped Pointwise
open _root_.ReidemeisterSchreier.FreeGroup
theorem IsRightPartialSchreierTransversal.eq_of_rightQuotient_eq
    {X : Type u} [DecidableEq X]
    {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
    (hT : IsRightPartialSchreierTransversal (X := X) L T)
    {a b : FreeGroup X} (ha : a ∈ T) (hb : b ∈ T)
    (hEq :
      (Quotient.mk'' a : Quotient (QuotientGroup.rightRel L)) =
        Quotient.mk'' b) :
    a = b
ReidemeisterSchreier.Discrete.OpenSubgroups.prefixParent_mem_of_partial

The prefix parent of a partial Schreier word satisfies the required membership condition.

Source context 5 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
section RightSchreierTransversals
open scoped Pointwise
open _root_.ReidemeisterSchreier.FreeGroup
theorem prefixParent_mem_of_partial {X : Type u} [DecidableEq X]
    {L : Subgroup (FreeGroup X)} {T : Set (FreeGroup X)}
    (hT : IsRightPartialSchreierTransversal (X := X) L T)
    {t : FreeGroup X} (ht : t ∈ T) :
    FreeGroup.prefixParent t ∈ T
ReidemeisterSchreier.Discrete.OpenSubgroups.chain_sUnion_isRightPartialSchreierTransversal

A nonempty chain of right partial Schreier transversals has a union that is again a right partial Schreier transversal. This is the chain-upper-bound step used in the Zorn construction.

Source context 5 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
section RightSchreierTransversals
open scoped Pointwise
open _root_.ReidemeisterSchreier.FreeGroup
theorem chain_sUnion_isRightPartialSchreierTransversal
    {X : Type u} [DecidableEq X]
    {L : Subgroup (FreeGroup X)} {c : Set (Set (FreeGroup X))}
    (hcn : c.Nonempty)
    (hc :
      ∀ ⦃s⦄, s ∈ c → ∀ ⦃t⦄, t ∈ c → s ≠ t → s ⊆ t ∨ t ⊆ s)
    (hcPartial :
      ∀ ⦃s⦄, s ∈ c → IsRightPartialSchreierTransversal (X := X) L s) :
    IsRightPartialSchreierTransversal (X := X) L (⋃₀ c)
ReidemeisterSchreier.Discrete.OpenSubgroups.exists_rightSchreierTransversal_of_partial

Every right partial Schreier transversal extends to a full right Schreier transversal.

Source context 5 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
section RightSchreierTransversals
open scoped Pointwise
open _root_.ReidemeisterSchreier.FreeGroup
theorem exists_rightSchreierTransversal_of_partial {X : Type u} [DecidableEq X]
    {L : Subgroup (FreeGroup X)} {T₀ : Set (FreeGroup X)}
    (hT₀ : IsRightPartialSchreierTransversal (X := X) L T₀) :
    ∃ T : Set (FreeGroup X), T₀ ⊆ T ∧ IsRightSchreierTransversal (X := X) L T
ReidemeisterSchreier.Discrete.OpenSubgroups.exists_rightSchreierTransversal

Every subgroup of a free group admits a right Schreier transversal.

Source context 5 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
section RightSchreierTransversals
open scoped Pointwise
open _root_.ReidemeisterSchreier.FreeGroup
theorem exists_rightSchreierTransversal {X : Type u} [DecidableEq X]
    (L : Subgroup (FreeGroup X)) :
    ∃ T : Set (FreeGroup X), IsRightSchreierTransversal (X := X) L T
ReidemeisterSchreier.Discrete.OpenSubgroups.generatorPower_sub_mem_of_rightQuotient_eq

If two generator powers determine the same right quotient, their difference lies in the subgroup.

Source context 5 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
section RightSchreierTransversals
open scoped Pointwise
open _root_.ReidemeisterSchreier.FreeGroup
theorem generatorPower_sub_mem_of_rightQuotient_eq {X : Type u}
    {L : Subgroup (FreeGroup X)} (x : X) {m n : ℕ} (hmn : m ≤ n)
    (hEq :
      (Quotient.mk'' ((FreeGroup.of x) ^ m) : Quotient (QuotientGroup.rightRel L)) =
        Quotient.mk'' ((FreeGroup.of x) ^ n)) :
    (FreeGroup.of x) ^ (n - m) ∈ L
ReidemeisterSchreier.Discrete.OpenSubgroups.isRightPartialSchreierTransversal_generatorPowers_of_minimalPower

The representatives built from minimal generator powers form a right partial Schreier transversal.

Source context 5 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
section RightSchreierTransversals
open scoped Pointwise
open _root_.ReidemeisterSchreier.FreeGroup
theorem isRightPartialSchreierTransversal_generatorPowers_of_minimalPower
    {X : Type u} [DecidableEq X] {L : Subgroup (FreeGroup X)} (x : X) {N : ℕ}
    (hN : 0 < N)
    (hmin : ∀ m : ℕ, 0 < m → m < N → (FreeGroup.of x) ^ m ∉ L) :
    IsRightPartialSchreierTransversal (X := X) L
      (Set.range fun i : Fin N => (FreeGroup.of x) ^ (i : ℕ)) := by
  refine ⟨?_, ?_, ?_⟩
  · exact ⟨⟨0, hN⟩, by simp only [pow_zero]⟩
  · intro t ht u hu
    rcases ht with ⟨i, rfl⟩
    rcases hu with ⟨m, hm, rfl⟩
    have hm' : m ≤ (i : ℕ) := by
      simpa [FreeGroup.toWord_of_pow, List.length_replicate] using hm
    refine ⟨⟨m, lt_of_le_of_lt hm' i.2⟩, ?_⟩
    rw [FreeGroup.toWord_of_pow, List.take_replicate, min_eq_left hm',
      ← FreeGroup.toWord_of_pow, FreeGroup.mk_toWord]
  · intro a b ha hb hEq
    rcases ha with ⟨i, rfl⟩
    rcases hb with ⟨j, rfl⟩
    have hij : (i : ℕ) = j := by
      by_contra hij
      rcases lt_or_gt_of_ne hij with hijlt | hjilt
      · have hmem : (FreeGroup.of x) ^ ((j : ℕ) - i) ∈ L :=
          generatorPower_sub_mem_of_rightQuotient_eq (X := X) (L := L) x
            (Nat.le_of_lt hijlt) hEq
        exact hmin ((j : ℕ) - i) (Nat.sub_pos_of_lt hijlt)
          (lt_of_le_of_lt (Nat.sub_le _ _) j.2) hmem
      · have hmem : (FreeGroup.of x) ^ ((i : ℕ) - j) ∈ L :=
          generatorPower_sub_mem_of_rightQuotient_eq (X := X) (L := L) x
            (Nat.le_of_lt hjilt) hEq.symm
        exact hmin ((i : ℕ) - j) (Nat.sub_pos_of_lt hjilt)
          (lt_of_le_of_lt (Nat.sub_le _ _) i.2) hmem
    have hij' : i = j := Fin.ext hij
    subst hij'
    rfl
ReidemeisterSchreier.Discrete.OpenSubgroups.rightCosetLeftMulActionByInverse

Right multiplication on right cosets, expressed as a left action via \(g \cdot [t] = [t * g{}^{-1}]\). This is the action naturally compatible with Schreier generators of the form \(t x (\widetilde{t x}){}^{-1}\).

Source context 5 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
section RightSchreierTransversals
open scoped Pointwise
open _root_.ReidemeisterSchreier.FreeGroup
instance rightCosetLeftMulActionByInverse {X : Type u} (L : Subgroup (FreeGroup X)) :
    MulAction (FreeGroup X) (Quotient (QuotientGroup.rightRel L))
ReidemeisterSchreier.Discrete.OpenSubgroups.rightCosetLeftMulActionByInverse_mk_smul

The Schreier generator component of the corresponding rewriting map.

Source context 6 commands

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

universe u
namespace ReidemeisterSchreier.Discrete.OpenSubgroups
section RightSchreierTransversals
open scoped Pointwise
open _root_.ReidemeisterSchreier.FreeGroup
attribute [-instance] rightCosetLeftMulActionByInverse
theorem rightCosetLeftMulActionByInverse_mk_smul {X : Type u}
    (L : Subgroup (FreeGroup X)) (g a : FreeGroup X) :
    g • (Quotient.mk'' a : Quotient (QuotientGroup.rightRel L)) =
      Quotient.mk'' (a * g⁻¹)