|
| 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