Crystal of letters

For the drawing command to work you will need to:

- install graphviz

- install dot2tex via: sage -f http://sage.math.washington.edu/home/nthiery/dot2tex-2.8.7-2.spkg

- enter this in the notebook or in your ./sage/init.sage file:

  from sage.misc.latex import latex
  latex.add_to_preamble('\\usepackage{tikz}')
  latex.add_to_jsmath_avoid_list('\\begin{tikzpicture}')

We can create the crystal for the vector representation for all classical types.

{{{id=1| C = CrystalOfLetters(['A',2]) C.list() /// [1, 2, 3] }}} {{{id=3| view(C, pdflatex=True, tightpage=True) /// }}} {{{id=5| C = CrystalOfLetters(['D',4]) view(C, pdflatex=True, tightpage=True) /// }}}

Crystals in terms of Kashiwara-Nakashima tableaux

{{{id=7| B = CrystalOfTableaux(['A',2],shape=[2,1]) view(B, pdflatex=True, tightpage=True) /// }}} {{{id=8| b = B.an_element(); b /// [[1, 1], [2]] }}} {{{id=9| b.f(1) /// [[1, 2], [2]] }}} {{{id=10| b.weight() /// (2, 1, 0) }}} {{{id=11| b.phi(2) /// 1 }}}

Tensor products of crystals

Sage uses the anti-Kashiwara convention for tensor products.

{{{id=4| B = CrystalOfTableaux(['A',2],shape=[1]) T = TensorProductOfCrystals(B,B) view(T, pdflatex=True, tightpage=True) /// }}}

Spin crystals

{{{id=13| C = CrystalOfTableaux(['B',2], shape = [3/2, 1/2]) view(C, pdflatex=True, tightpage=True) /// }}}

Lusztig involution

The Lusztig involution on a finite-dimensional highest weight crystal B(\lambda) of highest weight \lambda maps the highest weight vector to the lowest weight vector and the Kashiwara operator f_i to e_{i^*}, where i^* is defined as \alpha_{i^*} = -w_0(\alpha_i). Here w_0 is the longest element of the Weyl group acting on the i-th simple root \alpha_i. For example, for type A_n we have i^*=n+1-i, whereas for type C_n we have i^*=i. For type D_n and n even also have i^*=i, but for n odd this map interchanges nodes n-1 and n. Here is how to achieve this in Sage:

{{{id=15| B = CrystalOfTableaux(['A',2],shape=[2,1]) b = B(rows=[[1,2],[2]]) b.lusztig_involution() /// [[2, 2], [3]] }}} {{{id=17| view(B) /// }}}

Kirillov-Reshetikhin crystals

{{{id=18| K = KirillovReshetikhinCrystal(['B',2,1],1,1) view(K) /// }}}

Littelmann path model

{{{id=38| C = CrystalOfLSPaths(['A',2],[1,1]) view(C, pdflatex=True, tightpage=True) /// }}} {{{id=39| B = CrystalOfTableaux(['A',2],shape=[2,1]) B.digraph().is_isomorphic(C.digraph()) /// True }}}

Now we consider a bigger crystal and view the individual Littelmann paths:

{{{id=20| C = CrystalOfLSPaths(['A',2],[6,3]) /// }}} {{{id=35| def line_of_path(path): if path is None: result = [] else: L = path.parent().weight.parent() v = vector(L.zero()) result = [v] for d in path.value: v = v + vector(d) result.append(v) result = list(result) print result result = line(result) result.set_axes_range(-10,10,-10,10) return result /// }}} {{{id=37| @interact def string(element = slider(0, C.cardinality(),1), i=C.index_set(), l=slider(-10, 10, 1,0)): x = C[element] if l>=0: y = x.f_string([i]*l) else: y = x.e_string([i]*-l) line_of_path(y).show() ///
element 
}}}

Littelmann paths also works for exceptional types.

{{{id=23| C = CrystalOfLSPaths(['E',6],[1,0,0,0,0,0]) b = C.module_generators[0] b /// (Lambda[1],) }}} {{{id=25| b.f(1) /// (-Lambda[1] + Lambda[3],) }}}

Or level zero Littelmann paths:

{{{id=40| C = CrystalOfLSPaths(['A',2,1],[-1,0,1]); C /// The crystal of LS paths of type ['A', 2, 1] and weight (-1, 0, 1) }}} {{{id=27| c = C.module_generators[0]; c /// (-Lambda[0] + Lambda[2],) }}} {{{id=42| c.f(2).f(1) /// (Lambda[0] - Lambda[1],) }}}