Crystals of Kac modules of the general-linear Lie superalgebra#

class sage.combinat.crystals.kac_modules.CrystalOfKacModule(cartan_type, la, mu)[source]#

Bases: UniqueRepresentation, Parent

Crystal of a Kac module.

Let \(\mathfrak{g}\) be the general linear Lie superalgebra \(\mathfrak{gl}(m|n)\). Let \(\lambda\) and \(\mu\) be dominant weights for \(\mathfrak{gl}_m\) and \(\mathfrak{gl}_n\), respectively. Let \(K\) be the module \(K = \langle f_{\alpha} \rangle\), where \(\alpha\) ranges over all odd positive roots. A Kac module is the \(U_q(\mathfrak{g})\)-module constructed from the highest weight \(U_q(\mathfrak{gl}_m \oplus \mathfrak{gl}_n)\)-module \(V(\lambda, \mu)\) (induced to a \(U_q(\mathfrak{g})\)-module in the natural way) by

\[K(\lambda, \mu) := K \otimes_L V(\lambda, \mu),\]

where \(L\) is the subalgebra generated by \(e_0\) and \(U_q(\mathfrak{gl}_m \oplus \mathfrak{gl}_n)\).

The Kac module admits a \(U_q(\mathfrak{g})\)-crystal structure by taking the crystal structure of \(K\) as given by CrystalOfOddNegativeRoots and the crystal \(B(\lambda, \mu)\) (the natural crystal structure of \(V(\lambda, \mu)\)).

Note

Our notation differs slightly from [Kwon2012] in that our last tableau is transposed.

EXAMPLES:

sage: K = crystals.KacModule(['A', [1,2]], [2], [1,1])
sage: K.cardinality()
576
sage: K.cardinality().factor()
2^6 * 3^2
sage: len(K.cartan_type().root_system().ambient_space().positive_odd_roots())
6
sage: mg = K.module_generator()
sage: mg
({}, [[-2, -2]], [[1], [2]])
sage: mg.weight()
(2, 0, 1, 1, 0)
sage: mg.f(-1)
({}, [[-2, -1]], [[1], [2]])
sage: mg.f(0)
({-e[-1]+e[1]}, [[-2, -2]], [[1], [2]])
sage: mg.f(1)
sage: mg.f(2)
({}, [[-2, -2]], [[1], [3]])

sage: sorted(K.highest_weight_vectors(), key=str)
[({-e[-1]+e[3]}, [[-2, -1]], [[1], [2]]),
 ({-e[-1]+e[3]}, [[-2, -2]], [[1], [2]]),
 ({}, [[-2, -2]], [[1], [2]])]
>>> from sage.all import *
>>> K = crystals.KacModule(['A', [Integer(1),Integer(2)]], [Integer(2)], [Integer(1),Integer(1)])
>>> K.cardinality()
576
>>> K.cardinality().factor()
2^6 * 3^2
>>> len(K.cartan_type().root_system().ambient_space().positive_odd_roots())
6
>>> mg = K.module_generator()
>>> mg
({}, [[-2, -2]], [[1], [2]])
>>> mg.weight()
(2, 0, 1, 1, 0)
>>> mg.f(-Integer(1))
({}, [[-2, -1]], [[1], [2]])
>>> mg.f(Integer(0))
({-e[-1]+e[1]}, [[-2, -2]], [[1], [2]])
>>> mg.f(Integer(1))
>>> mg.f(Integer(2))
({}, [[-2, -2]], [[1], [3]])

>>> sorted(K.highest_weight_vectors(), key=str)
[({-e[-1]+e[3]}, [[-2, -1]], [[1], [2]]),
 ({-e[-1]+e[3]}, [[-2, -2]], [[1], [2]]),
 ({}, [[-2, -2]], [[1], [2]])]
sage: K = crystals.KacModule(['A', [1,1]], [2], [1])
sage: K.cardinality()
96
sage: K.cardinality().factor()
2^5 * 3
sage: len(K.cartan_type().root_system().ambient_space().positive_odd_roots())
4

sage: sorted(K.highest_weight_vectors(), key=str)
[({-e[-1]+e[2]}, [[-2, -1]], [[1]]),
 ({-e[-1]+e[2]}, [[-2, -2]], [[1]]),
 ({}, [[-2, -2]], [[1]])]
sage: K.genuine_lowest_weight_vectors()
(({-e[-2]+e[1], -e[-2]+e[2], -e[-1]+e[1], -e[-1]+e[2]}, [[-1, -1]], [[2]]),)
sage: sorted(K.lowest_weight_vectors(), key=str)
[({-e[-1]+e[1], -e[-1]+e[2]}, [[-1, -1]], [[2]]),
 ({-e[-2]+e[1], -e[-2]+e[2], -e[-1]+e[1], -e[-1]+e[2]}, [[-1, -1]], [[2]]),
 ({-e[-2]+e[2], -e[-1]+e[1], -e[-1]+e[2]}, [[-1, -1]], [[1]]),
 ({-e[-2]+e[2], -e[-1]+e[1], -e[-1]+e[2]}, [[-1, -1]], [[2]])]
>>> from sage.all import *
>>> K = crystals.KacModule(['A', [Integer(1),Integer(1)]], [Integer(2)], [Integer(1)])
>>> K.cardinality()
96
>>> K.cardinality().factor()
2^5 * 3
>>> len(K.cartan_type().root_system().ambient_space().positive_odd_roots())
4

>>> sorted(K.highest_weight_vectors(), key=str)
[({-e[-1]+e[2]}, [[-2, -1]], [[1]]),
 ({-e[-1]+e[2]}, [[-2, -2]], [[1]]),
 ({}, [[-2, -2]], [[1]])]
>>> K.genuine_lowest_weight_vectors()
(({-e[-2]+e[1], -e[-2]+e[2], -e[-1]+e[1], -e[-1]+e[2]}, [[-1, -1]], [[2]]),)
>>> sorted(K.lowest_weight_vectors(), key=str)
[({-e[-1]+e[1], -e[-1]+e[2]}, [[-1, -1]], [[2]]),
 ({-e[-2]+e[1], -e[-2]+e[2], -e[-1]+e[1], -e[-1]+e[2]}, [[-1, -1]], [[2]]),
 ({-e[-2]+e[2], -e[-1]+e[1], -e[-1]+e[2]}, [[-1, -1]], [[1]]),
 ({-e[-2]+e[2], -e[-1]+e[1], -e[-1]+e[2]}, [[-1, -1]], [[2]])]

REFERENCES:

class Element[source]#

Bases: ElementWrapper

An element of a Kac module crystal.

e(i)[source]#

Return the action of the crystal operator \(e_i\) on self.

EXAMPLES:

sage: K = crystals.KacModule(['A', [2,2]], [2,1], [1])
sage: mg = K.module_generator()
sage: mg.e(0)
sage: mg.e(1)
sage: mg.e(-1)
sage: b = mg.f_string([1,0,1,-1,-2,0,1,2,0,-2,-1,-1,-1]); b
({-e[-3]+e[2], -e[-2]+e[1], -e[-2]+e[2]}, [[-3, -1], [-2]], [[3]])
sage: b.e(-2)
sage: b.e(-1)
({-e[-3]+e[2], -e[-2]+e[1], -e[-2]+e[2]}, [[-3, -2], [-2]], [[3]])
sage: b.e(0)
sage: b.e(1)
({-e[-3]+e[1], -e[-2]+e[1], -e[-2]+e[2]}, [[-3, -1], [-2]], [[3]])
sage: b.e(2)
({-e[-3]+e[2], -e[-2]+e[1], -e[-2]+e[2]}, [[-3, -1], [-2]], [[2]])
>>> from sage.all import *
>>> K = crystals.KacModule(['A', [Integer(2),Integer(2)]], [Integer(2),Integer(1)], [Integer(1)])
>>> mg = K.module_generator()
>>> mg.e(Integer(0))
>>> mg.e(Integer(1))
>>> mg.e(-Integer(1))
>>> b = mg.f_string([Integer(1),Integer(0),Integer(1),-Integer(1),-Integer(2),Integer(0),Integer(1),Integer(2),Integer(0),-Integer(2),-Integer(1),-Integer(1),-Integer(1)]); b
({-e[-3]+e[2], -e[-2]+e[1], -e[-2]+e[2]}, [[-3, -1], [-2]], [[3]])
>>> b.e(-Integer(2))
>>> b.e(-Integer(1))
({-e[-3]+e[2], -e[-2]+e[1], -e[-2]+e[2]}, [[-3, -2], [-2]], [[3]])
>>> b.e(Integer(0))
>>> b.e(Integer(1))
({-e[-3]+e[1], -e[-2]+e[1], -e[-2]+e[2]}, [[-3, -1], [-2]], [[3]])
>>> b.e(Integer(2))
({-e[-3]+e[2], -e[-2]+e[1], -e[-2]+e[2]}, [[-3, -1], [-2]], [[2]])
f(i)[source]#

Return the action of the crystal operator \(f_i\) on self.

EXAMPLES:

sage: K = crystals.KacModule(['A', [2,2]], [2,1], [1])
sage: mg = K.module_generator()
sage: mg.f(-2)
({}, [[-3, -2], [-2]], [[1]])
sage: mg.f(-1)
({}, [[-3, -3], [-1]], [[1]])
sage: mg.f(0)
({-e[-1]+e[1]}, [[-3, -3], [-2]], [[1]])
sage: mg.f(1)
({}, [[-3, -3], [-2]], [[2]])
sage: mg.f(2)
sage: b = mg.f_string([1,0,1,-1,-2,0,1,2,0,-2,-1,2,0]); b
({-e[-3]+e[3], -e[-2]+e[1], -e[-1]+e[1], -e[-1]+e[2]},
 [[-3, -2], [-2]], [[3]])
>>> from sage.all import *
>>> K = crystals.KacModule(['A', [Integer(2),Integer(2)]], [Integer(2),Integer(1)], [Integer(1)])
>>> mg = K.module_generator()
>>> mg.f(-Integer(2))
({}, [[-3, -2], [-2]], [[1]])
>>> mg.f(-Integer(1))
({}, [[-3, -3], [-1]], [[1]])
>>> mg.f(Integer(0))
({-e[-1]+e[1]}, [[-3, -3], [-2]], [[1]])
>>> mg.f(Integer(1))
({}, [[-3, -3], [-2]], [[2]])
>>> mg.f(Integer(2))
>>> b = mg.f_string([Integer(1),Integer(0),Integer(1),-Integer(1),-Integer(2),Integer(0),Integer(1),Integer(2),Integer(0),-Integer(2),-Integer(1),Integer(2),Integer(0)]); b
({-e[-3]+e[3], -e[-2]+e[1], -e[-1]+e[1], -e[-1]+e[2]},
 [[-3, -2], [-2]], [[3]])
weight()[source]#

Return weight of self.

EXAMPLES:

sage: K = crystals.KacModule(['A', [3,2]], [2,1], [5,1])
sage: mg = K.module_generator()
sage: mg.weight()
(2, 1, 0, 0, 5, 1, 0)
sage: mg.weight().is_dominant()
True
sage: mg.f(0).weight()
(2, 1, 0, -1, 6, 1, 0)
sage: b = mg.f_string([2,1,-3,-2,-1,1,1,0,-2,-1,2,1,1,1,0,2,-3,-2,-1])
sage: b.weight()
(0, 0, 0, 1, 1, 4, 3)
>>> from sage.all import *
>>> K = crystals.KacModule(['A', [Integer(3),Integer(2)]], [Integer(2),Integer(1)], [Integer(5),Integer(1)])
>>> mg = K.module_generator()
>>> mg.weight()
(2, 1, 0, 0, 5, 1, 0)
>>> mg.weight().is_dominant()
True
>>> mg.f(Integer(0)).weight()
(2, 1, 0, -1, 6, 1, 0)
>>> b = mg.f_string([Integer(2),Integer(1),-Integer(3),-Integer(2),-Integer(1),Integer(1),Integer(1),Integer(0),-Integer(2),-Integer(1),Integer(2),Integer(1),Integer(1),Integer(1),Integer(0),Integer(2),-Integer(3),-Integer(2),-Integer(1)])
>>> b.weight()
(0, 0, 0, 1, 1, 4, 3)
module_generator()[source]#

Return the module generator of self.

EXAMPLES:

sage: K = crystals.KacModule(['A', [2,1]], [2,1], [1])
sage: K.module_generator()
({}, [[-3, -3], [-2]], [[1]])
>>> from sage.all import *
>>> K = crystals.KacModule(['A', [Integer(2),Integer(1)]], [Integer(2),Integer(1)], [Integer(1)])
>>> K.module_generator()
({}, [[-3, -3], [-2]], [[1]])
class sage.combinat.crystals.kac_modules.CrystalOfOddNegativeRoots(cartan_type)[source]#

Bases: UniqueRepresentation, Parent

Crystal of the set of odd negative roots.

Let \(\mathfrak{g}\) be the general-linear Lie superalgebra \(\mathfrak{gl}(m|n)\). This is the crystal structure on the set of negative roots as given by [Kwon2012].

More specifically, this is the crystal basis of the subalgebra of \(U_q^-(\mathfrak{g})\) generated by \(f_{\alpha}\), where \(\alpha\) ranges over all odd positive roots. As \(\QQ(q)\)-modules, we have

\[U_q^-(\mathfrak{g}) \cong K \otimes U^-_q(\mathfrak{gl}_m \oplus \mathfrak{gl}_n).\]

EXAMPLES:

sage: S = crystals.OddNegativeRoots(['A', [2,1]])
sage: mg = S.module_generator(); mg
{}
sage: mg.f(0)
{-e[-1]+e[1]}
sage: mg.f_string([0,-1,0,1,2,1,0])
{-e[-2]+e[3], -e[-1]+e[1], -e[-1]+e[2]}
>>> from sage.all import *
>>> S = crystals.OddNegativeRoots(['A', [Integer(2),Integer(1)]])
>>> mg = S.module_generator(); mg
{}
>>> mg.f(Integer(0))
{-e[-1]+e[1]}
>>> mg.f_string([Integer(0),-Integer(1),Integer(0),Integer(1),Integer(2),Integer(1),Integer(0)])
{-e[-2]+e[3], -e[-1]+e[1], -e[-1]+e[2]}
class Element[source]#

Bases: ElementWrapper

An element of the crystal of odd negative roots.

e(i)[source]#

Return the action of the crystal operator \(e_i\) on self.

EXAMPLES:

sage: S = crystals.OddNegativeRoots(['A', [2,2]])
sage: mg = S.module_generator()
sage: mg.e(0)
sage: mg.e(1)
sage: b = mg.f_string([0,1,2,-1,0])
sage: b.e(-1)
sage: b.e(0)
{-e[-2]+e[3]}
sage: b.e(1)
sage: b.e(2)
{-e[-2]+e[2], -e[-1]+e[1]}
sage: b.e_string([2,1,0,-1,0])
{}
>>> from sage.all import *
>>> S = crystals.OddNegativeRoots(['A', [Integer(2),Integer(2)]])
>>> mg = S.module_generator()
>>> mg.e(Integer(0))
>>> mg.e(Integer(1))
>>> b = mg.f_string([Integer(0),Integer(1),Integer(2),-Integer(1),Integer(0)])
>>> b.e(-Integer(1))
>>> b.e(Integer(0))
{-e[-2]+e[3]}
>>> b.e(Integer(1))
>>> b.e(Integer(2))
{-e[-2]+e[2], -e[-1]+e[1]}
>>> b.e_string([Integer(2),Integer(1),Integer(0),-Integer(1),Integer(0)])
{}
epsilon(i)[source]#

Return \(\varepsilon_i\) of self.

EXAMPLES:

sage: S = crystals.OddNegativeRoots(['A', [2,2]])
sage: mg = S.module_generator()
sage: [mg.epsilon(i) for i in S.index_set()]
[0, 0, 0, 0, 0]
sage: b = mg.f_string([0,1,0,-1,0,-1,-2,-2]); b
{-e[-3]+e[1], -e[-3]+e[2], -e[-1]+e[1]}
sage: [b.epsilon(i) for i in S.index_set()]
[2, 0, 1, 0, 0]
sage: b = mg.f_string([0,1,0,-1,0,-1,-2,-2,2,-1,0]); b
{-e[-3]+e[1], -e[-3]+e[3], -e[-2]+e[1], -e[-1]+e[1]}
sage: [b.epsilon(i) for i in S.index_set()]
[1, 0, 1, 0, 1]
>>> from sage.all import *
>>> S = crystals.OddNegativeRoots(['A', [Integer(2),Integer(2)]])
>>> mg = S.module_generator()
>>> [mg.epsilon(i) for i in S.index_set()]
[0, 0, 0, 0, 0]
>>> b = mg.f_string([Integer(0),Integer(1),Integer(0),-Integer(1),Integer(0),-Integer(1),-Integer(2),-Integer(2)]); b
{-e[-3]+e[1], -e[-3]+e[2], -e[-1]+e[1]}
>>> [b.epsilon(i) for i in S.index_set()]
[2, 0, 1, 0, 0]
>>> b = mg.f_string([Integer(0),Integer(1),Integer(0),-Integer(1),Integer(0),-Integer(1),-Integer(2),-Integer(2),Integer(2),-Integer(1),Integer(0)]); b
{-e[-3]+e[1], -e[-3]+e[3], -e[-2]+e[1], -e[-1]+e[1]}
>>> [b.epsilon(i) for i in S.index_set()]
[1, 0, 1, 0, 1]
f(i)[source]#

Return the action of the crystal operator \(f_i\) on self.

EXAMPLES:

sage: S = crystals.OddNegativeRoots(['A', [2,2]])
sage: mg = S.module_generator()
sage: mg.f(0)
{-e[-1]+e[1]}
sage: mg.f(1)
sage: b = mg.f_string([0,1,2,-1,0]); b
{-e[-2]+e[3], -e[-1]+e[1]}
sage: b.f(-2)
{-e[-3]+e[3], -e[-1]+e[1]}
sage: b.f(-1)
sage: b.f(0)
sage: b.f(1)
{-e[-2]+e[3], -e[-1]+e[2]}
>>> from sage.all import *
>>> S = crystals.OddNegativeRoots(['A', [Integer(2),Integer(2)]])
>>> mg = S.module_generator()
>>> mg.f(Integer(0))
{-e[-1]+e[1]}
>>> mg.f(Integer(1))
>>> b = mg.f_string([Integer(0),Integer(1),Integer(2),-Integer(1),Integer(0)]); b
{-e[-2]+e[3], -e[-1]+e[1]}
>>> b.f(-Integer(2))
{-e[-3]+e[3], -e[-1]+e[1]}
>>> b.f(-Integer(1))
>>> b.f(Integer(0))
>>> b.f(Integer(1))
{-e[-2]+e[3], -e[-1]+e[2]}
phi(i)[source]#

Return \(\varphi_i\) of self.

EXAMPLES:

sage: S = crystals.OddNegativeRoots(['A', [2,2]])
sage: mg = S.module_generator()
sage: [mg.phi(i) for i in S.index_set()]
[0, 0, 1, 0, 0]
sage: b = mg.f(0)
sage: [b.phi(i) for i in S.index_set()]
[0, 1, 0, 1, 0]
sage: b = mg.f_string([0,1,0,-1,0,-1]); b
{-e[-2]+e[1], -e[-2]+e[2], -e[-1]+e[1]}
sage: [b.phi(i) for i in S.index_set()]
[2, 0, 0, 1, 1]
>>> from sage.all import *
>>> S = crystals.OddNegativeRoots(['A', [Integer(2),Integer(2)]])
>>> mg = S.module_generator()
>>> [mg.phi(i) for i in S.index_set()]
[0, 0, 1, 0, 0]
>>> b = mg.f(Integer(0))
>>> [b.phi(i) for i in S.index_set()]
[0, 1, 0, 1, 0]
>>> b = mg.f_string([Integer(0),Integer(1),Integer(0),-Integer(1),Integer(0),-Integer(1)]); b
{-e[-2]+e[1], -e[-2]+e[2], -e[-1]+e[1]}
>>> [b.phi(i) for i in S.index_set()]
[2, 0, 0, 1, 1]
weight()[source]#

Return the weight of self.

EXAMPLES:

sage: S = crystals.OddNegativeRoots(['A', [2,2]])
sage: mg = S.module_generator()
sage: mg.weight()
(0, 0, 0, 0, 0, 0)
sage: mg.f_string([0,1,2,-1,-2]).weight()
(-1, 0, 0, 0, 0, 1)
sage: mg.f_string([0,1,2,-1,-2,0,1,0,2]).weight()
(-1, 0, -2, 1, 0, 2)
>>> from sage.all import *
>>> S = crystals.OddNegativeRoots(['A', [Integer(2),Integer(2)]])
>>> mg = S.module_generator()
>>> mg.weight()
(0, 0, 0, 0, 0, 0)
>>> mg.f_string([Integer(0),Integer(1),Integer(2),-Integer(1),-Integer(2)]).weight()
(-1, 0, 0, 0, 0, 1)
>>> mg.f_string([Integer(0),Integer(1),Integer(2),-Integer(1),-Integer(2),Integer(0),Integer(1),Integer(0),Integer(2)]).weight()
(-1, 0, -2, 1, 0, 2)
module_generator()[source]#

Return the module generator of self.

EXAMPLES:

sage: S = crystals.OddNegativeRoots(['A', [2,1]])
sage: S.module_generator()
{}
>>> from sage.all import *
>>> S = crystals.OddNegativeRoots(['A', [Integer(2),Integer(1)]])
>>> S.module_generator()
{}
sage.combinat.crystals.kac_modules.latex_dual(elt)[source]#

Return a latex representation of a type \(A_n\) crystal tableau elt expressed in terms of dual letters.

The dual letter of \(k\) is expressed as \(\overline{n+2-k}\).

EXAMPLES:

sage: from sage.combinat.crystals.kac_modules import latex_dual
sage: T = crystals.Tableaux(['A',2], shape=[2,1])
sage: print(latex_dual(T[0]))
{\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}
\raisebox{-.6ex}{$\begin{array}[b]{*{2}c}\cline{1-2}
\lr{\overline{3}}&\lr{\overline{3}}\\\cline{1-2}
\lr{\overline{2}}\\\cline{1-1}
\end{array}$}
}
>>> from sage.all import *
>>> from sage.combinat.crystals.kac_modules import latex_dual
>>> T = crystals.Tableaux(['A',Integer(2)], shape=[Integer(2),Integer(1)])
>>> print(latex_dual(T[Integer(0)]))
{\def\lr#1{\multicolumn{1}{|@{\hspace{.6ex}}c@{\hspace{.6ex}}|}{\raisebox{-.3ex}{$#1$}}}
\raisebox{-.6ex}{$\begin{array}[b]{*{2}c}\cline{1-2}
\lr{\overline{3}}&\lr{\overline{3}}\\\cline{1-2}
\lr{\overline{2}}\\\cline{1-1}
\end{array}$}
}
sage.combinat.crystals.kac_modules.to_dual_tableau(elt)[source]#

Return a type \(A_n\) crystal tableau elt as a tableau expressed in terms of dual letters.

The dual letter of \(k\) is expressed as \(\overline{n+2-k}\) represented as \(-(n+2-k)\).

EXAMPLES:

sage: from sage.combinat.crystals.kac_modules import to_dual_tableau
sage: T = crystals.Tableaux(['A',2], shape=[2,1])
sage: ascii_art([to_dual_tableau(t) for t in T])
[  -3 -3   -3 -2   -3 -1   -3 -1   -2 -1   -3 -3   -3 -2   -2 -2 ]
[  -2   ,  -2   ,  -2   ,  -1   ,  -1   ,  -1   ,  -1   ,  -1    ]
>>> from sage.all import *
>>> from sage.combinat.crystals.kac_modules import to_dual_tableau
>>> T = crystals.Tableaux(['A',Integer(2)], shape=[Integer(2),Integer(1)])
>>> ascii_art([to_dual_tableau(t) for t in T])
[  -3 -3   -3 -2   -3 -1   -3 -1   -2 -1   -3 -3   -3 -2   -2 -2 ]
[  -2   ,  -2   ,  -2   ,  -1   ,  -1   ,  -1   ,  -1   ,  -1    ]