Documentation

Mathlib.GroupTheory.FreeGroup.Reduce

The maximal reduction of a word in a free group #

Main declarations #

def FreeGroup.reduce {α : Type u_1} [DecidableEq α] (L : List (α × Bool)) :
List (α × Bool)

The maximal reduction of a word. It is computable iff α has decidable equality.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    def FreeAddGroup.reduce {α : Type u_1} [DecidableEq α] (L : List (α × Bool)) :
    List (α × Bool)

    The maximal reduction of a word. It is computable iff α has decidable equality.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      @[simp]
      theorem FreeGroup.reduce_nil {α : Type u_1} [DecidableEq α] :
      @[simp]
      theorem FreeGroup.reduce_singleton {α : Type u_1} [DecidableEq α] (s : α × Bool) :
      @[simp]
      theorem FreeGroup.reduce.cons {α : Type u_1} {L : List (α × Bool)} [DecidableEq α] (x : α × Bool) :
      FreeGroup.reduce (x :: L) = List.casesOn (FreeGroup.reduce L) [x] fun (hd : α × Bool) (tl : List (α × Bool)) => if x.1 = hd.1 x.2 = !hd.2 then tl else x :: hd :: tl
      @[simp]
      theorem FreeAddGroup.reduce.cons {α : Type u_1} {L : List (α × Bool)} [DecidableEq α] (x : α × Bool) :
      FreeAddGroup.reduce (x :: L) = List.casesOn (FreeAddGroup.reduce L) [x] fun (hd : α × Bool) (tl : List (α × Bool)) => if x.1 = hd.1 x.2 = !hd.2 then tl else x :: hd :: tl

      The first theorem that characterises the function reduce: a word reduces to its maximal reduction.

      The first theorem that characterises the function reduce: a word reduces to its maximal reduction.

      theorem FreeGroup.reduce.not {α : Type u_1} [DecidableEq α] {p : Prop} {L₁ L₂ L₃ : List (α × Bool)} {x : α} {b : Bool} :
      FreeGroup.reduce L₁ = L₂ ++ (x, b) :: (x, !b) :: L₃p
      theorem FreeAddGroup.reduce.not {α : Type u_1} [DecidableEq α] {p : Prop} {L₁ L₂ L₃ : List (α × Bool)} {x : α} {b : Bool} :
      FreeAddGroup.reduce L₁ = L₂ ++ (x, b) :: (x, !b) :: L₃p
      theorem FreeGroup.reduce.min {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (H : FreeGroup.Red (FreeGroup.reduce L₁) L₂) :

      The second theorem that characterises the function reduce: the maximal reduction of a word only reduces to itself.

      theorem FreeAddGroup.reduce.min {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (H : FreeAddGroup.Red (FreeAddGroup.reduce L₁) L₂) :

      The second theorem that characterises the function reduce: the maximal reduction of a word only reduces to itself.

      @[simp]

      reduce is idempotent, i.e. the maximal reduction of the maximal reduction of a word is the maximal reduction of the word.

      @[simp]

      reduce is idempotent, i.e. the maximal reduction of the maximal reduction of a word is the maximal reduction of the word.

      theorem FreeGroup.reduce.Step.eq {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (H : FreeGroup.Red.Step L₁ L₂) :
      theorem FreeAddGroup.reduce.Step.eq {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (H : FreeAddGroup.Red.Step L₁ L₂) :
      theorem FreeGroup.reduce.eq_of_red {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (H : FreeGroup.Red L₁ L₂) :

      If a word reduces to another word, then they have a common maximal reduction.

      theorem FreeAddGroup.reduce.eq_of_red {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (H : FreeAddGroup.Red L₁ L₂) :

      If a word reduces to another word, then they have a common maximal reduction.

      theorem FreeGroup.red.reduce_eq {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (H : FreeGroup.Red L₁ L₂) :

      Alias of FreeGroup.reduce.eq_of_red.


      If a word reduces to another word, then they have a common maximal reduction.

      theorem FreeGroup.freeAddGroup.red.reduce_eq {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (H : FreeAddGroup.Red L₁ L₂) :

      Alias of FreeAddGroup.reduce.eq_of_red.


      If a word reduces to another word, then they have a common maximal reduction.

      theorem FreeGroup.Red.reduce_right {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (h : FreeGroup.Red L₁ L₂) :
      theorem FreeAddGroup.Red.reduce_right {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (h : FreeAddGroup.Red L₁ L₂) :
      theorem FreeGroup.Red.reduce_left {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (h : FreeGroup.Red L₁ L₂) :
      theorem FreeAddGroup.Red.reduce_left {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (h : FreeAddGroup.Red L₁ L₂) :
      theorem FreeGroup.reduce.sound {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (H : FreeGroup.mk L₁ = FreeGroup.mk L₂) :

      If two words correspond to the same element in the free group, then they have a common maximal reduction. This is the proof that the function that sends an element of the free group to its maximal reduction is well-defined.

      theorem FreeAddGroup.reduce.sound {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (H : FreeAddGroup.mk L₁ = FreeAddGroup.mk L₂) :

      If two words correspond to the same element in the additive free group, then they have a common maximal reduction. This is the proof that the function that sends an element of the free group to its maximal reduction is well-defined.

      theorem FreeGroup.reduce.exact {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (H : FreeGroup.reduce L₁ = FreeGroup.reduce L₂) :

      If two words have a common maximal reduction, then they correspond to the same element in the free group.

      theorem FreeAddGroup.reduce.exact {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (H : FreeAddGroup.reduce L₁ = FreeAddGroup.reduce L₂) :

      If two words have a common maximal reduction, then they correspond to the same element in the additive free group.

      A word and its maximal reduction correspond to the same element of the free group.

      A word and its maximal reduction correspond to the same element of the additive free group.

      theorem FreeGroup.reduce.rev {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (H : FreeGroup.Red L₁ L₂) :

      If words w₁ w₂ are such that w₁ reduces to w₂, then w₂ reduces to the maximal reduction of w₁.

      theorem FreeAddGroup.reduce.rev {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (H : FreeAddGroup.Red L₁ L₂) :

      If words w₁ w₂ are such that w₁ reduces to w₂, then w₂ reduces to the maximal reduction of w₁.

      def FreeGroup.toWord {α : Type u_1} [DecidableEq α] :
      FreeGroup αList (α × Bool)

      The function that sends an element of the free group to its maximal reduction.

      Equations
      Instances For
        def FreeAddGroup.toWord {α : Type u_1} [DecidableEq α] :
        FreeAddGroup αList (α × Bool)

        The function that sends an element of the additive free group to its maximal reduction.

        Equations
        • FreeAddGroup.toWord = Quot.lift FreeAddGroup.reduce
        Instances For
          theorem FreeGroup.mk_toWord {α : Type u_1} [DecidableEq α] {x : FreeGroup α} :
          FreeGroup.mk x.toWord = x
          theorem FreeAddGroup.mk_toWord {α : Type u_1} [DecidableEq α] {x : FreeAddGroup α} :
          FreeAddGroup.mk x.toWord = x
          theorem FreeGroup.toWord_injective {α : Type u_1} [DecidableEq α] :
          Function.Injective FreeGroup.toWord
          theorem FreeAddGroup.toWord_injective {α : Type u_1} [DecidableEq α] :
          Function.Injective FreeAddGroup.toWord
          @[simp]
          theorem FreeGroup.toWord_inj {α : Type u_1} [DecidableEq α] {x y : FreeGroup α} :
          x.toWord = y.toWord x = y
          @[simp]
          theorem FreeAddGroup.toWord_inj {α : Type u_1} [DecidableEq α] {x y : FreeAddGroup α} :
          x.toWord = y.toWord x = y
          @[simp]
          theorem FreeGroup.toWord_mk {α : Type u_1} {L₁ : List (α × Bool)} [DecidableEq α] :
          (FreeGroup.mk L₁).toWord = FreeGroup.reduce L₁
          @[simp]
          theorem FreeAddGroup.toWord_mk {α : Type u_1} {L₁ : List (α × Bool)} [DecidableEq α] :
          @[simp]
          theorem FreeGroup.toWord_of {α : Type u_1} [DecidableEq α] (a : α) :
          (FreeGroup.of a).toWord = [(a, true)]
          @[simp]
          theorem FreeAddGroup.toWord_of {α : Type u_1} [DecidableEq α] (a : α) :
          (FreeAddGroup.of a).toWord = [(a, true)]
          @[simp]
          theorem FreeGroup.reduce_toWord {α : Type u_1} [DecidableEq α] (x : FreeGroup α) :
          FreeGroup.reduce x.toWord = x.toWord
          @[simp]
          theorem FreeAddGroup.reduce_toWord {α : Type u_1} [DecidableEq α] (x : FreeAddGroup α) :
          FreeAddGroup.reduce x.toWord = x.toWord
          @[simp]
          @[simp]
          theorem FreeGroup.toWord_of_pow {α : Type u_1} [DecidableEq α] (a : α) (n : ) :
          (FreeGroup.of a ^ n).toWord = List.replicate n (a, true)
          @[simp]
          theorem FreeAddGroup.toWord_of_nsmul {α : Type u_1} [DecidableEq α] (a : α) (n : ) :
          @[simp]
          theorem FreeGroup.toWord_eq_nil_iff {α : Type u_1} [DecidableEq α] {x : FreeGroup α} :
          x.toWord = [] x = 1
          @[simp]
          theorem FreeAddGroup.toWord_eq_nil_iff {α : Type u_1} [DecidableEq α] {x : FreeAddGroup α} :
          x.toWord = [] x = 0
          @[simp]
          theorem FreeGroup.toWord_inv {α : Type u_1} [DecidableEq α] (x : FreeGroup α) :
          x⁻¹.toWord = FreeGroup.invRev x.toWord
          @[simp]
          theorem FreeAddGroup.toWord_neg {α : Type u_1} [DecidableEq α] (x : FreeAddGroup α) :
          (-x).toWord = FreeAddGroup.negRev x.toWord
          theorem FreeGroup.toWord_mul_sublist {α : Type u_1} [DecidableEq α] (x y : FreeGroup α) :
          (x * y).toWord.Sublist (x.toWord ++ y.toWord)
          theorem FreeAddGroup.toWord_add_sublist {α : Type u_1} [DecidableEq α] (x y : FreeAddGroup α) :
          (x + y).toWord.Sublist (x.toWord ++ y.toWord)
          def FreeGroup.reduce.churchRosser {α : Type u_1} {L₁ L₂ L₃ : List (α × Bool)} [DecidableEq α] (H12 : FreeGroup.Red L₁ L₂) (H13 : FreeGroup.Red L₁ L₃) :
          { L₄ : List (α × Bool) // FreeGroup.Red L₂ L₄ FreeGroup.Red L₃ L₄ }

          Constructive Church-Rosser theorem (compare church_rosser).

          Equations
          Instances For
            def FreeAddGroup.reduce.churchRosser {α : Type u_1} {L₁ L₂ L₃ : List (α × Bool)} [DecidableEq α] (H12 : FreeAddGroup.Red L₁ L₂) (H13 : FreeAddGroup.Red L₁ L₃) :
            { L₄ : List (α × Bool) // FreeAddGroup.Red L₂ L₄ FreeAddGroup.Red L₃ L₄ }

            Constructive Church-Rosser theorem (compare church_rosser).

            Equations
            Instances For
              Equations
              • FreeGroup.instDecidableEq = .decidableEq
              Equations
              • FreeAddGroup.instDecidableEq = .decidableEq
              instance FreeGroup.Red.decidableRel {α : Type u_1} [DecidableEq α] :
              DecidableRel FreeGroup.Red
              Equations
              def FreeGroup.Red.enum {α : Type u_1} [DecidableEq α] (L₁ : List (α × Bool)) :
              List (List (α × Bool))

              A list containing every word that w₁ reduces to.

              Equations
              Instances For
                theorem FreeGroup.Red.enum.sound {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (H : L₂ List.filter (fun (b : List (α × Bool)) => decide (FreeGroup.Red L₁ b)) L₁.sublists) :
                FreeGroup.Red L₁ L₂
                theorem FreeGroup.Red.enum.complete {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (H : FreeGroup.Red L₁ L₂) :
                @[simp]
                theorem FreeGroup.one_ne_of {α : Type u_1} (a : α) :
                @[simp]
                theorem FreeAddGroup.zero_ne_of {α : Type u_1} (a : α) :
                @[simp]
                theorem FreeGroup.of_ne_one {α : Type u_1} (a : α) :
                @[simp]
                theorem FreeAddGroup.of_ne_zero {α : Type u_1} (a : α) :
                Equations
                • =
                Equations
                • =
                def FreeGroup.norm {α : Type u_1} [DecidableEq α] (x : FreeGroup α) :

                The length of reduced words provides a norm on a free group.

                Equations
                • x.norm = x.toWord.length
                Instances For
                  def FreeAddGroup.norm {α : Type u_1} [DecidableEq α] (x : FreeAddGroup α) :

                  The length of reduced words provides a norm on an additive free group.

                  Equations
                  • x.norm = x.toWord.length
                  Instances For
                    @[simp]
                    theorem FreeGroup.norm_inv_eq {α : Type u_1} [DecidableEq α] {x : FreeGroup α} :
                    x⁻¹.norm = x.norm
                    @[simp]
                    theorem FreeAddGroup.norm_neg_eq {α : Type u_1} [DecidableEq α] {x : FreeAddGroup α} :
                    (-x).norm = x.norm
                    @[simp]
                    theorem FreeGroup.norm_eq_zero {α : Type u_1} [DecidableEq α] {x : FreeGroup α} :
                    x.norm = 0 x = 1
                    @[simp]
                    theorem FreeAddGroup.norm_eq_zero {α : Type u_1} [DecidableEq α] {x : FreeAddGroup α} :
                    x.norm = 0 x = 0
                    @[simp]
                    theorem FreeGroup.norm_one {α : Type u_1} [DecidableEq α] :
                    @[simp]
                    @[simp]
                    theorem FreeGroup.norm_of {α : Type u_1} [DecidableEq α] (a : α) :
                    (FreeGroup.of a).norm = 1
                    @[simp]
                    theorem FreeAddGroup.norm_of {α : Type u_1} [DecidableEq α] (a : α) :
                    (FreeAddGroup.of a).norm = 1
                    theorem FreeGroup.norm_mk_le {α : Type u_1} {L₁ : List (α × Bool)} [DecidableEq α] :
                    (FreeGroup.mk L₁).norm L₁.length
                    theorem FreeAddGroup.norm_mk_le {α : Type u_1} {L₁ : List (α × Bool)} [DecidableEq α] :
                    (FreeAddGroup.mk L₁).norm L₁.length
                    theorem FreeGroup.norm_mul_le {α : Type u_1} [DecidableEq α] (x y : FreeGroup α) :
                    (x * y).norm x.norm + y.norm
                    theorem FreeAddGroup.norm_add_le {α : Type u_1} [DecidableEq α] (x y : FreeAddGroup α) :
                    (x + y).norm x.norm + y.norm
                    @[simp]
                    theorem FreeGroup.norm_of_pow {α : Type u_1} [DecidableEq α] (a : α) (n : ) :
                    (FreeGroup.of a ^ n).norm = n
                    @[simp]
                    theorem FreeAddGroup.norm_of_nsmul {α : Type u_1} [DecidableEq α] (a : α) (n : ) :
                    (n FreeAddGroup.of a).norm = n
                    theorem FreeGroup.norm_surjective {α : Type u_1} [DecidableEq α] [Nonempty α] :
                    Function.Surjective FreeGroup.norm
                    theorem FreeAddGroup.norm_surjective {α : Type u_1} [DecidableEq α] [Nonempty α] :
                    Function.Surjective FreeAddGroup.norm