Documentation

Mathlib.GroupTheory.FreeGroup.CyclicallyReduced

This file defines some extra lemmas for free groups, in particular about cyclically reduced words. We show that free groups are (strongly) torsion-free in the sense of IsMulTorsionFree, i.e., taking powers by every non-zero element n : ℕ is injective.

Main declarations #

Predicate asserting that the word L is cyclically reduced, i.e., it is reduced and furthermore the first and the last letter of the word do not cancel. The empty word is by convention also cyclically reduced.

Equations
Instances For

    Predicate asserting that the word L is cyclically reduced, i.e., it is reduced and furthermore the first and the last letter of the word do not cancel. The empty word is by convention also cyclically reduced.

    Equations
    Instances For
      theorem FreeGroup.isCyclicallyReduced_iff {α : Type u} {L : List (α × Bool)} :
      IsCyclicallyReduced L IsReduced L aL.getLast?, bL.head?, a.1 = b.1a.2 = b.2
      theorem FreeAddGroup.isCyclicallyReduced_iff {α : Type u} {L : List (α × Bool)} :
      IsCyclicallyReduced L IsReduced L aL.getLast?, bL.head?, a.1 = b.1a.2 = b.2
      theorem FreeGroup.isCyclicallyReduced_cons_append_iff {α : Type u} {L : List (α × Bool)} {a b : α × Bool} :
      IsCyclicallyReduced (b :: L ++ [a]) IsReduced (b :: L ++ [a]) (a.1 = b.1a.2 = b.2)
      theorem FreeAddGroup.isCyclicallyReduced_cons_append_iff {α : Type u} {L : List (α × Bool)} {a b : α × Bool} :
      IsCyclicallyReduced (b :: L ++ [a]) IsReduced (b :: L ++ [a]) (a.1 = b.1a.2 = b.2)
      theorem FreeGroup.IsReduced.append_flatten_replicate_append {α : Type u} {L₁ L₂ L₃ : List (α × Bool)} (h₁ : IsCyclicallyReduced L₂) (h₂ : IsReduced (L₁ ++ L₂ ++ L₃)) {n : } (hn : n 0) :
      IsReduced (L₁ ++ (List.replicate n L₂).flatten ++ L₃)
      theorem FreeAddGroup.IsReduced.append_flatten_replicate_append {α : Type u} {L₁ L₂ L₃ : List (α × Bool)} (h₁ : IsCyclicallyReduced L₂) (h₂ : IsReduced (L₁ ++ L₂ ++ L₃)) {n : } (hn : n 0) :
      IsReduced (L₁ ++ (List.replicate n L₂).flatten ++ L₃)
      def FreeGroup.reduceCyclically {α : Type u} [DecidableEq α] :
      List (α × Bool)List (α × Bool)

      This function produces a subword of a word L by cancelling the first and last letters of L as long as possible. If L is reduced, the resulting word will be cyclically reduced.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For

        This function produces a subword of a word L by cancelling the first and last letters of L as long as possible. If L is reduced, the resulting word will be cyclically reduced.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          theorem FreeGroup.reduceCyclically.cons_append {α : Type u} [DecidableEq α] {a b : α × Bool} (L : List (α × Bool)) :
          reduceCyclically (a :: (L ++ [b])) = if b.1 = a.1 (!b.2) = a.2 then reduceCyclically L else a :: L ++ [b]
          theorem FreeAddGroup.reduceCyclically.cons_append {α : Type u} [DecidableEq α] {a b : α × Bool} (L : List (α × Bool)) :
          reduceCyclically (a :: (L ++ [b])) = if b.1 = a.1 (!b.2) = a.2 then reduceCyclically L else a :: L ++ [b]

          Partner function to reduceCyclically. See reduceCyclically.conj_conjugator_reduceCyclically.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For

            Partner function to reduceCyclically. See reduceCyclically.conj_conjugator_reduceCyclically.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              theorem FreeGroup.reduceCyclically.conjugator.cons_append {α : Type u} [DecidableEq α] {a b : α × Bool} (L : List (α × Bool)) :
              conjugator (a :: (L ++ [b])) = if b.1 = a.1 (!b.2) = a.2 then a :: conjugator L else []
              theorem FreeAddGroup.reduceCyclically.conjugator.cons_append {α : Type u} [DecidableEq α] {a b : α × Bool} (L : List (α × Bool)) :
              conjugator (a :: (L ++ [b])) = if b.1 = a.1 (!b.2) = a.2 then a :: conjugator L else []

              Free groups are torsion-free, i.e., taking powers is injective. Our proof idea is as follows: if x ^ n = y ^ n, then also x ^ (2 * n) = y ^ (2 * n). We then compare the reduced words representing the powers in terms of the cyclic reductions of x.toWord and y.toWord using reduce_flatten_replicate. We conclude that the cyclic reductions of x.toWord and y.toWord must have the same length, and in fact they have to agree.

              Free additive groups are torsion free, i.e., scalar multiplication by every non-zero element n : ℕ is injective. See the instance for free groups for an overview over the proof.