Root lattice realizations

sage.combinat.root_system.root_lattice_realizations.RootLatticeRealizations

The category of root lattice realizations over a given base ring

A root lattice realization \(L\) over a base ring \(R\) is a free module (or vector space if \(R\) is a field) endowed with an embedding of the root lattice of some root system.

Typical root lattice realizations over \(\ZZ\) include the root lattice, weight lattice, and ambient lattice. Typical root lattice realizations over \(\QQ\) include the root space, weight space, and ambient space.

To describe the embedding, a root lattice realization must implement a method simple_root() returning for each \(i\) in the index set the image of the simple root \(\alpha_i\) under the embedding.

A root lattice realization must further implement a method on elements scalar(), computing the scalar product with elements of the coroot lattice or coroot space.

Using those, this category provides tools for reflections, roots, the Weyl group and its action, …

EXAMPLES:

Here, we consider the root system of type \(A_7\), and embed the root lattice element \(x = \alpha_2 + 2 \alpha_6\) in several root lattice realizations:

sage: R = RootSystem(["A",7])
sage: alpha = R.root_lattice().simple_roots()
sage: x = alpha[2] + 2 * alpha[5]

sage: L = R.root_space()
sage: L(x)
alpha[2] + 2*alpha[5]

sage: L = R.weight_lattice()
sage: L(x)
-Lambda[1] + 2*Lambda[2] - Lambda[3] - 2*Lambda[4] + 4*Lambda[5] - 2*Lambda[6]

sage: L = R.ambient_space()
sage: L(x)
(0, 1, -1, 0, 2, -2, 0, 0)

We embed the root space element \(x = \alpha_2 + 1/2 \alpha_6\) in several root lattice realizations:

sage: alpha = R.root_space().simple_roots()
sage: x = alpha[2] + 1/2 * alpha[5]

sage: L = R.weight_space()
sage: L(x)
-Lambda[1] + 2*Lambda[2] - Lambda[3] - 1/2*Lambda[4] + Lambda[5] - 1/2*Lambda[6]

sage: L = R.ambient_space()
sage: L(x)
(0, 1, -1, 0, 1/2, -1/2, 0, 0)

Of course, one can’t embed the root space in the weight lattice:

sage: L = R.weight_lattice()
sage: L(x)
Traceback (most recent call last):
...
TypeError: do not know how to make x (= alpha[2] + 1/2*alpha[5]) an element of self (=Weight lattice of the Root system of type ['A', 7])

If \(K_1\) is a subring of \(K_2\), then one could in theory have an embedding from the root space over \(K_1\) to any root lattice realization over \(K_2\); this is not implemented:

sage: K1 = QQ
sage: K2 = QQ['q']
sage: L = R.weight_space(K2)

sage: alpha = R.root_space(K2).simple_roots()
sage: L(alpha[1])
2*Lambda[1] - Lambda[2]

sage: alpha = R.root_space(K1).simple_roots()
sage: L(alpha[1])
Traceback (most recent call last):
...
TypeError: do not know how to make x (= alpha[1]) an element of self (=Weight space over the Univariate Polynomial Ring in q over Rational Field of the Root system of type ['A', 7])

By a slight abuse, the embedding of the root lattice is not actually required to be faithful. Typically for an affine root system, the null root of the root lattice is killed in the non extended weight lattice:

sage: R = RootSystem(["A", 3, 1])
sage: delta = R.root_lattice().null_root()
sage: L = R.weight_lattice()
sage: L(delta)
0