Schilling-SageDaysChennai
system:sage


<p>This notebook was part of a tutorial on "Crystals" presented by Anne Schilling at Sage Days 60 in Chennai August 15, 2014.</p>
<h2>Building a crystal</h2>
<p>This shows how to build a classical crystal, access its weight lattice, and the main operations on crystal elements.</p>

{{{id=1|
B = crystals.Tableaux(['C',2], shape=[1])
B
///
The crystal of tableaux of type ['C', 2] and shape(s) [[1]]
}}}

{{{id=3|
P = B.weight_lattice_realization()
P
///
Ambient space of the Root system of type ['C', 2]
}}}

{{{id=4|
P.basis()[0]
///
(1, 0)
}}}

{{{id=44|
P.basis()
///
Finite family {0: (1, 0), 1: (0, 1)}
}}}

{{{id=5|
B.list()
///
[[[1]], [[2]], [[-2]], [[-1]]]
}}}

{{{id=6|
b = B(rows=[[-2]]); b
///
[[-2]]
}}}

{{{id=7|
b.weight()
///
(0, -1)
}}}

{{{id=17|
b.f(1)
///
[[-1]]
}}}

{{{id=9|
view(B)
///
<html><img src="cell://sage0.png"></html>
}}}

<h2>Tensor products of crystals</h2>
<p>Now we learn how to take tensor products of crystals and decompose tensor products into irreducible components.</p>

{{{id=12|
B = crystals.Tableaux(['A',2],shape=[1])
T = crystals.TensorProduct(B,B,B)
T
///
Full tensor product of the crystals [The crystal of tableaux of type ['A', 2] and shape(s) [[1]], The crystal of tableaux of type ['A', 2] and shape(s) [[1]], The crystal of tableaux of type ['A', 2] and shape(s) [[1]]]
}}}

{{{id=13|
for b in T:
    if b.is_highest_weight():
        print b
///
[[[1]], [[1]], [[1]]]
[[[1]], [[2]], [[1]]]
[[[2]], [[1]], [[1]]]
[[[3]], [[2]], [[1]]]
}}}

{{{id=14|
view(T)
///
<html><img src="cell://sage0.png"></html>
}}}

<h2>Characters from crystals</h2>
<p>We can compute the character by taking the sum over all crystal elements $b$ of $x^{weight(b)}$.</p>

{{{id=15|
B = crystals.Tableaux(['A',2], shape=[2,1])
B
///
The crystal of tableaux of type ['A', 2] and shape(s) [[2, 1]]
}}}

{{{id=19|
view(B)
///
<html><img src="cell://sage0.png"></html>
}}}

{{{id=20|
[b.weight() for b in B]
///
[(2, 1, 0), (1, 2, 0), (1, 1, 1), (1, 0, 2), (0, 1, 2), (2, 0, 1), (1, 1, 1), (0, 2, 1)]
}}}

{{{id=21|
R.<x1,x2,x3> = PolynomialRing(ZZ,3)
R
///
Multivariate Polynomial Ring in x1, x2, x3 over Integer Ring
}}}

{{{id=23|
x = R.gens()
x
///
(x1, x2, x3)
}}}

{{{id=25|
weight_sum = sum(prod(x[i]**b.weight()[i] for i in [0,1,2]) for b in B)
weight_sum
///
x1^2*x2 + x1*x2^2 + x1^2*x3 + 2*x1*x2*x3 + x2^2*x3 + x1*x3^2 + x2*x3^2
}}}

<h2>Symmetric functions</h2>
<p>The character is nothing else, but the Schur function, which we can easily check on the computer!</p>

{{{id=27|
Sym = SymmetricFunctions(ZZ)
s = Sym.schur()
///
}}}

{{{id=38|
Sym.from_polynomial(weight_sum)
///
2*m[1, 1, 1] + m[2, 1]
}}}

{{{id=28|
s(Sym.from_polynomial(weight_sum))
///
s[2, 1]
}}}

<h2>Demazure crystals</h2>
<p>We can also investigate Demazure crystals on the computer.</p>

{{{id=46|
B = crystals.Tableaux(['A',2], shape=[2,1])
B
///
The crystal of tableaux of type ['A', 2] and shape(s) [[2, 1]]
}}}

{{{id=47|
C = CombinatorialFreeModule(QQ,B); C
///
Free module generated by The crystal of tableaux of type ['A', 2] and shape(s) [[2, 1]] over Rational Field
}}}

{{{id=48|
t = B.highest_weight_vector()
t
///
[[1, 1], [2]]
}}}

{{{id=32|
b = C(t)
///
}}}

{{{id=33|
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]]]
}}}

{{{id=34|
D.support()
///
[[[1, 1], [2]], [[1, 2], [2]], [[1, 3], [2]], [[1, 1], [3]], [[1, 3], [3]]]
}}}

{{{id=35|
G = B.digraph(subset=D.support())
view(G)
///
<html><img src="cell://sage0.png"></html>
}}}

<h2>Littelmann paths</h2>

{{{id=36|
LS = crystals.LSPaths(['C',2,1],[0,1,0])
LS
///
The crystal of LS paths of type ['C', 2, 1] and weight Lambda[1]
}}}

{{{id=40|
C = [ b for b in LS.__iter__(max_depth=4) ]
G = LS.digraph(subset=C)
view(G)
///
<html><img src="cell://sage0.png"></html>
}}}

<h2>Generalized Rogers-Ramanujan identities and crystals</h2>

{{{id=41|
B = crystals.KirillovReshetikhin(['A',2,1],1,1)
C = crystals.KirillovReshetikhin(['A',2,1],2,1)
T = crystals.TensorProduct(B,C)
///
}}}

{{{id=53|
T.one_dimensional_configuration_sum()
///
(q+2)*B[0] + B[-2*Lambda[1] + Lambda[2]] + B[-Lambda[1] - Lambda[2]] + B[-Lambda[1] + 2*Lambda[2]] + B[Lambda[1] - 2*Lambda[2]] + B[Lambda[1] + Lambda[2]] + B[2*Lambda[1] - Lambda[2]]
}}}

<h2>Searching Source code</h2>

{{{id=57|
search_src("Ramanujan")
///
<html><font color="black"><h2>Search Source Code: "Ramanujan"</h2></font><font color="darkpurple"><ol><li><a href="/src/algebras/iwahori_hecke_algebra.py" target="_blank"><tt>algebras/iwahori_hecke_algebra.py</tt></a>
<li><a href="/src/combinat/partition.py" target="_blank"><tt>combinat/partition.py</tt></a>
<li><a href="/src/lfunctions/dokchitser.py" target="_blank"><tt>lfunctions/dokchitser.py</tt></a>
<li><a href="/src/lfunctions/lcalc.py" target="_blank"><tt>lfunctions/lcalc.py</tt></a>
<li><a href="/src/modular/local_comp/local_comp.py" target="_blank"><tt>modular/local_comp/local_comp.py</tt></a>
<li><a href="/src/schemes/hyperelliptic_curves/monsky_washnitzer.py" target="_blank"><tt>schemes/hyperelliptic_curves/monsky_washnitzer.py</tt></a>
</ol></font></html>
}}}

{{{id=58|

///
}}}