ReidemeisterSchreier.Discrete.ReidemeisterSchreier.FiniteQuotient.WordCertificates

8 Theorem | 3 Definition

This module sets up the finite-stage and inverse-limit description of the construction. It records the stage maps, projections, and comparison lemmas used to pass back to the completed object.

import
Imported by

Declarations

def prefixClosedAlongList (D : FiniteQuotientSchreierData X Q) :
    Q → List (X × Bool) → Prop
  | _q, [] => True
  | q, (x, true) :: xs =>
      D.quotientSection (D.transition q x) =
        D.quotientSection q * FreeGroup.of x ∧
      prefixClosedAlongList D (D.transition q x) xs
  | q, (x, false) :: xs =>
      D.quotientSection q =
        D.quotientSection (D.inverseTransition q x) * FreeGroup.of x ∧
      prefixClosedAlongList D (D.inverseTransition q x) xs

Prefix-closedness along a concrete word list, starting at quotient state \(q\). Positive letters require the next representative to be obtained by appending \(x\); negative letters require the current representative to be obtained by appending \(x\) to the previous state.

def prefixClosedQuotientSectionWordAlongList
    (D : FiniteQuotientSchreierData X Q)
    (quotientSectionWord : Q → List (X × Bool)) :
    Q → List (X × Bool) → Prop
  | _q, [] => True
  | q, (x, true) :: xs =>
      quotientSectionWord (D.transition q x) =
        quotientSectionWord q ++ [(x, true)] ∧
      prefixClosedQuotientSectionWordAlongList D quotientSectionWord
        (D.transition q x) xs
  | q, (x, false) :: xs =>
      quotientSectionWord q =
        quotientSectionWord (D.inverseTransition q x) ++ [(x, true)] ∧
      prefixClosedQuotientSectionWordAlongList D quotientSectionWord
        (D.inverseTransition q x) xs

Word-level prefix-closedness certificate for a chosen representative-word function. This is easier to produce from a finite search tree than group equalities of representatives.

theorem prefixClosedAlongList_of_prefixClosedQuotientSectionWordAlongList
    {quotientSectionWord : Q → List (X × Bool)}
    (hsection :
      ∀ q : Q, D.quotientSection q = FreeGroup.mk (quotientSectionWord q))
    {q : Q} {xs : List (X × Bool)}
    (hprefix :
      D.prefixClosedQuotientSectionWordAlongList quotientSectionWord q xs) :
    D.prefixClosedAlongList q xs

A prefix-closed quotient-section word along a list gives prefix-closedness along that list.

Show proof
def IsPrefixClosedQuotientSection : Prop :=
  ∀ q : Q, D.prefixClosedAlongList 1 (D.quotientSection q).toWord

The chosen quotient section is prefix closed on its own representative words.

theorem isPrefixClosedQuotientSection_of_prefixClosedQuotientSectionWord
    {quotientSectionWord : Q → List (X × Bool)}
    (hsection :
      ∀ q : Q, D.quotientSection q = FreeGroup.mk (quotientSectionWord q))
    (hreduced :
      ∀ q : Q, FreeGroup.reduce (quotientSectionWord q) = quotientSectionWord q)
    (hprefix :
      ∀ q : Q,
        D.prefixClosedQuotientSectionWordAlongList quotientSectionWord 1
          (quotientSectionWord q)) :
    D.IsPrefixClosedQuotientSection

A prefix-closed quotient-section word certificate gives a prefix-closed quotient section.

Show proof
private theorem prefixClosedQuotientSectionWordAlongList_of_positive_prefixStates_from_acc
    {quotientSectionWord : Q → List (X × Bool)}
    (hsection :
      ∀ q : Q, D.quotientSection q = FreeGroup.mk (quotientSectionWord q))
    (hpositive :
      ∀ q : Q, ∀ xb ∈ quotientSectionWord q, xb.2 = true)
    (hprefixState :
      ∀ q : Q, ∀ acc rest : List (X × Bool),
        acc ++ rest = quotientSectionWord q →
          quotientSectionWord (D.quotientMap (FreeGroup.mk acc)) = acc)
    (target : Q) :
    ∀ acc rest : List (X × Bool),
      acc ++ rest = quotientSectionWord target →
      quotientSectionWord (D.quotientMap (FreeGroup.mk acc)) = acc →
      D.prefixClosedQuotientSectionWordAlongList quotientSectionWord
        (D.quotientMap (FreeGroup.mk acc)) rest
  | _acc, [], _hcat, _hacc => by
      trivial
  | acc, (x, eps) :: xs, hcat, hacc => by
      have heps : eps = true

Positive prefix-state data along an accumulated word gives a prefix-closed quotient-section word along the full list.

Show proof
theorem prefixClosedQuotientSectionWordAlongList_of_positive_prefixStates
    {quotientSectionWord : Q → List (X × Bool)}
    (hsection :
      ∀ q : Q, D.quotientSection q = FreeGroup.mk (quotientSectionWord q))
    (hpositive :
      ∀ q : Q, ∀ xb ∈ quotientSectionWord q, xb.2 = true)
    (hprefixState :
      ∀ q : Q, ∀ acc rest : List (X × Bool),
        acc ++ rest = quotientSectionWord q →
          quotientSectionWord (D.quotientMap (FreeGroup.mk acc)) = acc)
    (q : Q) :
    D.prefixClosedQuotientSectionWordAlongList quotientSectionWord 1
      (quotientSectionWord q)

Positive prefix states along a word give a prefix-closed quotient-section word along the list.

Show proof
theorem isReduced_of_forall_snd_eq_true :
    ∀ {word : List (X × Bool)},
      (∀ xb ∈ word, xb.2 = true) → FreeGroup.IsReduced word
  | [], _hpositive => by
      simp only [FreeGroup.IsReduced.nil]
  | [_x], _hpositive => by
      simp only [FreeGroup.IsReduced.singleton]
  | x :: y :: xs, hpositive => by
      rw [FreeGroup.isReduced_cons_cons]
      refine ⟨?_, ?_⟩
      · intro _hxy
        rw [hpositive x (by simp only [List.mem_cons, true_or]), hpositive y (by simp only [List.mem_cons, true_or, or_true])]
      · exact isReduced_of_forall_snd_eq_true (by
          intro xb hxb
          exact hpositive xb (by simp only [List.mem_cons, hxb, or_true]))

A word list whose letters all have positive sign is reduced.

Show proof
theorem reduce_eq_of_forall_snd_eq_true
    {word : List (X × Bool)}
    (hpositive : ∀ xb ∈ word, xb.2 = true) :
    FreeGroup.reduce word = word

A word list whose letters all have positive sign is unchanged by free reduction.

Show proof
theorem snd_eq_true_of_prefixClosedQuotientSectionWordAlongList_of_isReduced_append
    {quotientSectionWord : Q → List (X × Bool)}
    {q : Q} {xs : List (X × Bool)}
    (hprefix :
      D.prefixClosedQuotientSectionWordAlongList quotientSectionWord q xs)
    (hreduced : FreeGroup.IsReduced (quotientSectionWord q ++ xs)) :
    ∀ xb ∈ xs, xb.2 = true

In a reduced appended prefix-closed quotient-section word, each letter in the added part has positive sign.

Show proof
theorem quotientSectionWord_positive_of_prefixClosed_reduced
    {quotientSectionWord : Q → List (X × Bool)}
    (hOne : quotientSectionWord 1 = [])
    (hreduced : ∀ q : Q, FreeGroup.IsReduced (quotientSectionWord q))
    (hprefix :
      ∀ q : Q,
        D.prefixClosedQuotientSectionWordAlongList quotientSectionWord 1
          (quotientSectionWord q)) :
    ∀ q : Q, ∀ xb ∈ quotientSectionWord q, xb.2 = true

A reduced prefix-closed quotient-section word has only positive signed letters.

Show proof