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:
R
– aWeylCharacterRing
(default: the defaultWeylCharacterRing
for this Cartan type)
Returns the character of
self
as an element ofR
.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\) (seesage.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 inputw
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.
- 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.
See also
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]