Classical Crystals

class sage.categories.classical_crystals.ClassicalCrystals[source]

Bases: Category_singleton

The category of classical crystals, that is crystals of finite Cartan type.

EXAMPLES:

sage: C = ClassicalCrystals()
sage: C
Category of classical crystals
sage: C.super_categories()
[Category of regular crystals,
 Category of finite crystals,
 Category of highest weight crystals]
sage: C.example()
Highest weight crystal of type A_3 of highest weight omega_1
>>> from sage.all import *
>>> C = ClassicalCrystals()
>>> C
Category of classical crystals
>>> C.super_categories()
[Category of regular crystals,
 Category of finite crystals,
 Category of highest weight crystals]
>>> C.example()
Highest weight crystal of type A_3 of highest weight omega_1
class ElementMethods[source]

Bases: object

lusztig_involution()[source]

Return the Lusztig involution on the classical highest weight crystal self.

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\).

EXAMPLES:

sage: B = crystals.Tableaux(['A',3],shape=[2,1])
sage: b = B(rows=[[1,2],[4]])
sage: b.lusztig_involution()
[[1, 4], [3]]
sage: b.to_tableau().schuetzenberger_involution(n=4)
[[1, 4], [3]]

sage: all(b.lusztig_involution().to_tableau() == b.to_tableau().schuetzenberger_involution(n=4) for b in B)
True

sage: B = crystals.Tableaux(['D',4],shape=[1])
sage: [[b,b.lusztig_involution()] for b in B]
[[[[1]], [[-1]]], [[[2]], [[-2]]], [[[3]], [[-3]]], [[[4]], [[-4]]], [[[-4]],
[[4]]], [[[-3]], [[3]]], [[[-2]], [[2]]], [[[-1]], [[1]]]]

sage: B = crystals.Tableaux(['D',3],shape=[1])
sage: [[b,b.lusztig_involution()] for b in B]
[[[[1]], [[-1]]], [[[2]], [[-2]]], [[[3]], [[3]]], [[[-3]], [[-3]]],
[[[-2]], [[2]]], [[[-1]], [[1]]]]

sage: C = CartanType(['E',6])
sage: La = C.root_system().weight_lattice().fundamental_weights()
sage: T = crystals.HighestWeight(La[1])
sage: t = T[3]; t
[(-4, 2, 5)]
sage: t.lusztig_involution()
[(-2, -3, 4)]
>>> from sage.all import *
>>> B = crystals.Tableaux(['A',Integer(3)],shape=[Integer(2),Integer(1)])
>>> b = B(rows=[[Integer(1),Integer(2)],[Integer(4)]])
>>> b.lusztig_involution()
[[1, 4], [3]]
>>> b.to_tableau().schuetzenberger_involution(n=Integer(4))
[[1, 4], [3]]

>>> all(b.lusztig_involution().to_tableau() == b.to_tableau().schuetzenberger_involution(n=Integer(4)) for b in B)
True

>>> B = crystals.Tableaux(['D',Integer(4)],shape=[Integer(1)])
>>> [[b,b.lusztig_involution()] for b in B]
[[[[1]], [[-1]]], [[[2]], [[-2]]], [[[3]], [[-3]]], [[[4]], [[-4]]], [[[-4]],
[[4]]], [[[-3]], [[3]]], [[[-2]], [[2]]], [[[-1]], [[1]]]]

>>> B = crystals.Tableaux(['D',Integer(3)],shape=[Integer(1)])
>>> [[b,b.lusztig_involution()] for b in B]
[[[[1]], [[-1]]], [[[2]], [[-2]]], [[[3]], [[3]]], [[[-3]], [[-3]]],
[[[-2]], [[2]]], [[[-1]], [[1]]]]

>>> C = CartanType(['E',Integer(6)])
>>> La = C.root_system().weight_lattice().fundamental_weights()
>>> T = crystals.HighestWeight(La[Integer(1)])
>>> t = T[Integer(3)]; t
[(-4, 2, 5)]
>>> t.lusztig_involution()
[(-2, -3, 4)]
class ParentMethods[source]

Bases: object

cardinality()[source]

Return the number of elements of the crystal, using Weyl’s dimension formula on each connected component.

EXAMPLES:

sage: C = ClassicalCrystals().example(5)
sage: C.cardinality()
6
>>> from sage.all import *
>>> C = ClassicalCrystals().example(Integer(5))
>>> C.cardinality()
6
character(R=None)[source]

Return the character of this crystal.

INPUT:

Returns the character of self as an element of R.

EXAMPLES:

sage: C = crystals.Tableaux("A2", shape=[2,1])
sage: chi = C.character(); chi
A2(2,1,0)

sage: T = crystals.TensorProduct(C,C)
sage: chiT = T.character(); chiT
A2(2,2,2) + 2*A2(3,2,1) + A2(3,3,0) + A2(4,1,1) + A2(4,2,0)
sage: chiT == chi^2
True
>>> from sage.all import *
>>> C = crystals.Tableaux("A2", shape=[Integer(2),Integer(1)])
>>> chi = C.character(); chi
A2(2,1,0)

>>> T = crystals.TensorProduct(C,C)
>>> chiT = T.character(); chiT
A2(2,2,2) + 2*A2(3,2,1) + A2(3,3,0) + A2(4,1,1) + A2(4,2,0)
>>> chiT == chi**Integer(2)
True

One may specify an alternate WeylCharacterRing:

sage: R = WeylCharacterRing("A2", style='coroots')
sage: chiT = T.character(R); chiT
A2(0,0) + 2*A2(1,1) + A2(0,3) + A2(3,0) + A2(2,2)
sage: chiT in R
True
>>> from sage.all import *
>>> R = WeylCharacterRing("A2", style='coroots')
>>> chiT = T.character(R); chiT
A2(0,0) + 2*A2(1,1) + A2(0,3) + A2(3,0) + A2(2,2)
>>> chiT in R
True

It should have the same Cartan type and use the same realization of the weight lattice as self:

sage: R = WeylCharacterRing("A3", style='coroots')
sage: T.character(R)
Traceback (most recent call last):
...
ValueError: Weyl character ring does not have the right Cartan type
>>> from sage.all import *
>>> R = WeylCharacterRing("A3", style='coroots')
>>> T.character(R)
Traceback (most recent call last):
...
ValueError: Weyl character ring does not have the right Cartan type
demazure_character(w, f=None)[source]

Return the Demazure character associated to w.

INPUT:

  • w – an element of the ambient weight lattice realization of the crystal, or a reduced word, or an element in the associated Weyl group

OPTIONAL:

  • f – a function from the crystal to a module

This is currently only supported for crystals whose underlying weight space is the ambient space.

The Demazure character is obtained by applying the Demazure operator \(D_w\) (see sage.categories.regular_crystals.RegularCrystals.ParentMethods.demazure_operator()) to the highest weight element of the classical crystal. The simple Demazure operators \(D_i\) (see sage.categories.regular_crystals.RegularCrystals.ElementMethods.demazure_operator_simple()) do not braid on the level of crystals, but on the level of characters they do. That is why it makes sense to input w either as a weight, a reduced word, or as an element of the underlying Weyl group.

EXAMPLES:

sage: T = crystals.Tableaux(['A',2], shape = [2,1])
sage: e = T.weight_lattice_realization().basis()
sage: weight = e[0] + 2*e[2]
sage: weight.reduced_word()
[2, 1]
sage: T.demazure_character(weight)
x1^2*x2 + x1*x2^2 + x1^2*x3 + x1*x2*x3 + x1*x3^2

sage: T = crystals.Tableaux(['A',3],shape=[2,1])
sage: T.demazure_character([1,2,3])
x1^2*x2 + x1*x2^2 + x1^2*x3 + x1*x2*x3 + x2^2*x3
sage: W = WeylGroup(['A',3])
sage: w = W.from_reduced_word([1,2,3])
sage: T.demazure_character(w)
x1^2*x2 + x1*x2^2 + x1^2*x3 + x1*x2*x3 + x2^2*x3

sage: T = crystals.Tableaux(['B',2], shape = [2])
sage: e = T.weight_lattice_realization().basis()
sage: weight = -2*e[1]
sage: T.demazure_character(weight)
x1^2 + x1*x2 + x2^2 + x1 + x2 + x1/x2 + 1/x2 + 1/x2^2 + 1

sage: T = crystals.Tableaux("B2",shape=[1/2,1/2])
sage: b2=WeylCharacterRing("B2",base_ring=QQ).ambient()
sage: T.demazure_character([1,2],f=lambda x:b2(x.weight()))
b2(-1/2,1/2) + b2(1/2,-1/2) + b2(1/2,1/2)
>>> from sage.all import *
>>> T = crystals.Tableaux(['A',Integer(2)], shape = [Integer(2),Integer(1)])
>>> e = T.weight_lattice_realization().basis()
>>> weight = e[Integer(0)] + Integer(2)*e[Integer(2)]
>>> weight.reduced_word()
[2, 1]
>>> T.demazure_character(weight)
x1^2*x2 + x1*x2^2 + x1^2*x3 + x1*x2*x3 + x1*x3^2

>>> T = crystals.Tableaux(['A',Integer(3)],shape=[Integer(2),Integer(1)])
>>> T.demazure_character([Integer(1),Integer(2),Integer(3)])
x1^2*x2 + x1*x2^2 + x1^2*x3 + x1*x2*x3 + x2^2*x3
>>> W = WeylGroup(['A',Integer(3)])
>>> w = W.from_reduced_word([Integer(1),Integer(2),Integer(3)])
>>> T.demazure_character(w)
x1^2*x2 + x1*x2^2 + x1^2*x3 + x1*x2*x3 + x2^2*x3

>>> T = crystals.Tableaux(['B',Integer(2)], shape = [Integer(2)])
>>> e = T.weight_lattice_realization().basis()
>>> weight = -Integer(2)*e[Integer(1)]
>>> T.demazure_character(weight)
x1^2 + x1*x2 + x2^2 + x1 + x2 + x1/x2 + 1/x2 + 1/x2^2 + 1

>>> T = crystals.Tableaux("B2",shape=[Integer(1)/Integer(2),Integer(1)/Integer(2)])
>>> b2=WeylCharacterRing("B2",base_ring=QQ).ambient()
>>> T.demazure_character([Integer(1),Integer(2)],f=lambda x:b2(x.weight()))
b2(-1/2,1/2) + b2(1/2,-1/2) + b2(1/2,1/2)

REFERENCES:

class TensorProducts(category, *args)[source]

Bases: TensorProductsCategory

The category of classical crystals constructed by tensor product of classical crystals.

extra_super_categories()[source]

EXAMPLES:

sage: ClassicalCrystals().TensorProducts().extra_super_categories()
[Category of classical crystals]
>>> from sage.all import *
>>> ClassicalCrystals().TensorProducts().extra_super_categories()
[Category of classical crystals]
additional_structure()[source]

Return None.

Indeed, the category of classical crystals defines no additional structure: it only states that its objects are \(U_q(\mathfrak{g})\)-crystals, where \(\mathfrak{g}\) is of finite type.

EXAMPLES:

sage: ClassicalCrystals().additional_structure()
>>> from sage.all import *
>>> ClassicalCrystals().additional_structure()
example(n=3)[source]

Return an example of highest weight crystals, as per Category.example().

EXAMPLES:

sage: B = ClassicalCrystals().example(); B
Highest weight crystal of type A_3 of highest weight omega_1
>>> from sage.all import *
>>> B = ClassicalCrystals().example(); B
Highest weight crystal of type A_3 of highest weight omega_1
super_categories()[source]

EXAMPLES:

sage: ClassicalCrystals().super_categories()
[Category of regular crystals,
 Category of finite crystals,
 Category of highest weight crystals]
>>> from sage.all import *
>>> ClassicalCrystals().super_categories()
[Category of regular crystals,
 Category of finite crystals,
 Category of highest weight crystals]