Littelmann paths¶
AUTHORS:
- Mark Shimozono, Anne Schilling (2012): Initial version
- Anne Schilling (2013): Implemented
CrystalOfProjectedLevelZeroLSPaths
- Travis Scrimshaw (2016): Implemented
InfinityCrystalOfLSPaths
-
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 systemstarting_weight
– a weight; ifcartan_type
is given, then the weight should be given as a list of coefficients of the fundamental weights, otherwise it should be given in theweight_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 alsosage.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
andw
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