@@ -5,6 +5,7 @@ Authors: Newell Jensen, Mitchell Lee
5
5
-/
6
6
import Mathlib.GroupTheory.PresentedGroup
7
7
import Mathlib.GroupTheory.Coxeter.Matrix
8
+ import Mathlib.Data.Int.Parity
8
9
9
10
/-!
10
11
# Coxeter groups and Coxeter systems
@@ -31,7 +32,8 @@ homomorphism $W \to G$ (`CoxeterSystem.lift`) in a unique way.
31
32
32
33
A *word* is a sequence of elements of $B$. The word $(i_1, \ldots, i_\ell)$ has a corresponding
33
34
product $s_{i_1} \cdots s_{i_\ell} \in W$ (`CoxeterSystem.wordProd`). Every element of $W$ is the
34
- product of some word (`CoxeterSystem.wordProd_surjective`).
35
+ product of some word (`CoxeterSystem.wordProd_surjective`). The words that alternate between two
36
+ elements of $B$ (`CoxeterSystem.alternatingWord`) are particularly important.
35
37
36
38
## Implementation details
37
39
@@ -51,6 +53,7 @@ reflections unless necessary; instead, we state our results in terms of $B$ wher
51
53
* `CoxeterSystem.lift` : Extend a function `f : B → G` to a monoid homomorphism `f' : W → G`
52
54
satisfying `f' (cs.simple i) = f i` for all `i`.
53
55
* `CoxeterSystem.wordProd`
56
+ * `CoxeterSystem.alternatingWord`
54
57
55
58
## References
56
59
@@ -373,4 +376,94 @@ theorem wordProd_surjective : Surjective cs.wordProd := by
373
376
use i :: ω
374
377
rw [wordProd_cons]
375
378
379
+ /-- The word of length `m` that alternates between `i` and `i'`, ending with `i'`. -/
380
+ def alternatingWord (i i' : B) (m : ℕ) : List B :=
381
+ match m with
382
+ | 0 => []
383
+ | m+1 => (alternatingWord i' i m).concat i'
384
+
385
+ /-- The word of length `M i i'` that alternates between `i` and `i'`, ending with `i'`. -/
386
+ abbrev braidWord (M : CoxeterMatrix B) (i i' : B) : List B := alternatingWord i i' (M i i')
387
+
388
+ theorem alternatingWord_succ (i i' : B) (m : ℕ) :
389
+ alternatingWord i i' (m + 1 ) = (alternatingWord i' i m).concat i' := rfl
390
+
391
+ theorem alternatingWord_succ' (i i' : B) (m : ℕ) :
392
+ alternatingWord i i' (m + 1 ) = (if Even m then i' else i) :: alternatingWord i i' m := by
393
+ induction' m with m ih generalizing i i'
394
+ · simp [alternatingWord]
395
+ · rw [alternatingWord]
396
+ nth_rw 1 [ih i' i]
397
+ rw [alternatingWord]
398
+ simp [Nat.even_add_one]
399
+
400
+ @[simp]
401
+ theorem length_alternatingWord (i i' : B) (m : ℕ) :
402
+ List.length (alternatingWord i i' m) = m := by
403
+ induction' m with m ih generalizing i i'
404
+ · dsimp [alternatingWord]
405
+ · simpa [alternatingWord] using ih i' i
406
+
407
+ theorem prod_alternatingWord_eq_mul_pow (i i' : B) (m : ℕ) :
408
+ π (alternatingWord i i' m) = (if Even m then 1 else s i') * (s i * s i') ^ (m / 2 ) := by
409
+ induction' m with m ih
410
+ · simp [alternatingWord]
411
+ · rw [alternatingWord_succ', wordProd_cons, ih]
412
+ rcases Nat.even_or_odd m with even | odd
413
+ · rcases even with ⟨k, rfl⟩
414
+ ring_nf
415
+ have : Odd (1 + k * 2 ) := by use k; ring
416
+ simp [← two_mul, Nat.odd_iff_not_even.mp this]
417
+ rw [Nat.add_mul_div_right _ _ (by norm_num : 0 < 2 )]
418
+ norm_num
419
+ · rcases odd with ⟨k, rfl⟩
420
+ ring_nf
421
+ have h₁ : Odd (1 + k * 2 ) := by use k; ring
422
+ have h₂ : Even (2 + k * 2 ) := by use (k + 1 ); ring
423
+ simp [Nat.odd_iff_not_even.mp h₁, h₂]
424
+ rw [Nat.add_mul_div_right _ _ (by norm_num : 0 < 2 )]
425
+ norm_num
426
+ rw [pow_succ', mul_assoc]
427
+
428
+ theorem prod_alternatingWord_eq_prod_alternatingWord_sub (i i' : B) (m : ℕ) (hm : m ≤ M i i' * 2 ) :
429
+ π (alternatingWord i i' m) = π (alternatingWord i' i (M i i' * 2 - m)) := by
430
+ simp_rw [prod_alternatingWord_eq_mul_pow, ← Int.even_coe_nat]
431
+
432
+ /- Rewrite everything in terms of an integer m' which is equal to m.
433
+ The resulting equation holds for all integers m'. -/
434
+ simp_rw [← zpow_natCast, Int.ofNat_ediv, Int.ofNat_sub hm]
435
+ generalize (m : ℤ) = m'
436
+ clear hm
437
+ push_cast
438
+
439
+ rcases Int.even_or_odd' m' with ⟨k, rfl | rfl⟩
440
+ · rw [if_pos (by use k; ring), if_pos (by use -k + (M i i'); ring), mul_comm 2 k, ← sub_mul]
441
+ repeat rw [Int.mul_ediv_cancel _ (by norm_num)]
442
+ rw [zpow_sub, zpow_natCast, simple_mul_simple_pow' cs i i', ← inv_zpow]
443
+ simp
444
+ · have : ¬Even (2 * k + 1 ) := Int.odd_iff_not_even.mp ⟨k, rfl⟩
445
+ rw [if_neg this]
446
+ have : ¬Even (↑(M i i') * 2 - (2 * k + 1 )) :=
447
+ Int.odd_iff_not_even.mp ⟨↑(M i i') - k - 1 , by ring⟩
448
+ rw [if_neg this]
449
+
450
+ rw [(by ring : ↑(M i i') * 2 - (2 * k + 1 ) = -1 + (-k + ↑(M i i')) * 2 ),
451
+ (by ring : 2 * k + 1 = 1 + k * 2 )]
452
+ repeat rw [Int.add_mul_ediv_right _ _ (by norm_num)]
453
+ norm_num
454
+
455
+ rw [zpow_add, zpow_add, zpow_natCast, simple_mul_simple_pow', zpow_neg, ← inv_zpow, zpow_neg,
456
+ ← inv_zpow]
457
+ simp [← mul_assoc]
458
+
459
+ /-- The two words of length `M i i'` that alternate between `i` and `i'` have the same product.
460
+ This is known as the "braid relation" or "Artin-Tits relation". -/
461
+ theorem wordProd_braidWord_eq (i i' : B) :
462
+ π (braidWord M i i') = π (braidWord M i' i) := by
463
+ have := cs.prod_alternatingWord_eq_prod_alternatingWord_sub i i' (M i i')
464
+ (Nat.le_mul_of_pos_right _ (by norm_num))
465
+ rw [tsub_eq_of_eq_add (mul_two (M i i'))] at this
466
+ nth_rw 2 [M.symmetric i i'] at this
467
+ exact this
468
+
376
469
end CoxeterSystem
0 commit comments