ReidemeisterSchreier.Discrete.Presentations.Relators

103 Theorem | 4 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
  • Mathlib.GroupTheory.FreeGroup.Reduce
  • Mathlib.Tactic.NormNum.LegendreSymbol
Imported by

Declarations

def RelatorEquivalent (R : Set G) (u v : G) : Prop :=
  u * v⁻¹ ∈ Subgroup.normalClosure R

Equality modulo the normal closure generated by R.

theorem relatorEquivalent_iff_eq_in_presentedQuotient {R : Set G} {u v : G} :
    RelatorEquivalent R u v ↔
      ((u : G ⧸ Subgroup.normalClosure R) =
        (v : G ⧸ Subgroup.normalClosure R))

Relator equivalence is equivalent to equality in the presented quotient.

Show proof
@[simp] theorem relatorEquivalent_one_right {R : Set G} {u : G} :
    RelatorEquivalent R u 1 ↔ u ∈ Subgroup.normalClosure R

Relator equivalence to one on the right is membership in the relator normal closure.

Show proof
@[simp] theorem relatorEquivalent_one_left {R : Set G} {u : G} :
    RelatorEquivalent R 1 u ↔ u ∈ Subgroup.normalClosure R

Relator equivalence from one on the left is membership in the relator normal closure.

Show proof
def relatorEquivalentSetoid (R : Set G) : Setoid G where
  r := RelatorEquivalent R
  iseqv := by
    refine ⟨?_, ?_, ?_⟩
    · intro u
      rw [relatorEquivalent_iff_eq_in_presentedQuotient]
    · intro u v h
      rw [relatorEquivalent_iff_eq_in_presentedQuotient] at h ⊢
      exact h.symm
    · intro u v w huv hvw
      rw [relatorEquivalent_iff_eq_in_presentedQuotient] at huv hvw ⊢
      exact huv.trans hvw

Relator equivalence defines a setoid on the free group.

theorem refl (R : Set G) (u : G) : RelatorEquivalent R u u

Relator equivalence is reflexive.

Show proof
theorem of_eq (h : u = v) : RelatorEquivalent R u v

Equal relators are relator-equivalent.

Show proof
theorem symm (h : RelatorEquivalent R u v) : RelatorEquivalent R v u

Relator equivalence is symmetric.

Show proof
theorem trans (h₁ : RelatorEquivalent R u v) (h₂ : RelatorEquivalent R v w) : RelatorEquivalent R u w

Relator equivalence is transitive.

Show proof
theorem inv (h : RelatorEquivalent R u v) : RelatorEquivalent R u⁻¹ v⁻¹

Relator equivalence is symmetric.

Show proof
theorem mul (h₁ : RelatorEquivalent R u v) (h₂ : RelatorEquivalent R a b) :
    RelatorEquivalent R (u * a) (v * b)

Multiplication of relator-equivalent words preserves relator equivalence.

Show proof
theorem pow (h : RelatorEquivalent R u v) (n : ℕ) : RelatorEquivalent R (u ^ n) (v ^ n)

Taking natural powers preserves relator equivalence.

Show proof
theorem zpow (h : RelatorEquivalent R u v) (n : ℤ) : RelatorEquivalent R (u ^ n) (v ^ n)

Taking integer powers preserves relator equivalence.

Show proof
theorem mul_eq_one (h₁ : RelatorEquivalent R u 1) (h₂ : RelatorEquivalent R v 1) :
    RelatorEquivalent R (u * v) 1

A product of words relator-equivalent to one is relator-equivalent to one.

Show proof
theorem pow_eq_one (h : RelatorEquivalent R u 1) (n : ℕ) :
    RelatorEquivalent R (u ^ n) 1

A natural-number power is relator-equivalent to the identity when the base word is relator-equivalent to the identity.

Show proof
theorem zpow_eq_one (h : RelatorEquivalent R u 1) (n : ℤ) :
    RelatorEquivalent R (u ^ n) 1

An integer power is relator-equivalent to the identity when the base word is relator-equivalent to the identity.

Show proof
theorem inv_eq_one (h : RelatorEquivalent R u 1) :
    RelatorEquivalent R u⁻¹ 1

The inverse of a word is relator-equivalent to one exactly when the word is.

Show proof
theorem conjugate_pow_eq (a u : G) (n : ℕ) :
    (a * u * a⁻¹) ^ n = a * u ^ n * a⁻¹

Conjugating a power relator gives an equivalent relator.

Show proof
theorem mul_eq_one_iff_eq_inv :
    RelatorEquivalent R (u * v) 1 ↔ RelatorEquivalent R u v⁻¹

The relator membership follows from the corresponding relator-equivalence criterion.

Show proof
theorem eq_inv_of_mul_eq_one (h : RelatorEquivalent R (u * v) 1) :
    RelatorEquivalent R u v⁻¹

If a product is relator-equivalent to one, the left factor is relator-equivalent to the inverse of the right factor.

Show proof
theorem mul_eq_one_of_eq_inv (h : RelatorEquivalent R u v⁻¹) :
    RelatorEquivalent R (u * v) 1

A product is relator-equivalent to the identity when one factor is relator-equivalent to the inverse of the other.

Show proof
theorem eq_one_of_mul_eq_one_left
    (hu : RelatorEquivalent R u 1)
    (huv : RelatorEquivalent R (u * v) 1) :
    RelatorEquivalent R v 1

If a left product is relator-equivalent to one and the left factor is trivial, the right factor is relator-equivalent to one.

Show proof
theorem eq_one_of_mul_eq_one_right
    (huv : RelatorEquivalent R (u * v) 1)
    (hv : RelatorEquivalent R v 1) :
    RelatorEquivalent R u 1

If a right product is relator-equivalent to one and the right factor is trivial, the left factor is relator-equivalent to one.

Show proof
theorem mul_left (h : RelatorEquivalent R u v) (a : G) : RelatorEquivalent R (a * u) (a * v)

Left multiplication by the same word preserves relator equivalence.

Show proof
theorem mul_right (h : RelatorEquivalent R u v) (a : G) : RelatorEquivalent R (u * a) (v * a)

Right multiplication by the same word preserves relator equivalence.

Show proof
theorem context (h : RelatorEquivalent R u v) (a b : G) :
    RelatorEquivalent R (a * u * b) (a * v * b)

Replace a subword inside a two-sided context.

Show proof
theorem conj (h : RelatorEquivalent R u v) (a : G) :
    RelatorEquivalent R (a * u * a⁻¹) (a * v * a⁻¹)

Conjugating both sides preserves relator equivalence.

Show proof
theorem conj_eq_one (h : RelatorEquivalent R u 1) (a : G) :
    RelatorEquivalent R (a * u * a⁻¹) 1

If a word is relator-equivalent to the identity, then every conjugate of it is also relator-equivalent to the identity.

Show proof
theorem conj_pow_eq_one
    {n : ℕ} (h : RelatorEquivalent R (u ^ n) 1) (a : G) :
    RelatorEquivalent R ((a * u * a⁻¹) ^ n) 1

If a power is relator-equivalent to the identity, then every conjugate of that power is also relator-equivalent to the identity.

Show proof
theorem of_mem (hr : r ∈ R) : RelatorEquivalent R r 1

The relator membership follows from the corresponding relator-equivalence criterion.

Show proof
theorem of_mem_normalClosure (hr : r ∈ Subgroup.normalClosure R) :
    RelatorEquivalent R r 1

Membership in the normal closure gives relator equivalence to the identity.

Show proof
theorem mono (hR_to_S : R ⊆ S) (h : RelatorEquivalent R u v) :
    RelatorEquivalent S u v

Relator equivalence is monotone with respect to enlarging the relator family.

Show proof
theorem mono_iUnion {ι : Sort*} (R : ι → Set G)
    (i : ι) (h : RelatorEquivalent (R i) u v) :
    RelatorEquivalent (Set.iUnion R) u v

Relator equivalence is monotone under an indexed union of relator families.

Show proof
theorem mono_iUnion₂ {ι : Sort*} {κ : ι → Sort*}
    (R : ∀ i : ι, κ i → Set G)
    (i : ι) (j : κ i) (h : RelatorEquivalent (R i j) u v) :
    RelatorEquivalent (Set.iUnion fun i : ι => Set.iUnion (R i)) u v

Relator equivalence is monotone under a doubly indexed union of relator families.

Show proof
theorem mem_normalClosure_of_eq_one (h : RelatorEquivalent R r 1) :
    r ∈ Subgroup.normalClosure R

A relator-equivalence proof to the identity gives membership in the normal closure.

Show proof
theorem mul_inv_mem_normalClosure (h : RelatorEquivalent R u v) :
    u * v⁻¹ ∈ Subgroup.normalClosure R

If two words are relator-equivalent, then multiplying one by the inverse of the other gives an element of the relator normal closure.

Show proof
theorem div_mem_normalClosure (h : RelatorEquivalent R u v) :
    u / v ∈ Subgroup.normalClosure R

If two words are relator-equivalent, then their quotient lies in the normal closure of the relators.

Show proof
theorem mul_inv_eq_one (h : RelatorEquivalent R u v) :
    RelatorEquivalent R (u * v⁻¹) 1

Multiplying a word by the inverse of a relator-equivalent word gives a word relator-equivalent to one.

Show proof
theorem div_eq_one (h : RelatorEquivalent R u v) :
    RelatorEquivalent R (u / v) 1

A quotient word is relator-equivalent to the identity when its numerator and denominator are relator-equivalent to each other.

Show proof
theorem one_eq_of_mem_inv (hr : r ∈ R) : RelatorEquivalent R 1 r

The relator membership follows from the corresponding relator-equivalence criterion.

Show proof
theorem mem_normalClosure_of_subset
    (hR_to_S : R ⊆ S) {x : G}
    (hx : x ∈ Subgroup.normalClosure R) :
    x ∈ Subgroup.normalClosure S

Membership in a normal closure is preserved when the relator set is enlarged.

Show proof
theorem mem_normalClosure_union_left
    {x : G} (hx : x ∈ Subgroup.normalClosure R) :
    x ∈ Subgroup.normalClosure (R ∪ S)

Membership in the left normal closure implies membership in the normal closure of the union.

Show proof
theorem mem_normalClosure_union_right
    {x : G} (hx : x ∈ Subgroup.normalClosure S) :
    x ∈ Subgroup.normalClosure (R ∪ S)

Membership in the right normal closure implies membership in the normal closure of the union.

Show proof
theorem mem_normalClosure_iUnion
    {ι : Sort*} (R : ι → Set G) (i : ι)
    {x : G} (hx : x ∈ Subgroup.normalClosure (R i)) :
    x ∈ Subgroup.normalClosure (Set.iUnion R)

Membership in the normal closure of an indexed union follows from membership in one indexed normal closure.

Show proof
theorem mem_normalClosure_iUnion₂
    {ι : Sort*} {κ : ι → Sort*}
    (R : ∀ i : ι, κ i → Set G) (i : ι) (j : κ i)
    {x : G} (hx : x ∈ Subgroup.normalClosure (R i j)) :
    x ∈ Subgroup.normalClosure
        (Set.iUnion fun i : ι => Set.iUnion (R i))

Membership in the normal closure of a doubly indexed union follows from membership in one doubly indexed normal closure.

Show proof
theorem mem_normalClosure_iUnion₂_of_exists
    {ι : Sort*} {κ : ι → Sort*}
    (R : ∀ i : ι, κ i → Set G)
    {x : G} (hx : ∃ i : ι, ∃ j : κ i,
      x ∈ Subgroup.normalClosure (R i j)) :
    x ∈ Subgroup.normalClosure
        (Set.iUnion fun i : ι => Set.iUnion (R i))

An explicit pair of indices gives membership in the normal closure of the doubly indexed union.

Show proof
theorem maps_iUnion_relators_mem_normalClosure
    {ι : Sort*} (f : G →* H) {R : ι → Set G} {S : Set H}
    (hR : ∀ i : ι, ∀ r ∈ R i, f r ∈ Subgroup.normalClosure S) :
    ∀ r ∈ Set.iUnion R, f r ∈ Subgroup.normalClosure S

Maps that preserve each indexed relator family send the union of the source relators into the target normal closure.

Show proof
theorem maps_iUnion₂_relators_mem_normalClosure
    {ι : Sort*} {κ : ι → Sort*}
    (f : G →* H) {R : ∀ i : ι, κ i → Set G} {S : Set H}
    (hR : ∀ i : ι, ∀ j : κ i, ∀ r ∈ R i j,
      f r ∈ Subgroup.normalClosure S) :
    ∀ r ∈ Set.iUnion (fun i : ι => Set.iUnion (R i)),
      f r ∈ Subgroup.normalClosure S

Maps that preserve each doubly indexed relator family send the union of the source relators into the target normal closure.

Show proof
theorem map_mem_normalClosure_of_relators
    (f : G →* H) {R : Set G} {S : Set H}
    (hR : ∀ r ∈ R, f r ∈ Subgroup.normalClosure S)
    {x : G} (hx : x ∈ Subgroup.normalClosure R) :
    f x ∈ Subgroup.normalClosure S

A relator-preserving map sends relators into the normal closure of the target relator set.

Show proof
theorem hom_relatorEquivalent_of_maps_relators
    (f : G →* H) {R : Set G} {S : Set H}
    (hR : ∀ r ∈ R, f r ∈ Subgroup.normalClosure S)
    {u v : G} (h : RelatorEquivalent R u v) :
    RelatorEquivalent S (f u) (f v)

A homomorphism preserves relator equivalence when each source relator maps into the target normal closure.

Show proof
theorem hom_relatorEquivalent_of_maps_relators_relatorEquivalent
    (f : G →* H) {R : Set G} {S : Set H}
    (hR : ∀ r ∈ R, RelatorEquivalent S (f r) 1)
    {u v : G} (h : RelatorEquivalent R u v) :
    RelatorEquivalent S (f u) (f v)

A homomorphism preserves relator equivalence when each source relator maps to a target-relator-equivalent trivial word.

Show proof
theorem map_mem_normalClosure_iUnion_of_relators
    {ι : Sort*} (f : G →* H) {R : ι → Set G} {S : Set H}
    (hR : ∀ i : ι, ∀ r ∈ R i, f r ∈ Subgroup.normalClosure S)
    {x : G} (hx : x ∈ Subgroup.normalClosure (Set.iUnion R)) :
    f x ∈ Subgroup.normalClosure S

A mapped relator from an indexed family lies in the normal closure of the union of the mapped relator families.

Show proof
theorem map_mem_normalClosure_iUnion₂_of_relators
    {ι : Sort*} {κ : ι → Sort*}
    (f : G →* H) {R : ∀ i : ι, κ i → Set G} {S : Set H}
    (hR : ∀ i : ι, ∀ j : κ i, ∀ r ∈ R i j,
      f r ∈ Subgroup.normalClosure S)
    {x : G}
    (hx : x ∈ Subgroup.normalClosure
      (Set.iUnion fun i : ι => Set.iUnion (R i))) :
    f x ∈ Subgroup.normalClosure S

A mapped relator from a doubly indexed family lies in the normal closure of the union of the mapped relator families.

Show proof
theorem hom_relatorEquivalent_of_maps_iUnion_relators
    {ι : Sort*} (f : G →* H) {R : ι → Set G} {S : Set H}
    (hR : ∀ i : ι, ∀ r ∈ R i, f r ∈ Subgroup.normalClosure S)
    {u v : G} (h : RelatorEquivalent (Set.iUnion R) u v) :
    RelatorEquivalent S (f u) (f v)

A homomorphism preserves relator equivalence for an indexed union of relators when every source relator maps into the target normal closure.

Show proof
theorem hom_relatorEquivalent_of_maps_iUnion_relators_relatorEquivalent
    {ι : Sort*} (f : G →* H) {R : ι → Set G} {S : Set H}
    (hR : ∀ i : ι, ∀ r ∈ R i, RelatorEquivalent S (f r) 1)
    {u v : G} (h : RelatorEquivalent (Set.iUnion R) u v) :
    RelatorEquivalent S (f u) (f v)

A homomorphism preserves relator equivalence for an indexed union of relators when every source relator maps to a target-relator-equivalent trivial word.

Show proof
theorem hom_relatorEquivalent_of_maps_iUnion₂_relators
    {ι : Sort*} {κ : ι → Sort*}
    (f : G →* H) {R : ∀ i : ι, κ i → Set G} {S : Set H}
    (hR : ∀ i : ι, ∀ j : κ i, ∀ r ∈ R i j,
      f r ∈ Subgroup.normalClosure S)
    {u v : G}
    (h : RelatorEquivalent
      (Set.iUnion fun i : ι => Set.iUnion (R i)) u v) :
    RelatorEquivalent S (f u) (f v)

A homomorphism preserves relator equivalence for a doubly indexed union of relators when every source relator maps into the target normal closure.

Show proof
theorem hom_relatorEquivalent_of_maps_iUnion₂_relators_relatorEquivalent
    {ι : Sort*} {κ : ι → Sort*}
    (f : G →* H) {R : ∀ i : ι, κ i → Set G} {S : Set H}
    (hR : ∀ i : ι, ∀ j : κ i, ∀ r ∈ R i j,
      RelatorEquivalent S (f r) 1)
    {u v : G}
    (h : RelatorEquivalent
      (Set.iUnion fun i : ι => Set.iUnion (R i)) u v) :
    RelatorEquivalent S (f u) (f v)

A homomorphism preserves relator equivalence for a doubly indexed union of relators when every source relator maps to a target-relator-equivalent trivial word.

Show proof
theorem freeGroup_relatorEquivalent_of_toWord_eq_reduce
    [DecidableEq X]
    {R : Set (FreeGroup X)} {u : FreeGroup X} {w : List (X × Bool)}
    (h : u.toWord = FreeGroup.reduce w) :
    RelatorEquivalent R u (FreeGroup.mk w)

A free-group element is relator-equivalent to the word built from a list when its word representation reduces to that list.

Show proof
theorem freeGroup_relatorEquivalent_mk_of_reduce_eq
    [DecidableEq X]
    {R : Set (FreeGroup X)} {u : FreeGroup X} {w : List (X × Bool)}
    (h : FreeGroup.reduce w = u.toWord) :
    RelatorEquivalent R (FreeGroup.mk w) u

A free-group word is relator-equivalent to the word built from a list when their reduced words agree.

Show proof
def freeGroupSubstitutionWord {Y : Type*} [DecidableEq Y]
    (f : X → FreeGroup Y) :
    List (X × Bool) → List (Y × Bool)
  | [] => []
  | (x, true) :: xs => (f x).toWord ++ freeGroupSubstitutionWord f xs
  | (x, false) :: xs => FreeGroup.invRev (f x).toWord ++ freeGroupSubstitutionWord f xs

@[simp]

The substitution word is the free-group word used in the presentation comparison.

theorem freeGroupSubstitutionWord_nil {Y : Type*} [DecidableEq Y]
    (f : X → FreeGroup Y) :
    freeGroupSubstitutionWord f [] = []

The relator-equivalence calculation follows from the product, inverse, conjugation, and substitution closure rules for normal closures.

Show proof
theorem freeGroupSubstitutionWord_cons_true {Y : Type*} [DecidableEq Y]
    (f : X → FreeGroup Y) (x : X) (xs : List (X × Bool)) :
    freeGroupSubstitutionWord f ((x, true) :: xs) =
      (f x).toWord ++ freeGroupSubstitutionWord f xs

The relator-equivalence calculation follows from the product, inverse, conjugation, and substitution closure rules for normal closures.

Show proof
theorem freeGroupSubstitutionWord_cons_false {Y : Type*} [DecidableEq Y]
    (f : X → FreeGroup Y) (x : X) (xs : List (X × Bool)) :
    freeGroupSubstitutionWord f ((x, false) :: xs) =
      FreeGroup.invRev (f x).toWord ++ freeGroupSubstitutionWord f xs

The relator-equivalence calculation follows from the product, inverse, conjugation, and substitution closure rules for normal closures.

Show proof
theorem freeGroupSubstitutionWord_append {Y : Type*} [DecidableEq Y]
    (f : X → FreeGroup Y) (xs ys : List (X × Bool)) :
    freeGroupSubstitutionWord f (xs ++ ys) =
      freeGroupSubstitutionWord f xs ++ freeGroupSubstitutionWord f ys

The relator-equivalence calculation follows from the product, inverse, conjugation, and substitution closure rules for normal closures.

Show proof
theorem freeGroup_mk_substitutionWord {Y : Type*} [DecidableEq Y]
    (f : X → FreeGroup Y) (xs : List (X × Bool)) :
    FreeGroup.mk (freeGroupSubstitutionWord f xs) =
      FreeGroup.lift f (FreeGroup.mk xs)

The substitution word is the free-group word used in the presentation comparison.

Show proof
theorem freeGroup_toWord_lift_mk {Y : Type*} [DecidableEq Y]
    (f : X → FreeGroup Y) (xs : List (X × Bool)) :
    (FreeGroup.lift f (FreeGroup.mk xs)).toWord =
      FreeGroup.reduce (freeGroupSubstitutionWord f xs)

The lifted generator maps to the corresponding word in the free-group presentation.

Show proof
theorem freeGroup_lift_mk_eq_mk_of_substitutionWord_reduce_eq
    {Y : Type*} [DecidableEq Y]
    {f : X → FreeGroup Y} {xs : List (X × Bool)}
    {ys : List (Y × Bool)}
    (h :
      FreeGroup.reduce (freeGroupSubstitutionWord f xs) =
        FreeGroup.reduce ys) :
    FreeGroup.lift f (FreeGroup.mk xs) = FreeGroup.mk ys

The free-group lift of a reduced substitution word agrees with the corresponding generator.

Show proof
theorem freeGroup_relatorEquivalent_lift_mk_of_substitutionWord_reduce_eq
    {Y : Type*} [DecidableEq Y]
    {R : Set (FreeGroup Y)}
    {f : X → FreeGroup Y} {xs : List (X × Bool)}
    {ys : List (Y × Bool)}
    (h :
      FreeGroup.reduce (freeGroupSubstitutionWord f xs) =
        FreeGroup.reduce ys) :
    RelatorEquivalent R (FreeGroup.lift f (FreeGroup.mk xs))
      (FreeGroup.mk ys)

A lifted generator word is relator-equivalent to the corresponding word when the substitution word has the stated reduction.

Show proof
theorem freeGroup_relatorEquivalent_lift_mk_one_of_substitutionWord_reduce_eq
    {Y : Type*} [DecidableEq Y]
    {R : Set (FreeGroup Y)}
    {f : X → FreeGroup Y} {xs : List (X × Bool)}
    {ys : List (Y × Bool)}
    (h :
      FreeGroup.reduce (freeGroupSubstitutionWord f xs) =
        FreeGroup.reduce ys)
    (hy : RelatorEquivalent R (FreeGroup.mk ys) 1) :
    RelatorEquivalent R (FreeGroup.lift f (FreeGroup.mk xs)) 1

A lifted generator word is relator-equivalent to the identity when its substitution word reduces to the empty word.

Show proof
theorem freeGroup_lift_relatorEquivalent_of_generator_relatorEquivalent
    {R : Set G} {f g : X → G}
    (h : ∀ x : X, RelatorEquivalent R (f x) (g x))
    (w : FreeGroup X) :
    RelatorEquivalent R (FreeGroup.lift f w) (FreeGroup.lift g w)

A free-group lift preserves relator equivalence when the generator images are relator-equivalent.

Show proof
theorem freeGroup_lift_relatorEquivalent_one_of_generator_relatorEquivalent
    {R : Set G} {f : X → G}
    (h : ∀ x : X, RelatorEquivalent R (f x) 1)
    (w : FreeGroup X) :
    RelatorEquivalent R (FreeGroup.lift f w) 1

A free-group lift sends the word to a relator-equivalent trivial word when the generator images are relator-equivalent to one.

Show proof
theorem freeGroup_lift_relatorEquivalent_of_generator_eq
    {R : Set G} {f g : X → G}
    (h : ∀ x : X, f x = g x)
    (w : FreeGroup X) :
    RelatorEquivalent R (FreeGroup.lift f w) (FreeGroup.lift g w)

A free-group lift preserves relator equivalence when the generator images are equal.

Show proof
theorem normalClosure_eq_of_relatorEquivalent
    (hR_to_S : ∀ r ∈ R, RelatorEquivalent S r 1)
    (hS_to_R : ∀ s ∈ S, RelatorEquivalent R s 1) :
    Subgroup.normalClosure R = Subgroup.normalClosure S

If every relator on each side is trivial modulo the other side, the normal closures are equal.

Show proof
theorem normalClosure_insert_eq_of_mem
    (hr : r ∈ Subgroup.normalClosure R) :
    Subgroup.normalClosure (insert r R) = Subgroup.normalClosure R

Inserting an element already in the normal closure does not change the normal closure.

Show proof
theorem normalClosure_diff_singleton_eq_of_mem
    (hr : r ∈ Subgroup.normalClosure (R \ {r})) :
    Subgroup.normalClosure R = Subgroup.normalClosure (R \ {r})

Removing a relator that already lies in the normal closure of the remaining relators does not change the normal closure.

Show proof
theorem normalClosure_eq_of_subset_normalClosure
    (hR_to_S : R ⊆ Subgroup.normalClosure S)
    (hS_to_R : S ⊆ Subgroup.normalClosure R) :
    Subgroup.normalClosure R = Subgroup.normalClosure S

Two relator normal closures are equal when each relator family is contained in the normal closure generated by the other.

Show proof
theorem conjugate_mem_normalClosure_of_mem
    (hr : r ∈ R) (a : G) :
    a * r * a⁻¹ ∈ Subgroup.normalClosure R

A conjugate of a relator lies in the normal closure generated by the relator set.

Show proof
theorem conjugate_mem_normalClosure
    (hr : r ∈ Subgroup.normalClosure R) (a : G) :
    a * r * a⁻¹ ∈ Subgroup.normalClosure R

A conjugate of a relator belongs to the normal closure of the relator set.

Show proof
theorem cyclic_rotation_mem_normalClosure
    (h : a * b ∈ Subgroup.normalClosure R) :
    b * a ∈ Subgroup.normalClosure R

Cyclically rotating a relator keeps it in the same normal closure.

Show proof
theorem mem_of_left_mul_mem_normalClosure
    {a b : G}
    (ha : a ∈ Subgroup.normalClosure R)
    (hab : a * b ∈ Subgroup.normalClosure R) :
    b ∈ Subgroup.normalClosure R

If left multiplication by a relator-normal-closure element gives membership, then the original element has the same membership property.

Show proof
theorem cyclic_rotation_pow_mem_normalClosure
    {a b : G} {n : ℕ}
    (h : (a * b) ^ n ∈ Subgroup.normalClosure R) :
    (b * a) ^ n ∈ Subgroup.normalClosure R

A cyclic rotation of a power relator belongs to the normal closure of the original relator set.

Show proof
theorem pow_mem_normalClosure_of_mul_inv_mem
    {u v : G} {n : ℕ}
    (huv : u * v⁻¹ ∈ Subgroup.normalClosure R)
    (hv : v ^ n ∈ Subgroup.normalClosure R) :
    u ^ n ∈ Subgroup.normalClosure R

If u and v are congruent modulo the normal closure and a power of v lies in it, then the same power of u lies in it.

Show proof
theorem list_prod_mem_normalClosure
    {l : List G}
    (h : ∀ x ∈ l, x ∈ Subgroup.normalClosure R) :
    l.prod ∈ Subgroup.normalClosure R

The product of a list of relators belongs to the normal closure of the relator set.

Show proof
theorem list_prod_map_relatorEquivalent
    {ι : Type*} (l : List ι) {f g : ι → G}
    (h : ∀ i ∈ l, RelatorEquivalent R (f i) (g i)) :
    RelatorEquivalent R (l.map f).prod (l.map g).prod

Mapping a list through relator-equivalent entries preserves relator equivalence of the product.

Show proof
theorem list_prod_map_relatorEquivalent_one
    {ι : Type*} (l : List ι) {f : ι → G}
    (h : ∀ i ∈ l, RelatorEquivalent R (f i) 1) :
    RelatorEquivalent R (l.map f).prod 1

A list product is relator-equivalent to the identity when every mapped entry is relator-equivalent to the identity.

Show proof
theorem list_prod_map_inv_reverse (l : List G) :
    (l.map Inv.inv).reverse.prod = l.prod⁻¹

The product of the reversed inverse list agrees with the inverse of the list product.

Show proof
theorem list_prod_reverse_map_inv (l : List G) :
    (l.reverse.map Inv.inv).prod = l.prod⁻¹

The product of the reversed inverse list agrees with the inverse of the list product.

Show proof
theorem list_prod_reverse_inv_relatorEquivalent
    {l m : List G}
    (h : RelatorEquivalent R l.prod m.prod) :
    RelatorEquivalent R (l.reverse.map Inv.inv).prod
      (m.reverse.map Inv.inv).prod

A list product is relator-equivalent to the inverse of the reversed inverse list product.

Show proof
theorem list_prod_append_relatorEquivalent
    {l₁ l₂ m₁ m₂ : List G}
    (h₁ : RelatorEquivalent R l₁.prod m₁.prod)
    (h₂ : RelatorEquivalent R l₂.prod m₂.prod) :
    RelatorEquivalent R (l₁ ++ l₂).prod (m₁ ++ m₂).prod

Appending relator-equivalent list products preserves relator equivalence.

Show proof
theorem list_prod_append_left_relatorEquivalent
    (l : List G) {m n : List G}
    (h : RelatorEquivalent R m.prod n.prod) :
    RelatorEquivalent R (l ++ m).prod (l ++ n).prod

Left-appending the same list product preserves relator equivalence.

Show proof
theorem list_prod_middle_eq_one_relatorEquivalent
    (l m : List G) {u : G}
    (h : RelatorEquivalent R u 1) :
    RelatorEquivalent R (l ++ u :: m).prod (l ++ m).prod

Removing a middle subproduct equal to one preserves relator equivalence of the list product.

Show proof
theorem list_prod_middle_mul_inv_relatorEquivalent
    (l m : List G) {u v : G}
    (h : RelatorEquivalent R u v) :
    RelatorEquivalent R (l ++ (u * v⁻¹) :: m).prod
      (l ++ m).prod

Inserting or removing a middle product multiplied by its inverse preserves relator equivalence.

Show proof
theorem list_prod_append_rotate_mem_normalClosure
    {l m : List G}
    (h : (l ++ m).prod ∈ Subgroup.normalClosure R) :
    (m ++ l).prod ∈ Subgroup.normalClosure R

Rotating an appended list product gives an element of the relator normal closure.

Show proof
theorem list_prod_append_rotate_relatorEquivalent
    {l m : List G}
    (h : RelatorEquivalent R (l ++ m).prod 1) :
    RelatorEquivalent R (m ++ l).prod 1

A rotated append decomposition of a list product is relator-equivalent to the original product.

Show proof
theorem list_prod_rotate_to_front_relatorEquivalent
    {l m : List G}
    (h : RelatorEquivalent R (l ++ m).prod 1) :
    RelatorEquivalent R (m ++ l).prod 1

Rotating a list segment to the front preserves relator equivalence of the product.

Show proof
theorem list_prod_take_drop_rotate_relatorEquivalent
    (l : List G) (n : ℕ)
    (h : RelatorEquivalent R l.prod 1) :
    RelatorEquivalent R ((l.drop n) ++ (l.take n)).prod 1

The take/drop rotation of a list product is relator-equivalent to the original product.

Show proof
theorem list_prod_take_drop_rotate_mem_normalClosure
    (l : List G) (n : ℕ)
    (h : l.prod ∈ Subgroup.normalClosure R) :
    ((l.drop n) ++ (l.take n)).prod ∈ Subgroup.normalClosure R

A take-drop rotation of a list product belongs to the relator normal closure.

Show proof
def orderedFinsetProduct (s : Finset ι) (f : ι → G) : G :=
  ((s.sort (· ≤ ·)).map f).prod

A noncommutative product indexed by a finite set, using the ambient LinearOrder to choose the order. This is the right finite-indexed dispatcher for relator calculations in noncommutative groups.

theorem orderedFinsetProduct_mem_normalClosure
    (s : Finset ι) {f : ι → G}
    (h : ∀ i ∈ s, f i ∈ Subgroup.normalClosure R) :
    orderedFinsetProduct s f ∈ Subgroup.normalClosure R

An ordered finite product of relators belongs to the normal closure of the relator set.

Show proof
theorem orderedFinsetProduct_relatorEquivalent
    (s : Finset ι) {f g : ι → G}
    (h : ∀ i ∈ s, RelatorEquivalent R (f i) (g i)) :
    RelatorEquivalent R (orderedFinsetProduct s f)
      (orderedFinsetProduct s g)

Replacing each term of an ordered finite product by a relator-equivalent term preserves relator equivalence.

Show proof
theorem orderedFinsetProduct_relatorEquivalent_one
    (s : Finset ι) {f : ι → G}
    (h : ∀ i ∈ s, RelatorEquivalent R (f i) 1) :
    RelatorEquivalent R (orderedFinsetProduct s f) 1

An ordered finite product is relator-equivalent to the identity when every term is relator-equivalent to the identity.

Show proof
theorem orderedFinsetProduct_congr
    (s : Finset ι) {f g : ι → G}
    (h : ∀ i ∈ s, f i = g i) :
    orderedFinsetProduct s f = orderedFinsetProduct s g

The relator-equivalence calculation follows from the product, inverse, conjugation, and substitution closure rules for normal closures.

Show proof
theorem conjugate_list_prod {G : Type*} [Group G] (x : G) :
    ∀ l : List G, x * l.prod * x⁻¹ = (l.map fun t => x * t * x⁻¹).prod
  | [] => by
      simp only [List.prod_nil, mul_one, mul_inv_cancel, List.map_nil]
  | t :: ts => by
      rw [List.prod_cons, List.map_cons, List.prod_cons]
      calc
        x * (t * ts.prod) * x⁻¹ = (x * t * x⁻¹) * (x * ts.prod * x⁻¹)

The relator-equivalence calculation follows from the product, inverse, conjugation, and substitution closure rules for normal closures.

Show proof
theorem nested_conjugate_list_prod {G : Type*} [Group G]
    (x : G) {p n : ℕ} (f : Fin p → Fin n → G) :
    (List.ofFn (fun b : Fin p =>
      (List.ofFn (fun j : Fin n => x * f b j * x⁻¹)).prod)).prod =
        x * (List.ofFn (fun b : Fin p =>
          (List.ofFn (fun j : Fin n => f b j)).prod)).prod * x⁻¹

The relator-equivalence calculation follows from the product, inverse, conjugation, and substitution closure rules for normal closures.

Show proof
theorem subgroup_list_prod_val {G : Type*} [Group G]
    {H : Subgroup G} {n : ℕ} (f : Fin n → H) :
    (((List.ofFn f).prod : H) : G) =
      (List.ofFn (fun i : Fin n => ((f i : H) : G))).prod

The value of a subgroup list product is the product of the underlying subgroup elements.

Show proof
theorem subgroup_nested_list_prod_val {G : Type*} [Group G]
    {H : Subgroup G} {p n : ℕ} (f : Fin p → Fin n → H) :
    (((List.ofFn (fun b : Fin p =>
      (List.ofFn (fun j : Fin n => f b j)).prod)).prod : H) : G) =
        (List.ofFn (fun b : Fin p =>
          (List.ofFn (fun j : Fin n => ((f b j : H) : G))).prod)).prod

The subgroup nested list product underlying value is evaluated by the displayed coordinate or generator-level formula in the Reidemeister--Schreier rewriting system.

Show proof
theorem freeGroup_endomorph_mul_inv_mem_normalClosure_of_generator_mul_inv
    {Y : Type*} (R : Set (FreeGroup Y)) (F : FreeGroup Y →* FreeGroup Y)
    (hgen :
      ∀ y : Y,
        F (FreeGroup.of y) * (FreeGroup.of y)⁻¹ ∈ Subgroup.normalClosure R) :
    ∀ w : FreeGroup Y, F w * w⁻¹ ∈ Subgroup.normalClosure R

If an endomorphism is congruent to the identity on generators modulo a normal closure, then it is congruent to the identity on every free-group word.

Show proof