Skip to content

Commit 7e70a11

Browse files
kim-emclaude
andcommitted
feat(GroupTheory/Artin): define Artin groups and their universal property
Define Artin groups (also called Artin-Tits groups) as presented groups associated to Coxeter matrices, and establish their universal property. - `CoxeterMatrix.ArtinGroup`: the Artin group associated to a Coxeter matrix - `CoxeterMatrix.artinGenerator`: the generators of the Artin group - `CoxeterMatrix.IsArtinLiftable`: the braid relation condition for liftability - `CoxeterMatrix.artinLift`: the universal property - `CoxeterMatrix.artinToCoxeter`: the canonical surjection to the Coxeter group Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 5a224f1 commit 7e70a11

2 files changed

Lines changed: 215 additions & 0 deletions

File tree

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4557,6 +4557,7 @@ public import Mathlib.GroupTheory.Abelianization.Defs
45574557
public import Mathlib.GroupTheory.Abelianization.Finite
45584558
public import Mathlib.GroupTheory.Archimedean
45594559
public import Mathlib.GroupTheory.ArchimedeanDensely
4560+
public import Mathlib.GroupTheory.Artin.Basic
45604561
public import Mathlib.GroupTheory.ClassEquation
45614562
public import Mathlib.GroupTheory.Commensurable
45624563
public import Mathlib.GroupTheory.Commutator.Basic
Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
/-
2+
Copyright (c) 2025 Kim Morrison. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Kim Morrison
5+
-/
6+
module
7+
8+
public import Mathlib.GroupTheory.Coxeter.Basic
9+
public import Mathlib.GroupTheory.Coxeter.Matrix
10+
public import Mathlib.GroupTheory.PresentedGroup
11+
12+
/-!
13+
# Artin groups
14+
15+
This file defines Artin groups associated to Coxeter matrices.
16+
17+
## Main definitions
18+
19+
* `CoxeterMatrix.ArtinGroup`: The Artin group associated to a Coxeter matrix `M`.
20+
* `CoxeterMatrix.artinGenerator`: The generators of the Artin group.
21+
* `CoxeterMatrix.artinLift`: The universal property of Artin groups.
22+
23+
## Overview
24+
25+
An Artin group (also called Artin-Tits group) associated to a Coxeter matrix `M` is the group
26+
with presentation:
27+
* Generators: `{s_i}_{i ∈ B}`
28+
* Relations: `s_i s_j s_i ... = s_j s_i s_j ...` (alternating products of length `M i j`)
29+
30+
This differs from Coxeter groups which additionally have the relation `s_i² = 1`.
31+
32+
The braid group `B_n` is the Artin group of type `A_{n-1}`.
33+
34+
## References
35+
36+
* [Bourbaki, *Lie Groups and Lie Algebras, Chapters 4--6*]
37+
-/
38+
39+
@[expose] public section
40+
41+
noncomputable section
42+
43+
open FreeGroup List
44+
45+
variable {B : Type*}
46+
47+
namespace CoxeterMatrix
48+
49+
variable (M : CoxeterMatrix B)
50+
51+
/-! ### Artin relations -/
52+
53+
/-- The Artin relation for indices `i` and `j`: the two alternating words of length `M i j`
54+
are equal. This is encoded as
55+
`FreeGroup.ofList (CoxeterSystem.alternatingWord i j (M i j)) *
56+
FreeGroup.ofList (CoxeterSystem.alternatingWord j i (M i j))⁻¹ = 1`. -/
57+
def artinRelation (i j : B) : FreeGroup B :=
58+
FreeGroup.ofList (CoxeterSystem.alternatingWord i j (M i j)) *
59+
(FreeGroup.ofList (CoxeterSystem.alternatingWord j i (M i j)))⁻¹
60+
61+
/-- The set of all Artin relations associated to the Coxeter matrix `M`. -/
62+
def artinRelationsSet : Set (FreeGroup B) :=
63+
Set.range fun p : B × B => M.artinRelation p.1 p.2
64+
65+
theorem artinRelation_mem (i j : B) : M.artinRelation i j ∈ M.artinRelationsSet :=
66+
⟨(i, j), rfl⟩
67+
68+
theorem artinRelation_symmetric_mem (i j : B) :
69+
(M.artinRelation j i)⁻¹ ∈ Subgroup.normalClosure M.artinRelationsSet := by
70+
have h : M.artinRelation j i ∈ M.artinRelationsSet := artinRelation_mem M j i
71+
exact Subgroup.inv_mem _ (Subgroup.subset_normalClosure h)
72+
73+
/-! ### The Artin group -/
74+
75+
/-- The Artin group associated to a Coxeter matrix `M`. This is the group with presentation:
76+
* Generators: `{s_i}_{i ∈ B}`
77+
* Relations: alternating products of length `M i j` are equal -/
78+
protected def ArtinGroup : Type _ := PresentedGroup M.artinRelationsSet
79+
80+
instance : Group M.ArtinGroup := QuotientGroup.Quotient.group _
81+
82+
/-- An Artin group with no generators is trivial. -/
83+
instance instUniqueArtinGroupOfIsEmpty [IsEmpty B] : Unique M.ArtinGroup :=
84+
PresentedGroup.instUniqueOfIsEmpty _
85+
86+
/-- The `i`-th generator of the Artin group. -/
87+
def artinGenerator (i : B) : M.ArtinGroup := PresentedGroup.of i
88+
89+
-- TODO: Prove injectivity of generators (requires more theory about Artin groups)
90+
91+
/-! ### Universal property -/
92+
93+
/-- Compute the alternating product of `f` applied to `i` and `j`, of length `m`, ending with `f j`.
94+
This matches the convention of `CoxeterSystem.alternatingWord i j m` which ends with `j`. -/
95+
def alternatingProd {G : Type*} [Monoid G] (f : B → G) (i j : B) : ℕ → G
96+
| 0 => 1
97+
| m + 1 => alternatingProd f j i m * f j
98+
99+
@[simp]
100+
theorem alternatingProd_zero {G : Type*} [Monoid G] (f : B → G) (i j : B) :
101+
alternatingProd f i j 0 = 1 := rfl
102+
103+
theorem alternatingProd_succ {G : Type*} [Monoid G] (f : B → G) (i j : B) (m : ℕ) :
104+
alternatingProd f i j (m + 1) = alternatingProd f j i m * f j := rfl
105+
106+
theorem ofList_alternatingWord_eq_lift_alternatingProd {G : Type*} [Group G] (f : B → G)
107+
(i j : B) (m : ℕ) :
108+
FreeGroup.lift f (FreeGroup.ofList (CoxeterSystem.alternatingWord i j m)) =
109+
alternatingProd f i j m := by
110+
induction m generalizing i j with
111+
| zero => simp [FreeGroup.ofList, alternatingProd, CoxeterSystem.alternatingWord]
112+
| succ m ih =>
113+
rw [CoxeterSystem.alternatingWord_succ, FreeGroup.ofList_concat]
114+
rw [MonoidHom.map_mul, ih, FreeGroup.lift_apply_of, alternatingProd_succ]
115+
116+
/-- A function `f : B → G` is liftable to the Artin group if it satisfies the braid relations:
117+
for all `i, j`, the alternating products of length `M i j` are equal. -/
118+
def IsArtinLiftable {G : Type*} [Monoid G] (f : B → G) : Prop :=
119+
∀ i j, alternatingProd f i j (M i j) = alternatingProd f j i (M i j)
120+
121+
theorem isArtinLiftable_iff_artinRelation_eq_one {G : Type*} [Group G] (f : B → G) :
122+
M.IsArtinLiftable f ↔ ∀ i j, FreeGroup.lift f (M.artinRelation i j) = 1 := by
123+
constructor
124+
· intro h i j
125+
unfold artinRelation
126+
rw [MonoidHom.map_mul, MonoidHom.map_inv,
127+
ofList_alternatingWord_eq_lift_alternatingProd,
128+
ofList_alternatingWord_eq_lift_alternatingProd, h, mul_inv_cancel]
129+
· intro h i j
130+
have := h i j
131+
unfold artinRelation at this
132+
rw [MonoidHom.map_mul, MonoidHom.map_inv,
133+
ofList_alternatingWord_eq_lift_alternatingProd,
134+
ofList_alternatingWord_eq_lift_alternatingProd, mul_inv_eq_one] at this
135+
exact this
136+
137+
/-- Helper lemma: if `f` satisfies the Artin liftability condition, then the relations
138+
map to 1 under the free group lift. -/
139+
theorem artinRelations_liftable {G : Type*} [Group G] (f : B → G) (hf : M.IsArtinLiftable f) :
140+
∀ r ∈ M.artinRelationsSet, FreeGroup.lift f r = 1 := by
141+
intro r hr
142+
obtain ⟨⟨i, j⟩, rfl⟩ := hr
143+
exact (isArtinLiftable_iff_artinRelation_eq_one M f).mp hf i j
144+
145+
/-- The universal property of Artin groups: lift a function satisfying braid relations
146+
to a group homomorphism. -/
147+
def artinLift {G : Type*} [Group G] (f : B → G) (hf : M.IsArtinLiftable f) : M.ArtinGroup →* G :=
148+
PresentedGroup.toGroup (M.artinRelations_liftable f hf)
149+
150+
@[simp]
151+
theorem artinLift_artinGenerator {G : Type*} [Group G] (f : B → G) (hf : M.IsArtinLiftable f)
152+
(i : B) : M.artinLift f hf (M.artinGenerator i) = f i :=
153+
PresentedGroup.toGroup.of (M.artinRelations_liftable f hf)
154+
155+
theorem artinLift_unique {G : Type*} [Group G] (f : B → G) (hf : M.IsArtinLiftable f)
156+
(φ : M.ArtinGroup →* G) (hφ : ∀ i, φ (M.artinGenerator i) = f i) :
157+
φ = M.artinLift f hf :=
158+
MonoidHom.ext fun _ => PresentedGroup.toGroup.unique (M.artinRelations_liftable f hf) φ hφ
159+
160+
/-- Two homomorphisms from an Artin group are equal if they agree on generators. -/
161+
theorem artinLift_ext {G : Type*} [Group G] (φ ψ : M.ArtinGroup →* G)
162+
(h : ∀ i, φ (M.artinGenerator i) = ψ (M.artinGenerator i)) : φ = ψ :=
163+
PresentedGroup.ext h
164+
165+
/-! ### Generators generate -/
166+
167+
theorem closure_range_artinGenerator : Subgroup.closure (Set.range M.artinGenerator) = ⊤ :=
168+
PresentedGroup.closure_range_of _
169+
170+
theorem artinGenerator_generates (S : Subgroup M.ArtinGroup)
171+
(h : ∀ i, M.artinGenerator i ∈ S) : S = ⊤ := by
172+
rw [eq_top_iff]
173+
intro x _
174+
exact PresentedGroup.generated_by _ S h x
175+
176+
/-! ### Homomorphism to Coxeter group -/
177+
178+
/-- The alternating product of simple reflections equals the word product of the
179+
alternating word. -/
180+
theorem alternatingProd_simple_eq_wordProd (i j : B) (m : ℕ) :
181+
alternatingProd M.simple i j m =
182+
M.toCoxeterSystem.wordProd (CoxeterSystem.alternatingWord i j m) := by
183+
induction m generalizing i j with
184+
| zero => simp [alternatingProd, CoxeterSystem.wordProd, CoxeterSystem.alternatingWord]
185+
| succ m ih =>
186+
rw [alternatingProd_succ, ih]
187+
simp only [CoxeterSystem.alternatingWord_succ, CoxeterSystem.wordProd, List.map_concat,
188+
List.prod_concat]
189+
rfl
190+
191+
/-- The simple reflections in the Coxeter group satisfy the Artin relations. -/
192+
theorem simple_isArtinLiftable : M.IsArtinLiftable M.simple := fun i j => by
193+
simp only [alternatingProd_simple_eq_wordProd]
194+
convert M.toCoxeterSystem.wordProd_braidWord_eq i j using 2
195+
all_goals simp only [CoxeterSystem.braidWord, M.symmetric]
196+
197+
/-- The canonical homomorphism from the Artin group to the Coxeter group. -/
198+
def artinToCoxeter : M.ArtinGroup →* M.Group :=
199+
M.artinLift M.simple M.simple_isArtinLiftable
200+
201+
@[simp]
202+
theorem artinToCoxeter_artinGenerator (i : B) :
203+
M.artinToCoxeter (M.artinGenerator i) = M.simple i :=
204+
M.artinLift_artinGenerator M.simple M.simple_isArtinLiftable i
205+
206+
/-- The homomorphism from the Artin group to the Coxeter group is surjective. -/
207+
theorem artinToCoxeter_surjective : Function.Surjective M.artinToCoxeter := by
208+
rw [← MonoidHom.range_eq_top]
209+
rw [eq_top_iff, ← M.toCoxeterSystem.subgroup_closure_range_simple, Subgroup.closure_le]
210+
intro x hx
211+
obtain ⟨i, rfl⟩ := hx
212+
exact ⟨M.artinGenerator i, M.artinToCoxeter_artinGenerator i⟩
213+
214+
end CoxeterMatrix

0 commit comments

Comments
 (0)