Littelmann paths

AUTHORS:

sage.combinat.crystals.littelmann_path.CrystalOfLSPaths

Crystal graph of LS paths generated from the straight-line path to a given weight.

INPUT:

  • cartan_type – (optional) the Cartan type of a finite or affine root system
  • starting_weight – a weight; if cartan_type is given, then the weight should be given as a list of coefficients of the fundamental weights, otherwise it should be given in the weight_space basis; for affine highest weight crystals, one needs to use the extended weight space.

The crystal class of piecewise linear paths in the weight space, generated from a straight-line path from the origin to a given element of the weight lattice.

OUTPUT:

  • a tuple of weights defining the directions of the piecewise linear segments

EXAMPLES:

sage: R = RootSystem(['A',2,1])
sage: La = R.weight_space(extended = True).basis()
sage: B = crystals.LSPaths(La[2]-La[0]); B
The crystal of LS paths of type ['A', 2, 1] and weight -Lambda[0] + Lambda[2]

sage: C = crystals.LSPaths(['A',2,1],[-1,0,1]); C
The crystal of LS paths of type ['A', 2, 1] and weight -Lambda[0] + Lambda[2]
sage: B == C
True
sage: c = C.module_generators[0]; c
(-Lambda[0] + Lambda[2],)
sage: [c.f(i) for i in C.index_set()]
[None, None, (Lambda[1] - Lambda[2],)]

sage: R = C.R; R
Root system of type ['A', 2, 1]
sage: Lambda = R.weight_space().basis(); Lambda
Finite family {0: Lambda[0], 1: Lambda[1], 2: Lambda[2]}
sage: b=C(tuple([-Lambda[0]+Lambda[2]]))
sage: b==c
True
sage: b.f(2)
(Lambda[1] - Lambda[2],)

For classical highest weight crystals we can also compare the results with the tableaux implementation:

sage: C = crystals.LSPaths(['A',2],[1,1])
sage: sorted(C, key=str)
[(-2*Lambda[1] + Lambda[2],), (-Lambda[1] + 1/2*Lambda[2], Lambda[1] - 1/2*Lambda[2]),
 (-Lambda[1] + 2*Lambda[2],), (-Lambda[1] - Lambda[2],),
 (1/2*Lambda[1] - Lambda[2], -1/2*Lambda[1] + Lambda[2]), (2*Lambda[1] - Lambda[2],),
 (Lambda[1] + Lambda[2],), (Lambda[1] - 2*Lambda[2],)]
sage: C.cardinality()
8
sage: B = crystals.Tableaux(['A',2],shape=[2,1])
sage: B.cardinality()
8
sage: B.digraph().is_isomorphic(C.digraph())
True

Make sure you use the weight space and not the weight lattice for your weights:

sage: R = RootSystem(['A',2,1])
sage: La = R.weight_lattice(extended = True).basis()
sage: B = crystals.LSPaths(La[2]); B
Traceback (most recent call last):
...
ValueError: Please use the weight space, rather than weight lattice for your weights

REFERENCES:

sage.combinat.crystals.littelmann_path.CrystalOfProjectedLevelZeroLSPaths

Crystal of projected level zero LS paths.

INPUT:

  • weight – a dominant weight of the weight space of an affine Kac-Moody root system

When weight is just a single fundamental weight \(\Lambda_r\), this crystal is isomorphic to a Kirillov-Reshetikhin (KR) crystal, see also sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinFromLSPaths(). For general weights, it is isomorphic to a tensor product of single-column KR crystals.

EXAMPLES:

sage: R = RootSystem(['C',3,1])
sage: La = R.weight_space().basis()
sage: LS = crystals.ProjectedLevelZeroLSPaths(La[1]+La[3])
sage: LS.cardinality()
84
sage: GLS = LS.digraph()

sage: K1 = crystals.KirillovReshetikhin(['C',3,1],1,1)
sage: K3 = crystals.KirillovReshetikhin(['C',3,1],3,1)
sage: T = crystals.TensorProduct(K3,K1)
sage: T.cardinality()
84
sage: GT = T.digraph() # long time
sage: GLS.is_isomorphic(GT, edge_labels = True) # long time
True
sage.combinat.crystals.littelmann_path.InfinityCrystalOfLSPaths

LS path model for \(\mathcal{B}(\infty)\).

Elements of \(\mathcal{B}(\infty)\) are equivalence classes of paths \([\pi]\) in \(\mathcal{B}(k\rho)\) for \(k\gg 0\), where \(\rho\) is the Weyl vector. A canonical representative for an element of \(\mathcal{B}(\infty)\) is chosen by taking \(k\) to be minimal such that the endpoint of \(\pi\) is strictly dominant but its representative in \(\mathcal{B}((k-1)\rho)\) is on the wall of the dominant chamber.

REFERENCES:

sage.combinat.crystals.littelmann_path.positively_parallel_weights(v, w)

Check whether the vectors v and w are positive scalar multiples of each other.

EXAMPLES:

sage: from sage.combinat.crystals.littelmann_path import positively_parallel_weights
sage: La = RootSystem(['A',5,2]).weight_space(extended=True).fundamental_weights()
sage: rho = sum(La)
sage: positively_parallel_weights(rho, 4*rho)
True
sage: positively_parallel_weights(4*rho, rho)
True
sage: positively_parallel_weights(rho, -rho)
False
sage: positively_parallel_weights(rho, La[1] + La[2])
False