Cartan matrices¶
AUTHORS:
- Travis Scrimshaw (2012-04-22): Nicolas M. Thiery moved matrix creation to
CartanType
to preparecartan_matrix()
for deprecation. - Christian Stump, Travis Scrimshaw (2013-04-13): Created
CartanMatrix
. - Ben Salisbury (2018-08-07): Added Borcherds-Cartan matrices.
-
sage.combinat.root_system.cartan_matrix.
CartanMatrix
¶ A (generalized) Cartan matrix.
A matrix \(A = (a_{ij})_{i,j \in I}\) for some index set \(I\) is a generalized Cartan matrix if it satisfies the following properties:
- \(a_{ii} = 2\) for all \(i\),
- \(a_{ij} \leq 0\) for all \(i \neq j\),
- \(a_{ij} = 0\) if and only if \(a_{ji} = 0\) for all \(i \neq j\).
Additionally some reference assume that a Cartan matrix is symmetrizable (see
is_symmetrizable()
). However following Kac, we do not make that assumption here.An even, integral Borcherds–Cartan matrix is an integral matrix \(A = (a_{ij})_{i,j \in I}\) for some countable index set \(I\) which satisfies the following properties:
- \(a_{ii} \in \{2\} \cup 2\ZZ_{<0}\) for all \(i\),
- \(a_{ij} \leq 0\) for all \(i \neq j\),
- \(a_{ij} = 0\) if and only if \(a_{ji} = 0\) for all \(i \neq j\).
INPUT:
Can be anything which is accepted by
CartanType
or a matrix.If given a matrix, one can also use the keyword
cartan_type
when giving a matrix to explicitly state the type. Otherwise this will try to check the input matrix against possible standard types of Cartan matrices. To disable this check, use the keywordcartan_type_check = False
.If one wants to initialize a Borcherds-Cartan matrix using matrix data, use the keyword
borcherds=True
. To specify the diagonal entries of corresponding to a Cartan type (a Cartan matrix is treated as matrix data), useborcherds
with a list of the diagonal entries.EXAMPLES:
sage: CartanMatrix(['A', 4]) [ 2 -1 0 0] [-1 2 -1 0] [ 0 -1 2 -1] [ 0 0 -1 2] sage: CartanMatrix(['B', 6]) [ 2 -1 0 0 0 0] [-1 2 -1 0 0 0] [ 0 -1 2 -1 0 0] [ 0 0 -1 2 -1 0] [ 0 0 0 -1 2 -1] [ 0 0 0 0 -2 2] sage: CartanMatrix(['C', 4]) [ 2 -1 0 0] [-1 2 -1 0] [ 0 -1 2 -2] [ 0 0 -1 2] sage: CartanMatrix(['D', 6]) [ 2 -1 0 0 0 0] [-1 2 -1 0 0 0] [ 0 -1 2 -1 0 0] [ 0 0 -1 2 -1 -1] [ 0 0 0 -1 2 0] [ 0 0 0 -1 0 2] sage: CartanMatrix(['E',6]) [ 2 0 -1 0 0 0] [ 0 2 0 -1 0 0] [-1 0 2 -1 0 0] [ 0 -1 -1 2 -1 0] [ 0 0 0 -1 2 -1] [ 0 0 0 0 -1 2] sage: CartanMatrix(['E',7]) [ 2 0 -1 0 0 0 0] [ 0 2 0 -1 0 0 0] [-1 0 2 -1 0 0 0] [ 0 -1 -1 2 -1 0 0] [ 0 0 0 -1 2 -1 0] [ 0 0 0 0 -1 2 -1] [ 0 0 0 0 0 -1 2] sage: CartanMatrix(['E', 8]) [ 2 0 -1 0 0 0 0 0] [ 0 2 0 -1 0 0 0 0] [-1 0 2 -1 0 0 0 0] [ 0 -1 -1 2 -1 0 0 0] [ 0 0 0 -1 2 -1 0 0] [ 0 0 0 0 -1 2 -1 0] [ 0 0 0 0 0 -1 2 -1] [ 0 0 0 0 0 0 -1 2] sage: CartanMatrix(['F', 4]) [ 2 -1 0 0] [-1 2 -1 0] [ 0 -2 2 -1] [ 0 0 -1 2]
This is different from MuPAD-Combinat, due to different node convention?
sage: CartanMatrix(['G', 2]) [ 2 -3] [-1 2] sage: CartanMatrix(['A',1,1]) [ 2 -2] [-2 2] sage: CartanMatrix(['A', 3, 1]) [ 2 -1 0 -1] [-1 2 -1 0] [ 0 -1 2 -1] [-1 0 -1 2] sage: CartanMatrix(['B', 3, 1]) [ 2 0 -1 0] [ 0 2 -1 0] [-1 -1 2 -1] [ 0 0 -2 2] sage: CartanMatrix(['C', 3, 1]) [ 2 -1 0 0] [-2 2 -1 0] [ 0 -1 2 -2] [ 0 0 -1 2] sage: CartanMatrix(['D', 4, 1]) [ 2 0 -1 0 0] [ 0 2 -1 0 0] [-1 -1 2 -1 -1] [ 0 0 -1 2 0] [ 0 0 -1 0 2] sage: CartanMatrix(['E', 6, 1]) [ 2 0 -1 0 0 0 0] [ 0 2 0 -1 0 0 0] [-1 0 2 0 -1 0 0] [ 0 -1 0 2 -1 0 0] [ 0 0 -1 -1 2 -1 0] [ 0 0 0 0 -1 2 -1] [ 0 0 0 0 0 -1 2] sage: CartanMatrix(['E', 7, 1]) [ 2 -1 0 0 0 0 0 0] [-1 2 0 -1 0 0 0 0] [ 0 0 2 0 -1 0 0 0] [ 0 -1 0 2 -1 0 0 0] [ 0 0 -1 -1 2 -1 0 0] [ 0 0 0 0 -1 2 -1 0] [ 0 0 0 0 0 -1 2 -1] [ 0 0 0 0 0 0 -1 2] sage: CartanMatrix(['E', 8, 1]) [ 2 0 0 0 0 0 0 0 -1] [ 0 2 0 -1 0 0 0 0 0] [ 0 0 2 0 -1 0 0 0 0] [ 0 -1 0 2 -1 0 0 0 0] [ 0 0 -1 -1 2 -1 0 0 0] [ 0 0 0 0 -1 2 -1 0 0] [ 0 0 0 0 0 -1 2 -1 0] [ 0 0 0 0 0 0 -1 2 -1] [-1 0 0 0 0 0 0 -1 2] sage: CartanMatrix(['F', 4, 1]) [ 2 -1 0 0 0] [-1 2 -1 0 0] [ 0 -1 2 -1 0] [ 0 0 -2 2 -1] [ 0 0 0 -1 2] sage: CartanMatrix(['G', 2, 1]) [ 2 0 -1] [ 0 2 -3] [-1 -1 2]
Examples of Borcherds-Cartan matrices:
sage: CartanMatrix([[2,-1],[-1,-2]], borcherds=True) [ 2 -1] [-1 -2] sage: CartanMatrix('B3', borcherds=[-4,-6,2]) [-4 -1 0] [-1 -6 -1] [ 0 -2 2]
Note
Since this is a matrix,
row()
andcolumn()
will return the standard row and column respectively. To get the row with the indices as in Dynkin diagrams/Cartan types, userow_with_indices()
andcolumn_with_indices()
respectively.
-
sage.combinat.root_system.cartan_matrix.
find_cartan_type_from_matrix
(CM)¶ Find a Cartan type by direct comparison of Dynkin diagrams given from the generalized Cartan matrix
CM
and returnNone
if not found.INPUT:
CM
– a generalized Cartan matrix
EXAMPLES:
sage: from sage.combinat.root_system.cartan_matrix import find_cartan_type_from_matrix sage: CM = CartanMatrix([[2,-1,-1], [-1,2,-1], [-1,-1,2]]) sage: find_cartan_type_from_matrix(CM) ['A', 2, 1] sage: CM = CartanMatrix([[2,-1,0], [-1,2,-2], [0,-1,2]]) sage: find_cartan_type_from_matrix(CM) ['C', 3] relabelled by {1: 0, 2: 1, 3: 2} sage: CM = CartanMatrix([[2,-1,-2], [-1,2,-1], [-2,-1,2]]) sage: find_cartan_type_from_matrix(CM)
-
sage.combinat.root_system.cartan_matrix.
is_borcherds_cartan_matrix
(M)¶ Return
True
ifM
is an even, integral Borcherds-Cartan matrix. For a definition of such a matrix, seeCartanMatrix
.EXAMPLES:
sage: from sage.combinat.root_system.cartan_matrix import is_borcherds_cartan_matrix sage: M = Matrix([[2,-1],[-1,2]]) sage: is_borcherds_cartan_matrix(M) True sage: N = Matrix([[2,-1],[-1,0]]) sage: is_borcherds_cartan_matrix(N) False sage: O = Matrix([[2,-1],[-1,-2]]) sage: is_borcherds_cartan_matrix(O) True sage: O = Matrix([[2,-1],[-1,-3]]) sage: is_borcherds_cartan_matrix(O) False
-
sage.combinat.root_system.cartan_matrix.
is_generalized_cartan_matrix
(M)¶ Return
True
ifM
is a generalized Cartan matrix. For a definition of a generalized Cartan matrix, seeCartanMatrix
.EXAMPLES:
sage: from sage.combinat.root_system.cartan_matrix import is_generalized_cartan_matrix sage: M = matrix([[2,-1,-2], [-1,2,-1], [-2,-1,2]]) sage: is_generalized_cartan_matrix(M) True sage: M = matrix([[2,-1,-2], [-1,2,-1], [0,-1,2]]) sage: is_generalized_cartan_matrix(M) False sage: M = matrix([[1,-1,-2], [-1,2,-1], [-2,-1,2]]) sage: is_generalized_cartan_matrix(M) False
A non-symmetrizable example:
sage: M = matrix([[2,-1,-2], [-1,2,-1], [-1,-1,2]]) sage: is_generalized_cartan_matrix(M) True