Root system data for reducible Cartan types#
- class sage.combinat.root_system.type_reducible.AmbientSpace(root_system, base_ring, index_set=None)[source]#
Bases:
AmbientSpace
EXAMPLES:
sage: RootSystem("A2xB2").ambient_space() Ambient space of the Root system of type A2xB2
>>> from sage.all import * >>> RootSystem("A2xB2").ambient_space() Ambient space of the Root system of type A2xB2
- ambient_spaces()[source]#
Returns a list of the irreducible Cartan types of which the given reducible Cartan type is a product.
EXAMPLES:
sage: RootSystem("A2xB2").ambient_space().ambient_spaces() [Ambient space of the Root system of type ['A', 2], Ambient space of the Root system of type ['B', 2]]
>>> from sage.all import * >>> RootSystem("A2xB2").ambient_space().ambient_spaces() [Ambient space of the Root system of type ['A', 2], Ambient space of the Root system of type ['B', 2]]
- cartan_type()[source]#
EXAMPLES:
sage: RootSystem("A2xB2").ambient_space().cartan_type() A2xB2
>>> from sage.all import * >>> RootSystem("A2xB2").ambient_space().cartan_type() A2xB2
- component_types()[source]#
EXAMPLES:
sage: RootSystem("A2xB2").ambient_space().component_types() [['A', 2], ['B', 2]]
>>> from sage.all import * >>> RootSystem("A2xB2").ambient_space().component_types() [['A', 2], ['B', 2]]
- dimension()[source]#
EXAMPLES:
sage: RootSystem("A2xB2").ambient_space().dimension() 5
>>> from sage.all import * >>> RootSystem("A2xB2").ambient_space().dimension() 5
- fundamental_weights()[source]#
EXAMPLES:
sage: RootSystem("A2xB2").ambient_space().fundamental_weights() Finite family {1: (1, 0, 0, 0, 0), 2: (1, 1, 0, 0, 0), 3: (0, 0, 0, 1, 0), 4: (0, 0, 0, 1/2, 1/2)}
>>> from sage.all import * >>> RootSystem("A2xB2").ambient_space().fundamental_weights() Finite family {1: (1, 0, 0, 0, 0), 2: (1, 1, 0, 0, 0), 3: (0, 0, 0, 1, 0), 4: (0, 0, 0, 1/2, 1/2)}
- inject_weights(i, v)[source]#
Produces the corresponding element of the lattice.
INPUT:
i
– an integer in range(self.components)v
– a vector in the i-th component weight lattice
EXAMPLES:
sage: V = RootSystem("A2xB2").ambient_space() sage: [V.inject_weights(i,V.ambient_spaces()[i].fundamental_weights()[1]) for i in range(2)] [(1, 0, 0, 0, 0), (0, 0, 0, 1, 0)] sage: [V.inject_weights(i,V.ambient_spaces()[i].fundamental_weights()[2]) for i in range(2)] [(1, 1, 0, 0, 0), (0, 0, 0, 1/2, 1/2)]
>>> from sage.all import * >>> V = RootSystem("A2xB2").ambient_space() >>> [V.inject_weights(i,V.ambient_spaces()[i].fundamental_weights()[Integer(1)]) for i in range(Integer(2))] [(1, 0, 0, 0, 0), (0, 0, 0, 1, 0)] >>> [V.inject_weights(i,V.ambient_spaces()[i].fundamental_weights()[Integer(2)]) for i in range(Integer(2))] [(1, 1, 0, 0, 0), (0, 0, 0, 1/2, 1/2)]
- negative_roots()[source]#
EXAMPLES:
sage: RootSystem("A1xA2").ambient_space().negative_roots() [(-1, 1, 0, 0, 0), (0, 0, -1, 1, 0), (0, 0, -1, 0, 1), (0, 0, 0, -1, 1)]
>>> from sage.all import * >>> RootSystem("A1xA2").ambient_space().negative_roots() [(-1, 1, 0, 0, 0), (0, 0, -1, 1, 0), (0, 0, -1, 0, 1), (0, 0, 0, -1, 1)]
- positive_roots()[source]#
EXAMPLES:
sage: RootSystem("A1xA2").ambient_space().positive_roots() [(1, -1, 0, 0, 0), (0, 0, 1, -1, 0), (0, 0, 1, 0, -1), (0, 0, 0, 1, -1)]
>>> from sage.all import * >>> RootSystem("A1xA2").ambient_space().positive_roots() [(1, -1, 0, 0, 0), (0, 0, 1, -1, 0), (0, 0, 1, 0, -1), (0, 0, 0, 1, -1)]
- simple_coroot(i)[source]#
EXAMPLES:
sage: A = RootSystem("A1xB2").ambient_space() sage: A.simple_coroot(2) (0, 0, 1, -1) sage: A.simple_coroots() Finite family {1: (1, -1, 0, 0), 2: (0, 0, 1, -1), 3: (0, 0, 0, 2)}
>>> from sage.all import * >>> A = RootSystem("A1xB2").ambient_space() >>> A.simple_coroot(Integer(2)) (0, 0, 1, -1) >>> A.simple_coroots() Finite family {1: (1, -1, 0, 0), 2: (0, 0, 1, -1), 3: (0, 0, 0, 2)}
- simple_root(i)[source]#
EXAMPLES:
sage: A = RootSystem("A1xB2").ambient_space() sage: A.simple_root(2) (0, 0, 1, -1) sage: A.simple_roots() Finite family {1: (1, -1, 0, 0), 2: (0, 0, 1, -1), 3: (0, 0, 0, 1)}
>>> from sage.all import * >>> A = RootSystem("A1xB2").ambient_space() >>> A.simple_root(Integer(2)) (0, 0, 1, -1) >>> A.simple_roots() Finite family {1: (1, -1, 0, 0), 2: (0, 0, 1, -1), 3: (0, 0, 0, 1)}
- class sage.combinat.root_system.type_reducible.CartanType(types)[source]#
Bases:
SageObject
,CartanType_abstract
A class for reducible Cartan types.
Reducible root systems are ones that can be factored as direct products. Strictly speaking type \(D_2\) (corresponding to orthogonal groups of degree 4) is reducible since it is isomorphic to \(A_1\times A_1\). However type \(D_2\) is not built using this class for our purposes.
INPUT:
types
– a list of simple Cartan types
EXAMPLES:
sage: t1, t2 = [CartanType(x) for x in (['A',1], ['B',2])] sage: CartanType([t1, t2]) A1xB2 sage: t = CartanType("A2xB2")
>>> from sage.all import * >>> t1, t2 = [CartanType(x) for x in (['A',Integer(1)], ['B',Integer(2)])] >>> CartanType([t1, t2]) A1xB2 >>> t = CartanType("A2xB2")
A reducible Cartan type is finite (resp. crystallographic, simply laced) if all its components are:
sage: t.is_finite() True sage: t.is_crystallographic() True sage: t.is_simply_laced() False
>>> from sage.all import * >>> t.is_finite() True >>> t.is_crystallographic() True >>> t.is_simply_laced() False
This is implemented by inserting the appropriate abstract super classes (see
_add_abstract_superclass()
):sage: t.__class__.mro() [<class 'sage.combinat.root_system.type_reducible.CartanType_with_superclass'>, <class 'sage.combinat.root_system.type_reducible.CartanType'>, <class 'sage.structure.sage_object.SageObject'>, <class 'sage.combinat.root_system.cartan_type.CartanType_finite'>, <class 'sage.combinat.root_system.cartan_type.CartanType_crystallographic'>, <class 'sage.combinat.root_system.cartan_type.CartanType_abstract'>, <class 'object'>]
>>> from sage.all import * >>> t.__class__.mro() [<class 'sage.combinat.root_system.type_reducible.CartanType_with_superclass'>, <class 'sage.combinat.root_system.type_reducible.CartanType'>, <class 'sage.structure.sage_object.SageObject'>, <class 'sage.combinat.root_system.cartan_type.CartanType_finite'>, <class 'sage.combinat.root_system.cartan_type.CartanType_crystallographic'>, <class 'sage.combinat.root_system.cartan_type.CartanType_abstract'>, <class 'object'>]
The index set of the reducible Cartan type is obtained by relabelling successively the nodes of the Dynkin diagrams of the components by 1,2,…:
sage: t = CartanType(["A",4], ["BC",5,2], ["C",3]) sage: t.index_set() (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13) sage: t.dynkin_diagram() # needs sage.graphs O---O---O---O 1 2 3 4 O=<=O---O---O---O=<=O 5 6 7 8 9 10 O---O=<=O 11 12 13 A4xBC5~xC3
>>> from sage.all import * >>> t = CartanType(["A",Integer(4)], ["BC",Integer(5),Integer(2)], ["C",Integer(3)]) >>> t.index_set() (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13) >>> t.dynkin_diagram() # needs sage.graphs O---O---O---O 1 2 3 4 O=<=O---O---O---O=<=O 5 6 7 8 9 10 O---O=<=O 11 12 13 A4xBC5~xC3
- AmbientSpace[source]#
alias of
AmbientSpace
- ascii_art(label=None, node=None)[source]#
Return an ascii art representation of this reducible Cartan type.
EXAMPLES:
sage: print(CartanType("F4xA2").ascii_art(label = lambda x: x+2)) O---O=>=O---O 3 4 5 6 O---O 7 8 sage: print(CartanType(["BC",5,2], ["A",4]).ascii_art()) O=<=O---O---O---O=<=O 1 2 3 4 5 6 O---O---O---O 7 8 9 10 sage: print(CartanType(["A",4], ["BC",5,2], ["C",3]).ascii_art()) O---O---O---O 1 2 3 4 O=<=O---O---O---O=<=O 5 6 7 8 9 10 O---O=<=O 11 12 13
>>> from sage.all import * >>> print(CartanType("F4xA2").ascii_art(label = lambda x: x+Integer(2))) O---O=>=O---O 3 4 5 6 O---O 7 8 >>> print(CartanType(["BC",Integer(5),Integer(2)], ["A",Integer(4)]).ascii_art()) O=<=O---O---O---O=<=O 1 2 3 4 5 6 O---O---O---O 7 8 9 10 >>> print(CartanType(["A",Integer(4)], ["BC",Integer(5),Integer(2)], ["C",Integer(3)]).ascii_art()) O---O---O---O 1 2 3 4 O=<=O---O---O---O=<=O 5 6 7 8 9 10 O---O=<=O 11 12 13
- cartan_matrix(subdivide=True)[source]#
Return the Cartan matrix associated with
self
. By default the Cartan matrix is a subdivided block matrix showing the reducibility but the subdivision can be suppressed with the optionsubdivide = False
.EXAMPLES:
sage: ct = CartanType("A2","B2") sage: ct.cartan_matrix() # needs sage.graphs [ 2 -1| 0 0] [-1 2| 0 0] [-----+-----] [ 0 0| 2 -1] [ 0 0|-2 2] sage: ct.cartan_matrix(subdivide=False) # needs sage.graphs [ 2 -1 0 0] [-1 2 0 0] [ 0 0 2 -1] [ 0 0 -2 2] sage: ct.index_set() == ct.cartan_matrix().index_set() # needs sage.graphs True
>>> from sage.all import * >>> ct = CartanType("A2","B2") >>> ct.cartan_matrix() # needs sage.graphs [ 2 -1| 0 0] [-1 2| 0 0] [-----+-----] [ 0 0| 2 -1] [ 0 0|-2 2] >>> ct.cartan_matrix(subdivide=False) # needs sage.graphs [ 2 -1 0 0] [-1 2 0 0] [ 0 0 2 -1] [ 0 0 -2 2] >>> ct.index_set() == ct.cartan_matrix().index_set() # needs sage.graphs True
- component_types()[source]#
A list of Cartan types making up the reducible type.
EXAMPLES:
sage: CartanType(['A',2],['B',2]).component_types() [['A', 2], ['B', 2]]
>>> from sage.all import * >>> CartanType(['A',Integer(2)],['B',Integer(2)]).component_types() [['A', 2], ['B', 2]]
- coxeter_diagram()[source]#
Return the Coxeter diagram for
self
.EXAMPLES:
sage: cd = CartanType("A2xB2xF4").coxeter_diagram(); cd # needs sage.graphs Graph on 8 vertices sage: cd.edges(sort=True) # needs sage.graphs [(1, 2, 3), (3, 4, 4), (5, 6, 3), (6, 7, 4), (7, 8, 3)] sage: CartanType("F4xA2").coxeter_diagram().edges(sort=True) # needs sage.graphs [(1, 2, 3), (2, 3, 4), (3, 4, 3), (5, 6, 3)] sage: cd = CartanType("A1xH3").coxeter_diagram(); cd # needs sage.graphs Graph on 4 vertices sage: cd.edges(sort=True) # needs sage.graphs [(2, 3, 3), (3, 4, 5)]
>>> from sage.all import * >>> cd = CartanType("A2xB2xF4").coxeter_diagram(); cd # needs sage.graphs Graph on 8 vertices >>> cd.edges(sort=True) # needs sage.graphs [(1, 2, 3), (3, 4, 4), (5, 6, 3), (6, 7, 4), (7, 8, 3)] >>> CartanType("F4xA2").coxeter_diagram().edges(sort=True) # needs sage.graphs [(1, 2, 3), (2, 3, 4), (3, 4, 3), (5, 6, 3)] >>> cd = CartanType("A1xH3").coxeter_diagram(); cd # needs sage.graphs Graph on 4 vertices >>> cd.edges(sort=True) # needs sage.graphs [(2, 3, 3), (3, 4, 5)]
- dual()[source]#
EXAMPLES:
sage: CartanType("A2xB2").dual() A2xC2
>>> from sage.all import * >>> CartanType("A2xB2").dual() A2xC2
- dynkin_diagram()[source]#
Returns a Dynkin diagram for type reducible.
EXAMPLES:
sage: dd = CartanType("A2xB2xF4").dynkin_diagram(); dd # needs sage.graphs O---O 1 2 O=>=O 3 4 O---O=>=O---O 5 6 7 8 A2xB2xF4 sage: dd.edges(sort=True) # needs sage.graphs [(1, 2, 1), (2, 1, 1), (3, 4, 2), (4, 3, 1), (5, 6, 1), (6, 5, 1), (6, 7, 2), (7, 6, 1), (7, 8, 1), (8, 7, 1)] sage: CartanType("F4xA2").dynkin_diagram() # needs sage.graphs O---O=>=O---O 1 2 3 4 O---O 5 6 F4xA2
>>> from sage.all import * >>> dd = CartanType("A2xB2xF4").dynkin_diagram(); dd # needs sage.graphs O---O 1 2 O=>=O 3 4 O---O=>=O---O 5 6 7 8 A2xB2xF4 >>> dd.edges(sort=True) # needs sage.graphs [(1, 2, 1), (2, 1, 1), (3, 4, 2), (4, 3, 1), (5, 6, 1), (6, 5, 1), (6, 7, 2), (7, 6, 1), (7, 8, 1), (8, 7, 1)] >>> CartanType("F4xA2").dynkin_diagram() # needs sage.graphs O---O=>=O---O 1 2 3 4 O---O 5 6 F4xA2
- index_set()[source]#
Implements
CartanType_abstract.index_set()
.For the moment, the index set is always of the form \(\{1, \ldots, n\}\).
EXAMPLES:
sage: CartanType("A2","A1").index_set() (1, 2, 3)
>>> from sage.all import * >>> CartanType("A2","A1").index_set() (1, 2, 3)
- is_affine()[source]#
Report that this reducible Cartan type is not affine
EXAMPLES:
sage: CartanType(['A',2],['B',2]).is_affine() False
>>> from sage.all import * >>> CartanType(['A',Integer(2)],['B',Integer(2)]).is_affine() False
- is_finite()[source]#
EXAMPLES:
sage: ct1 = CartanType(['A',2],['B',2]) sage: ct1.is_finite() True sage: ct2 = CartanType(['A',2],['B',2,1]) sage: ct2.is_finite() False
>>> from sage.all import * >>> ct1 = CartanType(['A',Integer(2)],['B',Integer(2)]) >>> ct1.is_finite() True >>> ct2 = CartanType(['A',Integer(2)],['B',Integer(2),Integer(1)]) >>> ct2.is_finite() False
- is_irreducible()[source]#
Report that this Cartan type is not irreducible.
EXAMPLES:
sage: ct = CartanType(['A',2],['B',2]) sage: ct.is_irreducible() False
>>> from sage.all import * >>> ct = CartanType(['A',Integer(2)],['B',Integer(2)]) >>> ct.is_irreducible() False