Direct Sum of Crystals#

class sage.combinat.crystals.direct_sum.DirectSumOfCrystals(crystals, facade, keepkey, category, **options)[source]#

Bases: DisjointUnionEnumeratedSets

Direct sum of crystals.

Given a list of crystals \(B_0, \ldots, B_k\) of the same Cartan type, one can form the direct sum \(B_0 \oplus \cdots \oplus B_k\).

INPUT:

  • crystals – a list of crystals of the same Cartan type

  • keepkey – a boolean

The option keepkey is by default set to False, assuming that the crystals are all distinct. In this case the elements of the direct sum are just represented by the elements in the crystals \(B_i\). If the crystals are not all distinct, one should set the keepkey option to True. In this case, the elements of the direct sum are represented as tuples \((i, b)\) where \(b \in B_i\).

EXAMPLES:

sage: C = crystals.Letters(['A',2])
sage: C1 = crystals.Tableaux(['A',2],shape=[1,1])
sage: B = crystals.DirectSum([C,C1])
sage: B.list()
[1, 2, 3, [[1], [2]], [[1], [3]], [[2], [3]]]
sage: [b.f(1) for b in B]
[2, None, None, None, [[2], [3]], None]
sage: B.module_generators
(1, [[1], [2]])
>>> from sage.all import *
>>> C = crystals.Letters(['A',Integer(2)])
>>> C1 = crystals.Tableaux(['A',Integer(2)],shape=[Integer(1),Integer(1)])
>>> B = crystals.DirectSum([C,C1])
>>> B.list()
[1, 2, 3, [[1], [2]], [[1], [3]], [[2], [3]]]
>>> [b.f(Integer(1)) for b in B]
[2, None, None, None, [[2], [3]], None]
>>> B.module_generators
(1, [[1], [2]])
sage: B = crystals.DirectSum([C,C], keepkey=True)
sage: B.list()
[(0, 1), (0, 2), (0, 3), (1, 1), (1, 2), (1, 3)]
sage: B.module_generators
((0, 1), (1, 1))
sage: b = B( tuple([0,C(1)]) )
sage: b
(0, 1)
sage: b.weight()
(1, 0, 0)
>>> from sage.all import *
>>> B = crystals.DirectSum([C,C], keepkey=True)
>>> B.list()
[(0, 1), (0, 2), (0, 3), (1, 1), (1, 2), (1, 3)]
>>> B.module_generators
((0, 1), (1, 1))
>>> b = B( tuple([Integer(0),C(Integer(1))]) )
>>> b
(0, 1)
>>> b.weight()
(1, 0, 0)

The following is required, because DirectSumOfCrystals takes the same arguments as DisjointUnionEnumeratedSets (which see for details).

class Element[source]#

Bases: ElementWrapper

A class for elements of direct sums of crystals.

e(i)[source]#

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

EXAMPLES:

sage: C = crystals.Letters(['A',2])
sage: B = crystals.DirectSum([C,C], keepkey=True)
sage: [[b, b.e(2)] for b in B]
[[(0, 1), None], [(0, 2), None], [(0, 3), (0, 2)], [(1, 1), None], [(1, 2), None], [(1, 3), (1, 2)]]
>>> from sage.all import *
>>> C = crystals.Letters(['A',Integer(2)])
>>> B = crystals.DirectSum([C,C], keepkey=True)
>>> [[b, b.e(Integer(2))] for b in B]
[[(0, 1), None], [(0, 2), None], [(0, 3), (0, 2)], [(1, 1), None], [(1, 2), None], [(1, 3), (1, 2)]]
epsilon(i)[source]#

EXAMPLES:

sage: C = crystals.Letters(['A',2])
sage: B = crystals.DirectSum([C,C], keepkey=True)
sage: b = B( tuple([0,C(2)]) )
sage: b.epsilon(2)
0
>>> from sage.all import *
>>> C = crystals.Letters(['A',Integer(2)])
>>> B = crystals.DirectSum([C,C], keepkey=True)
>>> b = B( tuple([Integer(0),C(Integer(2))]) )
>>> b.epsilon(Integer(2))
0
f(i)[source]#

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

EXAMPLES:

sage: C = crystals.Letters(['A',2])
sage: B = crystals.DirectSum([C,C], keepkey=True)
sage: [[b,b.f(1)] for b in B]
[[(0, 1), (0, 2)], [(0, 2), None], [(0, 3), None], [(1, 1), (1, 2)], [(1, 2), None], [(1, 3), None]]
>>> from sage.all import *
>>> C = crystals.Letters(['A',Integer(2)])
>>> B = crystals.DirectSum([C,C], keepkey=True)
>>> [[b,b.f(Integer(1))] for b in B]
[[(0, 1), (0, 2)], [(0, 2), None], [(0, 3), None], [(1, 1), (1, 2)], [(1, 2), None], [(1, 3), None]]
phi(i)[source]#

EXAMPLES:

sage: C = crystals.Letters(['A',2])
sage: B = crystals.DirectSum([C,C], keepkey=True)
sage: b = B( tuple([0,C(2)]) )
sage: b.phi(2)
1
>>> from sage.all import *
>>> C = crystals.Letters(['A',Integer(2)])
>>> B = crystals.DirectSum([C,C], keepkey=True)
>>> b = B( tuple([Integer(0),C(Integer(2))]) )
>>> b.phi(Integer(2))
1
weight()[source]#

Return the weight of self.

EXAMPLES:

sage: C = crystals.Letters(['A',2])
sage: B = crystals.DirectSum([C,C], keepkey=True)
sage: b = B( tuple([0,C(2)]) )
sage: b
(0, 2)
sage: b.weight()
(0, 1, 0)
>>> from sage.all import *
>>> C = crystals.Letters(['A',Integer(2)])
>>> B = crystals.DirectSum([C,C], keepkey=True)
>>> b = B( tuple([Integer(0),C(Integer(2))]) )
>>> b
(0, 2)
>>> b.weight()
(0, 1, 0)
weight_lattice_realization()[source]#

Return the weight lattice realization used to express weights.

The weight lattice realization is the common parent which all weight lattice realizations of the crystals of self coerce into.

EXAMPLES:

sage: LaZ = RootSystem(['A',2,1]).weight_lattice(extended=True).fundamental_weights()
sage: LaQ = RootSystem(['A',2,1]).weight_space(extended=True).fundamental_weights()
sage: B = crystals.LSPaths(LaQ[1])
sage: B.weight_lattice_realization()
Extended weight space over the Rational Field of the Root system of type ['A', 2, 1]
sage: C = crystals.AlcovePaths(LaZ[1])
sage: C.weight_lattice_realization()
Extended weight lattice of the Root system of type ['A', 2, 1]
sage: D = crystals.DirectSum([B,C])
sage: D.weight_lattice_realization()
Extended weight space over the Rational Field of the Root system of type ['A', 2, 1]
>>> from sage.all import *
>>> LaZ = RootSystem(['A',Integer(2),Integer(1)]).weight_lattice(extended=True).fundamental_weights()
>>> LaQ = RootSystem(['A',Integer(2),Integer(1)]).weight_space(extended=True).fundamental_weights()
>>> B = crystals.LSPaths(LaQ[Integer(1)])
>>> B.weight_lattice_realization()
Extended weight space over the Rational Field of the Root system of type ['A', 2, 1]
>>> C = crystals.AlcovePaths(LaZ[Integer(1)])
>>> C.weight_lattice_realization()
Extended weight lattice of the Root system of type ['A', 2, 1]
>>> D = crystals.DirectSum([B,C])
>>> D.weight_lattice_realization()
Extended weight space over the Rational Field of the Root system of type ['A', 2, 1]