Let be a CartanType with index set
, and
be a realization of the type
weight
lattice.
A type crystal
is a colored oriented graph
equipped with a weight function from the nodes to some realization
of the type
weight lattice such that:
Each edge is colored with a label in .
For each , each node
has:
Furthermore, when they exist,
This crystal actually models a representation of a Lie algebra if it satisfies some further local conditions due to Stembridge [St2003].
REFERENCES:
[St2003] | J. Stembridge, A local characterization of simply-laced crystals, Trans. Amer. Math. Soc. 355 (2003), no. 12, 4807-4823. |
EXAMPLES:
We construct the type crystal on letters (or in representation
theoretic terms, the highest weight crystal of type
corresponding to the highest weight
):
sage: C = CrystalOfLetters(['A',5]); C
The crystal of letters for type ['A', 5]
It has a single highest weight element:
sage: C.highest_weight_vectors()
[1]
A crystal is an enumerated set (see EnumeratedSets); and we can count and list its elements in the usual way:
sage: C.cardinality()
6
sage: C.list()
[1, 2, 3, 4, 5, 6]
as well as use it in for loops:
sage: [x for x in C]
[1, 2, 3, 4, 5, 6]
Here are some more elaborate crystals (see their respective documentations):
sage: Tens = TensorProductOfCrystals(C, C)
sage: Spin = CrystalOfSpins(['B', 3])
sage: Tab = CrystalOfTableaux(['A', 3], shape = [2,1,1])
sage: Fast = FastCrystal(['B', 2], shape = [3/2, 1/2])
sage: KR = KirillovReshetikhinCrystal(['A',2,1],1,1)
One can get (currently) crude plotting via:
sage: Tab.plot()
If dot2tex is installed, one can obtain nice latex pictures via:
sage: K = KirillovReshetikhinCrystal(['A',3,1], 1,1)
sage: view(K, pdflatex=True, tightpage=True) #optional - dot2tex graphviz
or with colored edges:
sage: K = KirillovReshetikhinCrystal(['A',3,1], 1,1)
sage: G = K.digraph()
sage: G.set_latex_options(color_by_label = {0:"black", 1:"red", 2:"blue", 3:"green"}) #optional - dot2tex graphviz
sage: view(G, pdflatex=True, tightpage=True) #optional - dot2tex graphviz
For rank two crystals, there is an alternative method of getting metapost pictures. For more information see C.metapost?
See also the categories Crystals, ClassicalCrystals, FiniteCrystals, HighestWeightCrystals.
Todo
Most of the above features (except Littelmann/alcove paths) are in MuPAD-Combinat (see lib/COMBINAT/crystals.mu), which could provide inspiration.
Bases: sage.combinat.backtrack.GenericBacktracker
Time complexity: amortized for each produced
element, where
is the size of the index set, and
is
the cost of computing
and
operators.
Memory complexity: where
is the depth of the crystal.
Principle of the algorithm:
Let be a classical crystal. It’s an acyclic graph where all
connected component has a unique element without predecessors (the
highest weight element for this component). Let’s assume for
simplicity that
is irreducible (i.e. connected) with highest
weight element
.
One can define a natural spanning tree of by taking
as the root of the tree, and for any other element
taking as ancestor the element
such that
there is an
-arrow from
to
with
minimal. Then, a path from
to
describes the lexicographically smallest sequence
such that
.
Morally, the iterator implemented below just does a depth first
search walk through this spanning tree. In practice, this can be
achieved recursively as follow: take an element , and
consider in turn each successor
, ignoring
those such that
for some
and
(this can be tested by computing
for
).
EXAMPLES:
sage: from sage.combinat.crystals.crystals import CrystalBacktracker
sage: C = CrystalOfTableaux(['B',3],shape=[3,2,1])
sage: CB = CrystalBacktracker(C)
sage: len(list(CB))
1617
sage: CB = CrystalBacktracker(C, [1,2])
sage: len(list(CB))
8