ProCGroups.ReidemeisterSchreier.Discrete.Presentations.Relators.Basic
This module defines equality modulo a relator normal closure and proves its elementary equivalence, congruence, inversion, multiplication, and quotient characterizations.
imports
- Mathlib.Algebra.Group.Subgroup.Basic
- Mathlib.Algebra.BigOperators.Group.List.Basic
- Mathlib.Data.Finset.Sort
- Mathlib.GroupTheory.FreeGroup.Reduce
- Mathlib.GroupTheory.QuotientGroup.Defs
def RelatorEquivalent (R : Set G) (u v : G) : Prop :=
u * v⁻¹ ∈ Subgroup.normalClosure REquality 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 Lean proof
by
simpa [RelatorEquivalent, div_eq_mul_inv] using
(QuotientGroup.eq_iff_div_mem
(N := Subgroup.normalClosure R) (x := u) (y := v)).symm
@[simp] theorem relatorEquivalent_one_right {R : Set G} {u : G} :
RelatorEquivalent R u 1 ↔ u ∈ Subgroup.normalClosure RRelator equivalence to one on the right is membership in the relator normal closure.
Show Lean proof
by
simp only [RelatorEquivalent, inv_one, mul_one]
@[simp] theorem relatorEquivalent_one_left {R : Set G} {u : G} :
RelatorEquivalent R 1 u ↔ u ∈ Subgroup.normalClosure RRelator equivalence from one on the left is membership in the relator normal closure.
Show Lean proof
by
constructor
· intro h
have huInv : u⁻¹ ∈ Subgroup.normalClosure R := by
simpa [RelatorEquivalent] using h
simpa using Subgroup.inv_mem (Subgroup.normalClosure R) huInv
· intro h
have huInv : u⁻¹ ∈ Subgroup.normalClosure R :=
Subgroup.inv_mem (Subgroup.normalClosure R) h
simpa [RelatorEquivalent] using huInv
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 hvwRelator equivalence defines a setoid on the free group.
@[refl]
theorem refl (R : Set G) (u : G) : RelatorEquivalent R u uRelator equivalence is reflexive.
Show Lean proof
by
rw [relatorEquivalent_iff_eq_in_presentedQuotient]
theorem of_eq (h : u = v) : RelatorEquivalent R u vEqual relators are relator-equivalent.
Show Lean proof
by
rw [h]
theorem symm (h : RelatorEquivalent R u v) : RelatorEquivalent R v uRelator equivalence is symmetric.
Show Lean proof
by
rw [relatorEquivalent_iff_eq_in_presentedQuotient] at h ⊢
exact h.symm
theorem trans (h₁ : RelatorEquivalent R u v) (h₂ : RelatorEquivalent R v w) : RelatorEquivalent
R u wRelator equivalence is transitive.
Show Lean proof
by
rw [relatorEquivalent_iff_eq_in_presentedQuotient] at h₁ h₂ ⊢
exact h₁.trans h₂
theorem inv (h : RelatorEquivalent R u v) : RelatorEquivalent R u⁻¹ v⁻¹Taking inverses preserves relator equivalence.
Show Lean proof
by
rw [relatorEquivalent_iff_eq_in_presentedQuotient] at h ⊢
simpa using congrArg Inv.inv h
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 Lean proof
by
rw [relatorEquivalent_iff_eq_in_presentedQuotient] at h₁ h₂ ⊢
calc
((u * a : G) : G ⧸ Subgroup.normalClosure R) =
(u : G ⧸ Subgroup.normalClosure R) * (a : G ⧸ Subgroup.normalClosure R) := rfl
_ = (v : G ⧸ Subgroup.normalClosure R) * (b : G ⧸ Subgroup.normalClosure R) := by
rw [h₁, h₂]
_ = ((v * b : G) : G ⧸ Subgroup.normalClosure R) := rfl
theorem pow (h : RelatorEquivalent R u v) (n : ℕ) : RelatorEquivalent R (u ^ n) (v ^ n)Taking natural powers preserves relator equivalence.
Show Lean proof
by
rw [relatorEquivalent_iff_eq_in_presentedQuotient] at h ⊢
simpa using congrArg (fun z : G ⧸ Subgroup.normalClosure R => z ^ n) h
theorem zpow (h : RelatorEquivalent R u v) (n : ℤ) : RelatorEquivalent R (u ^ n) (v ^ n)Taking integer powers preserves relator equivalence.
Show Lean proof
by
rw [relatorEquivalent_iff_eq_in_presentedQuotient] at h ⊢
simpa using congrArg (fun z : G ⧸ Subgroup.normalClosure R => z ^ n) h
theorem mul_eq_one (h₁ : RelatorEquivalent R u 1) (h₂ : RelatorEquivalent R v 1) :
RelatorEquivalent R (u * v) 1A product of words relator-equivalent to one is relator-equivalent to one.
Show Lean proof
by
simpa using mul h₁ h₂
theorem pow_eq_one (h : RelatorEquivalent R u 1) (n : ℕ) :
RelatorEquivalent R (u ^ n) 1A natural-number power is relator-equivalent to the identity when the base word is relator-equivalent to the identity.
Show Lean proof
by
simpa using pow h n
theorem zpow_eq_one (h : RelatorEquivalent R u 1) (n : ℤ) :
RelatorEquivalent R (u ^ n) 1An integer power is relator-equivalent to the identity when the base word is relator-equivalent to the identity.
Show Lean proof
by
simpa using zpow h n
theorem inv_eq_one (h : RelatorEquivalent R u 1) :
RelatorEquivalent R u⁻¹ 1The inverse of a word is relator-equivalent to one exactly when the word is.
Show Lean proof
by
simpa using inv h
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 Lean proof
by
induction n with
| zero =>
simp only [pow_zero, mul_one, mul_inv_cancel]
| succ n ih =>
calc
(a * u * a⁻¹) ^ (n + 1) =
a * u ^ n * a⁻¹ * (a * u * a⁻¹) := by
rw [pow_succ, ih]
_ = a * (u ^ n * u) * a⁻¹ := by
simp only [mul_assoc, inv_mul_cancel_left]
_ = a * u ^ (n + 1) * a⁻¹ := by
rw [pow_succ]
theorem mul_eq_one_iff_eq_inv :
RelatorEquivalent R (u * v) 1 ↔ RelatorEquivalent R u v⁻¹A product is trivial modulo the relators exactly when its first factor equals the inverse of the second.
Show Lean proof
by
constructor
· intro h
simpa only [RelatorEquivalent, inv_inv, inv_one, mul_one] using h
· intro h
simpa only [RelatorEquivalent, inv_inv, inv_one, mul_one] using h
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 Lean proof
mul_eq_one_iff_eq_inv.1 h
theorem mul_eq_one_of_eq_inv (h : RelatorEquivalent R u v⁻¹) :
RelatorEquivalent R (u * v) 1A product is relator-equivalent to the identity when one factor is relator-equivalent to the inverse of the other.
Show Lean proof
mul_eq_one_iff_eq_inv.2 h
theorem eq_one_of_mul_eq_one_left
(hu : RelatorEquivalent R u 1)
(huv : RelatorEquivalent R (u * v) 1) :
RelatorEquivalent R v 1If a left product is relator-equivalent to one and the left factor is trivial, the right factor is relator-equivalent to one.
Show Lean proof
by
rw [relatorEquivalent_iff_eq_in_presentedQuotient] at hu huv ⊢
calc
(v : G ⧸ Subgroup.normalClosure R) =
(1 : G ⧸ Subgroup.normalClosure R) * v := by simp only [one_mul]
_ = (u : G ⧸ Subgroup.normalClosure R) * v := by
simpa using congrArg
(fun z : G ⧸ Subgroup.normalClosure R =>
z * (v : G ⧸ Subgroup.normalClosure R)) hu.symm
_ = ((u * v : G) : G ⧸ Subgroup.normalClosure R) := rfl
_ = 1 := huv
theorem eq_one_of_mul_eq_one_right
(huv : RelatorEquivalent R (u * v) 1)
(hv : RelatorEquivalent R v 1) :
RelatorEquivalent R u 1If a right product is relator-equivalent to one and the right factor is trivial, the left factor is relator-equivalent to one.
Show Lean proof
by
rw [relatorEquivalent_iff_eq_in_presentedQuotient] at huv hv ⊢
calc
(u : G ⧸ Subgroup.normalClosure R) =
(u : G ⧸ Subgroup.normalClosure R) * 1 := by simp only [mul_one]
_ = (u : G ⧸ Subgroup.normalClosure R) * v := by
simpa using congrArg
(fun z : G ⧸ Subgroup.normalClosure R =>
(u : G ⧸ Subgroup.normalClosure R) * z) hv.symm
_ = ((u * v : G) : G ⧸ Subgroup.normalClosure R) := rfl
_ = 1 := huv
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 Lean proof
mul (refl R a) h
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 Lean proof
mul h (refl R a)
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 Lean proof
mul_right (mul_left h a) b
theorem conj (h : RelatorEquivalent R u v) (a : G) :
RelatorEquivalent R (a * u * a⁻¹) (a * v * a⁻¹)Conjugating both sides preserves relator equivalence.
Show Lean proof
context h a a⁻¹
theorem conj_eq_one (h : RelatorEquivalent R u 1) (a : G) :
RelatorEquivalent R (a * u * a⁻¹) 1If a word is relator-equivalent to the identity, then every conjugate of it is also relator-equivalent to the identity.
Show Lean proof
by
simpa using conj h a
theorem conj_pow_eq_one
{n : ℕ} (h : RelatorEquivalent R (u ^ n) 1) (a : G) :
RelatorEquivalent R ((a * u * a⁻¹) ^ n) 1If a power is relator-equivalent to the identity, then every conjugate of that power is also relator-equivalent to the identity.
Show Lean proof
by
simpa [conjugate_pow_eq] using conj_eq_one h a
theorem of_mem (hr : r ∈ R) : RelatorEquivalent R r 1Every defining relator is equivalent to the identity.
Show Lean proof
by
simpa [RelatorEquivalent] using (Subgroup.subset_normalClosure hr :
r ∈ Subgroup.normalClosure R)
theorem of_mem_normalClosure (hr : r ∈ Subgroup.normalClosure R) :
RelatorEquivalent R r 1Membership in the normal closure gives relator equivalence to the identity.
Show Lean proof
by
simpa [RelatorEquivalent] using hr
theorem mono (hR_to_S : R ⊆ S) (h : RelatorEquivalent R u v) :
RelatorEquivalent S u vRelator equivalence is monotone with respect to enlarging the relator family.
Show Lean proof
by
have hx : u * v⁻¹ ∈ Subgroup.normalClosure S :=
Subgroup.normalClosure_mono hR_to_S
(by simpa [RelatorEquivalent] using h)
simpa [RelatorEquivalent] using hx
theorem mono_iUnion {ι : Sort*} (R : ι → Set G)
(i : ι) (h : RelatorEquivalent (R i) u v) :
RelatorEquivalent (Set.iUnion R) u vRelator equivalence is monotone under an indexed union of relator families.
Show Lean proof
mono (R := R i) (S := Set.iUnion R)
(fun _ hx => Set.mem_iUnion.2 ⟨i, hx⟩) h
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 vRelator equivalence is monotone under a doubly indexed union of relator families.
Show Lean proof
mono (R := R i j) (S := Set.iUnion fun i : ι => Set.iUnion (R i))
(fun _ hx => Set.mem_iUnion.2 ⟨i, Set.mem_iUnion.2 ⟨j, hx⟩⟩) h
theorem mem_normalClosure_of_eq_one (h : RelatorEquivalent R r 1) :
r ∈ Subgroup.normalClosure RA relator-equivalence certificate to the identity gives membership in the normal closure.
Show Lean proof
by
simpa [RelatorEquivalent] using h
theorem mul_inv_mem_normalClosure (h : RelatorEquivalent R u v) :
u * v⁻¹ ∈ Subgroup.normalClosure RIf two words are relator-equivalent, then multiplying one by the inverse of the other gives an element of the relator normal closure.
Show Lean proof
by
simpa [RelatorEquivalent] using h
theorem div_mem_normalClosure (h : RelatorEquivalent R u v) :
u / v ∈ Subgroup.normalClosure RIf two words are relator-equivalent, then their quotient lies in the normal closure of the relators.
Show Lean proof
by
simpa [div_eq_mul_inv] using h.mul_inv_mem_normalClosure
theorem mul_inv_eq_one (h : RelatorEquivalent R u v) :
RelatorEquivalent R (u * v⁻¹) 1Multiplying a word by the inverse of a relator-equivalent word gives a word relator-equivalent to one.
Show Lean proof
of_mem_normalClosure h.mul_inv_mem_normalClosure
theorem div_eq_one (h : RelatorEquivalent R u v) :
RelatorEquivalent R (u / v) 1A quotient word is relator-equivalent to the identity when its numerator and denominator are relator-equivalent to each other.
Show Lean proof
by
simpa [div_eq_mul_inv] using h.mul_inv_eq_one
theorem one_eq_of_mem_inv (hr : r ∈ R) : RelatorEquivalent R 1 rThe identity is equivalent to every defining relator.
Show Lean proof
(of_mem hr).symm