Coxeter Matrices¶
-
sage.combinat.root_system.coxeter_matrix.
CoxeterMatrix
¶ A Coxeter matrix.
A Coxeter matrix \(M = (m_{ij})_{i,j \in I}\) is a matrix encoding a Coxeter system \((W, S)\), where the relations are given by \((s_i s_j)^{m_{ij}}\). Thus \(M\) is symmetric and has entries in \(\{1, 2, 3, \ldots, \infty\}\) with \(m_{ij} = 1\) if and only if \(i = j\).
We represent \(m_{ij} = \infty\) by any number \(m_{ij} \leq -1\). In particular, we can construct a bilinear form \(B = (b_{ij})_{i,j \in I}\) from \(M\) by
\[\begin{split}b_{ij} = \begin{cases} m_{ij} & m_{ij} < 0\ (\text{i.e., } m_{ij} = \infty), \\ -\cos\left( \frac{\pi}{m_{ij}} \right) & \text{otherwise}. \end{cases}\end{split}\]EXAMPLES:
sage: CoxeterMatrix(['A', 4]) [1 3 2 2] [3 1 3 2] [2 3 1 3] [2 2 3 1] sage: CoxeterMatrix(['B', 4]) [1 3 2 2] [3 1 3 2] [2 3 1 4] [2 2 4 1] sage: CoxeterMatrix(['C', 4]) [1 3 2 2] [3 1 3 2] [2 3 1 4] [2 2 4 1] sage: CoxeterMatrix(['D', 4]) [1 3 2 2] [3 1 3 3] [2 3 1 2] [2 3 2 1] sage: CoxeterMatrix(['E', 6]) [1 2 3 2 2 2] [2 1 2 3 2 2] [3 2 1 3 2 2] [2 3 3 1 3 2] [2 2 2 3 1 3] [2 2 2 2 3 1] sage: CoxeterMatrix(['F', 4]) [1 3 2 2] [3 1 4 2] [2 4 1 3] [2 2 3 1] sage: CoxeterMatrix(['G', 2]) [1 6] [6 1]
By default, entries representing \(\infty\) are given by \(-1\) in the Coxeter matrix:
sage: G = Graph([(0,1,None), (1,2,4), (0,2,oo)]) sage: CoxeterMatrix(G) [ 1 3 -1] [ 3 1 4] [-1 4 1]
It is possible to give a number \(\leq -1\) to represent an infinite label:
sage: CoxeterMatrix([[1,-1],[-1,1]]) [ 1 -1] [-1 1] sage: CoxeterMatrix([[1,-3/2],[-3/2,1]]) [ 1 -3/2] [-3/2 1]
-
sage.combinat.root_system.coxeter_matrix.
check_coxeter_matrix
(m)¶ Check if
m
represents a generalized Coxeter matrix and raise and error if not.EXAMPLES:
sage: from sage.combinat.root_system.coxeter_matrix import check_coxeter_matrix sage: m = matrix([[1,3,2],[3,1,-1],[2,-1,1]]) sage: check_coxeter_matrix(m) sage: m = matrix([[1,3],[3,1],[2,-1]]) sage: check_coxeter_matrix(m) Traceback (most recent call last): ... ValueError: not a square matrix sage: m = matrix([[1,3,2],[3,1,-1],[2,-1,2]]) sage: check_coxeter_matrix(m) Traceback (most recent call last): ... ValueError: the matrix diagonal is not all 1 sage: m = matrix([[1,3,3],[3,1,-1],[2,-1,1]]) sage: check_coxeter_matrix(m) Traceback (most recent call last): ... ValueError: the matrix is not symmetric sage: m = matrix([[1,3,1/2],[3,1,-1],[1/2,-1,1]]) sage: check_coxeter_matrix(m) Traceback (most recent call last): ... ValueError: invalid Coxeter label 1/2 sage: m = matrix([[1,3,1],[3,1,-1],[1,-1,1]]) sage: check_coxeter_matrix(m) Traceback (most recent call last): ... ValueError: invalid Coxeter label 1
-
sage.combinat.root_system.coxeter_matrix.
coxeter_matrix_as_function
(t)¶ Return the Coxeter matrix, as a function.
INPUT:
t
– a Cartan type
EXAMPLES:
sage: from sage.combinat.root_system.coxeter_matrix import coxeter_matrix_as_function sage: f = coxeter_matrix_as_function(['A',4]) sage: matrix([[f(i,j) for j in range(1,5)] for i in range(1,5)]) [1 3 2 2] [3 1 3 2] [2 3 1 3] [2 2 3 1]
-
sage.combinat.root_system.coxeter_matrix.
recognize_coxeter_type_from_matrix
(coxeter_matrix, index_set)¶ Return the Coxeter type of
coxeter_matrix
if known, otherwise returnNone
.EXAMPLES:
Some infinite ones:
sage: C = CoxeterMatrix([[1,3,2],[3,1,-1],[2,-1,1]]) sage: C.is_finite() # indirect doctest False sage: C = CoxeterMatrix([[1,-1,-1],[-1,1,-1],[-1,-1,1]]) sage: C.is_finite() # indirect doctest False
Some finite ones:
sage: m = matrix(CoxeterMatrix(['D', 4])) sage: CoxeterMatrix(m).is_finite() # indirect doctest True sage: m = matrix(CoxeterMatrix(['H', 4])) sage: CoxeterMatrix(m).is_finite() # indirect doctest True sage: CoxeterMatrix(CoxeterType(['A',10]).coxeter_graph()).coxeter_type() Coxeter type of ['A', 10] sage: CoxeterMatrix(CoxeterType(['B',10]).coxeter_graph()).coxeter_type() Coxeter type of ['B', 10] sage: CoxeterMatrix(CoxeterType(['C',10]).coxeter_graph()).coxeter_type() Coxeter type of ['B', 10] sage: CoxeterMatrix(CoxeterType(['D',10]).coxeter_graph()).coxeter_type() Coxeter type of ['D', 10] sage: CoxeterMatrix(CoxeterType(['E',6]).coxeter_graph()).coxeter_type() Coxeter type of ['E', 6] sage: CoxeterMatrix(CoxeterType(['E',7]).coxeter_graph()).coxeter_type() Coxeter type of ['E', 7] sage: CoxeterMatrix(CoxeterType(['E',8]).coxeter_graph()).coxeter_type() Coxeter type of ['E', 8] sage: CoxeterMatrix(CoxeterType(['F',4]).coxeter_graph()).coxeter_type() Coxeter type of ['F', 4] sage: CoxeterMatrix(CoxeterType(['G',2]).coxeter_graph()).coxeter_type() Coxeter type of ['G', 2] sage: CoxeterMatrix(CoxeterType(['H',3]).coxeter_graph()).coxeter_type() Coxeter type of ['H', 3] sage: CoxeterMatrix(CoxeterType(['H',4]).coxeter_graph()).coxeter_type() Coxeter type of ['H', 4] sage: CoxeterMatrix(CoxeterType(['I',100]).coxeter_graph()).coxeter_type() Coxeter type of ['I', 100]
Some affine graphs:
sage: CoxeterMatrix(CoxeterType(['A',1,1]).coxeter_graph()).coxeter_type() Coxeter type of ['A', 1, 1] sage: CoxeterMatrix(CoxeterType(['A',10,1]).coxeter_graph()).coxeter_type() Coxeter type of ['A', 10, 1] sage: CoxeterMatrix(CoxeterType(['B',10,1]).coxeter_graph()).coxeter_type() Coxeter type of ['B', 10, 1] sage: CoxeterMatrix(CoxeterType(['C',10,1]).coxeter_graph()).coxeter_type() Coxeter type of ['C', 10, 1] sage: CoxeterMatrix(CoxeterType(['D',10,1]).coxeter_graph()).coxeter_type() Coxeter type of ['D', 10, 1] sage: CoxeterMatrix(CoxeterType(['E',6,1]).coxeter_graph()).coxeter_type() Coxeter type of ['E', 6, 1] sage: CoxeterMatrix(CoxeterType(['E',7,1]).coxeter_graph()).coxeter_type() Coxeter type of ['E', 7, 1] sage: CoxeterMatrix(CoxeterType(['E',8,1]).coxeter_graph()).coxeter_type() Coxeter type of ['E', 8, 1] sage: CoxeterMatrix(CoxeterType(['F',4,1]).coxeter_graph()).coxeter_type() Coxeter type of ['F', 4, 1] sage: CoxeterMatrix(CoxeterType(['G',2,1]).coxeter_graph()).coxeter_type() Coxeter type of ['G', 2, 1]