Module

Tau.lean

Nyll.ProCGroups.ReidemeisterSchreier.Discrete.ReidemeisterSchreier.FiniteQuotient.Tau
20 declarations indexed from sourceView source ↗

Reidemeister Schreier / Discrete / Reidemeister Schreier / Finite Quotient / Tau

This module defines the finite-state tau rewriting of signed words into Schreier symbols and proves compatibility with concatenation, cancellation, reduction, and free-group multiplication.

Declarations

ReidemeisterSchreier.Discrete.FiniteQuotientSchreierData.tauList

Schreier rewriting of a raw word list, indexed by quotient states.

Source context 5 commands

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

namespace ReidemeisterSchreier.Discrete
open ReidemeisterSchreier.Discrete.Presentations
variable {X Q : Type*} [Group Q] [Fintype Q]
namespace FiniteQuotientSchreierData
variable (D : FiniteQuotientSchreierData X Q)
def tauList : Q → List (X × Bool) → FreeGroup (FiniteSchreierSymbol X Q)
  | _q, [] => 1
  | q, (x, true) :: xs =>
      FreeGroup.of (q, x) * tauList (D.transition q x) xs
  | q, (x, false) :: xs =>
      (FreeGroup.of (D.inverseTransition q x, x))⁻¹ *
        tauList (D.inverseTransition q x) xs
ReidemeisterSchreier.Discrete.FiniteQuotientSchreierData.tauList_cons_true_false

The \(\tau\)-list rewrite is unchanged when adjacent inverse letters cancel.

Source context 5 commands

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

namespace ReidemeisterSchreier.Discrete
open ReidemeisterSchreier.Discrete.Presentations
variable {X Q : Type*} [Group Q] [Fintype Q]
namespace FiniteQuotientSchreierData
variable (D : FiniteQuotientSchreierData X Q)
theorem tauList_cons_true_false
    (q : Q) (x : X) (xs : List (X × Bool)) :
    D.tauList q ((x, true) :: (x, false) :: xs) =
      D.tauList q xs
ReidemeisterSchreier.Discrete.FiniteQuotientSchreierData.tauList_cons_false_true

The \(\tau\)-list rewrite is unchanged when adjacent inverse letters cancel.

Source context 5 commands

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

namespace ReidemeisterSchreier.Discrete
open ReidemeisterSchreier.Discrete.Presentations
variable {X Q : Type*} [Group Q] [Fintype Q]
namespace FiniteQuotientSchreierData
variable (D : FiniteQuotientSchreierData X Q)
theorem tauList_cons_false_true
    (q : Q) (x : X) (xs : List (X × Bool)) :
    D.tauList q ((x, false) :: (x, true) :: xs) =
      D.tauList q xs
ReidemeisterSchreier.Discrete.FiniteQuotientSchreierData.tauList_cons_cancel

The \(\tau\)-list rewrite is unchanged when adjacent inverse letters cancel.

Source context 5 commands

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

namespace ReidemeisterSchreier.Discrete
open ReidemeisterSchreier.Discrete.Presentations
variable {X Q : Type*} [Group Q] [Fintype Q]
namespace FiniteQuotientSchreierData
variable (D : FiniteQuotientSchreierData X Q)
theorem tauList_cons_cancel
    (q : Q) (x : X) (b : Bool) (xs : List (X × Bool)) :
    D.tauList q ((x, b) :: (x, !b) :: xs) =
      D.tauList q xs
ReidemeisterSchreier.Discrete.FiniteQuotientSchreierData.tauList_append

The \(\tau\)-list rewrite of a concatenated word splits as the product of the first rewrite and the rewrite of the second word from the updated quotient element.

Source context 5 commands

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

namespace ReidemeisterSchreier.Discrete
open ReidemeisterSchreier.Discrete.Presentations
variable {X Q : Type*} [Group Q] [Fintype Q]
namespace FiniteQuotientSchreierData
variable (D : FiniteQuotientSchreierData X Q)
theorem tauList_append
    (q : Q) (xs ys : List (X × Bool)) :
    D.tauList q (xs ++ ys) =
      D.tauList q xs *
        D.tauList
          (D.quotientMap (D.quotientSection q * FreeGroup.mk xs)) ys
ReidemeisterSchreier.Discrete.FiniteQuotientSchreierData.tauList_redStep

A single free-group reduction step does not change the \(\tau\)-list rewrite.

Source context 5 commands

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

namespace ReidemeisterSchreier.Discrete
open ReidemeisterSchreier.Discrete.Presentations
variable {X Q : Type*} [Group Q] [Fintype Q]
namespace FiniteQuotientSchreierData
variable (D : FiniteQuotientSchreierData X Q)
theorem tauList_redStep
    (q : Q) {xs ys : List (X × Bool)}
    (h : FreeGroup.Red.Step xs ys) :
    D.tauList q xs = D.tauList q ys
ReidemeisterSchreier.Discrete.FiniteQuotientSchreierData.tauList_red

Free-group reduction does not change the \(\tau\)-list rewrite.

Source context 5 commands

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

namespace ReidemeisterSchreier.Discrete
open ReidemeisterSchreier.Discrete.Presentations
variable {X Q : Type*} [Group Q] [Fintype Q]
namespace FiniteQuotientSchreierData
variable (D : FiniteQuotientSchreierData X Q)
theorem tauList_red
    (q : Q) {xs ys : List (X × Bool)}
    (h : FreeGroup.Red xs ys) :
    D.tauList q xs = D.tauList q ys
ReidemeisterSchreier.Discrete.FiniteQuotientSchreierData.tauList_eq_of_mk_eq

The \(\tau\)-lists agree when the corresponding quotient generators agree.

Source context 5 commands

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

namespace ReidemeisterSchreier.Discrete
open ReidemeisterSchreier.Discrete.Presentations
variable {X Q : Type*} [Group Q] [Fintype Q]
namespace FiniteQuotientSchreierData
variable (D : FiniteQuotientSchreierData X Q)
theorem tauList_eq_of_mk_eq
    (q : Q) {xs ys : List (X × Bool)}
    (h : FreeGroup.mk xs = FreeGroup.mk ys) :
    D.tauList q xs = D.tauList q ys
ReidemeisterSchreier.Discrete.FiniteQuotientSchreierData.symbolEvalHom_tauList

Evaluating a \(\tau\)-list gives the quotient-section conjugate of the represented word.

Source context 5 commands

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

namespace ReidemeisterSchreier.Discrete
open ReidemeisterSchreier.Discrete.Presentations
variable {X Q : Type*} [Group Q] [Fintype Q]
namespace FiniteQuotientSchreierData
variable (D : FiniteQuotientSchreierData X Q)
theorem symbolEvalHom_tauList
    (q : Q) (xs : List (X × Bool)) :
    D.symbolEvalHom (D.tauList q xs) =
      D.quotientSection q * FreeGroup.mk xs *
        (D.quotientSection
          (D.quotientMap (D.quotientSection q * FreeGroup.mk xs)))⁻¹
ReidemeisterSchreier.Discrete.FiniteQuotientSchreierData.tau

Finite-quotient Schreier rewriting of a free-group word.

Source context 6 commands

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

namespace ReidemeisterSchreier.Discrete
open ReidemeisterSchreier.Discrete.Presentations
variable {X Q : Type*} [Group Q] [Fintype Q]
namespace FiniteQuotientSchreierData
variable (D : FiniteQuotientSchreierData X Q)
variable [DecidableEq X]
def tau (q : Q) (w : FreeGroup X) : FreeGroup (FiniteSchreierSymbol X Q)
ReidemeisterSchreier.Discrete.FiniteQuotientSchreierData.tau_one

The \(\tau\)-word for the identity case evaluates to the identity.

Source context 6 commands

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

namespace ReidemeisterSchreier.Discrete
open ReidemeisterSchreier.Discrete.Presentations
variable {X Q : Type*} [Group Q] [Fintype Q]
namespace FiniteQuotientSchreierData
variable (D : FiniteQuotientSchreierData X Q)
variable [DecidableEq X]
theorem tau_one (q : Q) :
    D.tau q 1 = 1
ReidemeisterSchreier.Discrete.FiniteQuotientSchreierData.tau_of

\(\tau\)-rewriting of a single generator gives the corresponding finite Schreier symbol.

Source context 6 commands

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

namespace ReidemeisterSchreier.Discrete
open ReidemeisterSchreier.Discrete.Presentations
variable {X Q : Type*} [Group Q] [Fintype Q]
namespace FiniteQuotientSchreierData
variable (D : FiniteQuotientSchreierData X Q)
variable [DecidableEq X]
theorem tau_of (q : Q) (x : X) :
    D.tau q (FreeGroup.of x) = FreeGroup.of (q, x)
ReidemeisterSchreier.Discrete.FiniteQuotientSchreierData.tau_mk

The \(\tau\)-rewrite of \(\mathrm{FreeGroup.mk}(xs)\) agrees with rewriting the list \(xs\).

Source context 6 commands

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

namespace ReidemeisterSchreier.Discrete
open ReidemeisterSchreier.Discrete.Presentations
variable {X Q : Type*} [Group Q] [Fintype Q]
namespace FiniteQuotientSchreierData
variable (D : FiniteQuotientSchreierData X Q)
variable [DecidableEq X]
theorem tau_mk (q : Q) (xs : List (X × Bool)) :
    D.tau q (FreeGroup.mk xs) = D.tauList q xs
ReidemeisterSchreier.Discrete.FiniteQuotientSchreierData.symbolEvalHom_tau

Evaluating a \(\tau\)-word gives the quotient-section conjugate of the rewritten word.

Source context 6 commands

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

namespace ReidemeisterSchreier.Discrete
open ReidemeisterSchreier.Discrete.Presentations
variable {X Q : Type*} [Group Q] [Fintype Q]
namespace FiniteQuotientSchreierData
variable (D : FiniteQuotientSchreierData X Q)
variable [DecidableEq X]
theorem symbolEvalHom_tau (q : Q) (w : FreeGroup X) :
    D.symbolEvalHom (D.tau q w) =
      D.quotientSection q * w *
        (D.quotientSection (D.quotientMap (D.quotientSection q * w)))⁻¹
ReidemeisterSchreier.Discrete.FiniteQuotientSchreierData.tau_mul

The \(\tau\)-rewrite of a product factors into the rewrite of the first word and the rewrite of the second word from the updated quotient element.

Source context 6 commands

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

namespace ReidemeisterSchreier.Discrete
open ReidemeisterSchreier.Discrete.Presentations
variable {X Q : Type*} [Group Q] [Fintype Q]
namespace FiniteQuotientSchreierData
variable (D : FiniteQuotientSchreierData X Q)
variable [DecidableEq X]
theorem tau_mul (q : Q) (u v : FreeGroup X) :
    D.tau q (u * v) =
      D.tau q u *
        D.tau (D.quotientMap (D.quotientSection q * u)) v
ReidemeisterSchreier.Discrete.FiniteQuotientSchreierData.tau_mul_of_mem_kernel

For a kernel word, the \(\tau\)-rewriting preserves products from the identity quotient element.

Source context 6 commands

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

namespace ReidemeisterSchreier.Discrete
open ReidemeisterSchreier.Discrete.Presentations
variable {X Q : Type*} [Group Q] [Fintype Q]
namespace FiniteQuotientSchreierData
variable (D : FiniteQuotientSchreierData X Q)
variable [DecidableEq X]
theorem tau_mul_of_mem_kernel
    {u v : FreeGroup X} (hu : u ∈ D.kernel) :
    D.tau 1 (u * v) = D.tau 1 u * D.tau 1 v
ReidemeisterSchreier.Discrete.FiniteQuotientSchreierData.tau_inv

The \(\tau\)-rewrite of an inverse is the inverse of the \(\tau\)-rewrite from the updated quotient element.

Source context 6 commands

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

namespace ReidemeisterSchreier.Discrete
open ReidemeisterSchreier.Discrete.Presentations
variable {X Q : Type*} [Group Q] [Fintype Q]
namespace FiniteQuotientSchreierData
variable (D : FiniteQuotientSchreierData X Q)
variable [DecidableEq X]
theorem tau_inv (q : Q) (u : FreeGroup X) :
    D.tau (D.quotientMap (D.quotientSection q * u)) u⁻¹ =
      (D.tau q u)⁻¹
ReidemeisterSchreier.Discrete.FiniteQuotientSchreierData.tau_inv_of_mem_kernel

For a kernel word, the \(\tau\)-rewriting commutes with inversion from the identity quotient element.

Source context 6 commands

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

namespace ReidemeisterSchreier.Discrete
open ReidemeisterSchreier.Discrete.Presentations
variable {X Q : Type*} [Group Q] [Fintype Q]
namespace FiniteQuotientSchreierData
variable (D : FiniteQuotientSchreierData X Q)
variable [DecidableEq X]
theorem tau_inv_of_mem_kernel
    {u : FreeGroup X} (hu : u ∈ D.kernel) :
    D.tau 1 u⁻¹ = (D.tau 1 u)⁻¹
ReidemeisterSchreier.Discrete.FiniteQuotientSchreierData.symbolEvalHom_tau_of_mem_kernel

For a kernel word, evaluating its \(\tau\)-rewrite from the identity quotient state recovers the original word.

Source context 6 commands

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

namespace ReidemeisterSchreier.Discrete
open ReidemeisterSchreier.Discrete.Presentations
variable {X Q : Type*} [Group Q] [Fintype Q]
namespace FiniteQuotientSchreierData
variable (D : FiniteQuotientSchreierData X Q)
variable [DecidableEq X]
theorem symbolEvalHom_tau_of_mem_kernel
    {w : FreeGroup X} (hw : w ∈ D.kernel) :
    D.symbolEvalHom (D.tau 1 w) = w
ReidemeisterSchreier.Discrete.FiniteQuotientSchreierData.schreierRelators

The finite-quotient Schreier relator set consists of the \(\tau\)-rewrites of the original relators at all quotient states.

Source context 6 commands

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

namespace ReidemeisterSchreier.Discrete
open ReidemeisterSchreier.Discrete.Presentations
variable {X Q : Type*} [Group Q] [Fintype Q]
namespace FiniteQuotientSchreierData
variable (D : FiniteQuotientSchreierData X Q)
variable [DecidableEq X]
def schreierRelators (R : Set (FreeGroup X)) :
    Set (FreeGroup (FiniteSchreierSymbol X Q))