Root lattices and root spaces

sage.combinat.root_system.root_space.RootSpace

The root space of a root system over a given base ring

INPUT:

  • root_system - a root system
  • base_ring: a ring \(R\)

The root space (or lattice if base_ring is \(\ZZ\)) of a root system is the formal free module \(\bigoplus_i R \alpha_i\) generated by the simple roots \((\alpha_i)_{i\in I}\) of the root system.

This class is also used for coroot spaces (or lattices).

See also

Todo: standardize the variable used for the root space in the examples (P?)

class sage.combinat.root_system.root_space.RootSpaceElement

Bases: sage.modules.with_basis.indexed_element.IndexedFreeModuleElement

associated_coroot()

Returns the coroot associated to this root

OUTPUT:

An element of the coroot space over the same base ring; in particular the result is in the coroot lattice whenever self is in the root lattice.

EXAMPLES:

sage: L = RootSystem(["B", 3]).root_space()
sage: alpha = L.simple_roots()
sage: alpha[1].associated_coroot()
alphacheck[1]
sage: alpha[1].associated_coroot().parent()
Coroot space over the Rational Field of the Root system of type ['B', 3]

sage: L.highest_root()
alpha[1] + 2*alpha[2] + 2*alpha[3]
sage: L.highest_root().associated_coroot()
alphacheck[1] + 2*alphacheck[2] + alphacheck[3]

sage: alpha = RootSystem(["B", 3]).root_lattice().simple_roots()
sage: alpha[1].associated_coroot()
alphacheck[1]
sage: alpha[1].associated_coroot().parent()
Coroot lattice of the Root system of type ['B', 3]
is_positive_root()

Checks whether an element in the root space lies in the nonnegative cone spanned by the simple roots.

EXAMPLES:

sage: R=RootSystem(['A',3,1]).root_space()
sage: B=R.basis()
sage: w=B[0]+B[3]
sage: w.is_positive_root()
True
sage: w=B[1]-B[2]
sage: w.is_positive_root()
False
max_coroot_le()

Returns the highest positive coroot whose associated root is less than or equal to self.

INPUT:

  • self – an element of the nonnegative integer span of simple roots.

Returns None for the zero element.

Really self is an element of a coroot lattice and this method returns the highest root whose associated coroot is <= self.

Warning

This implementation only handles finite Cartan types

EXAMPLES:

sage: root_lattice = RootSystem(['C',2]).root_lattice()
sage: root_lattice.from_vector(vector([1,1])).max_coroot_le()
alphacheck[1] + 2*alphacheck[2]
sage: root_lattice.from_vector(vector([2,1])).max_coroot_le()
alphacheck[1] + 2*alphacheck[2]
sage: root_lattice = RootSystem(['B',2]).root_lattice()
sage: root_lattice.from_vector(vector([1,1])).max_coroot_le()
2*alphacheck[1] + alphacheck[2]
sage: root_lattice.from_vector(vector([1,2])).max_coroot_le()
2*alphacheck[1] + alphacheck[2]

sage: root_lattice.zero().max_coroot_le() is None
True
sage: root_lattice.from_vector(vector([-1,0])).max_coroot_le()
Traceback (most recent call last):
...
ValueError: -alpha[1] is not in the positive cone of roots
sage: root_lattice = RootSystem(['A',2,1]).root_lattice()
sage: root_lattice.simple_root(1).max_coroot_le()
Traceback (most recent call last):
...
NotImplementedError: Only implemented for finite Cartan type
max_quantum_element()

Returns a reduced word for the longest element of the Weyl group whose shortest path in the quantum Bruhat graph to the identity, has sum of quantum coroots at most self.

INPUT:

  • self – an element of the nonnegative integer span of simple roots.

Really self is an element of a coroot lattice.

Warning

This implementation only handles finite Cartan types

EXAMPLES:

sage: Qvee = RootSystem(['C',2]).coroot_lattice()
sage: Qvee.from_vector(vector([1,2])).max_quantum_element()
[2, 1, 2, 1]
sage: Qvee.from_vector(vector([1,1])).max_quantum_element()
[1, 2, 1]
sage: Qvee.from_vector(vector([0,2])).max_quantum_element()
[2]
quantum_root()

Returns True if self is a quantum root and False otherwise.

INPUT:

  • self – an element of the nonnegative integer span of simple roots.

A root \(\alpha\) is a quantum root if \(\ell(s_\alpha) = \langle 2 \rho, \alpha^\vee \rangle - 1\) where \(\ell\) is the length function, \(s_\alpha\) is the reflection across the hyperplane orthogonal to \(\alpha\), and \(2\rho\) is the sum of positive roots.

Warning

This implementation only handles finite Cartan types and assumes that self is a root.

Todo

Rename to is_quantum_root

EXAMPLES:

sage: Q = RootSystem(['C',2]).root_lattice()
sage: positive_roots = Q.positive_roots()
sage: for x in sorted(positive_roots):
....:     print("{} {}".format(x, x.quantum_root()))
alpha[1] True
alpha[1] + alpha[2] False
2*alpha[1] + alpha[2] True
alpha[2] True
scalar(lambdacheck)

The scalar product between the root lattice and the coroot lattice.

EXAMPLES:

sage: L = RootSystem(['B',4]).root_lattice()
sage: alpha      = L.simple_roots()
sage: alphacheck = L.simple_coroots()
sage: alpha[1].scalar(alphacheck[1])
2
sage: alpha[1].scalar(alphacheck[2])
-1

The scalar products between the roots and coroots are given by the Cartan matrix:

sage: matrix([ [ alpha[i].scalar(alphacheck[j])
....:            for i in L.index_set() ]
....:          for j in L.index_set() ])
[ 2 -1  0  0]
[-1  2 -1  0]
[ 0 -1  2 -1]
[ 0  0 -2  2]

sage: L.cartan_type().cartan_matrix()
[ 2 -1  0  0]
[-1  2 -1  0]
[ 0 -1  2 -1]
[ 0  0 -2  2]
to_ambient()

Map self to the ambient space.

EXAMPLES:

sage: alpha = CartanType(['B',2]).root_system().root_lattice().an_element(); alpha
2*alpha[1] + 2*alpha[2]
sage: alpha.to_ambient()
(2, 0)
sage: alphavee = CartanType(['B',2]).root_system().coroot_lattice().an_element(); alphavee
2*alphacheck[1] + 2*alphacheck[2]
sage: alphavee.to_ambient()
(2, 2)