Coxeter Groups As Matrix Groups¶
This implements a general Coxeter group as a matrix group by using the reflection representation.
AUTHORS:
- Travis Scrimshaw (2013-08-28): Initial version
-
sage.groups.matrix_gps.coxeter_group.
CoxeterMatrixGroup
¶ A Coxeter group represented as a matrix group.
Let \((W, S)\) be a Coxeter system. We construct a vector space \(V\) over \(\RR\) with a basis of \(\{ \alpha_s \}_{s \in S}\) and inner product
\[B(\alpha_s, \alpha_t) = -\cos\left( \frac{\pi}{m_{st}} \right)\]where we have \(B(\alpha_s, \alpha_t) = -1\) if \(m_{st} = \infty\). Next we define a representation \(\sigma_s : V \to V\) by
\[\sigma_s \lambda = \lambda - 2 B(\alpha_s, \lambda) \alpha_s.\]This representation is faithful so we can represent the Coxeter group \(W\) by the set of matrices \(\sigma_s\) acting on \(V\).
INPUT:
data
– a Coxeter matrix or graph or a Cartan typebase_ring
– (default: the universal cyclotomic field or a number field) the base ring which contains all values \(\cos(\pi/m_{ij})\) where \((m_{ij})_{ij}\) is the Coxeter matrixindex_set
– (optional) an indexing set for the generators
For finite Coxeter groups, the default base ring is taken to be \(\QQ\) or a quadratic number field when possible.
For more on creating Coxeter groups, see
CoxeterGroup()
.Todo
Currently the label \(\infty\) is implemented as \(-1\) in the Coxeter matrix.
EXAMPLES:
We can create Coxeter groups from Coxeter matrices:
sage: W = CoxeterGroup([[1, 6, 3], [6, 1, 10], [3, 10, 1]]) sage: W Coxeter group over Universal Cyclotomic Field with Coxeter matrix: [ 1 6 3] [ 6 1 10] [ 3 10 1] sage: W.gens() ( [ -1 -E(12)^7 + E(12)^11 1] [ 0 1 0] [ 0 0 1], [ 1 0 0] [-E(12)^7 + E(12)^11 -1 E(20) - E(20)^9] [ 0 0 1], [ 1 0 0] [ 0 1 0] [ 1 E(20) - E(20)^9 -1] ) sage: m = matrix([[1,3,3,3], [3,1,3,2], [3,3,1,2], [3,2,2,1]]) sage: W = CoxeterGroup(m) sage: W.gens() ( [-1 1 1 1] [ 1 0 0 0] [ 1 0 0 0] [ 1 0 0 0] [ 0 1 0 0] [ 1 -1 1 0] [ 0 1 0 0] [ 0 1 0 0] [ 0 0 1 0] [ 0 0 1 0] [ 1 1 -1 0] [ 0 0 1 0] [ 0 0 0 1], [ 0 0 0 1], [ 0 0 0 1], [ 1 0 0 -1] ) sage: a,b,c,d = W.gens() sage: (a*b*c)^3 [ 5 1 -5 7] [ 5 0 -4 5] [ 4 1 -4 4] [ 0 0 0 1] sage: (a*b)^3 [1 0 0 0] [0 1 0 0] [0 0 1 0] [0 0 0 1] sage: b*d == d*b True sage: a*c*a == c*a*c True
We can create the matrix representation over different base rings and with different index sets. Note that the base ring must contain all \(2*\cos(\pi/m_{ij})\) where \((m_{ij})_{ij}\) is the Coxeter matrix:
sage: W = CoxeterGroup(m, base_ring=RR, index_set=['a','b','c','d']) sage: W.base_ring() Real Field with 53 bits of precision sage: W.index_set() ('a', 'b', 'c', 'd') sage: CoxeterGroup(m, base_ring=ZZ) Coxeter group over Integer Ring with Coxeter matrix: [1 3 3 3] [3 1 3 2] [3 3 1 2] [3 2 2 1] sage: CoxeterGroup([[1,4],[4,1]], base_ring=QQ) Traceback (most recent call last): ... TypeError: unable to convert sqrt(2) to a rational
Using the well-known conversion between Coxeter matrices and Coxeter graphs, we can input a Coxeter graph. Following the standard convention, edges with no label (i.e. labelled by
None
) are treated as 3:sage: G = Graph([(0,3,None), (1,3,15), (2,3,7), (0,1,3)]) sage: W = CoxeterGroup(G); W Coxeter group over Universal Cyclotomic Field with Coxeter matrix: [ 1 3 2 3] [ 3 1 2 15] [ 2 2 1 7] [ 3 15 7 1] sage: G2 = W.coxeter_diagram() sage: CoxeterGroup(G2) is W True
Because there currently is no class for \(\ZZ \cup \{ \infty \}\), labels of \(\infty\) are given by \(-1\) in the Coxeter matrix:
sage: G = Graph([(0,1,None), (1,2,4), (0,2,oo)]) sage: W = CoxeterGroup(G) sage: W.coxeter_matrix() [ 1 3 -1] [ 3 1 4] [-1 4 1]
We can also create Coxeter groups from Cartan types using the
implementation
keyword:sage: W = CoxeterGroup(['D',5], implementation="reflection") sage: W Finite Coxeter group over Integer Ring with Coxeter matrix: [1 3 2 2 2] [3 1 3 2 2] [2 3 1 3 3] [2 2 3 1 2] [2 2 3 2 1] sage: W = CoxeterGroup(['H',3], implementation="reflection") sage: W Finite Coxeter group over Number Field in a with defining polynomial x^2 - 5 with Coxeter matrix: [1 3 2] [3 1 5] [2 5 1]