Let be a partition. The Young diagram of
is the
array of boxes having
boxes in the
-th row, left
adjusted. Thus if
the diagram is:
A semi-standard Young tableau of shape is a filling of the
box by integers in which the rows are weakly increasing and the
columns are strictly increasing. Thus
is a semistandard Young tableau. Sage has a Tableau class, and you may create this tableau as follows:
sage: T = Tableau([[1,2,2], [2,3]]); T
[[1, 2, 2], [2, 3]]
A partition of length is a dominant weight for
according to the description of the ambient
space in Standard realizations of the ambient spaces. Therefore it corresponds to an
irreducible representation
of
.
It is true that not every dominant weight is a partition,
since a dominant weight might have some values
negative. The dominant weight
is a partition if and only if
the character of
is a polynomial as a function on the space
. Thus for example
with
, which is a dominant weight but not
a partition, and the character is not a polynomial function on
.
Theorem (Littlewood) If is a partition, then the number
of Semi-Standard Young Tableaux with shape
and entries in
is the dimension of
.
For example, if and
, then we find 15
tableaux with shape
and entries in
:
This is consistent with the theorem since the dimension of the
irreducible representation of with highest weight
has dimension 15:
sage: A2 = WeylCharacterRing("A2")
sage: A2(3,2,0).degree()
15
In fact we may obtain the character of the representation from the set
of tableaux. Indeed, one of the definitions of the Schur polynomial
(due to Littlewood) is the following combinatorial one. If is a
tableaux, define the weight of
to be
where
is the number of
‘s
in the tableaux. Then the multiplicity of
in the character
is the number of tableaux of weight
. Thus if
, we have
where the sum is over all semi-standard Young tableaux of shape
that have entries in
.
Frobenius-Schur duality is a relationship between the representation theories of the symmetric group and general linear group. We will relate this to tableaux in the next section.
Representations of the symmetric group are parametrized by
partitions
of
. The parametrization may be characterized
as follows. Let
be any integer
. Then both
and
act on
where
. Indeed,
acts on each
and
permutes them. Then if
is the representation of
with highest weight vector
and
is the irreducible representation of
parametrized by
then
as bimodules for the two groups. This is Frobenius-Schur duality and
it serves to characterize the parametrization of the irreducible
representations of by partitions of
.
In both the representation theory of and the representation
theory of
, the degrees of irreducible representations can be
expressed in terms of the number of tableaux of the appropriate
type. We have already stated the theorem for
. For
,
it goes as follows.
Let us say that a semistandard Young tableau of shape
is
standard if
contains each entry
exactly once.
Thus both rows and columns are strictly increasing.
Theorem (Young, 1927) The degree of is the number of
standard tableaux of shape
.
Now let us consider the implications of Frobenius-Schur duality.
The dimension of is
. Therefore
is equal
to the number of pairs
of tableaux of the same shape
, where the first tableaux is standard (in the
alphabet
), and the second the second semistandard (in the
alphabet
).
The last purely combinatorial statement has a combinatorial proof, based on the Robinson-Schensted-Knuth (RSK) correspondence.
References:
The RSK correspondence gives bijections between pairs of tableaux of various types and combinatorial objects of different types. We will not review the correspondence in detail here, but see the references. We note that Schensted insertion is implemented as the method schensted_insertion of Tableau class in Sage.
Thus we have the following bijections:
The second of these four bijection gives a combinatorial proof of
the fact explained above, that the number of pairs of tableaux of
the same shape
, where the first tableaux is standard (in the
alphabet
), and the second the second semistandard (in the
alphabet
). So this second bijection is a combinatorial
analog of Frobenius-Schur duality.
The four combinatorial bijections (variants of RSK) cited above have the following analogs in representation theory.
Both the combinatorial fact and the decomposition of
show that the number of pairs of standard tableaux of size
and
the same shape equals
.
Taking traces gives the Cauchy identity:
where are the eigenvalues of
and
are the eigenvalues of
. The sum
is over all partitions
.
Taking traces gives the dual Cauchy identity:
Again the sum is over partitions and here
is the conjugate partition.
The theory of quantum groups interpolates between the representation
theoretic picture and the combinatorial picture, and thereby explains
these analogies. The representation is
reinterpreted as a module for the quantized enveloping algebra
, and the representation
is reinterpreted as a module for the Iwahori
Hecke algebra. Then Frobenius-Schur duality persists. See
[Jimbo1986]. When
, we recover the representation
story. When
, we recover the combinatorial story.
References:
Kashiwara considered the highest weight modules of quantized
enveloping algebras in the limit when
. The enveloping algebra cannot be defined when
, but
a limiting structure can still be detected. This is the
crystal basis of the module.
Kashiwara’s crystal bases have a combinatorial structure that sheds light even on purely combinatorial constructions on tableaux that predated quantum groups. It gives a good generalization to other Cartan types.
We will not make the most general definition of a crystal. See the
references for a more general definition. Let be the weight
lattice of a classical Cartan type.
We now define a crystal of type . Let
be a set,
and let
be an auxiliary element. For each index
we assume there given maps
, maps
and a
map
satisfying
certain assumptions, which we now describe. It is assumed that if
then
if and only if
. In this case, it is assumed that
Moreover, we assume that
for all .
Assumption (Regularity) We will assume that is
the number of times that
may applied to
, and that
is the number of times that
may be applied. That is,
and
.
This regularity assumption is not made by Kashiwara, but it is
satisfied by the crystals that we are concerned with here. Kashiwara
also allows and
to take the value
.
Given the crystal , the character
is:
Given any highest weight , constructions of Kashiwara and
Nakashima, Littelmann and others produce a crystal
such that
, where
is
the irreducible character with highest weight
, as in
Representations and characters.
The crystal is not uniquely characterized by the
properties that we have stated so far. For Cartan types A, D, E it may
be characterized by these properties together with certain other
Stembridge axioms. We will take it for granted that there is a
unique “correct” crystal
and discuss how these
are constructed in Sage.
Before giving examples of crystals, we digress to help you install dot2tex, which you will need in order to make latex images of crystals.
dot2tex is an optional package of sage and the latest version can be installed via:
sage -i dot2tex
For type , Kashiwara and Nakashima put a crystal structure on the
set of tableaux with shape
in
, and this is a
realization of
. Moreover, this construction
extends to other Cartan types, as we will explain. At the moment, we
will consider how to draw pictures of these crystals.
Once you have dot2tex installed, you may make images pictures of crystals with a command such as this:
sage: CrystalOfTableaux("A2", shape=[2,1]).latex_file("/tmp/a2rho.tex") # optional - dot2tex graphviz
Here . The crystal C is
. The character
will therefore
be the eight-dimensional irreducible character with this highest
weight. Then you may run pdflatex on the file a2rho.tex.
This can also be achieved without the detour of saving the latex file via:
sage: B = CrystalOfTableaux(['A',2], shape=[2,1])
sage: view(B, pdflatex=True, tightpage=True) # optional - dot2tex graphviz
This produces the crystal graph:
You may also wish to color the edges in different colors by specifying further latex options:
sage: B = CrystalOfTableaux(['A',2], shape=[2,1])
sage: G = B.digraph()
sage: G.set_latex_options(color_by_label = {1:"red", 2:"yellow"})
sage: view(G, pdflatex=True, tightpage=True) # optional - dot2tex graphviz
As you can see, the elements of this crystal are exactly the eight
tableaux of shape with entries in
. The
convention is that if
and
, or
equivalently
, then we draw an arrow from
. Thus
the highest weight tableau is the one with no incoming arrows. Indeed,
this is:
We recall that the weight of the tableau is where
is the number of
‘s in the tableau, so this tableau has
weight
, which indeed equals
.
Once the crystal is created, you have access to the ambient space and its methods through the method weight_lattice_realization():
sage: C = CrystalOfTableaux("A2", shape=[2,1])
sage: L = C.weight_lattice_realization(); L
Ambient space of the Root system of type ['A', 2]
sage: L.fundamental_weights()
Finite family {1: (1, 0, 0), 2: (1, 1, 0)}
The highest weight vector is available as follows:
sage: C = CrystalOfTableaux("A2", shape=[2,1])
sage: v = C.highest_weight_vector(); v
[[1, 1], [2]]
or more simply:
sage: C = CrystalOfTableaux("A2", shape=[2,1])
sage: C[0]
[[1, 1], [2]]
Now we may apply the operators and
to move around in the
crystal:
sage: C = CrystalOfTableaux("A2", shape=[2,1])
sage: v = C.highest_weight_vector()
sage: v.f(1)
[[1, 2], [2]]
sage: v.f(1).f(1)
sage: v.f(1).f(1) == None
True
sage: v.f(1).f(2)
[[1, 3], [2]]
sage: v.f(1).f(2).f(2)
[[1, 3], [3]]
sage: v.f(1).f(2).f(2).f(1)
[[2, 3], [3]]
sage: v.f(1).f(2).f(2).f(1) == v.f(2).f(1).f(1).f(2)
True
You can construct the character if you first make a Weyl character ring:
sage: A2 = WeylCharacterRing("A2")
sage: C = CrystalOfTableaux("A2", shape=[2,1])
sage: C.character(A2)
A2(2,1,0)
For each of the classical Cartan types there is a standard crystal
from which other crystals can be built
up by taking tensor products and extracting constituent irreducible
crystals. This procedure is sufficient for Cartan types
and
. For types
and
the standard crystal must be
supplemented with a spin crystal. See [KashiwaraNakashima1994] or
[HongKang2002] for further details.
Here is the standard crystal of type .
You may create the crystal, and work with it as follows:
sage: C=CrystalOfLetters("A6")
sage: v0=C.highest_weight_vector(); v0
1
sage: v0.f(1)
2
sage: v0.f(1).f(2)
3
sage: [v0.f(1).f(2).f(x) for x in [1..6]]
[None, None, 4, None, None, None]
sage: [v0.f(1).f(2).e(x) for x in [1..6]]
[None, 2, None, None, None, None]
Here is the standard crystal of type .
There is, additionally, a spin crystal for , corresponding to
the
-dimensional spin representation. We will not draw it, but
we will describe it. Its elements are vectors
, where each spin
.
If , then the effect of the operator
is to annihilate
unless
. If this is
so, then
is obtained from
by replacing
by
. If
, then
annihilates
unless
, in which case it
replaces
by
.
Create the Crystal of Spins as follows. The crystal elements are represented
in the signature representation listing the :
sage: C=CrystalOfSpins("B3")
sage: C.list()
[+++, ++-, +-+, -++, +--, -+-, --+, ---]
Here is the standard crystal of type .
Here is the standard crystal of type .
There are two spin crystals for type . Each consists of
with
, and the
number of spins either always even or always odd. We will not describe the
effect of the root operators
, but you are invited to create them
and play around with them to guess the rule:
sage: Cplus = CrystalOfSpinsPlus("D4")
sage: Cminus = CrystalOfSpinsMinus("D4")
It is also possible to construct the standard crystal for type
,
, and
. Here is the one for type
(corresponding
to the representation of degree 7):
The crystal of letters is a special case of the crystal of tableaux
in the sense that is isomorphic to
the crystal of tableaux whose highest weight
is the highest
weight vector of the standard representation. Thus compare:
sage: CrystalOfLetters("A3")
The crystal of letters for type ['A', 3]
sage: CrystalOfTableaux("A3", shape=[1])
The crystal of tableaux of type ['A', 3] and shape(s) [[1]]
These two crystals are different in implementation, but they are isomorphic, and in fact the second crystal is constructed from the first. We can test isomorphisms between crystals as follows:
sage: Cletter = CrystalOfLetters(['A',3])
sage: Ctableaux = CrystalOfTableaux(['A',3], shape = [1])
sage: Cletter.digraph().is_isomorphic(Ctableaux.digraph())
True
sage: Cletter.digraph().is_isomorphic(Ctableaux.digraph(), certify = True)
(True, {1: [[1]], 2: [[2]], 3: [[3]], 4: [[4]]})
where in the last step the explicit map between the vertices of the crystals is given.
Crystals of letters have a special role in the theory since they are particularly simple, yet as Kashiwara and Nakashima showed, the crystals of tableaux can be created from them. We will review how this works.
Kashiwara defined the tensor product of crystals in a purely
combinatorial way. The beauty of this construction is that it exactly
parallels the tensor product of crystals of representations. That is,
if and
are dominant weights, then
is a (usually
disconnected) crystal which may contain multiple copies of
(for another dominant weight
) but the number
of copies of
is exactly the multiplicity of
in
.
We will describe two conventions for the tensor product of crystals. These conventions would have to be modified slightly without the regularity assumption.
As a set, the tensor product of
crystals
and
is the Cartesian product, but
we denote the ordered pair
with
and
by
. We define
. We define
and
It is understood that . We also define:
As a set, the tensor product of
crystals
and
is the Cartesian product, but
we denote the ordered pair
with
and
by
. We define
. We define
and
It is understood that . We also define
The tensor product is associative:
is an
isomorphism
,
and so we may consider tensor products of arbitrary numbers of crystals.
The relationship between the two definitions is simply that the
Kashiwara tensor product is the
alternate tensor product
in reverse
order. Sage uses the alternative tensor product. Even though the
tensor product construction is a priori asymmetrical, both
constructions produce isomorphic crystals, and in particular Sage’s
crystals of tableaux are identical to Kashiwara’s.
You may construct the tensor product of several crystals in Sage using TensorProductOfCrystals:
sage: C = CrystalOfLetters("A2")
sage: T = TensorProductOfCrystals(C,C,C); T
Full tensor product of the crystals [The crystal of letters for type ['A', 2],
The crystal of letters for type ['A', 2], The crystal of letters for type ['A', 2]]
sage: T.cardinality()
27
sage: T.highest_weight_vectors()
[[1, 1, 1], [1, 2, 1], [2, 1, 1], [3, 2, 1]]
This crystal has four highest weight vectors. We may understand this as follows:
sage: A2 = WeylCharacterRing("A2")
sage: C = CrystalOfLetters("A2")
sage: T = TensorProductOfCrystals(C,C,C)
sage: chi_C = C.character(A2)
sage: chi_T = T.character(A2)
sage: chi_C
A2(1,0,0)
sage: chi_T
A2(1,1,1) + 2*A2(2,1,0) + A2(3,0,0)
sage: chi_T == chi_C^3
True
As expected, the character of T is the cube of the character of
C, and representations with highest weight ,
and
. This decomposition is predicted by Frobenius-Schur
duality: the multiplicity of
in
is the degree of
.
It is useful to be able to select one irreducible constitutent of T. If we only want one of the irreducible constituents of T, we can specify a list of highest weight vectors by the option generators. If the list has only one element, then we get an irreducible crystal. We can make four such crystals:
sage: A2 = WeylCharacterRing("A2")
sage: C = CrystalOfLetters("A2")
sage: T = TensorProductOfCrystals(C,C,C)
sage: [T1,T2,T3,T4] = \
[TensorProductOfCrystals(C,C,C,generators=[v]) for v in T.highest_weight_vectors()]
sage: [B.cardinality() for B in [T1,T2,T3,T4]]
[10, 8, 8, 1]
sage: [B.character(A2) for B in [T1,T2,T3,T4]]
[A2(3,0,0), A2(2,1,0), A2(2,1,0), A2(1,1,1)]
We see that two of these crystals are isomorphic, with character A2(2,1,0). Try:
sage: A2 = WeylCharacterRing("A2")
sage: C = CrystalOfLetters("A2")
sage: T = TensorProductOfCrystals(C,C,C)
sage: [T1,T2,T3,T4] = \
[TensorProductOfCrystals(C,C,C,generators=[v]) for v in T.highest_weight_vectors()]
sage: T1.plot()
sage: T2.plot()
sage: T3.plot()
sage: T4.plot()
Elements of TensorProductOfCrystals(A,B,C, ...) are represented by
sequences [a,b,c, ...] with a in A, b in B, etc.
This of course represents .
Sage implements the CrystalOfTableaux as a subcrystal of a tensor product of the CrystalOfLetters. You can see how its done as follows:
sage: T = CrystalOfTableaux("A4",shape=[3,2])
sage: v = T.highest_weight_vector().f(1).f(2).f(3).f(2).f(1).f(4).f(2).f(3); v
[[1, 2, 5], [3, 4]]
sage: v._list
[3, 1, 4, 2, 5]
We’ve looked at the internal representation of , where it is
represented as an element of the fourth tensor power of the
CrystalOfLetters. We see that the tableau:
is interpreted as the tensor:
The elements of the tableau are read from bottom to top and from left to right. This is the inverse middle-Eastern reading of the tableau. See Hong and Kang, loc. cit. for discussion of the readings of a tableau.
For the Cartan types ,
or
, CrystalOfTableaux are
capable of making any finite crystal. (For type
it is necessary
that the highest weight
be a partition.)
For Cartan types and
, there also exist spin representations.
The corresponding crystals are implemented as spin crystals.
For these types, CrystalOfTableaux also allows the input shape
to be half-integral if it is of height
. For example:
sage: C = CrystalOfTableaux(['B',2], shape = [3/2, 1/2])
sage: C.list()
[[++, [[1]]], [++, [[2]]], [++, [[0]]], [++, [[-2]]], [++, [[-1]]], [+-, [[-2]]],
[+-, [[-1]]], [-+, [[-1]]], [+-, [[1]]], [+-, [[2]]], [-+, [[2]]], [+-, [[0]]],
[-+, [[0]]], [-+, [[-2]]], [--, [[-2]]], [--, [[-1]]]]
Here the first list of and
gives a spin column that is discussed in more detail
in the next section and the second entry is a crystal of tableau element for
.
For type
, we have the additional feature that there are two types of spin
crystals. Hence in CrystalOfTableaux the
-th entry of
in this case
can also take negative values:
sage: C = CrystalOfTableaux(['D',3], shape = [1/2, 1/2,-1/2])
sage: C.list()
[[++-, []], [+-+, []], [-++, []], [---, []]]
For rank two Cartan types, we also have FastCrystals which gives a different fast implementation of these crystals:
sage: B = FastCrystal(['B',2], shape=[3/2,1/2]); B
The fast crystal for B2 with shape [3/2,1/2]
sage: v = B.highest_weight_vector(); v.weight()
(3/2, 1/2)
The spin crystal has highest weight . This is the
last fundamental weight. The irreducible representation with this
weight is the spin representation of degree
. Its crystal is
hand-coded in Sage:
sage: Cspin = CrystalOfSpins("B3"); Cspin
The crystal of spins for type ['B', 3]
sage: Cspin.cardinality()
8
The crystals with highest weight , where
is a half-integral weight,
are constructed as a tensor product of a spin column and the highest weight crystal
of the integer part of
. For example, suppose that
.
The corresponding irreducible character will have degree 112:
sage: B3 = WeylCharacterRing("B3")
sage: B3(3/2,3/2,1/2).degree()
112
So will have 112 elements. We can find it as a
subcrystal of Cspin
, where
:
sage: B3 = WeylCharacterRing("B3")
sage: B3(1,1,0)*B3(1/2,1/2,1/2)
B3(1/2,1/2,1/2) + B3(3/2,1/2,1/2) + B3(3/2,3/2,1/2)
We see that just taking the tensor product of these two crystals will produce a reducible crystal with three constitutents, and we want to extract the one we want. We do that as follows:
sage: B3 = WeylCharacterRing("B3")
sage: C1 = CrystalOfTableaux("B3", shape=[1,1])
sage: Cspin = CrystalOfSpins("B3")
sage: C = TensorProductOfCrystals(C1, Cspin, generators=[[C1[0],Cspin[0]]])
sage: C.cardinality()
112
Alternatively, we can get this directly from CrystalOfTableaux:
sage: C = CrystalOfTableaux(['B',3], shape = [3/2,3/2,1/2])
sage: C.cardinality()
112
This is the desired crystal.
A similar situation pertains for type , but now there are two
spin crystals, both of degree
. These are hand-coded in sage:
sage: SpinPlus = CrystalOfSpinsPlus("D4")
sage: SpinMinus = CrystalOfSpinsMinus("D4")
sage: SpinPlus[0].weight()
(1/2, 1/2, 1/2, 1/2)
sage: SpinMinus[0].weight()
(1/2, 1/2, 1/2, -1/2)
sage: [C.cardinality() for C in [SpinPlus,SpinMinus]]
[8, 8]
Similarly to type B crystal, we obtain crystal with spin weight by allowing for partitions with half-integer values, and the last entry can be negative depending on the type of the spin.
Let be a Lie group and
a Levi subgroup. We have already seen
that the Dynkin diagram of
is obtained from that of
by erasing
one or more nodes.
If is a crystal for
, then we may obtain the
corresponding crystal for
by a similar process. For example if the
Dynkin diagram for
is obtained from the Dynkin diagram for
by
erasing the
-th node, then if we erase all the edges in the crystal
that are labeled with
, we obtain a crystal for
.