Crystals

class sage.categories.crystals.Crystals(s=None)

Bases: sage.categories.category_singleton.Category_singleton

The category of crystals

See sage.combinat.crystals for an introduction to crystals.

EXAMPLES:

sage: C = Crystals()
sage: C
Category of crystals
sage: C.super_categories()
[Category of... enumerated sets]
sage: C.example()
Highest weight crystal of type A_3 of highest weight omega_1

Parents in this category should implement the following methods:

  • either a method cartan_type or an attribute _cartan_type
  • module_generators: a list (or container) of distinct elements which generate the crystal using f_i

Furthermore, their elements should implement the following methods:

  • x.e(i) (returning e_i(x))
  • x.f(i) (returning f_i(x))

EXAMPLES:

sage: from sage.misc.abstract_method import abstract_methods_of_class
sage: abstract_methods_of_class(Crystals().element_class)
{'required': ['e', 'f'], 'optional': []}

TESTS:

sage: TestSuite(C).run()
sage: B = Crystals().example()
sage: TestSuite(B).run(verbose = True)
running ._test_an_element() . . . pass
running ._test_category() . . . pass
running ._test_elements() . . .
  Running the test suite of self.an_element()
  running ._test_category() . . . pass
  running ._test_eq() . . . pass
  running ._test_not_implemented_methods() . . . pass
  running ._test_pickling() . . . pass
  running ._test_stembridge_local_axioms() . . . pass
  pass
running ._test_elements_eq() . . . pass
running ._test_enumerated_set_contains() . . . pass
running ._test_enumerated_set_iter_cardinality() . . . pass
running ._test_enumerated_set_iter_list() . . . pass
running ._test_eq() . . . pass
running ._test_fast_iter() . . . pass
running ._test_not_implemented_methods() . . . pass
running ._test_pickling() . . . pass
running ._test_some_elements() . . . pass
running ._test_stembridge_local_axioms() . . . pass
class ElementMethods
Epsilon()

EXAMPLES:

sage: C = CrystalOfLetters(['A',5])
sage: C(0).Epsilon()
(0, 0, 0, 0, 0, 0)
sage: C(1).Epsilon()
(0, 0, 0, 0, 0, 0)
sage: C(2).Epsilon()
(1, 0, 0, 0, 0, 0)
Phi()

EXAMPLES:

sage: C = CrystalOfLetters(['A',5])
sage: C(0).Phi()
(0, 0, 0, 0, 0, 0)
sage: C(1).Phi()
(1, 0, 0, 0, 0, 0)
sage: C(2).Phi()
(1, 1, 0, 0, 0, 0)
cartan_type()

Returns the cartan type associated to self

EXAMPLES:

sage: C = CrystalOfLetters(['A', 5])
sage: C(1).cartan_type()
['A', 5]
demazure_operator_simple(i, ring=None)

Returns the Demazure operator D_i applied on self.

INPUT:

  • i – an element of the index set of the underlying crystal
  • ring – (default: QQ) a ring

OUTPUT:

  • an element of the ring-free module indexed by the underlying crystal

Let r=\langle wt(self), \alpha^\vee_i \rangle.

If r\ge 0, this returns the sum of the elements obtained from self by application of f_i^k for 0\le k\le r.

If r<0, this returns the opposite of the sum of the elements obtained by application of e_i^k for 0<k<-r.

REFERENCES:

[L1995]Peter Littelmann, Crystal graphs and Young tableaux, J. Algebra 175 (1995), no. 1, 65–87.
[K1993]Masaki Kashiwara, The crystal base and Littelmann’s refined Demazure character formula, Duke Math. J. 71 (1993), no. 3, 839–858.

EXAMPLES:

sage: T = CrystalOfTableaux(['A',2], shape=[2,1])
sage: t=T(rows=[[1,2],[2]])
sage: t.demazure_operator_simple(2)
B[[[1, 2], [2]]] + B[[[1, 3], [2]]] + B[[[1, 3], [3]]]
sage: t.demazure_operator_simple(2).parent()
Free module generated by The crystal of tableaux of type ['A', 2] and shape(s) [[2, 1]] over Integer Ring

sage: t.demazure_operator_simple(1)
0

sage: K = KirillovReshetikhinCrystal(['A',2,1],2,1)
sage: t = K(rows=[[3],[2]])
sage: t.demazure_operator_simple(0)
B[[[2, 3]]] + B[[[1, 2]]]

TESTS:

sage: K = KirillovReshetikhinCrystal(['A',2,1],1,1)
sage: x = K.an_element(); x
[[1]]
sage: x.demazure_operator_simple(0)
0
sage: x.demazure_operator_simple(0, ring = QQ).parent()
Free module generated by Kirillov-Reshetikhin crystal of type ['A', 2, 1] with (r,s)=(1,1) over Rational Field
e(i)

Returns e_i(x) if it exists or None otherwise.

This method should be implemented by the element class of the crystal.

EXAMPLES:

sage: C = Crystals().example(5)
sage: x = C[2]; x
3
sage: x.e(1), x.e(2), x.e(3)
(None, 2, None)
e_string(list)

Applies e_{i_r} ... e_{i_1} to self for list = [i_1, ..., i_r]

EXAMPLES:

sage: C = CrystalOfLetters(['A',3])
sage: b = C(3)
sage: b.e_string([2,1])
1
sage: b.e_string([1,2])
epsilon(i)

EXAMPLES:

sage: C = CrystalOfLetters(['A',5])
sage: C(1).epsilon(1)
0
sage: C(2).epsilon(1)
1
f(i)

Returns f_i(x) if it exists or None otherwise.

This method should be implemented by the element class of the crystal.

EXAMPLES:

sage: C = Crystals().example(5)
sage: x = C[1]; x
2
sage: x.f(1), x.f(2), x.f(3)
(None, 3, None)
f_string(list)

Applies f_{i_r} ... f_{i_1} to self for list = [i_1, ..., i_r]

EXAMPLES:

sage: C = CrystalOfLetters(['A',3])
sage: b = C(1)
sage: b.f_string([1,2])
3
sage: b.f_string([2,1])
index_set()

EXAMPLES:

sage: C = CrystalOfLetters(['A',5])
sage: C(1).index_set()
[1, 2, 3, 4, 5]
is_highest_weight(index_set=None)

Returns True if self is a highest weight. Specifying the option index_set to be a subset I of the index set of the underlying crystal, finds all highest weight vectors for arrows in I.

EXAMPLES:

sage: C = CrystalOfLetters(['A',5])
sage: C(1).is_highest_weight()
True
sage: C(2).is_highest_weight()
False
sage: C(2).is_highest_weight(index_set = [2,3,4,5])
True
is_lowest_weight(index_set=None)

Returns True if self is a lowest weight. Specifying the option index_set to be a subset I of the index set of the underlying crystal, finds all lowest weight vectors for arrows in I.

EXAMPLES:

sage: C = CrystalOfLetters(['A',5])
sage: C(1).is_lowest_weight()
False
sage: C(6).is_lowest_weight()
True
sage: C(4).is_lowest_weight(index_set = [1,3])
True
phi(i)

EXAMPLES:

sage: C = CrystalOfLetters(['A',5])
sage: C(1).phi(1)
1
sage: C(2).phi(1)
0
phi_minus_epsilon(i)

Returns \phi_i - \epsilon_i of self. There are sometimes better implementations using the weight for this. It is used for reflections along a string.

EXAMPLES:

sage: C = CrystalOfLetters(['A',5])
sage: C(1).phi_minus_epsilon(1)
1
s(i)

Returns the reflection of self along its i-string

EXAMPLES:

sage: C = CrystalOfTableaux(['A',2], shape=[2,1])
sage: b=C(rows=[[1,1],[3]])
sage: b.s(1)
[[2, 2], [3]]
sage: b=C(rows=[[1,2],[3]])
sage: b.s(2)
[[1, 2], [3]]
sage: T=CrystalOfTableaux(['A',2],shape=[4])
sage: t=T(rows=[[1,2,2,2]])
sage: t.s(1)
[[1, 1, 1, 2]]
stembridgeDel_depth(i, j)

The i-depth of a crystal node x is -x.epsilon(i). This function returns the difference in the j-depth of x and x.f(i), where i and j are in the index set of the underlying crystal. This function is useful for checking the Stembridge local axioms for crystal bases.

EXAMPLES:

sage: T = CrystalOfTableaux(['A',2], shape=[2,1])
sage: t=T(rows=[[1,1],[2]])
sage: t.stembridgeDel_depth(1,2)
0
sage: s=T(rows=[[1,3],[3]])
sage: s.stembridgeDel_depth(1,2)
-1
stembridgeDel_rise(i, j)

The i-rise of a crystal node x is x.phi(i). This function returns the difference in the j-rise of x and x.f(i), where i and j are in the index set of the underlying crystal. This function is useful for checking the Stembridge local axioms for crystal bases.

EXAMPLES:

sage: T = CrystalOfTableaux(['A',2], shape=[2,1])
sage: t=T(rows=[[1,1],[2]])
sage: t.stembridgeDel_rise(1,2)
-1
sage: s=T(rows=[[1,3],[3]])
sage: s.stembridgeDel_rise(1,2)
0
stembridgeDelta_depth(i, j)

The i-depth of a crystal node x is -x.epsilon(i). This function returns the difference in the j-depth of x and x.e(i), where i and j are in the index set of the underlying crystal. This function is useful for checking the Stembridge local axioms for crystal bases.

EXAMPLES:

sage: T = CrystalOfTableaux(['A',2], shape=[2,1])
sage: t=T(rows=[[1,2],[2]])
sage: t.stembridgeDelta_depth(1,2)
0
sage: s=T(rows=[[2,3],[3]])
sage: s.stembridgeDelta_depth(1,2)
-1
stembridgeDelta_rise(i, j)

The i-rise of a crystal node x is x.phi(i).

This function returns the difference in the j-rise of x and x.e(i), where i and j are in the index set of the underlying crystal. This function is useful for checking the Stembridge local axioms for crystal bases.

EXAMPLES:

sage: T = CrystalOfTableaux(['A',2], shape=[2,1])
sage: t=T(rows=[[1,2],[2]])
sage: t.stembridgeDelta_rise(1,2)
-1
sage: s=T(rows=[[2,3],[3]])
sage: s.stembridgeDelta_rise(1,2)
0
stembridgeTriple(i, j)

Let A be the Cartan matrix of the crystal, x a crystal element, and let i and j be in the index set of the crystal. Further, set b=stembridgeDelta_depth(x,i,j), and c=stembridgeDelta_rise(x,i,j)). If x.e(i) is non-empty, this function returns the triple ( A_{ij}, b, c ); otherwise it returns None. By the Stembridge local characterization of crystal bases, one should have A_{ij}=b+c.

EXAMPLES:

sage: T = CrystalOfTableaux(['A',2], shape=[2,1])
sage: t=T(rows=[[1,1],[2]])
sage: t.stembridgeTriple(1,2)
sage: s=T(rows=[[1,2],[2]])
sage: s.stembridgeTriple(1,2)
(-1, 0, -1)

sage: T = CrystalOfTableaux(['B',2], shape=[2,1])
sage: t=T(rows=[[1,2],[2]])
sage: t.stembridgeTriple(1,2)
(-2, 0, -2)
sage: s=T(rows=[[-1,-1],[0]])
sage: s.stembridgeTriple(1,2)
(-2, -2, 0)
sage: u=T(rows=[[0,2],[1]])
sage: u.stembridgeTriple(1,2)
(-2, -1, -1)
to_highest_weight(index_set=None)

Yields the highest weight element u and a list [i_1,...,i_k] such that self = f_{i_1} ... f_{i_k} u, where i_1,...,i_k are elements in index_set. By default the index set is assumed to be the full index set of self.

EXAMPLES:

sage: T = CrystalOfTableaux(['A',3], shape = [1])
sage: t = T(rows = [[3]])
sage: t.to_highest_weight()
[[[1]], [2, 1]]
sage: T = CrystalOfTableaux(['A',3], shape = [2,1])
sage: t = T(rows = [[1,2],[4]])
sage: t.to_highest_weight()
[[[1, 1], [2]], [1, 3, 2]]
sage: t.to_highest_weight(index_set = [3])
[[[1, 2], [3]], [3]]
sage: K = KirillovReshetikhinCrystal(['A',3,1],2,1)
sage: t = K(rows=[[2],[3]]); t.to_highest_weight(index_set=[1])
[[[1], [3]], [1]]
sage: t.to_highest_weight()
Traceback (most recent call last):
...
ValueError: This is not a highest weight crystals!
to_lowest_weight(index_set=None)

Yields the lowest weight element u and a list [i_1,...,i_k] such that self = e_{i_1} ... e_{i_k} u, where i_1,...,i_k are elements in index_set. By default the index set is assumed to be the full index set of self.

EXAMPLES:

sage: T = CrystalOfTableaux(['A',3], shape = [1])
sage: t = T(rows = [[3]])
sage: t.to_lowest_weight()
[[[4]], [3]]
sage: T = CrystalOfTableaux(['A',3], shape = [2,1])
sage: t = T(rows = [[1,2],[4]])
sage: t.to_lowest_weight()
[[[3, 4], [4]], [1, 2, 2, 3]]
sage: t.to_lowest_weight(index_set = [3])
[[[1, 2], [4]], []]
sage: K = KirillovReshetikhinCrystal(['A',3,1],2,1)
sage: t = K.module_generator(); t
[[1], [2]]
sage: t.to_lowest_weight(index_set=[1,2,3])
[[[3], [4]], [2, 1, 3, 2]]
sage: t.to_lowest_weight()
Traceback (most recent call last):
...
ValueError: This is not a highest weight crystals!
weight()

Returns the weight of this crystal element

EXAMPLES:

sage: C = CrystalOfLetters(['A',5])
sage: C(1).weight()
(1, 0, 0, 0, 0, 0)
class Crystals.ParentMethods
Lambda()

Returns the fundamental weights in the weight lattice realization for the root system associated with the crystal

EXAMPLES:

sage: C = CrystalOfLetters(['A', 5])
sage: C.Lambda()
Finite family {1: (1, 0, 0, 0, 0, 0), 2: (1, 1, 0, 0, 0, 0), 3: (1, 1, 1, 0, 0, 0), 4: (1, 1, 1, 1, 0, 0), 5: (1, 1, 1, 1, 1, 0)}
an_element()

Returns an element of self

sage: C = CrystalOfLetters([‘A’, 5]) sage: C.an_element() 1
cartan_type()

Returns the Cartan type of the crystal

EXAMPLES::
sage: C = CrystalOfLetters([‘A’,2]) sage: C.cartan_type() [‘A’, 2]
crystal_morphism(g, index_set=None, automorphism=<function <lambda> at 0x3f3e9b0>, direction='down', direction_image='down', similarity_factor=None, similarity_factor_domain=None, cached=False, acyclic=True)

Constructs a morphism from the crystal self to another crystal. The input g can either be a function of a (sub)set of elements of self to element in another crystal or a dictionary between certain elements. Usually one would map highest weight elements or crystal generators to each other using g. Specifying index_set gives the opportunity to define the morphism as I-crystals where I = index_set. If index_set is not specified, the index set of self is used. It is also possible to define twisted-morphisms by specifying an automorphism on the nodes in te Dynkin diagram (or the index_set). The option direction and direction_image indicate whether to use f_i or e_i in self or the image crystal to construct the morphism, depending on whether the direction is set to ‘down’ or ‘up’. It is also possible to set a similarity_factor. This should be a dictionary between the elements in the index set and positive integers. The crystal operator f_i then gets mapped to f_i^{m_i} where m_i = similarity_factor[i]. Setting similarity_factor_domain to a dictionary between the index set and positive integers has the effect that f_i^{m_i} gets mapped to f_i where m_i = similarity_factor_domain[i]. Finally, it is possible to set the option acyclic = False. This calculates an isomorphism for cyclic crystals (for example finite affine crystals). In this case the input function g is supposed to be given as a dictionary.

EXAMPLES:

sage: C2 = CrystalOfLetters(['A',2])
sage: C3 = CrystalOfLetters(['A',3])
sage: g = {C2.module_generators[0] : C3.module_generators[0]}
sage: g_full = C2.crystal_morphism(g)
sage: g_full(C2(1))
1
sage: g_full(C2(2))
2
sage: g = {C2(1) : C2(3)}
sage: g_full = C2.crystal_morphism(g, automorphism = lambda i : 3-i, direction_image = 'up')
sage: [g_full(b) for b in C2]
[3, 2, 1]
sage: T = CrystalOfTableaux(['A',2], shape = [2])
sage: g = {C2(1) : T(rows=[[1,1]])}
sage: g_full = C2.crystal_morphism(g, similarity_factor = {1:2, 2:2})
sage: [g_full(b) for b in C2]
[[[1, 1]], [[2, 2]], [[3, 3]]]
sage: g = {T(rows=[[1,1]]) : C2(1)}
sage: g_full = T.crystal_morphism(g, similarity_factor_domain = {1:2, 2:2})
sage: g_full(T(rows=[[2,2]]))
2

sage: B1=KirillovReshetikhinCrystal(['A',2,1],1,1)
sage: B2=KirillovReshetikhinCrystal(['A',2,1],1,2)
sage: T=TensorProductOfCrystals(B1,B2)
sage: T1=TensorProductOfCrystals(B2,B1)
sage: La = T.weight_lattice_realization().fundamental_weights()
sage: t = [b for b in T if b.weight() == -3*La[0] + 3*La[1]][0]
sage: t1 = [b for b in T1 if b.weight() == -3*La[0] + 3*La[1]][0]
sage: g={t:t1}
sage: f=T.crystal_morphism(g,acyclic = False)
sage: [[b,f(b)] for b in T]
[[[[[1]], [[1, 1]]], [[[1, 1]], [[1]]]],
[[[[1]], [[1, 2]]], [[[1, 1]], [[2]]]],
[[[[1]], [[2, 2]]], [[[1, 2]], [[2]]]],
[[[[1]], [[1, 3]]], [[[1, 1]], [[3]]]],
[[[[1]], [[2, 3]]], [[[1, 2]], [[3]]]],
[[[[1]], [[3, 3]]], [[[1, 3]], [[3]]]],
[[[[2]], [[1, 1]]], [[[1, 2]], [[1]]]],
[[[[2]], [[1, 2]]], [[[2, 2]], [[1]]]],
[[[[2]], [[2, 2]]], [[[2, 2]], [[2]]]],
[[[[2]], [[1, 3]]], [[[2, 3]], [[1]]]],
[[[[2]], [[2, 3]]], [[[2, 2]], [[3]]]],
[[[[2]], [[3, 3]]], [[[2, 3]], [[3]]]],
[[[[3]], [[1, 1]]], [[[1, 3]], [[1]]]],
[[[[3]], [[1, 2]]], [[[1, 3]], [[2]]]],
[[[[3]], [[2, 2]]], [[[2, 3]], [[2]]]],
[[[[3]], [[1, 3]]], [[[3, 3]], [[1]]]],
[[[[3]], [[2, 3]]], [[[3, 3]], [[2]]]],
[[[[3]], [[3, 3]]], [[[3, 3]], [[3]]]]]
demazure_operator(element, reduced_word)

Returns the application of Demazure operators D_i for i from reduced_word on element.

INPUT:

  • element – an element of a free module indexed by the underlying crystal
  • reduced_word – a reduced word of the Weyl group of the same type as the underlying crystal

OUTPUT:

  • an element of the free module indexed by the underlying crystal

EXAMPLES:

sage: T = CrystalOfTableaux(['A',2], shape=[2,1])
sage: C = CombinatorialFreeModule(QQ,T)
sage: t = T.highest_weight_vector()
sage: b = 2*C(t)
sage: T.demazure_operator(b,[1,2,1])
2*B[[[1, 1], [2]]] + 2*B[[[1, 2], [2]]] + 2*B[[[1, 3], [2]]] + 2*B[[[1, 1], [3]]]
+ 2*B[[[1, 2], [3]]] + 2*B[[[1, 3], [3]]] + 2*B[[[2, 2], [3]]] + 2*B[[[2, 3], [3]]]

The Demazure operator is idempotent:

sage: T = CrystalOfTableaux("A1",shape=[4])
sage: C = CombinatorialFreeModule(QQ,T)
sage: b = C(T.module_generators[0]); b
B[[[1, 1, 1, 1]]]
sage: e = T.demazure_operator(b,[1]); e
B[[[1, 1, 1, 1]]] + B[[[1, 1, 1, 2]]] + B[[[1, 1, 2, 2]]] + B[[[1, 2, 2, 2]]] + B[[[2, 2, 2, 2]]]
sage: e == T.demazure_operator(e,[1])
True

sage: all(T.demazure_operator(T.demazure_operator(C(t),[1]),[1]) == T.demazure_operator(C(t),[1]) for t in T)
True
digraph(subset=None, index_set=None)

Returns the DiGraph associated to self.

INPUT:

  • subset – (Optional) A subset of vertices for which the digraph should be constructed
  • index_set – (Optional) The index set to draw arrows

EXAMPLES:

sage: C = Crystals().example(5)
sage: C.digraph()
Digraph on 6 vertices

The edges of the crystal graph are by default colored using blue for edge 1, red for edge 2, and green for edge 3:

sage: C = Crystals().example(3)
sage: G = C.digraph()
sage: view(G, pdflatex=True, tightpage=True)  #optional - dot2tex graphviz

One may also overwrite the colors:

sage: C = Crystals().example(3)
sage: G = C.digraph()
sage: G.set_latex_options(color_by_label = {1:"red", 2:"purple", 3:"blue"})
sage: view(G, pdflatex=True, tightpage=True)  #optional - dot2tex graphviz

Or one may add colors to yet unspecified edges:

sage: C = Crystals().example(4)
sage: G = C.digraph()
sage: C.cartan_type()._index_set_coloring[4]="purple"
sage: view(G, pdflatex=True, tightpage=True)  #optional - dot2tex graphviz

Here is an example of how to take the top part up to a given depth of an infinite dimensional crystal:

sage: C = CartanType(['C',2,1])
sage: La = C.root_system().weight_lattice().fundamental_weights()
sage: T = HighestWeightCrystal(La[0])
sage: S = T.subcrystal(max_depth=3)
sage: G = T.digraph(subset=S); G
Digraph on 5 vertices
sage: G.vertices()
[(1/2*Lambda[0] + Lambda[1] - Lambda[2] - 1/2*delta, -1/2*Lambda[0] + Lambda[1] - 1/2*delta),
(-Lambda[0] + 2*Lambda[1] - delta,), (Lambda[0] - 2*Lambda[1] + 2*Lambda[2] - delta,),
(1/2*Lambda[0] - Lambda[1] + Lambda[2] - 1/2*delta, -1/2*Lambda[0] + Lambda[1] - 1/2*delta), (Lambda[0],)]

Here is a way to construct a picture of a Demazure crystal using the subset option:

sage: B = CrystalOfTableaux(['A',2], shape=[2,1])
sage: C = CombinatorialFreeModule(QQ,B)
sage: t = B.highest_weight_vector()
sage: b = C(t)
sage: D = B.demazure_operator(b,[2,1]); D
B[[[1, 1], [2]]] + B[[[1, 2], [2]]] + B[[[1, 3], [2]]] + B[[[1, 1], [3]]] + B[[[1, 3], [3]]]
sage: G = B.digraph(subset=D.support())
sage: G.vertices()
[[[1, 1], [2]], [[1, 2], [2]], [[1, 3], [2]], [[1, 1], [3]], [[1, 3], [3]]]
sage: view(G, pdflatex=True, tightpage=True)  #optional - dot2tex graphviz

We can also choose to display particular arrows using the index_set option:

sage: C = KirillovReshetikhinCrystal(['D',4,1], 2, 1)
sage: G = C.digraph(index_set=[1,3])
sage: len(G.edges())
20
sage: view(G, pdflatex=True, tightpage=True)  #optional - dot2tex graphviz

TODO: add more tests

dot_tex()

Returns a dot_tex string representation of self.

EXAMPLES:

sage: C = CrystalOfLetters(['A',2])
sage: C.dot_tex()
'digraph G { \n  node [ shape=plaintext ];\n  N_0 [ label = " ", texlbl = "$1$" ];\n  N_1 [ label = " ", texlbl = "$2$" ];\n  N_2 [ label = " ", texlbl = "$3$" ];\n  N_0 -> N_1 [ label = " ", texlbl = "1" ];\n  N_1 -> N_2 [ label = " ", texlbl = "2" ];\n}'
index_set()

Returns the index set of the Dynkin diagram underlying the crystal

EXAMPLES:
sage: C = CrystalOfLetters([‘A’, 5]) sage: C.index_set() [1, 2, 3, 4, 5]
latex(**options)

Returns the crystal graph as a latex string. This can be exported to a file with self.latex_file(‘filename’).

EXAMPLES:

sage: T = CrystalOfTableaux(['A',2],shape=[1])
sage: T._latex_()   #optional - dot2tex
'...tikzpicture...'
sage: view(T, pdflatex = True, tightpage = True) #optional - dot2tex graphviz

One can for example also color the edges using the following options:

sage: T = CrystalOfTableaux(['A',2],shape=[1])
sage: T._latex_(color_by_label = {0:"black", 1:"red", 2:"blue"})   #optional - dot2tex graphviz
'...tikzpicture...'
latex_file(filename)

Exports a file, suitable for pdflatex, to ‘filename’. This requires a proper installation of dot2tex in sage-python. For more information see the documentation for self.latex().

EXAMPLES:

sage: C = CrystalOfLetters(['A', 5])
sage: C.latex_file('/tmp/test.tex') #optional - dot2tex
metapost(filename, thicklines=False, labels=True, scaling_factor=1.0, tallness=1.0)

Use C.metapost(“filename.mp”,[options]), where options can be:

thicklines = True (for thicker edges) labels = False (to suppress labeling of the vertices) scaling_factor=value, where value is a floating point number, 1.0 by default. Increasing or decreasing the scaling factor changes the size of the image. tallness=1.0. Increasing makes the image taller without increasing the width.

Root operators e(1) or f(1) move along red lines, e(2) or f(2) along green. The highest weight is in the lower left. Vertices with the same weight are kept close together. The concise labels on the nodes are strings introduced by Berenstein and Zelevinsky and Littelmann; see Littelmann’s paper Cones, Crystals, Patterns, sections 5 and 6.

For Cartan types B2 or C2, the pattern has the form

a2 a3 a4 a1

where c*a2 = a3 = 2*a4 =0 and a1=0, with c=2 for B2, c=1 for C2. Applying e(2) a1 times, e(1) a2 times, e(2) a3 times, e(1) a4 times returns to the highest weight. (Observe that Littelmann writes the roots in opposite of the usual order, so our e(1) is his e(2) for these Cartan types.) For type A2, the pattern has the form

a3 a2 a1

where applying e(1) a1 times, e(2) a2 times then e(3) a1 times returns to the highest weight. These data determine the vertex and may be translated into a Gelfand-Tsetlin pattern or tableau.

EXAMPLES:

sage: C = CrystalOfLetters(['A', 2])
sage: C.metapost('/tmp/test.mp') #optional
sage: C = CrystalOfLetters(['A', 5])
sage: C.metapost('/tmp/test.mp')
Traceback (most recent call last):
...
NotImplementedError
plot(**options)

Returns the plot of self as a directed graph.

EXAMPLES:

sage: C = CrystalOfLetters(['A', 5])
sage: show_default(False) #do not show the plot by default
sage: C.plot()
Graphics object consisting of 17 graphics primitives
plot3d(**options)

Returns the 3-dimensional plot of self as a directed graph.

EXAMPLES:

sage: C = KirillovReshetikhinCrystal(['A',3,1],2,1)
sage: C.plot3d()
Graphics3d Object
subcrystal(index_set=None, generators=None, max_depth=inf, direction='both')

Construct the subcrystal from generators using e_i and f_i for all i in index_set.

INPUT:

  • index_set – (Default: None) The index set; if None then use the index set of the crystal
  • generators – (Default: None) The list of generators; if None then use the module generators of the crystal
  • max_depth – (Default: infinity) The maximum depth to build
  • direction – (Default: 'both') The direction to build the subcrystal. It can be one of the following:
    • 'both' - Using both e_i and f_i
    • 'upper' - Using e_i
    • 'lower' - Using f_i

EXAMPLES:

sage: C = KirillovReshetikhinCrystal(['A',3,1], 1, 2)
sage: S = list(C.subcrystal(index_set=[1,2])); S
[[[1, 1]], [[1, 2]], [[1, 3]], [[2, 2]], [[2, 3]], [[3, 3]]]
sage: C.cardinality()
10
sage: len(S)
6
sage: list(C.subcrystal(index_set=[1,3], generators=[C(1,4)]))
[[[1, 4]], [[2, 4]], [[1, 3]], [[2, 3]]]
sage: list(C.subcrystal(index_set=[1,3], generators=[C(1,4)], max_depth=1))
[[[1, 4]], [[2, 4]], [[1, 3]]]
sage: list(C.subcrystal(index_set=[1,3], generators=[C(1,4)], direction='upper'))
[[[1, 4]], [[1, 3]]]
sage: list(C.subcrystal(index_set=[1,3], generators=[C(1,4)], direction='lower'))
[[[1, 4]], [[2, 4]]]
weight_lattice_realization()

Returns the weight lattice realization used to express weights.

This default implementation uses the ambient space of the root system for (non relabelled) finite types and the weight lattice otherwise. This is a legacy from when ambient spaces were partially implemented, and may be changed in the future.

EXAMPLES:

sage: C = CrystalOfLetters(['A', 5])
sage: C.weight_lattice_realization()
Ambient space of the Root system of type ['A', 5]
sage: K = KirillovReshetikhinCrystal(['A',2,1], 1, 1)
sage: K.weight_lattice_realization()
Weight lattice of the Root system of type ['A', 2, 1]
Crystals.example(choice='highwt', **kwds)

Returns an example of a crystal, as per Category.example().

INPUT:

- ``choice`` -- str [default: 'highwt']. Can be either 'highwt'
  for the highest weight crystal of type A, or 'naive' for an
  example of a broken crystal.

- ``**kwds`` -- keyword arguments passed onto the constructor for the
  chosen crystal.

EXAMPLES:

sage: Crystals().example(choice='highwt', n=5)
Highest weight crystal of type A_5 of highest weight omega_1
sage: Crystals().example(choice='naive')
A broken crystal, defined by digraph, of dimension five.
Crystals.super_categories()

EXAMPLES:

sage: Crystals().super_categories()
[Category of enumerated sets]

Previous topic

Coxeter Groups

Next topic

Division rings

This Page