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.
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.
@[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) :
reduce (x :: L) = List.casesOn (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) :
reduce (x :: L) = List.casesOn (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 FreeGroup.reduce_replicate {α : Type u_1} [DecidableEq α] (n : ) (x : α × Bool) :
@[simp]
theorem FreeAddGroup.reduce_replicate {α : Type u_1} [DecidableEq α] (n : ) (x : α × Bool) :
theorem FreeGroup.reduce.red {α : Type u_1} {L : List (α × Bool)} [DecidableEq α] :
Red L (reduce L)

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

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

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} :
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} :
reduce L₁ = L₂ ++ (x, b) :: (x, !b) :: L₃p
theorem FreeGroup.reduce.min {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (H : Red (reduce L₁) L₂) :
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 : Red (reduce L₁) L₂) :
reduce L₁ = L₂

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

@[simp]
theorem FreeGroup.reduce.idem {α : Type u_1} {L : List (α × Bool)} [DecidableEq α] :

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

@[simp]
theorem FreeAddGroup.reduce.idem {α : Type u_1} {L : List (α × Bool)} [DecidableEq α] :

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 : Red.Step L₁ L₂) :
reduce L₁ = reduce L₂
theorem FreeAddGroup.reduce.Step.eq {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (H : Red.Step L₁ L₂) :
reduce L₁ = reduce L₂
theorem FreeGroup.reduce.eq_of_red {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (H : Red L₁ L₂) :
reduce L₁ = reduce 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 : Red L₁ L₂) :
reduce L₁ = reduce 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 : Red L₁ L₂) :
reduce L₁ = reduce 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 : Red L₁ L₂) :
Red L₁ (reduce L₂)
theorem FreeAddGroup.Red.reduce_right {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (h : Red L₁ L₂) :
Red L₁ (reduce L₂)
theorem FreeGroup.Red.reduce_left {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (h : Red L₁ L₂) :
Red L₂ (reduce L₁)
theorem FreeAddGroup.Red.reduce_left {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (h : Red L₁ L₂) :
Red L₂ (reduce L₁)
theorem FreeGroup.reduce.sound {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (H : mk L₁ = mk L₂) :
reduce L₁ = reduce 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 : mk L₁ = mk L₂) :
reduce L₁ = reduce 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 : reduce L₁ = reduce L₂) :
mk L₁ = mk 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 : reduce L₁ = reduce L₂) :
mk L₁ = mk L₂

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

theorem FreeGroup.reduce.self {α : Type u_1} {L : List (α × Bool)} [DecidableEq α] :
mk (reduce L) = mk L

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

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

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 : Red L₁ L₂) :
Red L₂ (reduce 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 : Red L₁ L₂) :
Red L₂ (reduce 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
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
theorem FreeGroup.mk_toWord {α : Type u_1} [DecidableEq α] {x : FreeGroup α} :
mk x.toWord = x
theorem FreeAddGroup.mk_toWord {α : Type u_1} [DecidableEq α] {x : FreeAddGroup α} :
mk x.toWord = x
@[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 α] :
(mk L₁).toWord = reduce L₁
@[simp]
theorem FreeAddGroup.toWord_mk {α : Type u_1} {L₁ : List (α × Bool)} [DecidableEq α] :
(mk L₁).toWord = reduce L₁
@[simp]
theorem FreeGroup.toWord_of {α : Type u_1} [DecidableEq α] (a : α) :
@[simp]
theorem FreeAddGroup.toWord_of {α : Type u_1} [DecidableEq α] (a : α) :
@[simp]
theorem FreeGroup.reduce_toWord {α : Type u_1} [DecidableEq α] (x : FreeGroup α) :
@[simp]
@[simp]
theorem FreeGroup.toWord_one {α : Type u_1} [DecidableEq α] :
@[simp]
theorem FreeAddGroup.toWord_zero {α : Type u_1} [DecidableEq α] :
theorem FreeGroup.toWord_mul {α : Type u_1} [DecidableEq α] (x y : FreeGroup α) :
theorem FreeAddGroup.toWord_add {α : Type u_1} [DecidableEq α] (x y : FreeAddGroup α) :
theorem FreeGroup.toWord_pow {α : Type u_1} [DecidableEq α] (x : FreeGroup α) (n : ) :
@[simp]
theorem FreeGroup.toWord_of_pow {α : Type u_1} [DecidableEq α] (a : α) (n : ) :
@[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
theorem FreeGroup.reduce_invRev {α : Type u_1} [DecidableEq α] {w : List (α × Bool)} :
@[simp]
@[simp]
theorem FreeAddGroup.toWord_neg {α : Type u_1} [DecidableEq α] (x : FreeAddGroup α) :
theorem FreeGroup.reduce_append_reduce_reduce {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] :
reduce (reduce L₁ ++ reduce L₂) = reduce (L₁ ++ L₂)
theorem FreeAddGroup.reduce_append_reduce_reduce {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] :
reduce (reduce L₁ ++ reduce L₂) = reduce (L₁ ++ L₂)
theorem FreeGroup.reduce_cons_reduce {α : Type u_1} {L : List (α × Bool)} [DecidableEq α] (a : α × Bool) :
reduce (a :: reduce L) = reduce (a :: L)
theorem FreeAddGroup.reduce_cons_reduce {α : Type u_1} {L : List (α × Bool)} [DecidableEq α] (a : α × Bool) :
reduce (a :: reduce L) = reduce (a :: L)
def FreeGroup.reduce.churchRosser {α : Type u_1} {L₁ L₂ L₃ : List (α × Bool)} [DecidableEq α] (H12 : Red L₁ L₂) (H13 : Red L₁ L₃) :
{ L₄ : List (α × Bool) // Red L₂ L₄ Red L₃ L₄ }

Constructive Church-Rosser theorem (compare FreeGroup.Red.church_rosser).

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

Constructive Church-Rosser theorem (compare FreeAddGroup.Red.church_rosser).

Equations
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
theorem FreeGroup.Red.enum.sound {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (H : L₂ List.filter (fun (b : List (α × Bool)) => decide (Red L₁ b)) L₁.sublists) :
Red L₁ L₂
theorem FreeGroup.Red.enum.complete {α : Type u_1} {L₁ L₂ : List (α × Bool)} [DecidableEq α] (H : Red L₁ L₂) :
L₂ enum L₁
@[simp]
theorem FreeGroup.one_ne_of {α : Type u_1} (a : α) :
1 of a
@[simp]
theorem FreeAddGroup.zero_ne_of {α : Type u_1} (a : α) :
0 of a
@[simp]
theorem FreeGroup.of_ne_one {α : Type u_1} (a : α) :
of a 1
@[simp]
theorem FreeAddGroup.of_ne_zero {α : Type u_1} (a : α) :
of a 0
def FreeGroup.norm {α : Type u_1} [DecidableEq α] (x : FreeGroup α) :

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

Equations
def FreeAddGroup.norm {α : Type u_1} [DecidableEq α] (x : FreeAddGroup α) :

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

Equations
@[simp]
theorem FreeGroup.norm_inv_eq {α : Type u_1} [DecidableEq α] {x : FreeGroup α} :
@[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 α] :
norm 1 = 0
@[simp]
theorem FreeAddGroup.norm_zero {α : Type u_1} [DecidableEq α] :
norm 0 = 0
@[simp]
theorem FreeGroup.norm_of {α : Type u_1} [DecidableEq α] (a : α) :
(of a).norm = 1
@[simp]
theorem FreeAddGroup.norm_of {α : Type u_1} [DecidableEq α] (a : α) :
(of a).norm = 1
theorem FreeGroup.norm_mk_le {α : Type u_1} {L₁ : List (α × Bool)} [DecidableEq α] :
(mk L₁).norm L₁.length
theorem FreeAddGroup.norm_mk_le {α : Type u_1} {L₁ : List (α × Bool)} [DecidableEq α] :
(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 : ) :
(of a ^ n).norm = n
@[simp]
theorem FreeAddGroup.norm_of_nsmul {α : Type u_1} [DecidableEq α] (a : α) (n : ) :
(n of a).norm = n