Elementary crystals¶
Note
Each of these crystals will work with any Cartan matrix input (with weights from the weight lattice corresponding to the Cartan matrix given).
T-crystal¶
Let
The crystal
sage: B = crystals.Tableaux(['A',2],shape=[2,1])
sage: T = crystals.elementary.T(['A',2], B.Lambda()[1] + B.Lambda()[2])
sage: V = crystals.TensorProduct(T,B)
sage: for x in V:
....: print(x.weight())
....:
(4, 2, 0)
(3, 3, 0)
(3, 2, 1)
(3, 1, 2)
(2, 2, 2)
(4, 1, 1)
(3, 2, 1)
(2, 3, 1)
sage: for x in B:
....: print(x.weight() + T[0].weight())
....:
(4, 2, 0)
(3, 3, 0)
(3, 2, 1)
(3, 1, 2)
(2, 2, 2)
(4, 1, 1)
(3, 2, 1)
(2, 3, 1)
>>> from sage.all import *
>>> B = crystals.Tableaux(['A',Integer(2)],shape=[Integer(2),Integer(1)])
>>> T = crystals.elementary.T(['A',Integer(2)], B.Lambda()[Integer(1)] + B.Lambda()[Integer(2)])
>>> V = crystals.TensorProduct(T,B)
>>> for x in V:
... print(x.weight())
....:
(4, 2, 0)
(3, 3, 0)
(3, 2, 1)
(3, 1, 2)
(2, 2, 2)
(4, 1, 1)
(3, 2, 1)
(2, 3, 1)
>>> for x in B:
... print(x.weight() + T[Integer(0)].weight())
....:
(4, 2, 0)
(3, 3, 0)
(3, 2, 1)
(3, 1, 2)
(2, 2, 2)
(4, 1, 1)
(3, 2, 1)
(2, 3, 1)
B = crystals.Tableaux(['A',2],shape=[2,1]) T = crystals.elementary.T(['A',2], B.Lambda()[1] + B.Lambda()[2]) V = crystals.TensorProduct(T,B) for x in V: print(x.weight()) for x in B: print(x.weight() + T[0].weight())
Warning
Sage uses the opposite convention for the tensor product rule to Kashiwara’s definition, so care must be taken when comparing the examples here with Kashiwara’s papers.
Here is an example using a hyperbolic Cartan matrix:
sage: A = CartanMatrix([[2,-4],[-4,2]])
sage: La = RootSystem(A).weight_lattice().fundamental_weights()
sage: La
Finite family {0: Lambda[0], 1: Lambda[1]}
sage: T = crystals.elementary.T(A,La[1])
sage: T
The T crystal of type [ 2 -4]
[-4 2] and weight Lambda[1]
>>> from sage.all import *
>>> A = CartanMatrix([[Integer(2),-Integer(4)],[-Integer(4),Integer(2)]])
>>> La = RootSystem(A).weight_lattice().fundamental_weights()
>>> La
Finite family {0: Lambda[0], 1: Lambda[1]}
>>> T = crystals.elementary.T(A,La[Integer(1)])
>>> T
The T crystal of type [ 2 -4]
[-4 2] and weight Lambda[1]
A = CartanMatrix([[2,-4],[-4,2]]) La = RootSystem(A).weight_lattice().fundamental_weights() La T = crystals.elementary.T(A,La[1]) T
C-crystal¶
Defined in [Kashiwara1993], the component crystal
Note
The crystal
sage: P = RootSystem("C2").weight_lattice()
sage: La = P.fundamental_weights()
sage: h = P.simple_coroots()
sage: T = crystals.elementary.T("C2", 2*La[1])
sage: C = crystals.elementary.Component(P)
sage: B = crystals.TensorProduct(C,T)
sage: b = B(C[0],T[0])
sage: for i in B.index_set(): print(b.epsilon(i))
-2
0
sage: for i in B.index_set(): print(b.phi(i))
0
0
sage: for i in B.index_set(): print(b.f(i))
None
None
sage: for i in B.index_set(): print(b.e(i))
None
None
>>> from sage.all import *
>>> P = RootSystem("C2").weight_lattice()
>>> La = P.fundamental_weights()
>>> h = P.simple_coroots()
>>> T = crystals.elementary.T("C2", Integer(2)*La[Integer(1)])
>>> C = crystals.elementary.Component(P)
>>> B = crystals.TensorProduct(C,T)
>>> b = B(C[Integer(0)],T[Integer(0)])
>>> for i in B.index_set(): print(b.epsilon(i))
-2
0
>>> for i in B.index_set(): print(b.phi(i))
0
0
>>> for i in B.index_set(): print(b.f(i))
None
None
>>> for i in B.index_set(): print(b.e(i))
None
None
P = RootSystem("C2").weight_lattice() La = P.fundamental_weights() h = P.simple_coroots() T = crystals.elementary.T("C2", 2*La[1]) C = crystals.elementary.Component(P) B = crystals.TensorProduct(C,T) b = B(C[0],T[0]) for i in B.index_set(): print(b.epsilon(i)) for i in B.index_set(): print(b.phi(i)) for i in B.index_set(): print(b.f(i)) for i in B.index_set(): print(b.e(i))
This new crystal can be summarized into the R-crystal below.
R-crystal¶
For a fixed weight
where
Tensoring
Warning
Sage uses the opposite convention for the tensor product rule to Kashiwara’s definition, so care must be taken when comparing the examples here with some of the literature.
For example, suppose
sage: La = RootSystem(['B',4]).weight_lattice().fundamental_weights()
sage: Bla = crystals.NakajimaMonomials(['B',4], La[1]+La[2])
sage: Bmu = crystals.NakajimaMonomials(['B',4], La[1])
sage: R = crystals.elementary.R(['B',4], -La[2])
sage: T = crystals.TensorProduct(R,Bla)
sage: mg = mg = T(R[0], Bla.module_generators[0])
sage: S = T.subcrystal(generators=[mg])
sage: G = T.digraph(subset=S)
sage: Bmu.digraph().is_isomorphic(G, edge_labels=True)
True
sage: view(G, tightpage=True) # optional - dot2tex graphviz, not tested (opens external window)
>>> from sage.all import *
>>> La = RootSystem(['B',Integer(4)]).weight_lattice().fundamental_weights()
>>> Bla = crystals.NakajimaMonomials(['B',Integer(4)], La[Integer(1)]+La[Integer(2)])
>>> Bmu = crystals.NakajimaMonomials(['B',Integer(4)], La[Integer(1)])
>>> R = crystals.elementary.R(['B',Integer(4)], -La[Integer(2)])
>>> T = crystals.TensorProduct(R,Bla)
>>> mg = mg = T(R[Integer(0)], Bla.module_generators[Integer(0)])
>>> S = T.subcrystal(generators=[mg])
>>> G = T.digraph(subset=S)
>>> Bmu.digraph().is_isomorphic(G, edge_labels=True)
True
>>> view(G, tightpage=True) # optional - dot2tex graphviz, not tested (opens external window)
La = RootSystem(['B',4]).weight_lattice().fundamental_weights() Bla = crystals.NakajimaMonomials(['B',4], La[1]+La[2]) Bmu = crystals.NakajimaMonomials(['B',4], La[1]) R = crystals.elementary.R(['B',4], -La[2]) T = crystals.TensorProduct(R,Bla) mg = mg = T(R[0], Bla.module_generators[0]) S = T.subcrystal(generators=[mg]) G = T.digraph(subset=S) Bmu.digraph().is_isomorphic(G, edge_labels=True) view(G, tightpage=True) # optional - dot2tex graphviz, not tested (opens external window)

-th elementary crystal¶
For
where the crystal structure is given by
See [Kashiwara1993] or [Kashiwara1995] for more information. Here is an example:
sage: B = crystals.elementary.Elementary("A2",1)
sage: S = B.subcrystal(max_depth=4, generators=[B(0)])
sage: sorted(s for s in S)
[-4, -3, -2, -1, 0, 1, 2, 3, 4]
sage: G = B.digraph(subset=S)
sage: view(G, tightpage=True) # optional - dot2tex graphviz, not tested (opens external window)
>>> from sage.all import *
>>> B = crystals.elementary.Elementary("A2",Integer(1))
>>> S = B.subcrystal(max_depth=Integer(4), generators=[B(Integer(0))])
>>> sorted(s for s in S)
[-4, -3, -2, -1, 0, 1, 2, 3, 4]
>>> G = B.digraph(subset=S)
>>> view(G, tightpage=True) # optional - dot2tex graphviz, not tested (opens external window)
B = crystals.elementary.Elementary("A2",1) S = B.subcrystal(max_depth=4, generators=[B(0)]) sorted(s for s in S) G = B.digraph(subset=S) view(G, tightpage=True) # optional - dot2tex graphviz, not tested (opens external window)

Warning
To reiterate, Sage uses the opposite convention for the tensor product rule
to Kashiwara’s definition. In particular, using Sage’s convention, one has