Kirillov-Reshetikhin Crystals

class sage.combinat.crystals.kirillov_reshetikhin.AmbientRetractMap(base, ambient, pdict_inv, index_set, similarity_factor_domain=None, automorphism=None)

Bases: sage.categories.map.Map

The retraction map from the ambient crystal.

Consider a crystal embedding \(\phi : X \to Y\), then the elements \(X\) can be considered as a subcrystal of the ambient crystal \(Y\). The ambient retract is the partial map \(\tilde{\phi} : Y \to X\) such that \(\tilde{\phi} \circ \phi\) is the identity on \(X\).

class sage.combinat.crystals.kirillov_reshetikhin.CrystalDiagramAutomorphism(C, on_hw, index_set=None, automorphism=None, cache=True)

Bases: sage.categories.crystals.CrystalMorphism

The crystal automorphism induced from the diagram automorphism.

For example, in type \(A_n^{(1)}\) this is the promotion operator and in type \(D_n^{(1)}\), this corresponds to the automorphism induced from interchanging the \(0\) and \(1\) nodes in the Dynkin diagram.

INPUT:

  • C – a crystal
  • on_hw – a function for the images of the index_set-highest weight elements
  • index_set – (default: the empty set) the index set
  • automorphism – (default: the identity) the twisting automorphism
  • cache – (default: True) cache the result
is_embedding()

Return True as self is a crystal isomorphism.

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['A',3,1], 2,2)
sage: K.promotion().is_isomorphism()
True
is_isomorphism()

Return True as self is a crystal isomorphism.

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['A',3,1], 2,2)
sage: K.promotion().is_isomorphism()
True
is_strict()

Return True as self is a crystal isomorphism.

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['A',3,1], 2,2)
sage: K.promotion().is_isomorphism()
True
is_surjective()

Return True as self is a crystal isomorphism.

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['A',3,1], 2,2)
sage: K.promotion().is_isomorphism()
True
sage.combinat.crystals.kirillov_reshetikhin.CrystalOfTableaux_E7

The type \(E_7\) crystal \(B(s\Lambda_7)\).

This is a helper class for the corresponding:class:\(KR crystal <sage.combinat.crystals.kirillov_reshetikhin.KR_type_E7>\) \(B^{7,s}\).

sage.combinat.crystals.kirillov_reshetikhin.KR_type_A

Class of Kirillov-Reshetikhin crystals of type \(A_n^{(1)}\).

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['A',3,1], 2,2)
sage: b = K(rows=[[1,2],[2,4]])
sage: b.f(0)
[[1, 1], [2, 2]]
sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2

Class of Kirillov-Reshetikhin crystals \(B^{r,s}\) of type \(A_{2n}^{(2)}\) for \(1 \leq r \leq n\) in the realization with classical subalgebra \(B_n\). The Cartan type in this case is inputted as the dual of \(A_{2n}^{(2)}\).

This is an alternative implementation to KR_type_box that uses the classical decomposition into type \(C_n\) crystals.

EXAMPLES:

sage: C = CartanType(['A',4,2]).dual()
sage: K = sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2(C, 1, 1)
sage: K
Kirillov-Reshetikhin crystal of type ['BC', 2, 2]^* with (r,s)=(1,1)
sage: b = K(rows=[[-1]])
sage: b.f(0)
[[1]]
sage: b.e(0)

We can now check whether the two KR crystals of type \(A_4^{(2)}\) (namely the KR crystal and its dual construction) are isomorphic up to relabelling of the edges:

sage: C = CartanType(['A',4,2])
sage: K = crystals.KirillovReshetikhin(C,1,1)
sage: Kdual = crystals.KirillovReshetikhin(C.dual(),1,1)
sage: G = K.digraph()
sage: Gdual = Kdual.digraph()
sage: f = {0:2, 1:1, 2:0}
sage: Gnew = DiGraph(); Gnew.add_vertices(Gdual.vertices()); Gnew.add_edges([(u,v,f[i]) for (u,v,i) in Gdual.edges()])
sage: G.is_isomorphic(Gnew, edge_labels = True)
True
class sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2Element

Bases: sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystalElement

Class for the elements in the Kirillov-Reshetikhin crystals \(B^{r,s}\) of type \(A_{2n}^{(2)}\) for \(r<n\) with underlying classical algebra \(B_n\).

EXAMPLES:

sage: C = CartanType(['A',4,2]).dual()
sage: K = sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2(C, 1, 2)
sage: type(K.module_generators[0])
<class 'sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2_with_category.element_class'>
e0()

Return \(e_0\) on self by mapping self to the ambient crystal, calculating \(e_1 e_0\) there and pulling the element back.

EXAMPLES:

sage: C = CartanType(['A',4,2]).dual()
sage: K = sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2(C, 1, 1)
sage: b = K(rows=[[1]])
sage: b.e(0) # indirect doctest
[[-1]]
epsilon0()

Calculate \(\varepsilon_0\) of self by mapping the element to the ambient crystal and calculating \varepsilon_1 there.

EXAMPLES:

sage: C = CartanType(['A',4,2]).dual()
sage: K = sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2(C, 1, 1)
sage: b=K(rows=[[1]])
sage: b.epsilon(0) # indirect doctest
1
f0()

Return \(f_0\) on self by mapping self to the ambient crystal, calculating \(f_1 f_0\) there and pulling the element back.

EXAMPLES:

sage: C = CartanType(['A',4,2]).dual()
sage: K = sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2(C, 1, 1)
sage: b = K(rows=[[-1]])
sage: b.f(0) # indirect doctest
[[1]]
phi0()

Calculate \(\varphi_0\) of self by mapping the element to the ambient crystal and calculating \(\varphi_1\) there.

EXAMPLES:

sage: C = CartanType(['A',4,2]).dual()
sage: K = sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2(C, 1, 1)
sage: b = K(rows=[[-1]])
sage: b.phi(0) # indirect doctest
1
sage.combinat.crystals.kirillov_reshetikhin.KR_type_Bn

Class of Kirillov-Reshetikhin crystals \(B^{n,s}\) of type \(B_{n}^{(1)}\).

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['B',3,1],3,2)
sage: K
Kirillov-Reshetikhin crystal of type ['B', 3, 1] with (r,s)=(3,2)
sage: b = K(rows=[[1],[2],[3]])
sage: b.f(0)
sage: b.e(0)
[[3]]

sage: K = crystals.KirillovReshetikhin(['B',3,1],3,2)
sage: [b.weight() for b in K if b.is_highest_weight([1,2,3])]
[-Lambda[0] + Lambda[1], -2*Lambda[0] + 2*Lambda[3]]
sage: [b.weight() for b in K if b.is_highest_weight([0,2,3])]
[Lambda[0] - Lambda[1], -2*Lambda[1] + 2*Lambda[3]]
class sage.combinat.crystals.kirillov_reshetikhin.KR_type_BnElement

Bases: sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystalElement

Class for the elements in the Kirillov-Reshetikhin crystals \(B^{n,s}\) of type \(B_n^{(1)}\).

EXAMPLES:

sage: K=crystals.KirillovReshetikhin(['B',3,1],3,2)
sage: type(K.module_generators[0])
<class 'sage.combinat.crystals.kirillov_reshetikhin.KR_type_Bn_with_category.element_class'>
e0()

Return \(e_0\) on self by mapping self to the ambient crystal, calculating \(e_0\) there and pulling the element back.

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['B',3,1],3,1)
sage: b = K.module_generators[0]
sage: b.e(0) # indirect doctest
[--+, []]
epsilon0()

Calculate \(\varepsilon_0\) of self by mapping the element to the ambient crystal and calculating \(\varepsilon_0\) there.

EXAMPLES:

sage: K=crystals.KirillovReshetikhin(['B',3,1],3,1)
sage: b = K.module_generators[0]
sage: b.epsilon(0) # indirect doctest
1
f0()

Return \(f_0\) on self by mapping self to the ambient crystal, calculating \(f_0\) there and pulling the element back.

EXAMPLES:

sage: K=crystals.KirillovReshetikhin(['B',3,1],3,1)
sage: b = K.module_generators[0]
sage: b.f(0) # indirect doctest
phi0()

Calculate \(\varphi_0\) of self by mapping the element to the ambient crystal and calculating \(\varphi_0\) there.

EXAMPLES:

sage: K=crystals.KirillovReshetikhin(['B',3,1],3,1)
sage: b = K.module_generators[0]
sage: b.phi(0) # indirect doctest
0
sage.combinat.crystals.kirillov_reshetikhin.KR_type_C

Class of Kirillov-Reshetikhin crystals \(B^{r,s}\) of type \(C_n^{(1)}\) for \(r < n\).

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['C',2,1], 1,2)
sage: K
Kirillov-Reshetikhin crystal of type ['C', 2, 1] with (r,s)=(1,2)
sage: b = K(rows=[])
sage: b.f(0)
[[1, 1]]
sage: b.e(0)
[[-1, -1]]
class sage.combinat.crystals.kirillov_reshetikhin.KR_type_CElement

Bases: sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystalElement

Class for the elements in the Kirillov-Reshetikhin crystals \(B^{r,s}\) of type \(C_n^{(1)}\) for \(r<n\).

EXAMPLES:

sage: K=crystals.KirillovReshetikhin(['C',3,1],1,2)
sage: type(K.module_generators[0])
<class 'sage.combinat.crystals.kirillov_reshetikhin.KR_type_C_with_category.element_class'>
e0()

Return \(e_0\) on self by mapping self to the ambient crystal, calculating \(e_1 e_0\) there and pulling the element back.

EXAMPLES:

sage: K=crystals.KirillovReshetikhin(['C',3,1],1,2)
sage: b = K(rows=[])
sage: b.e(0) # indirect doctest
[[-1, -1]]
epsilon0()

Calculate \(\varepsilon_0\) of self by mapping the element to the ambient crystal and calculating \(\varepsilon_1\) there.

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['C',2,1], 1,2)
sage: b=K(rows=[[1,1]])
sage: b.epsilon(0) # indirect doctest
2
f0()

Return \(f_0\) on self by mapping self to the ambient crystal, calculating \(f_1 f_0\) there and pulling the element back.

EXAMPLES:

sage: K=crystals.KirillovReshetikhin(['C',3,1],1,2)
sage: b = K(rows=[])
sage: b.f(0) # indirect doctest
[[1, 1]]
phi0()

Calculate \(\varphi_0\) of self by mapping the element to the ambient crystal and calculating \(\varphi_1\) there.

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['C',2,1], 1,2)
sage: b=K(rows=[[-1,-1]])
sage: b.phi(0) # indirect doctest
2
sage.combinat.crystals.kirillov_reshetikhin.KR_type_Cn

Class of Kirillov-Reshetikhin crystals \(B^{n,s}\) of type \(C_n^{(1)}\).

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['C',3,1],3,1)
sage: [[b,b.f(0)] for b in K]
[[[[1], [2], [3]], None], [[[1], [2], [-3]], None],
 [[[1], [3], [-3]], None], [[[2], [3], [-3]], None],
 [[[1], [3], [-2]], None], [[[2], [3], [-2]], None],
 [[[2], [3], [-1]], [[1], [2], [3]]], [[[1], [-3], [-2]], None],
 [[[2], [-3], [-2]], None], [[[2], [-3], [-1]], [[1], [2], [-3]]],
 [[[3], [-3], [-2]], None], [[[3], [-3], [-1]], [[1], [3], [-3]]],
 [[[3], [-2], [-1]], [[1], [3], [-2]]],
 [[[-3], [-2], [-1]], [[1], [-3], [-2]]]]
class sage.combinat.crystals.kirillov_reshetikhin.KR_type_CnElement

Bases: sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystalElement

Class for the elements in the Kirillov-Reshetikhin crystals \(B^{n,s}\) of type \(C_n^{(1)}\).

EXAMPLES:

sage: K=crystals.KirillovReshetikhin(['C',3,1],3,2)
sage: type(K.module_generators[0])
<class 'sage.combinat.crystals.kirillov_reshetikhin.KR_type_Cn_with_category.element_class'>
e0()

Return \(e_0\) on self by going to the \(\pm\)-diagram corresponding to the \(\{2,...,n\}\)-highest weight vector in the component of self, then applying [Definition 6.1, 4], and pulling back from \(\pm\)-diagrams.

EXAMPLES:

sage: K=crystals.KirillovReshetikhin(['C',3,1],3,2)
sage: b = K.module_generators[0]
sage: b.e(0) # indirect doctest
[[1, 2], [2, 3], [3, -1]]
sage: b = K(rows=[[1,2],[2,3],[3,-1]])
sage: b.e(0)
[[2, 2], [3, 3], [-1, -1]]
sage: b=K(rows=[[1, -3], [3, -2], [-3, -1]])
sage: b.e(0)
[[3, -3], [-3, -2], [-1, -1]]
epsilon0()

Calculate \(\varepsilon_0\) of self using Lemma 6.1 of [4].

EXAMPLES:

sage: K=crystals.KirillovReshetikhin(['C',3,1],3,1)
sage: b = K.module_generators[0]
sage: b.epsilon(0) # indirect doctest
1
f0()

Return \(e_0\) on self by going to the \(\pm\)-diagram corresponding to the \(\{2,...,n\}\)-highest weight vector in the component of self, then applying [Definition 6.1, 4], and pulling back from \(\pm\)-diagrams.

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['C',3,1],3,1)
sage: b = K.module_generators[0]
sage: b.f(0) # indirect doctest
phi0()

Calculate \(\varphi_0\) of self.

EXAMPLES:

sage: K=crystals.KirillovReshetikhin(['C',3,1],3,1)
sage: b = K.module_generators[0]
sage: b.phi(0) # indirect doctest
0
sage.combinat.crystals.kirillov_reshetikhin.KR_type_D_tri1

Class of Kirillov-Reshetikhin crystals \(B^{1,s}\) of type \(D_4^{(3)}\).

The crystal structure was defined in Section 4 of [KMOY2007] using the coordinate representation.

sage.combinat.crystals.kirillov_reshetikhin.KR_type_Dn_twisted

Class of Kirillov-Reshetikhin crystals \(B^{n,s}\) of type \(D_{n+1}^{(2)}\).

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['D',4,2],3,1)
sage: [[b,b.f(0)] for b in K]
[[[+++, []], None], [[++-, []], None], [[+-+, []], None], [[-++, []],
[+++, []]], [[+--, []], None], [[-+-, []], [++-, []]], [[--+, []], [+-+, []]],
[[---, []], [+--, []]]]
class sage.combinat.crystals.kirillov_reshetikhin.KR_type_Dn_twistedElement

Bases: sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystalElement

Class for the elements in the Kirillov-Reshetikhin crystals \(B^{n,s}\) of type \(D_{n+1}^{(2)}\).

EXAMPLES:

sage: K=crystals.KirillovReshetikhin(['D',4,2],3,2)
sage: type(K.module_generators[0])
<class 'sage.combinat.crystals.kirillov_reshetikhin.KR_type_Dn_twisted_with_category.element_class'>
e0()

Return \(e_0\) on self by going to the \(\pm\)-diagram corresponding to the \(\{2,\ldots,n\}\)-highest weight vector in the component of self, then applying [Definition 6.2, 4], and pulling back from \(\pm\)-diagrams.

EXAMPLES:

sage: K=crystals.KirillovReshetikhin(['D',4,2],3,3)
sage: b = K.module_generators[0]
sage: b.e(0) # indirect doctest
[+++, [[2], [3], [0]]]
epsilon0()

Calculate \(\varepsilon_0\) of self using Lemma 6.2 of [4].

EXAMPLES:

sage: K=crystals.KirillovReshetikhin(['D',4,2],3,1)
sage: b = K.module_generators[0]
sage: b.epsilon(0) # indirect doctest
1
f0()

Return \(e_0\) on self by going to the \(\pm\)-diagram corresponding to the \(\{2,\ldots,n\}\)-highest weight vector in the component of self, then applying [Definition 6.2, 4], and pulling back from \(\pm\)-diagrams.

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['D',4,2],3,2)
sage: b = K.module_generators[0]
sage: b.f(0) # indirect doctest
phi0()

Calculate \(\varphi_0\) of self.

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['D',4,2],3,1)
sage: b = K.module_generators[0]
sage: b.phi(0) # indirect doctest
0
sage.combinat.crystals.kirillov_reshetikhin.KR_type_E6

Class of Kirillov-Reshetikhin crystals of type \(E_6^{(1)}\) for \(r=1,2,6\).

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['E',6,1],2,1)
sage: K.module_generator().e(0)
[]
sage: K.module_generator().e(0).f(0)
[[(2, -1), (1,)]]
sage: K = crystals.KirillovReshetikhin(['E',6,1], 1,1)
sage: b = K.module_generator()
sage: b
[(1,)]
sage: b.e(0)
[(-2, 1)]
sage: b = [t for t in K if t.epsilon(1) == 1 and t.phi(3) == 1 and t.phi(2) == 0 and t.epsilon(2) == 0][0]
sage: b
[(-1, 3)]
sage: b.e(0)
[(-1, -2, 3)]

The elements of the Kirillov-Reshetikhin crystals can be constructed from a classical crystal element using retract().

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['E',6,1],2,1)
sage: La = K.cartan_type().classical().root_system().weight_lattice().fundamental_weights()
sage: H = crystals.HighestWeight(La[2])
sage: t = H.module_generator()
sage: t
[[(2, -1), (1,)]]
sage: type(K.retract(t))
<class 'sage.combinat.crystals.kirillov_reshetikhin.KR_type_E6_with_category.element_class'>
sage: K.retract(t).e(0)
[]
sage.combinat.crystals.kirillov_reshetikhin.KR_type_E7

The Kirillov-Reshetikhin crystal \(B^{7,s}\) of type \(E_7^{(1)}\).

sage.combinat.crystals.kirillov_reshetikhin.KR_type_box

Class of Kirillov-Reshetikhin crystals \(B^{r,s}\) of type \(A_{2n}^{(2)}\) for \(r\le n\) and type \(D_{n+1}^{(2)}\) for \(r<n\).

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['A',4,2], 1,1)
sage: K
Kirillov-Reshetikhin crystal of type ['BC', 2, 2] with (r,s)=(1,1)
sage: b = K(rows=[])
sage: b.f(0)
[[1]]
sage: b.e(0)
[[-1]]
class sage.combinat.crystals.kirillov_reshetikhin.KR_type_boxElement

Bases: sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystalElement

Class for the elements in the Kirillov-Reshetikhin crystals \(B^{r,s}\) of type \(A_{2n}^{(2)}\) for \(r \leq n\) and type \(D_{n+1}^{(2)}\) for \(r < n\).

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['A',4,2],1,2)
sage: type(K.module_generators[0])
<class 'sage.combinat.crystals.kirillov_reshetikhin.KR_type_box_with_category.element_class'>
e0()

Return \(e_0\) on self by mapping self to the ambient crystal, calculating \(e_0\) there and pulling the element back.

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['A',4,2],1,1)
sage: b = K(rows=[])
sage: b.e(0) # indirect doctest
[[-1]]
epsilon0()

Return \(\varepsilon_0\) of self by mapping the element to the ambient crystal and calculating \(\varepsilon_0\) there.

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['A',4,2], 1,1)
sage: b = K(rows=[[1]])
sage: b.epsilon(0) # indirect doctest
2
f0()

Return \(f_0\) on self by mapping self to the ambient crystal, calculating \(f_0\) there and pulling the element back.

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['A',4,2],1,1)
sage: b = K(rows=[])
sage: b.f(0) # indirect doctest
[[1]]
phi0()

Return \(\varphi_0\) of self by mapping the element to the ambient crystal and calculating \(\varphi_0\) there.

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['D',3,2], 1,1)
sage: b = K(rows=[[-1]])
sage: b.phi(0) # indirect doctest
2
sage.combinat.crystals.kirillov_reshetikhin.KR_type_spin

Class of Kirillov-Reshetikhin crystals \(B^{n,s}\) of type \(D_n^{(1)}\).

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['D',4,1],4,1); K
Kirillov-Reshetikhin crystal of type ['D', 4, 1] with (r,s)=(4,1)
sage: [[b,b.f(0)] for b in K]
[[[++++, []], None], [[++--, []], None], [[+-+-, []], None],
 [[-++-, []], None], [[+--+, []], None], [[-+-+, []], None],
 [[--++, []], [++++, []]], [[----, []], [++--, []]]]

sage: K = crystals.KirillovReshetikhin(['D',4,1],4,2); K
Kirillov-Reshetikhin crystal of type ['D', 4, 1] with (r,s)=(4,2)
sage: [[b,b.f(0)] for b in K]
[[[[1], [2], [3], [4]], None], [[[1], [2], [-4], [4]], None],
 [[[1], [3], [-4], [4]], None], [[[2], [3], [-4], [4]], None],
 [[[1], [4], [-4], [4]], None], [[[2], [4], [-4], [4]], None],
 [[[3], [4], [-4], [4]], [[1], [2], [3], [4]]],
 [[[-4], [4], [-4], [4]], [[1], [2], [-4], [4]]],
 [[[-4], [4], [-4], [-3]], [[1], [2], [-4], [-3]]],
 [[[-4], [4], [-4], [-2]], [[1], [3], [-4], [-3]]],
 [[[-4], [4], [-4], [-1]], [[2], [3], [-4], [-3]]],
 [[[-4], [4], [-3], [-2]], [[1], [4], [-4], [-3]]],
 [[[-4], [4], [-3], [-1]], [[2], [4], [-4], [-3]]],
 [[[-4], [4], [-2], [-1]], [[-4], [4], [-4], [4]]],
 [[[-4], [-3], [-2], [-1]], [[-4], [4], [-4], [-3]]],
 [[[1], [2], [-4], [-3]], None], [[[1], [3], [-4], [-3]], None],
 [[[2], [3], [-4], [-3]], None], [[[1], [3], [-4], [-2]], None],
 [[[2], [3], [-4], [-2]], None], [[[2], [3], [-4], [-1]], None],
 [[[1], [4], [-4], [-3]], None], [[[2], [4], [-4], [-3]], None],
 [[[3], [4], [-4], [-3]], None],
 [[[3], [4], [-4], [-2]], [[1], [3], [-4], [4]]],
 [[[3], [4], [-4], [-1]], [[2], [3], [-4], [4]]],
 [[[1], [4], [-4], [-2]], None], [[[2], [4], [-4], [-2]], None],
 [[[2], [4], [-4], [-1]], None], [[[1], [4], [-3], [-2]], None],
 [[[2], [4], [-3], [-2]], None], [[[2], [4], [-3], [-1]], None],
 [[[3], [4], [-3], [-2]], [[1], [4], [-4], [4]]],
 [[[3], [4], [-3], [-1]], [[2], [4], [-4], [4]]],
 [[[3], [4], [-2], [-1]], [[3], [4], [-4], [4]]]]
sage.combinat.crystals.kirillov_reshetikhin.KR_type_vertical

Class of Kirillov-Reshetikhin crystals \(B^{r,s}\) of type \(D_n^{(1)}\) for \(r \le n-2\), \(B_n^{(1)}\) for \(r < n\), and \(A_{2n-1}^{(2)}\) for \(r \le n\).

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['D',4,1], 2,2)
sage: b = K(rows=[])
sage: b.f(0)
[[1], [2]]
sage: b.f(0).f(0)
[[1, 1], [2, 2]]
sage: b.e(0)
[[-2], [-1]]
sage: b.e(0).e(0)
[[-2, -2], [-1, -1]]

sage: K = crystals.KirillovReshetikhin(['D',5,1], 3,1)
sage: b = K(rows=[[1]])
sage: b.e(0)
[[3], [-3], [-2]]

sage: K = crystals.KirillovReshetikhin(['B',3,1], 1,1)
sage: [[b,b.f(0)] for b in K]
[[[[1]], None], [[[2]], None], [[[3]], None], [[[0]], None],
 [[[-3]], None], [[[-2]], [[1]]], [[[-1]], [[2]]]]

sage: K = crystals.KirillovReshetikhin(['A',5,2], 1,1)
sage: [[b,b.f(0)] for b in K]
[[[[1]], None], [[[2]], None], [[[3]], None], [[[-3]], None],
 [[[-2]], [[1]]], [[[-1]], [[2]]]]
sage.combinat.crystals.kirillov_reshetikhin.KashiwaraNakashimaTableaux(cartan_type, r, s)

Return the Kashiwara-Nakashima model for the Kirillov-Reshetikhin crystal \(B^{r,s}\) in the given type.

The Kashiwara-Nakashima (KN) model constructs the KR crystal from the KN tableaux model for the corresponding classical crystals. This model is named for the underlying KN tableaux.

Many Kirillov-Reshetikhin crystals are constructed from a classical crystal together with an automorphism \(p\) on the level of crystals which corresponds to a Dynkin diagram automorphism mapping node 0 to some other node \(i\). The action of \(f_0\) and \(e_0\) is then constructed using \(f_0 = p^{-1} \circ f_i \circ p\).

For example, for type \(A_n^{(1)}\) the Kirillov-Reshetikhin crystal \(B^{r,s}\) is obtained from the classical crystal \(B(s \omega_r)\) using the promotion operator. For other types, see [Shi2002], [Sch2008], and [JS2010].

Other Kirillov-Reshetikhin crystals are constructed using similarity methods. See Section 4 of [FOS2009].

For more information on Kirillov-Reshetikhin crystals, see KirillovReshetikhinCrystal().

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['A',3,1], 2, 1)
sage: K2 = crystals.kirillov_reshetikhin.KashiwaraNakashimaTableaux(['A',3,1], 2, 1)
sage: K is K2
True
sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinCrystal(cartan_type, r, s, model='KN')

Return the Kirillov-Reshetikhin crystal \(B^{r,s}\) of the given type in the given model.

For more information about general crystals see sage.combinat.crystals.crystals.

There are a variety of models for Kirillov-Reshetikhin crystals. There is one using the classical crystal with Kashiwara-Nakashima tableaux. There is one using rigged configurations. Another tableaux model comes from the bijection between rigged configurations and tensor products of tableaux called Kirillov-Reshetikhin tableaux Lastly there is a model of Kirillov-Reshetikhin crystals for \(s = 1\) from crystals of LS paths.

INPUT:

  • cartan_type – an affine Cartan type
  • r – a label of finite Dynkin diagram
  • s – a positive integer
  • model – (default: 'KN') can be one of the following:
    • 'KN' or 'KashiwaraNakashimaTableaux' - use the Kashiwara-Nakashima tableaux model
    • 'KR' or 'KirillovReshetkihinTableaux' - use the Kirillov-Reshetkihin tableaux model
    • 'RC' or 'RiggedConfiguration' - use the rigged configuration model
    • 'LSPaths' - use the LS path model

EXAMPLES:

sage: K = crystals.KirillovReshetikhin(['A',3,1], 2, 1)
sage: K.index_set()
(0, 1, 2, 3)
sage: K.list()
[[[1], [2]], [[1], [3]], [[2], [3]], [[1], [4]], [[2], [4]], [[3], [4]]]
sage: b=K(rows=[[1],[2]])
sage: b.weight()
-Lambda[0] + Lambda[2]

sage: K = crystals.KirillovReshetikhin(['A',3,1], 2,2)
sage: K.automorphism(K.module_generators[0])
[[2, 2], [3, 3]]
sage: K.module_generators[0].e(0)
[[1, 2], [2, 4]]
sage: K.module_generators[0].f(2)
[[1, 1], [2, 3]]
sage: K.module_generators[0].f(1)
sage: K.module_generators[0].phi(0)
0
sage: K.module_generators[0].phi(1)
0
sage: K.module_generators[0].phi(2)
2
sage: K.module_generators[0].epsilon(0)
2
sage: K.module_generators[0].epsilon(1)
0
sage: K.module_generators[0].epsilon(2)
0
sage: b = K(rows=[[1,2],[2,3]])
sage: b
[[1, 2], [2, 3]]
sage: b.f(2)
[[1, 2], [3, 3]]

sage: K = crystals.KirillovReshetikhin(['D',4,1], 2, 1)
sage: K.cartan_type()
['D', 4, 1]
sage: type(K.module_generators[0])
<class 'sage.combinat.crystals.kirillov_reshetikhin.KR_type_vertical_with_category.element_class'>

The following gives some tests with regards to Lemma 3.11 in [LOS2012].

REFERENCES:

sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinCrystalFromLSPaths(cartan_type, r, s=1)

Single column Kirillov-Reshetikhin crystals.

This yields the single column Kirillov-Reshetikhin crystals from the projected level zero LS paths, see CrystalOfLSPaths. This works for all types (even exceptional types). The weight of the canonical element in this crystal is \(\Lambda_r\). For other implementation see KirillovReshetikhinCrystal().

EXAMPLES:

sage: K = crystals.kirillov_reshetikhin.LSPaths(['A',2,1],2) # indirect doctest
sage: KR = crystals.KirillovReshetikhin(['A',2,1],2,1)
sage: G = K.digraph()
sage: GR = KR.digraph()
sage: G.is_isomorphic(GR, edge_labels = True)
True

sage: K = crystals.kirillov_reshetikhin.LSPaths(['C',3,1],2)
sage: KR = crystals.KirillovReshetikhin(['C',3,1],2,1)
sage: G = K.digraph()
sage: GR = KR.digraph()
sage: G.is_isomorphic(GR, edge_labels = True)
True

sage: K = crystals.kirillov_reshetikhin.LSPaths(['E',6,1],1)
sage: KR = crystals.KirillovReshetikhin(['E',6,1],1,1)
sage: G = K.digraph()
sage: GR = KR.digraph()
sage: G.is_isomorphic(GR, edge_labels = True)
True
sage: K.cardinality()
27

sage: K = crystals.kirillov_reshetikhin.LSPaths(['G',2,1],1)
sage: K.cardinality()
7

sage: K = crystals.kirillov_reshetikhin.LSPaths(['B',3,1],2)
sage: KR = crystals.KirillovReshetikhin(['B',3,1],2,1)
sage: KR.cardinality()
22
sage: K.cardinality()
22
sage: G = K.digraph()
sage: GR = KR.digraph()
sage: G.is_isomorphic(GR, edge_labels = True)
True
sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinCrystalFromPromotion

This generic class assumes that the Kirillov-Reshetikhin crystal is constructed from a classical crystal using the classical_decomposition and an automorphism promotion and its inverse, which corresponds to a Dynkin diagram automorphism dynkin_diagram_automorphism.

Each instance using this class needs to implement the methods:

  • classical_decomposition
  • promotion
  • promotion_inverse
  • dynkin_diagram_automorphism
class sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinCrystalFromPromotionElement

Bases: sage.combinat.crystals.affine.AffineCrystalFromClassicalAndPromotionElement, sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystalElement

Element for a Kirillov-Reshetikhin crystal from promotion.

sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystal

Generic class for Kirillov-Reshetikhin crystal \(B^{r,s}\) of the given type.

Input is a Dynkin node r, a positive integer s, and a Cartan type cartan_type.

class sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystalElement

Bases: sage.combinat.crystals.affine.AffineCrystalFromClassicalElement

Abstract class for all Kirillov-Reshetikhin crystal elements.

lusztig_involution()

Return the classical Lusztig involution on self.

EXAMPLES:

sage: KRC = crystals.KirillovReshetikhin(['D',4,1], 2,2)
sage: elt = KRC(-1,2); elt
[[2], [-1]]
sage: elt.lusztig_involution()
[[1], [-2]]
pp()

Pretty print self.

EXAMPLES:

sage: C = crystals.KirillovReshetikhin(['D',4,1], 2,1)
sage: C(2,1).pp()
  1
  2
sage: C = crystals.KirillovReshetikhin(['B',3,1], 3,3)
sage: C.module_generators[0].pp()
+ (X)   1
+
+
to_kirillov_reshetikhin_tableau()

Construct the corresponding KirillovReshetikhinTableauxElement from self.

We construct the Kirillov-Reshetikhin tableau element as follows:

  1. Let \(\lambda\) be the shape of self.
  2. Determine a path \(e_{i_1} e_{i_2} \cdots e_{i_k}\) to the highest weight.
  3. Apply \(f_{i_k} \cdots f_{i_2} f_{i_1}\) to a highest weight KR tableau from filling the shape \(\lambda\).

EXAMPLES:

sage: KRC = crystals.KirillovReshetikhin(['A', 4, 1], 2, 1)
sage: KRC(columns=[[2,1]]).to_kirillov_reshetikhin_tableau()
[[1], [2]]
sage: KRC = crystals.KirillovReshetikhin(['D', 4, 1], 2, 1)
sage: KRC(rows=[]).to_kirillov_reshetikhin_tableau()
[[1], [-1]]
to_tableau()

Return the Tableau corresponding to self.

EXAMPLES:

sage: C = crystals.KirillovReshetikhin(['D',4,1], 2,1)
sage: t = C(2,1).to_tableau(); t
[[1], [2]]
sage: type(t)
<class 'sage.combinat.tableau.Tableaux_all_with_category.element_class'>
class sage.combinat.crystals.kirillov_reshetikhin.PMDiagram(pm_diagram, from_shapes=None)

Bases: sage.combinat.combinat.CombinatorialObject

Class of \(\pm\) diagrams. These diagrams are in one-to-one bijection with \(X_{n-1}\) highest weight vectors in an \(X_n\) highest weight crystal \(X=B,C,D\). See Section 4.1 of [Sch2008].

The input is a list \(pm = [[a_0,b_0], [a_1,b_1], ..., [a_{n-1},b_{n-1}], [b_n]]\) of pairs and a last 1-tuple (or list of length 1). The pair \([a_i,b_i]\) specifies the number of \(a_i\) \(+\) and \(b_i\) \(-\) in the \(i\)-th row of the \(\pm\) diagram if \(n-i\) is odd and the number of \(a_i\) \(\pm\) pairs above row \(i\) and \(b_i\) columns of height \(i\) not containing any \(+\) or \(-\) if \(n-i\) is even.

Setting the option from_shapes = True one can also input a \(\pm\) diagram in terms of its outer, intermediate, and inner shape by specifying a list [n, s, outer, intermediate, inner] where s is the width of the \(\pm\) diagram, and outer, intermediate, and inner are the outer, intermediate, and inner shapes, respectively.

EXAMPLES:

sage: from sage.combinat.crystals.kirillov_reshetikhin import PMDiagram
sage: pm = PMDiagram([[0,1],[1,2],[1]])
sage: pm.pm_diagram
[[0, 1], [1, 2], [1]]
sage: pm._list
[1, 1, 2, 0, 1]
sage: pm.n
2
sage: pm.width
5
sage: pm.pp()
.  .  .  .
.  +  -  -
sage: PMDiagram([2,5,[4,4],[4,2],[4,1]], from_shapes=True)
[[0, 1], [1, 2], [1]]
heights_of_addable_plus()

Return a list with the heights of all addable plus in the \(\pm\) diagram.

EXAMPLES:

sage: from sage.combinat.crystals.kirillov_reshetikhin import PMDiagram
sage: pm = PMDiagram([[1,2],[1,2],[1,1],[1,1],[1,1],[1]])
sage: pm.heights_of_addable_plus()
[1, 1, 2, 3, 4, 5]
sage: pm = PMDiagram([[1,2],[1,1],[1,1],[1,1],[1]])
sage: pm.heights_of_addable_plus()
[1, 2, 3, 4]
heights_of_minus()

Return a list with the heights of all minus in the \(\pm\) diagram.

EXAMPLES:

sage: from sage.combinat.crystals.kirillov_reshetikhin import PMDiagram
sage: pm = PMDiagram([[1,2],[1,2],[1,1],[1,1],[1,1],[1]])
sage: pm.heights_of_minus()
[5, 5, 3, 3, 1, 1]
sage: pm = PMDiagram([[1,2],[1,1],[1,1],[1,1],[1]])
sage: pm.heights_of_minus()
[4, 4, 2, 2]
inner_shape()

Return the inner shape of the pm diagram

EXAMPLES:

sage: from sage.combinat.crystals.kirillov_reshetikhin import PMDiagram
sage: pm = PMDiagram([[0,1],[1,2],[1]])
sage: pm.inner_shape()
[4, 1]
sage: pm = PMDiagram([[1,2],[1,1],[1,1],[1,1],[1]])
sage: pm.inner_shape()
[7, 5, 3, 1]
sage: pm = PMDiagram([[1,2],[1,2],[1,1],[1,1],[1,1],[1]])
sage: pm.inner_shape()
[10, 7, 5, 3, 1]
intermediate_shape()

Return the intermediate shape of the pm diagram (inner shape plus positions of plusses)

EXAMPLES:

sage: from sage.combinat.crystals.kirillov_reshetikhin import PMDiagram
sage: pm = PMDiagram([[0,1],[1,2],[1]])
sage: pm.intermediate_shape()
[4, 2]
sage: pm = PMDiagram([[1,2],[1,1],[1,1],[1,1],[1]])
sage: pm.intermediate_shape()
[8, 6, 4, 2]
sage: pm = PMDiagram([[1,2],[1,2],[1,1],[1,1],[1,1],[1]])
sage: pm.intermediate_shape()
[11, 8, 6, 4, 2]
sage: pm = PMDiagram([[1,0],[0,1],[2,0],[0,0],[0]])
sage: pm.intermediate_shape()
[4, 2, 2]
sage: pm = PMDiagram([[1, 0], [0, 0], [0, 0], [0, 0], [0]])
sage: pm.intermediate_shape()
[1]
outer_shape()

Return the outer shape of the \(\pm\) diagram

EXAMPLES:

sage: from sage.combinat.crystals.kirillov_reshetikhin import PMDiagram
sage: pm = PMDiagram([[0,1],[1,2],[1]])
sage: pm.outer_shape()
[4, 4]
sage: pm = PMDiagram([[1,2],[1,1],[1,1],[1,1],[1]])
sage: pm.outer_shape()
[8, 8, 4, 4]
sage: pm = PMDiagram([[1,2],[1,2],[1,1],[1,1],[1,1],[1]])
sage: pm.outer_shape()
[13, 8, 8, 4, 4]
pp()

Pretty print self.

EXAMPLES:

sage: from sage.combinat.crystals.kirillov_reshetikhin import PMDiagram
sage: pm = PMDiagram([[1,0],[0,1],[2,0],[0,0],[0]])
sage: pm.pp()
.  .  .  +
.  .  -  -
+  +
-  -
sage: pm = PMDiagram([[0,2], [0,0], [0]])
sage: pm.pp()
sigma()

Return sigma on pm diagrams as needed for the analogue of the Dynkin diagram automorphism that interchanges nodes \(0\) and \(1\) for type \(D_n(1)\), \(B_n(1)\), \(A_{2n-1}(2)\) for Kirillov-Reshetikhin crystals.

EXAMPLES:

sage: pm = sage.combinat.crystals.kirillov_reshetikhin.PMDiagram([[0,1],[1,2],[1]])
sage: pm.sigma()
[[1, 0], [2, 1], [1]]
sage.combinat.crystals.kirillov_reshetikhin.horizontal_dominoes_removed(r, s)

Returns all partitions obtained from a rectangle of width s and height r by removing horizontal dominoes.

EXAMPLES:

sage: sage.combinat.crystals.kirillov_reshetikhin.horizontal_dominoes_removed(2,2)
[[], [2], [2, 2]]
sage: sage.combinat.crystals.kirillov_reshetikhin.horizontal_dominoes_removed(3,2)
[[], [2], [2, 2], [2, 2, 2]]
sage.combinat.crystals.kirillov_reshetikhin.partitions_in_box(r, s)

Returns all partitions in a box of width s and height r.

EXAMPLES:

sage: sage.combinat.crystals.kirillov_reshetikhin.partitions_in_box(3,2)
[[], [1], [2], [1, 1], [2, 1], [1, 1, 1], [2, 2], [2, 1, 1],
[2, 2, 1], [2, 2, 2]]
sage.combinat.crystals.kirillov_reshetikhin.vertical_dominoes_removed(r, s)

Returns all partitions obtained from a rectangle of width s and height r by removing vertical dominoes.

EXAMPLES:

sage: sage.combinat.crystals.kirillov_reshetikhin.vertical_dominoes_removed(2,2)
[[], [1, 1], [2, 2]]
sage: sage.combinat.crystals.kirillov_reshetikhin.vertical_dominoes_removed(3,2)
[[2], [2, 1, 1], [2, 2, 2]]
sage: sage.combinat.crystals.kirillov_reshetikhin.vertical_dominoes_removed(4,2)
[[], [1, 1], [1, 1, 1, 1], [2, 2], [2, 2, 1, 1], [2, 2, 2, 2]]