Lie Group Basics¶
Goals of this section¶
Since we must be brief here, this is not really a place to learn about Lie groups or Lie algebras. Rather, the point of this section is to outline what you need to know to use Sage effectively for Lie computations, and to fix ideas and notations.
Semisimple and reductive groups¶
If
We consider a Lie group
Compact Lie groups with continuous representations
Complex analytic groups with analytic representations
Algebraic groups over
with algebraic representations.
A subgroup of
is not since it has a normal unipotent subgroup
A group has a unique largest normal unipotent subgroup, called the unipotent radical, so it is reductive if and only if the unipotent radical is trivial.
A Lie group is called semisimple it is reductive and furthermore has
no nontrivial normal tori. For example
The group
Fundamental group and center¶
If
Parabolic subgroups and Levi subgroups¶
Let
Example: Let
where
and is isomorphic to
The notion of a Levi subgroup can be extended to compact Lie
groups. Thus
Cartan types¶
Semisimple Lie groups are classified by their Cartan types. There
are both reducible and irreducible Cartan types in Sage. Let us start
with the irreducible types. Such a type is implemented in Sage as a
pair ['X', r]
where ‘X’ is one of A, B, C, D, E, F or G and
['G', 2], ['F', 4], ['E', 6], ['E', 7] or ['E', 8].
A simply-connected semisimple group is a direct product of simple Lie
groups, which are given by the following table. The integer
Here are the Lie groups corresponding to the classical types:
compact group |
complex analytic group |
Cartan type |
---|---|---|
You may create these Cartan types and their Dynkin diagrams as follows:
sage: ct = CartanType("D5"); ct
['D', 5]
>>> from sage.all import *
>>> ct = CartanType("D5"); ct
['D', 5]
ct = CartanType("D5"); ct
Here "D5"
is an abbreviation for ['D',5]
. The group
Dual Cartan types¶
Every Cartan type has a dual, which you can get from within Sage:
sage: CartanType("B4").dual()
['C', 4]
>>> from sage.all import *
>>> CartanType("B4").dual()
['C', 4]
CartanType("B4").dual()
Types other than
sage: CartanType("F4").dynkin_diagram()
O---O=>=O---O
1 2 3 4
F4
sage: CartanType("F4").dual()
['F', 4] relabelled by {1: 4, 2: 3, 3: 2, 4: 1}
sage: CartanType("F4").dual().dynkin_diagram()
O---O=>=O---O
4 3 2 1
F4 relabelled by {1: 4, 2: 3, 3: 2, 4: 1}
>>> from sage.all import *
>>> CartanType("F4").dynkin_diagram()
O---O=>=O---O
1 2 3 4
F4
>>> CartanType("F4").dual()
['F', 4] relabelled by {1: 4, 2: 3, 3: 2, 4: 1}
>>> CartanType("F4").dual().dynkin_diagram()
O---O=>=O---O
4 3 2 1
F4 relabelled by {1: 4, 2: 3, 3: 2, 4: 1}
CartanType("F4").dynkin_diagram() CartanType("F4").dual() CartanType("F4").dual().dynkin_diagram()
Reducible Cartan types¶
If
Reducible Cartan types are supported in Sage as follows:
sage: RootSystem("A1xA1")
Root system of type A1xA1
sage: WeylCharacterRing("A1xA1")
The Weyl Character Ring of Type A1xA1 with Integer Ring coefficients
>>> from sage.all import *
>>> RootSystem("A1xA1")
Root system of type A1xA1
>>> WeylCharacterRing("A1xA1")
The Weyl Character Ring of Type A1xA1 with Integer Ring coefficients
RootSystem("A1xA1") WeylCharacterRing("A1xA1")
Low dimensional Cartan types¶
There are some isomorphisms that occur in low degree.
Cartan Type |
Group |
Equivalent Type |
Isomorphic Group |
---|---|---|---|
Sometimes the redundant Cartan types such as
sage: RootSystem("A1").ambient_space().simple_roots()
Finite family {1: (1, -1)}
sage: RootSystem("B1").ambient_space().simple_roots()
Finite family {1: (1)}
sage: RootSystem("C1").ambient_space().simple_roots()
Finite family {1: (2)}
>>> from sage.all import *
>>> RootSystem("A1").ambient_space().simple_roots()
Finite family {1: (1, -1)}
>>> RootSystem("B1").ambient_space().simple_roots()
Finite family {1: (1)}
>>> RootSystem("C1").ambient_space().simple_roots()
Finite family {1: (2)}
RootSystem("A1").ambient_space().simple_roots() RootSystem("B1").ambient_space().simple_roots() RootSystem("C1").ambient_space().simple_roots()
Relabeled Cartan types¶
By default Sage uses the labeling of the Dynkin diagram from [Bourbaki46]. There is another labeling of the vertices due to Dynkin. Most of the literature follows [Bourbaki46], though [Kac] follows Dynkin.
If you need to use Dynkin’s labeling, you should be aware that Sage
does support relabeled Cartan types. See the documentation in
sage.combinat.root_system.type_relabel
for further information.
Standard realizations of the ambient spaces¶
These realizations follow the Appendix in [Bourbaki46]. See the Root system plot tutorial for how to visualize them.
Type A¶
For type
sage: RootSystem("A3").ambient_space().simple_roots()
Finite family {1: (1, -1, 0, 0), 2: (0, 1, -1, 0), 3: (0, 0, 1, -1)}
sage: RootSystem("A3").ambient_space().fundamental_weights()
Finite family {1: (1, 0, 0, 0), 2: (1, 1, 0, 0), 3: (1, 1, 1, 0)}
sage: RootSystem("A3").ambient_space().rho()
(3, 2, 1, 0)
>>> from sage.all import *
>>> RootSystem("A3").ambient_space().simple_roots()
Finite family {1: (1, -1, 0, 0), 2: (0, 1, -1, 0), 3: (0, 0, 1, -1)}
>>> RootSystem("A3").ambient_space().fundamental_weights()
Finite family {1: (1, 0, 0, 0), 2: (1, 1, 0, 0), 3: (1, 1, 1, 0)}
>>> RootSystem("A3").ambient_space().rho()
(3, 2, 1, 0)
RootSystem("A3").ambient_space().simple_roots() RootSystem("A3").ambient_space().fundamental_weights() RootSystem("A3").ambient_space().rho()
The dominant weights consist of integer
See SL versus GL for further remarks about Type A.
Type B¶
For the remaining classical Cartan types
sage: RootSystem("B3").ambient_space().simple_roots()
Finite family {1: (1, -1, 0), 2: (0, 1, -1), 3: (0, 0, 1)}
sage: RootSystem("B3").ambient_space().fundamental_weights()
Finite family {1: (1, 0, 0), 2: (1, 1, 0), 3: (1/2, 1/2, 1/2)}
sage: RootSystem("B3").ambient_space().rho()
(5/2, 3/2, 1/2)
>>> from sage.all import *
>>> RootSystem("B3").ambient_space().simple_roots()
Finite family {1: (1, -1, 0), 2: (0, 1, -1), 3: (0, 0, 1)}
>>> RootSystem("B3").ambient_space().fundamental_weights()
Finite family {1: (1, 0, 0), 2: (1, 1, 0), 3: (1/2, 1/2, 1/2)}
>>> RootSystem("B3").ambient_space().rho()
(5/2, 3/2, 1/2)
RootSystem("B3").ambient_space().simple_roots() RootSystem("B3").ambient_space().fundamental_weights() RootSystem("B3").ambient_space().rho()
This is the Cartan type of (1/2, 1/2, ..., 1/2)
is the highest weight of the
The dominant weights consist of
Type C¶
sage: RootSystem("C3").ambient_space().simple_roots()
Finite family {1: (1, -1, 0), 2: (0, 1, -1), 3: (0, 0, 2)}
sage: RootSystem("C3").ambient_space().fundamental_weights()
Finite family {1: (1, 0, 0), 2: (1, 1, 0), 3: (1, 1, 1)}
sage: RootSystem("C3").ambient_space().rho()
(3, 2, 1)
>>> from sage.all import *
>>> RootSystem("C3").ambient_space().simple_roots()
Finite family {1: (1, -1, 0), 2: (0, 1, -1), 3: (0, 0, 2)}
>>> RootSystem("C3").ambient_space().fundamental_weights()
Finite family {1: (1, 0, 0), 2: (1, 1, 0), 3: (1, 1, 1)}
>>> RootSystem("C3").ambient_space().rho()
(3, 2, 1)
RootSystem("C3").ambient_space().simple_roots() RootSystem("C3").ambient_space().fundamental_weights() RootSystem("C3").ambient_space().rho()
This is the Cartan type of the symplectic group
The dominant weights consist of
Type D¶
sage: RootSystem("D4").ambient_space().simple_roots()
Finite family {1: (1, -1, 0, 0), 2: (0, 1, -1, 0), 3: (0, 0, 1, -1), 4: (0, 0, 1, 1)}
sage: RootSystem("D4").ambient_space().fundamental_weights()
Finite family {1: (1, 0, 0, 0), 2: (1, 1, 0, 0), 3: (1/2, 1/2, 1/2, -1/2), 4: (1/2, 1/2, 1/2, 1/2)}
sage: RootSystem("D4").ambient_space().rho()
(3, 2, 1, 0)
>>> from sage.all import *
>>> RootSystem("D4").ambient_space().simple_roots()
Finite family {1: (1, -1, 0, 0), 2: (0, 1, -1, 0), 3: (0, 0, 1, -1), 4: (0, 0, 1, 1)}
>>> RootSystem("D4").ambient_space().fundamental_weights()
Finite family {1: (1, 0, 0, 0), 2: (1, 1, 0, 0), 3: (1/2, 1/2, 1/2, -1/2), 4: (1/2, 1/2, 1/2, 1/2)}
>>> RootSystem("D4").ambient_space().rho()
(3, 2, 1, 0)
RootSystem("D4").ambient_space().simple_roots() RootSystem("D4").ambient_space().fundamental_weights() RootSystem("D4").ambient_space().rho()
This is the Cartan type of
The dominant weights consist of
Exceptional Types¶
We leave the reader to examine the exceptional types. You can use Sage to list the fundamental dominant weights and simple roots.
Weights and the ambient space¶
Let
Example 1: Let
Example 2: Let
Elements of
are called weights.If
is any representation we may restrict to . Then the characters of that occur in this restriction are called the weights of . acts on its Lie algebra by conjugation (the adjoint representation).The nonzero weights of the adjoint representation are called roots.
The ambient space of
is .
The root system¶
As we have mentioned,
It is convenient to partition
If
The Weyl group¶
Let
Then
is a presentation. An important function
The dual root system¶
The coroots are certain linear functionals on the ambient space
that also form a root system. Since the ambient space admits a
We can also describe the natural pairing between coroots and roots using this invariant inner product as
The Dynkin diagram¶
The Dynkin diagram is a graph whose vertices are in bijection with the
set simple roots. We connect the vertices corresponding to roots that
are not orthogonal. Usually two such roots (vertices) make an angle of
There are various ways to get the Dynkin diagram in Sage:
sage: DynkinDiagram("D5")
O 5
|
|
O---O---O---O
1 2 3 4
D5
sage: ct = CartanType("E6"); ct
['E', 6]
sage: ct.dynkin_diagram()
O 2
|
|
O---O---O---O---O
1 3 4 5 6
E6
sage: B4 = WeylCharacterRing("B4"); B4
The Weyl Character Ring of Type B4 with Integer Ring coefficients
sage: B4.dynkin_diagram()
O---O---O=>=O
1 2 3 4
B4
sage: RootSystem("G2").dynkin_diagram()
3
O=<=O
1 2
G2
>>> from sage.all import *
>>> DynkinDiagram("D5")
O 5
|
|
O---O---O---O
1 2 3 4
D5
>>> ct = CartanType("E6"); ct
['E', 6]
>>> ct.dynkin_diagram()
O 2
|
|
O---O---O---O---O
1 3 4 5 6
E6
>>> B4 = WeylCharacterRing("B4"); B4
The Weyl Character Ring of Type B4 with Integer Ring coefficients
>>> B4.dynkin_diagram()
O---O---O=>=O
1 2 3 4
B4
>>> RootSystem("G2").dynkin_diagram()
3
O=<=O
1 2
G2
DynkinDiagram("D5") ct = CartanType("E6"); ct ct.dynkin_diagram() B4 = WeylCharacterRing("B4"); B4 B4.dynkin_diagram() RootSystem("G2").dynkin_diagram()
The Cartan matrix¶
Consider the natural pairing
This uniquely corresponds to a root system/Dynkin diagram/Lie group.
We note that we have made a convention choice, and the opposite convention corresponds to taking the transpose of the Cartan matrix.
Fundamental weights and the Weyl vector¶
There are certain weights
If
Let
In Sage, this issue arises only for Cartan type
Representations and characters¶
Let
Recall that elements of
are called weights.The Weyl group
acts on , hence on and its ambient space by conjugation.The ambient space
has a fundamental domain for the Weyl group called the positive Weyl chamber. Weights in are called dominant.Then
consists of all vectors such that for all positive roots .It is useful to embed
in and consider weights as lattice points.If
is a representation then restricting to , the module decomposes into a direct sum of weight eigenspaces with multiplicity for weight .There is a unique highest weight
with respect to the partial order. We have and . gives a bijection between irreducible representations and weights in .
Assuming that
The character of
Sometimes this is written
The meaning of
Representations: an example¶

In this example,
Partitions and Schur polynomials¶
The considerations of this section are particular to type
A partition
We do not distinguish between two partitions if they differ only by
some trailing zeros, so
A partition of length ['A',r]
. Not every dominant weight is a partition, since the
coefficients in a dominant weight could be negative. Let us say that
an element ['A',r]
root lattice is effective if the ['A',r]
is a partition of length
Let
So the characters of irreducible representations of
If
then
Affine Cartan types¶
There are also affine Cartan types, which correspond to (infinite dimensional)
affine Lie algebras. There are affine Cartan types of the
form [`X`, r, 1]
if X=A,B,C,D,E,F,G
and [`X`, r]
is an ordinary
Cartan type. There are also twisted affine types of the form [X, r, k]
,
where [X, r]
has an automorphism of degree
Illustrating some of the methods available for the untwisted affine
Cartan type ['A', 4, 1]
:
sage: ct = CartanType(['A',4,1]); ct
['A', 4, 1]
sage: ct.dual()
['A', 4, 1]
sage: ct.classical()
['A', 4]
sage: ct.dynkin_diagram()
0
O-----------+
| |
| |
O---O---O---O
1 2 3 4
A4~
>>> from sage.all import *
>>> ct = CartanType(['A',Integer(4),Integer(1)]); ct
['A', 4, 1]
>>> ct.dual()
['A', 4, 1]
>>> ct.classical()
['A', 4]
>>> ct.dynkin_diagram()
0
O-----------+
| |
| |
O---O---O---O
1 2 3 4
A4~
ct = CartanType(['A',4,1]); ct ct.dual() ct.classical() ct.dynkin_diagram()
The twisted affine Cartan types are relabeling of the duals of certain untwisted Cartan types:
sage: CartanType(['A',3,2])
['B', 2, 1]^*
sage: CartanType(['D',4,3])
['G', 2, 1]^* relabelled by {0: 0, 1: 2, 2: 1}
>>> from sage.all import *
>>> CartanType(['A',Integer(3),Integer(2)])
['B', 2, 1]^*
>>> CartanType(['D',Integer(4),Integer(3)])
['G', 2, 1]^* relabelled by {0: 0, 1: 2, 2: 1}
CartanType(['A',3,2]) CartanType(['D',4,3])
The affine root and the extended Dynkin diagram¶
For the extended Dynkin diagram, we add one negative root
In particular, the hyperplane for the reflection
The extended Dynkin diagram may be obtained as the Dynkin diagram of the corresponding untwisted affine type:
sage: ct = CartanType("E6"); ct
['E', 6]
sage: ct.affine()
['E', 6, 1]
sage: ct.affine() == CartanType(['E',6,1])
True
sage: ct.affine().dynkin_diagram()
O 0
|
|
O 2
|
|
O---O---O---O---O
1 3 4 5 6
E6~
>>> from sage.all import *
>>> ct = CartanType("E6"); ct
['E', 6]
>>> ct.affine()
['E', 6, 1]
>>> ct.affine() == CartanType(['E',Integer(6),Integer(1)])
True
>>> ct.affine().dynkin_diagram()
O 0
|
|
O 2
|
|
O---O---O---O---O
1 3 4 5 6
E6~
ct = CartanType("E6"); ct ct.affine() ct.affine() == CartanType(['E',6,1]) ct.affine().dynkin_diagram()
The extended Dynkin diagram is also a method of the WeylCharacterRing
:
sage: WeylCharacterRing("E7").extended_dynkin_diagram()
O 2
|
|
O---O---O---O---O---O---O
0 1 3 4 5 6 7
E7~
>>> from sage.all import *
>>> WeylCharacterRing("E7").extended_dynkin_diagram()
O 2
|
|
O---O---O---O---O---O---O
0 1 3 4 5 6 7
E7~
WeylCharacterRing("E7").extended_dynkin_diagram()
We note the following important distinctions from the classical cases:
The affine Weyl groups are all infinite.
Type
has two anti-parallel roots with distinct reflections. The Dynkin diagram in this case is represented by a double bond with arrows going in both directions.
Twisted affine root systems¶
For the construction of
The Dynkin diagram of type
has a quadruple bond with an arrow pointing from the short root to the long root.Type
for has 3 different root lengths.
Further Generalizations¶
If a root system (on a Euclidean space) has only the angles
However we can generalize Dynkin diagrams (equivalently Cartan matrices)
to have all its edges labelled by