ReidemeisterSchreier.FreeGroup.PrefixParent

25 Theorem | 4 Definition | 1 Abbreviation | 1 Structure

This module develops Reidemeister--Schreier rewriting, Schreier generators, finite quotient transversals, and presentation transformations.

import
  • Mathlib.GroupTheory.FreeGroup.Reduce
Imported by

Declarations

abbrev SignedLetter (X : Type u) := X × Bool

A signed generator letter in the word model of a free group.

def inv {X : Type u} (y : SignedLetter X) : SignedLetter X :=
  (y.1, !y.2)

The inverse signed letter.

@[simp] theorem inv_fst {X : Type u} (y : SignedLetter X) : y.inv.1 = y.1

The prefix-parent identity follows from the reduced-word decomposition into a prefix and a last letter.

Show proof
@[simp] theorem inv_snd {X : Type u} (y : SignedLetter X) : y.inv.2 = !y.2

The prefix-parent identity follows from the reduced-word decomposition into a prefix and a last letter.

Show proof
@[simp] theorem inv_inv {X : Type u} (y : SignedLetter X) : y.inv.inv = y

The prefix-parent identity follows from the reduced-word decomposition into a prefix and a last letter.

Show proof
theorem FreeGroup.invRev_eq_getLast_append_dropLast {X : Type u}
    (w : List (X × Bool)) (hw : w ≠ []) :
    FreeGroup.invRev w =
      [((w.getLast hw).1, ! (w.getLast hw).2)] ++ FreeGroup.invRev w.dropLast

The prefix-parent identity follows from the reduced-word decomposition into a prefix and a last letter.

Show proof
def FreeGroup.lastLetter? {X : Type u} [DecidableEq X] (g : FreeGroup X) :
    Option (SignedLetter X) :=
  (FreeGroup.toWord g).getLast?

The last signed letter of the reduced word representing \(g\), if it is nonempty.

theorem FreeGroup.lastLetter?_eq_some_iff {X : Type u} [DecidableEq X]
    {g : FreeGroup X} {y : SignedLetter X} :
    FreeGroup.lastLetter? g = some y ↔
      ∃ hw : FreeGroup.toWord g ≠ [], (FreeGroup.toWord g).getLast hw = y

A reduced word has the specified last letter exactly when its last-letter option is that value.

Show proof
theorem FreeGroup.toWord_mul_of_of_not_cancels {X : Type u} [DecidableEq X]
    (t : FreeGroup X) (x : X)
    (hcancel : ¬ ∃ hw : FreeGroup.toWord t ≠ [], (FreeGroup.toWord t).getLast hw = (x, false)) :
    FreeGroup.toWord (t * FreeGroup.of x) = FreeGroup.toWord t ++ [(x, true)]

The prefix-parent identity follows from the reduced-word decomposition into a prefix and a last letter.

Show proof
theorem FreeGroup.mul_of_of_eq_mk_dropLast_of_cancels {X : Type u} [DecidableEq X]
    (t : FreeGroup X) (x : X) (hw : FreeGroup.toWord t ≠ [])
    (hlast : (FreeGroup.toWord t).getLast hw = (x, false)) :
    t * FreeGroup.of x = FreeGroup.mk ((FreeGroup.toWord t).dropLast)

The prefix-parent identity follows from the reduced-word decomposition into a prefix and a last letter.

Show proof
theorem FreeGroup.toWord_mul_of_of_cancels {X : Type u} [DecidableEq X]
    (t : FreeGroup X) (x : X) (hw : FreeGroup.toWord t ≠ [])
    (hlast : (FreeGroup.toWord t).getLast hw = (x, false)) :
    FreeGroup.toWord (t * FreeGroup.of x) = (FreeGroup.toWord t).dropLast

The prefix-parent identity follows from the reduced-word decomposition into a prefix and a last letter.

Show proof
theorem FreeGroup.toWord_mul_mk_singleton_of_not_cancels {X : Type u} [DecidableEq X]
    (t : FreeGroup X) (y : X × Bool)
    (hcancel :
      ¬ ∃ hw : FreeGroup.toWord t ≠ [],
          (FreeGroup.toWord t).getLast hw = (y.1, !y.2)) :
    FreeGroup.toWord (t * FreeGroup.mk [y]) = FreeGroup.toWord t ++ [y]

Appending a reduced signed letter to a reduced word stays reduced unless the last letter is its inverse.

Show proof
theorem FreeGroup.mul_mk_singleton_eq_mk_dropLast_of_cancels {X : Type u} [DecidableEq X]
    (t : FreeGroup X) (y : X × Bool) (hw : FreeGroup.toWord t ≠ [])
    (hlast : (FreeGroup.toWord t).getLast hw = (y.1, !y.2)) :
    t * FreeGroup.mk [y] = FreeGroup.mk ((FreeGroup.toWord t).dropLast)

Cancelling a reduced signed letter on the right amounts to deleting the last letter in the word model.

Show proof
theorem FreeGroup.toWord_mul_mk_singleton_of_cancels {X : Type u} [DecidableEq X]
    (t : FreeGroup X) (y : X × Bool) (hw : FreeGroup.toWord t ≠ [])
    (hlast : (FreeGroup.toWord t).getLast hw = (y.1, !y.2)) :
    FreeGroup.toWord (t * FreeGroup.mk [y]) = (FreeGroup.toWord t).dropLast

The to word multiplication coset representative formula singleton of cancels sends a singleton basis element to the singleton basis element supported at the induced quotient image, with the prescribed coefficient in the Reidemeister--Schreier rewriting system.

Show proof
theorem FreeGroup.toWord_mul_singleton {X : Type u} [DecidableEq X]
    (t : FreeGroup X) (y : SignedLetter X) :
    FreeGroup.toWord (t * FreeGroup.mk [y]) =
      if FreeGroup.lastLetter? t = some y.inv then
        (FreeGroup.toWord t).dropLast
      else
        FreeGroup.toWord t ++ [y]

Unified signed-letter multiplication rule for reduced words.

Show proof
theorem FreeGroup.toWord_mul_of {X : Type u} [DecidableEq X]
    (t : FreeGroup X) (x : X) :
    FreeGroup.toWord (t * FreeGroup.of x) =
      if FreeGroup.lastLetter? t = some ((x, false) : SignedLetter X) then
        (FreeGroup.toWord t).dropLast
      else
        FreeGroup.toWord t ++ [(x, true)]

Positive generators are the positive signed-letter specialization of the word-multiplication formula for free groups.

Show proof
def FreeGroup.prefixParent {X : Type u} [DecidableEq X] (t : FreeGroup X) : FreeGroup X :=
  FreeGroup.mk ((FreeGroup.toWord t).dropLast)

The predecessor of a reduced word, obtained by deleting its last letter.

theorem FreeGroup.mul_mk_singleton_eq_ite_prefixParent {X : Type u} [DecidableEq X]
    (t : FreeGroup X) (y : X × Bool) :
    t * FreeGroup.mk [y] =
      if _ : ∃ hw : FreeGroup.toWord t ≠ [],
          (FreeGroup.toWord t).getLast hw = (y.1, !y.2)
      then FreeGroup.prefixParent t
      else FreeGroup.mk (FreeGroup.toWord t ++ [y])

Multiplication by a signed singleton either deletes the inverse last letter or appends the singleton to the reduced word.

Show proof
@[simp] theorem FreeGroup.toWord_prefixParent {X : Type u} [DecidableEq X] (t : FreeGroup X) :
    FreeGroup.toWord (FreeGroup.prefixParent t) = (FreeGroup.toWord t).dropLast

The prefix-parent identity follows from the reduced-word decomposition into a prefix and a last letter.

Show proof
theorem FreeGroup.toWord_length_prefixParent_lt {X : Type u} [DecidableEq X]
    {t : FreeGroup X} (ht : t ≠ 1) :
    (FreeGroup.toWord (FreeGroup.prefixParent t)).length < (FreeGroup.toWord t).length

The prefix-parent identity follows from the reduced-word decomposition into a prefix and a last letter.

Show proof
theorem FreeGroup.length_prefixParent_eq_pred {X : Type u} [DecidableEq X]
    (t : FreeGroup X) :
    (FreeGroup.toWord (FreeGroup.prefixParent t)).length =
      (FreeGroup.toWord t).length - 1

The prefix-parent identity follows from the reduced-word decomposition into a prefix and a last letter.

Show proof
theorem FreeGroup.prefixParent_mul_of_of_last_pos {X : Type u} [DecidableEq X]
    (t : FreeGroup X) (x : X) (hw : FreeGroup.toWord t ≠ [])
    (hlast : (FreeGroup.toWord t).getLast hw = (x, true)) :
    FreeGroup.prefixParent t * FreeGroup.of x = t

The prefix-parent identity follows from the reduced-word decomposition into a prefix and a last letter.

Show proof
theorem FreeGroup.prefixParent_mul_mk_singleton_of_last {X : Type u} [DecidableEq X]
    (t : FreeGroup X) (y : X × Bool) (hw : FreeGroup.toWord t ≠ [])
    (hlast : (FreeGroup.toWord t).getLast hw = y) :
    FreeGroup.prefixParent t * FreeGroup.mk [y] = t

The prefix-parent multiplication formula for the last singleton sends a singleton basis element to the singleton supported at the induced quotient image, with the prescribed coefficient in the Reidemeister--Schreier rewriting system.

Show proof
theorem FreeGroup.prefixParent_mul_lastLetter {X : Type u} [DecidableEq X]
    {t : FreeGroup X} {y : SignedLetter X}
    (h : FreeGroup.lastLetter? t = some y) :
    FreeGroup.prefixParent t * FreeGroup.mk [y] = t

The prefix-parent identity follows from the reduced-word decomposition into a prefix and a last letter.

Show proof
structure FreeGroup.PrefixParentEdge {X : Type u} [DecidableEq X] (t : FreeGroup X) where
  parent : FreeGroup X
  letter : SignedLetter X
  parent_eq : parent = FreeGroup.prefixParent t
  rebuild : parent * FreeGroup.mk [letter] = t

The parent edge data obtained by deleting the last signed letter of a nontrivial word.

def FreeGroup.prefixParentEdgeOfNeOne {X : Type u} [DecidableEq X]
    {t : FreeGroup X} (ht : t ≠ 1) : FreeGroup.PrefixParentEdge t := by
  have hw : FreeGroup.toWord t ≠ [] := by
    exact mt (FreeGroup.toWord_eq_nil_iff.mp) ht
  refine
    { parent := FreeGroup.prefixParent t
      letter := (FreeGroup.toWord t).getLast hw
      parent_eq := rfl
      rebuild := ?_ }
  exact Internal.FreeGroupWord.FreeGroup.prefixParent_mul_mk_singleton_of_last t
    ((FreeGroup.toWord t).getLast hw) hw rfl

A nontrivial reduced word has a canonical parent edge.

@[simp] theorem FreeGroup.prefixParentEdgeOfNeOne_parent {X : Type u} [DecidableEq X]
    {t : FreeGroup X} (ht : t ≠ 1) :
    (FreeGroup.prefixParentEdgeOfNeOne (X := X) ht).parent =
      FreeGroup.prefixParent t

The prefix-parent identity follows from the reduced-word decomposition into a prefix and a last letter.

Show proof
theorem FreeGroup.prefixParentEdgeOfNeOne_lastLetter? {X : Type u} [DecidableEq X]
    {t : FreeGroup X} (ht : t ≠ 1) :
    FreeGroup.lastLetter? t =
      some (FreeGroup.prefixParentEdgeOfNeOne (X := X) ht).letter

The prefix-parent identity follows from the reduced-word decomposition into a prefix and a last letter.

Show proof
theorem FreeGroup.exists_prefixParent_mul_lastLetter_of_ne_one
    {X : Type u} [DecidableEq X] {t : FreeGroup X} (ht : t ≠ 1) :
    ∃ y : SignedLetter X,
      FreeGroup.lastLetter? t = some y ∧
        FreeGroup.prefixParent t * FreeGroup.mk [y] = t

Nontrivial words decompose as parent times their last signed letter.

Show proof
theorem FreeGroup.lastLetter_cases_of_ne_one {X : Type u} [DecidableEq X]
    {t : FreeGroup X} (ht : t ≠ 1) :
    ∃ x : X,
      (∃ hw : FreeGroup.toWord t ≠ [],
          (FreeGroup.toWord t).getLast hw = (x, true) ∧
            FreeGroup.prefixParent t * FreeGroup.of x = t) ∨
      (∃ hw : FreeGroup.toWord t ≠ [],
          (FreeGroup.toWord t).getLast hw = (x, false) ∧
            t * FreeGroup.of x = FreeGroup.prefixParent t)

The prefix-parent identity follows from the reduced-word decomposition into a prefix and a last letter.

Show proof
theorem FreeGroup.mul_of_eq_prefixParent_of_cancels {X : Type u} [DecidableEq X]
    (t : FreeGroup X) (x : X) (hw : FreeGroup.toWord t ≠ [])
    (hlast : (FreeGroup.toWord t).getLast hw = (x, false)) :
    t * FreeGroup.of x = FreeGroup.prefixParent t

The prefix-parent identity follows from the reduced-word decomposition into a prefix and a last letter.

Show proof