Crystals¶
-
class
sage.categories.crystals.
Crystals
(s=None)¶ Bases:
sage.categories.category_singleton.Category_singleton
The category of crystals.
See
sage.combinat.crystals.crystals
for an introduction to crystals.EXAMPLES:
sage: C = Crystals() sage: C Category of crystals sage: C.super_categories() [Category of... enumerated sets] sage: C.example() Highest weight crystal of type A_3 of highest weight omega_1
Parents in this category should implement the following methods:
- either an attribute
_cartan_type
or a methodcartan_type
module_generators
: a list (or container) of distinct elements which generate the crystal using
Furthermore, their elements
x
should implement the following methods:x.e(i)
(returning)
x.f(i)
(returning)
x.epsilon(i)
(returning)
x.phi(i)
(returning)
EXAMPLES:
sage: from sage.misc.abstract_method import abstract_methods_of_class sage: abstract_methods_of_class(Crystals().element_class) {'optional': [], 'required': ['e', 'epsilon', 'f', 'phi', 'weight']}
TESTS:
sage: TestSuite(C).run() sage: B = Crystals().example() sage: TestSuite(B).run(verbose = True) running ._test_an_element() . . . pass running ._test_cardinality() . . . pass running ._test_category() . . . pass running ._test_elements() . . . Running the test suite of self.an_element() running ._test_category() . . . pass running ._test_eq() . . . pass running ._test_not_implemented_methods() . . . pass running ._test_pickling() . . . pass running ._test_stembridge_local_axioms() . . . pass pass running ._test_elements_eq_reflexive() . . . pass running ._test_elements_eq_symmetric() . . . pass running ._test_elements_eq_transitive() . . . pass running ._test_elements_neq() . . . pass running ._test_enumerated_set_contains() . . . pass running ._test_enumerated_set_iter_cardinality() . . . pass running ._test_enumerated_set_iter_list() . . . pass running ._test_eq() . . . pass running ._test_fast_iter() . . . pass running ._test_not_implemented_methods() . . . pass running ._test_pickling() . . . pass running ._test_some_elements() . . . pass running ._test_stembridge_local_axioms() . . . pass
-
class
ElementMethods
¶ -
Epsilon
()¶ EXAMPLES:
sage: C = crystals.Letters(['A',5]) sage: C(0).Epsilon() (0, 0, 0, 0, 0, 0) sage: C(1).Epsilon() (0, 0, 0, 0, 0, 0) sage: C(2).Epsilon() (1, 0, 0, 0, 0, 0)
-
Phi
()¶ EXAMPLES:
sage: C = crystals.Letters(['A',5]) sage: C(0).Phi() (0, 0, 0, 0, 0, 0) sage: C(1).Phi() (1, 0, 0, 0, 0, 0) sage: C(2).Phi() (1, 1, 0, 0, 0, 0)
-
all_paths_to_highest_weight
(index_set=None)¶ Iterate over all paths to the highest weight from
self
with respect to.
INPUT:
index_set
– (optional) a subset of the index set ofself
EXAMPLES:
sage: B = crystals.infinity.Tableaux("A2") sage: b0 = B.highest_weight_vector() sage: b = b0.f_string([1, 2, 1, 2]) sage: L = b.all_paths_to_highest_weight() sage: list(L) [[2, 1, 2, 1], [2, 2, 1, 1]] sage: Y = crystals.infinity.GeneralizedYoungWalls(3) sage: y0 = Y.highest_weight_vector() sage: y = y0.f_string([0, 1, 2, 3, 2, 1, 0]) sage: list(y.all_paths_to_highest_weight()) [[0, 1, 2, 3, 2, 1, 0], [0, 1, 3, 2, 2, 1, 0], [0, 3, 1, 2, 2, 1, 0], [0, 3, 2, 1, 1, 0, 2], [0, 3, 2, 1, 1, 2, 0]] sage: B = crystals.Tableaux("A3", shape=[4,2,1]) sage: b0 = B.highest_weight_vector() sage: b = b0.f_string([1, 1, 2, 3]) sage: list(b.all_paths_to_highest_weight()) [[1, 3, 2, 1], [3, 1, 2, 1], [3, 2, 1, 1]]
-
cartan_type
()¶ Returns the Cartan type associated to
self
EXAMPLES:
sage: C = crystals.Letters(['A', 5]) sage: C(1).cartan_type() ['A', 5]
-
e
(i)¶ Returns
if it exists or
None
otherwise.This method should be implemented by the element class of the crystal.
EXAMPLES:
sage: C = Crystals().example(5) sage: x = C[2]; x 3 sage: x.e(1), x.e(2), x.e(3) (None, 2, None)
-
e_string
(list)¶ Applies
to self for
EXAMPLES:
sage: C = crystals.Letters(['A',3]) sage: b = C(3) sage: b.e_string([2,1]) 1 sage: b.e_string([1,2])
-
epsilon
(i)¶ EXAMPLES:
sage: C = crystals.Letters(['A',5]) sage: C(1).epsilon(1) 0 sage: C(2).epsilon(1) 1
-
f
(i)¶ Returns
if it exists or
None
otherwise.This method should be implemented by the element class of the crystal.
EXAMPLES:
sage: C = Crystals().example(5) sage: x = C[1]; x 2 sage: x.f(1), x.f(2), x.f(3) (None, 3, None)
-
f_string
(list)¶ Applies
to self for
EXAMPLES:
sage: C = crystals.Letters(['A',3]) sage: b = C(1) sage: b.f_string([1,2]) 3 sage: b.f_string([2,1])
-
index_set
()¶ EXAMPLES:
sage: C = crystals.Letters(['A',5]) sage: C(1).index_set() (1, 2, 3, 4, 5)
-
is_highest_weight
(index_set=None)¶ Returns
True
ifself
is a highest weight. Specifying the optionindex_set
to be a subsetof the index set of the underlying crystal, finds all highest weight vectors for arrows in
.
EXAMPLES:
sage: C = crystals.Letters(['A',5]) sage: C(1).is_highest_weight() True sage: C(2).is_highest_weight() False sage: C(2).is_highest_weight(index_set = [2,3,4,5]) True
-
is_lowest_weight
(index_set=None)¶ Returns
True
ifself
is a lowest weight. Specifying the optionindex_set
to be a subsetof the index set of the underlying crystal, finds all lowest weight vectors for arrows in
.
EXAMPLES:
sage: C = crystals.Letters(['A',5]) sage: C(1).is_lowest_weight() False sage: C(6).is_lowest_weight() True sage: C(4).is_lowest_weight(index_set = [1,3]) True
-
phi
(i)¶ EXAMPLES:
sage: C = crystals.Letters(['A',5]) sage: C(1).phi(1) 1 sage: C(2).phi(1) 0
-
phi_minus_epsilon
(i)¶ Return
of
self
.There are sometimes better implementations using the weight for this. It is used for reflections along a string.
EXAMPLES:
sage: C = crystals.Letters(['A',5]) sage: C(1).phi_minus_epsilon(1) 1
-
s
(i)¶ Returns the reflection of
self
along its-string
EXAMPLES:
sage: C = crystals.Tableaux(['A',2], shape=[2,1]) sage: b=C(rows=[[1,1],[3]]) sage: b.s(1) [[2, 2], [3]] sage: b=C(rows=[[1,2],[3]]) sage: b.s(2) [[1, 2], [3]] sage: T=crystals.Tableaux(['A',2],shape=[4]) sage: t=T(rows=[[1,2,2,2]]) sage: t.s(1) [[1, 1, 1, 2]]
-
subcrystal
(index_set=None, max_depth=inf, direction='both')¶ Construct the subcrystal generated by
self
usingand/or
for all
in
index_set
.INPUT:
index_set
– (Default:None
) The index set; ifNone
then use the index set of the crystalmax_depth
– (Default: infinity) The maximum depth to builddirection
– (Default:'both'
) The direction to build the subcrystal. It can be one of the following:'both'
- Using bothand
'upper'
- Using'lower'
- Using
See also
EXAMPLES:
sage: C = crystals.KirillovReshetikhin(['A',3,1], 1, 2) sage: elt = C(1,4) sage: list(elt.subcrystal(index_set=[1,3])) [[[1, 4]], [[2, 4]], [[1, 3]], [[2, 3]]] sage: list(elt.subcrystal(index_set=[1,3], max_depth=1)) [[[1, 4]], [[2, 4]], [[1, 3]]] sage: list(elt.subcrystal(index_set=[1,3], direction='upper')) [[[1, 4]], [[1, 3]]] sage: list(elt.subcrystal(index_set=[1,3], direction='lower')) [[[1, 4]], [[2, 4]]]
-
to_highest_weight
(index_set=None)¶ Return the highest weight element
and a list
such that
, where
are elements in
. By default the index set is assumed to be the full index set of self.
EXAMPLES:
sage: T = crystals.Tableaux(['A',3], shape = [1]) sage: t = T(rows = [[3]]) sage: t.to_highest_weight() [[[1]], [2, 1]] sage: T = crystals.Tableaux(['A',3], shape = [2,1]) sage: t = T(rows = [[1,2],[4]]) sage: t.to_highest_weight() [[[1, 1], [2]], [1, 3, 2]] sage: t.to_highest_weight(index_set = [3]) [[[1, 2], [3]], [3]] sage: K = crystals.KirillovReshetikhin(['A',3,1],2,1) sage: t = K(rows=[[2],[3]]); t.to_highest_weight(index_set=[1]) [[[1], [3]], [1]] sage: t.to_highest_weight() Traceback (most recent call last): ... ValueError: This is not a highest weight crystals!
-
to_lowest_weight
(index_set=None)¶ Return the lowest weight element
and a list
such that
, where
are elements in
. By default the index set is assumed to be the full index set of self.
EXAMPLES:
sage: T = crystals.Tableaux(['A',3], shape = [1]) sage: t = T(rows = [[3]]) sage: t.to_lowest_weight() [[[4]], [3]] sage: T = crystals.Tableaux(['A',3], shape = [2,1]) sage: t = T(rows = [[1,2],[4]]) sage: t.to_lowest_weight() [[[3, 4], [4]], [1, 2, 2, 3]] sage: t.to_lowest_weight(index_set = [3]) [[[1, 2], [4]], []] sage: K = crystals.KirillovReshetikhin(['A',3,1],2,1) sage: t = K.module_generator(); t [[1], [2]] sage: t.to_lowest_weight(index_set=[1,2,3]) [[[3], [4]], [2, 1, 3, 2]] sage: t.to_lowest_weight() Traceback (most recent call last): ... ValueError: This is not a highest weight crystals!
-
weight
()¶ Return the weight of this crystal element.
This method should be implemented by the element class of the crystal.
EXAMPLES:
sage: C = crystals.Letters(['A',5]) sage: C(1).weight() (1, 0, 0, 0, 0, 0)
-
-
Crystals.
Finite
¶ alias of
FiniteCrystals
-
class
Crystals.
ParentMethods
¶ -
Lambda
()¶ Returns the fundamental weights in the weight lattice realization for the root system associated with the crystal
EXAMPLES:
sage: C = crystals.Letters(['A', 5]) sage: C.Lambda() Finite family {1: (1, 0, 0, 0, 0, 0), 2: (1, 1, 0, 0, 0, 0), 3: (1, 1, 1, 0, 0, 0), 4: (1, 1, 1, 1, 0, 0), 5: (1, 1, 1, 1, 1, 0)}
-
an_element
()¶ Returns an element of
self
sage: C = crystals.Letters([‘A’, 5]) sage: C.an_element() 1
-
cartan_type
()¶ Returns the Cartan type of the crystal
EXAMPLES:
sage: C = crystals.Letters(['A',2]) sage: C.cartan_type() ['A', 2]
-
crystal_morphism
(g, index_set=None, automorphism=<function <lambda> at 0x7fd6bf3c5ed8>, direction='down', direction_image='down', similarity_factor=None, similarity_factor_domain=None, cached=False, acyclic=True)¶ Constructs a morphism from the crystal
self
to another crystal. The inputcan either be a function of a (sub)set of elements of self to element in another crystal or a dictionary between certain elements. Usually one would map highest weight elements or crystal generators to each other using g. Specifying index_set gives the opportunity to define the morphism as
-crystals where
index_set. If index_set is not specified, the index set of self is used. It is also possible to define twisted-morphisms by specifying an automorphism on the nodes in te Dynkin diagram (or the index_set). The option direction and direction_image indicate whether to use
or
in self or the image crystal to construct the morphism, depending on whether the direction is set to ‘down’ or ‘up’. It is also possible to set a similarity_factor. This should be a dictionary between the elements in the index set and positive integers. The crystal operator
then gets mapped to
where
similarity_factor[i]. Setting similarity_factor_domain to a dictionary between the index set and positive integers has the effect that
gets mapped to
where
similarity_factor_domain[i]. Finally, it is possible to set the option
. This calculates an isomorphism for cyclic crystals (for example finite affine crystals). In this case the input function
is supposed to be given as a dictionary.
EXAMPLES:
sage: C2 = crystals.Letters(['A',2]) sage: C3 = crystals.Letters(['A',3]) sage: g = {C2.module_generators[0] : C3.module_generators[0]} sage: g_full = C2.crystal_morphism(g) sage: g_full(C2(1)) 1 sage: g_full(C2(2)) 2 sage: g = {C2(1) : C2(3)} sage: g_full = C2.crystal_morphism(g, automorphism = lambda i : 3-i, direction_image = 'up') sage: [g_full(b) for b in C2] [3, 2, 1] sage: T = crystals.Tableaux(['A',2], shape = [2]) sage: g = {C2(1) : T(rows=[[1,1]])} sage: g_full = C2.crystal_morphism(g, similarity_factor = {1:2, 2:2}) sage: [g_full(b) for b in C2] [[[1, 1]], [[2, 2]], [[3, 3]]] sage: g = {T(rows=[[1,1]]) : C2(1)} sage: g_full = T.crystal_morphism(g, similarity_factor_domain = {1:2, 2:2}) sage: g_full(T(rows=[[2,2]])) 2 sage: B1 = crystals.KirillovReshetikhin(['A',2,1],1,1) sage: B2 = crystals.KirillovReshetikhin(['A',2,1],1,2) sage: T = crystals.TensorProduct(B1,B2) sage: T1 = crystals.TensorProduct(B2,B1) sage: La = T.weight_lattice_realization().fundamental_weights() sage: t = [b for b in T if b.weight() == -3*La[0] + 3*La[1]][0] sage: t1 = [b for b in T1 if b.weight() == -3*La[0] + 3*La[1]][0] sage: g={t:t1} sage: f=T.crystal_morphism(g,acyclic = False) sage: [[b,f(b)] for b in T] [[[[[1]], [[1, 1]]], [[[1, 1]], [[1]]]], [[[[1]], [[1, 2]]], [[[1, 1]], [[2]]]], [[[[1]], [[2, 2]]], [[[1, 2]], [[2]]]], [[[[1]], [[1, 3]]], [[[1, 1]], [[3]]]], [[[[1]], [[2, 3]]], [[[1, 2]], [[3]]]], [[[[1]], [[3, 3]]], [[[1, 3]], [[3]]]], [[[[2]], [[1, 1]]], [[[1, 2]], [[1]]]], [[[[2]], [[1, 2]]], [[[2, 2]], [[1]]]], [[[[2]], [[2, 2]]], [[[2, 2]], [[2]]]], [[[[2]], [[1, 3]]], [[[2, 3]], [[1]]]], [[[[2]], [[2, 3]]], [[[2, 2]], [[3]]]], [[[[2]], [[3, 3]]], [[[2, 3]], [[3]]]], [[[[3]], [[1, 1]]], [[[1, 3]], [[1]]]], [[[[3]], [[1, 2]]], [[[1, 3]], [[2]]]], [[[[3]], [[2, 2]]], [[[2, 3]], [[2]]]], [[[[3]], [[1, 3]]], [[[3, 3]], [[1]]]], [[[[3]], [[2, 3]]], [[[3, 3]], [[2]]]], [[[[3]], [[3, 3]]], [[[3, 3]], [[3]]]]]
-
digraph
(subset=None, index_set=None)¶ Returns the DiGraph associated to
self
.INPUT:
subset
– (Optional) A subset of vertices for which the digraph should be constructedindex_set
– (Optional) The index set to draw arrows
EXAMPLES:
sage: C = Crystals().example(5) sage: C.digraph() Digraph on 6 vertices
The edges of the crystal graph are by default colored using blue for edge 1, red for edge 2, and green for edge 3:
sage: C = Crystals().example(3) sage: G = C.digraph() sage: view(G, pdflatex=True, tightpage=True) # optional - dot2tex graphviz, not tested (opens external window)
One may also overwrite the colors:
sage: C = Crystals().example(3) sage: G = C.digraph() sage: G.set_latex_options(color_by_label = {1:"red", 2:"purple", 3:"blue"}) sage: view(G, pdflatex=True, tightpage=True) # optional - dot2tex graphviz, not tested (opens external window)
Or one may add colors to yet unspecified edges:
sage: C = Crystals().example(4) sage: G = C.digraph() sage: C.cartan_type()._index_set_coloring[4]="purple" sage: view(G, pdflatex=True, tightpage=True) # optional - dot2tex graphviz, not tested (opens external window)
Here is an example of how to take the top part up to a given depth of an infinite dimensional crystal:
sage: C = CartanType(['C',2,1]) sage: La = C.root_system().weight_lattice().fundamental_weights() sage: T = crystals.HighestWeight(La[0]) sage: S = T.subcrystal(max_depth=3) sage: G = T.digraph(subset=S); G Digraph on 5 vertices sage: sorted(G.vertices(), key=str) [(-Lambda[0] + 2*Lambda[1] - delta,), (1/2*Lambda[0] + Lambda[1] - Lambda[2] - 1/2*delta, -1/2*Lambda[0] + Lambda[1] - 1/2*delta), (1/2*Lambda[0] - Lambda[1] + Lambda[2] - 1/2*delta, -1/2*Lambda[0] + Lambda[1] - 1/2*delta), (Lambda[0] - 2*Lambda[1] + 2*Lambda[2] - delta,), (Lambda[0],)]
Here is a way to construct a picture of a Demazure crystal using the
subset
option:sage: B = crystals.Tableaux(['A',2], shape=[2,1]) sage: C = CombinatorialFreeModule(QQ,B) sage: t = B.highest_weight_vector() sage: b = C(t) sage: D = B.demazure_operator(b,[2,1]); D B[[[1, 1], [2]]] + B[[[1, 2], [2]]] + B[[[1, 3], [2]]] + B[[[1, 1], [3]]] + B[[[1, 3], [3]]] sage: G = B.digraph(subset=D.support()) sage: G.vertices() [[[1, 1], [2]], [[1, 2], [2]], [[1, 3], [2]], [[1, 1], [3]], [[1, 3], [3]]] sage: view(G, pdflatex=True, tightpage=True) # optional - dot2tex graphviz, not tested (opens external window)
We can also choose to display particular arrows using the
index_set
option:sage: C = crystals.KirillovReshetikhin(['D',4,1], 2, 1) sage: G = C.digraph(index_set=[1,3]) sage: len(G.edges()) 20 sage: view(G, pdflatex=True, tightpage=True) # optional - dot2tex graphviz, not tested (opens external window)
TODO: add more tests
-
dot_tex
()¶ Returns a dot_tex string representation of
self
.EXAMPLES:
sage: C = crystals.Letters(['A',2]) sage: C.dot_tex() 'digraph G { \n node [ shape=plaintext ];\n N_0 [ label = " ", texlbl = "$1$" ];\n N_1 [ label = " ", texlbl = "$2$" ];\n N_2 [ label = " ", texlbl = "$3$" ];\n N_0 -> N_1 [ label = " ", texlbl = "1" ];\n N_1 -> N_2 [ label = " ", texlbl = "2" ];\n}'
-
index_set
()¶ Returns the index set of the Dynkin diagram underlying the crystal
EXAMPLES:
sage: C = crystals.Letters(['A', 5]) sage: C.index_set() (1, 2, 3, 4, 5)
-
latex
(**options)¶ Returns the crystal graph as a latex string. This can be exported to a file with self.latex_file(‘filename’).
EXAMPLES:
sage: T = crystals.Tableaux(['A',2],shape=[1]) sage: T._latex_() # optional - dot2tex graphviz '...tikzpicture...' sage: view(T, pdflatex = True, tightpage = True) # optional - dot2tex graphviz, not tested (opens external window)
One can for example also color the edges using the following options:
sage: T = crystals.Tableaux(['A',2],shape=[1]) sage: T._latex_(color_by_label = {0:"black", 1:"red", 2:"blue"}) #optional - dot2tex graphviz '...tikzpicture...'
-
latex_file
(filename)¶ Exports a file, suitable for pdflatex, to ‘filename’. This requires a proper installation of
dot2tex
in sage-python. For more information see the documentation forself.latex()
.EXAMPLES:
sage: C = crystals.Letters(['A', 5]) sage: C.latex_file('/tmp/test.tex') # optional - dot2tex graphviz
-
metapost
(filename, thicklines=False, labels=True, scaling_factor=1.0, tallness=1.0)¶ Use C.metapost(“filename.mp”,[options]), where options can be:
thicklines = True (for thicker edges) labels = False (to suppress labeling of the vertices) scaling_factor=value, where value is a floating point number, 1.0 by default. Increasing or decreasing the scaling factor changes the size of the image. tallness=1.0. Increasing makes the image taller without increasing the width.
Root operators e(1) or f(1) move along red lines, e(2) or f(2) along green. The highest weight is in the lower left. Vertices with the same weight are kept close together. The concise labels on the nodes are strings introduced by Berenstein and Zelevinsky and Littelmann; see Littelmann’s paper Cones, Crystals, Patterns, sections 5 and 6.
For Cartan types B2 or C2, the pattern has the form
a2 a3 a4 a1
where c*a2 = a3 = 2*a4 =0 and a1=0, with c=2 for B2, c=1 for C2. Applying e(2) a1 times, e(1) a2 times, e(2) a3 times, e(1) a4 times returns to the highest weight. (Observe that Littelmann writes the roots in opposite of the usual order, so our e(1) is his e(2) for these Cartan types.) For type A2, the pattern has the form
a3 a2 a1
where applying e(1) a1 times, e(2) a2 times then e(3) a1 times returns to the highest weight. These data determine the vertex and may be translated into a Gelfand-Tsetlin pattern or tableau.
EXAMPLES:
sage: C = crystals.Letters(['A', 2]) sage: C.metapost(tmp_filename())
sage: C = crystals.Letters(['A', 5]) sage: C.metapost(tmp_filename()) Traceback (most recent call last): ... NotImplementedError
-
plot
(**options)¶ Returns the plot of self as a directed graph.
EXAMPLES:
sage: C = crystals.Letters(['A', 5]) sage: print(C.plot()) Graphics object consisting of 17 graphics primitives
-
plot3d
(**options)¶ Returns the 3-dimensional plot of self as a directed graph.
EXAMPLES:
sage: C = crystals.KirillovReshetikhin(['A',3,1],2,1) sage: print(C.plot3d()) Graphics3d Object
-
subcrystal
(index_set=None, generators=None, max_depth=inf, direction='both')¶ Construct the subcrystal from
generators
usingand/or
for all
in
index_set
.INPUT:
index_set
– (Default:None
) The index set; ifNone
then use the index set of the crystalgenerators
– (Default:None
) The list of generators; ifNone
then use the module generators of the crystalmax_depth
– (Default: infinity) The maximum depth to builddirection
– (Default:'both'
) The direction to build the subcrystal. It can be one of the following:'both'
- Using bothand
'upper'
- Using'lower'
- Using
EXAMPLES:
sage: C = crystals.KirillovReshetikhin(['A',3,1], 1, 2) sage: S = list(C.subcrystal(index_set=[1,2])); S [[[1, 1]], [[1, 2]], [[1, 3]], [[2, 2]], [[2, 3]], [[3, 3]]] sage: C.cardinality() 10 sage: len(S) 6 sage: list(C.subcrystal(index_set=[1,3], generators=[C(1,4)])) [[[1, 4]], [[2, 4]], [[1, 3]], [[2, 3]]] sage: list(C.subcrystal(index_set=[1,3], generators=[C(1,4)], max_depth=1)) [[[1, 4]], [[2, 4]], [[1, 3]]] sage: list(C.subcrystal(index_set=[1,3], generators=[C(1,4)], direction='upper')) [[[1, 4]], [[1, 3]]] sage: list(C.subcrystal(index_set=[1,3], generators=[C(1,4)], direction='lower')) [[[1, 4]], [[2, 4]]]
-
tensor
(*crystals, **options)¶ Return the tensor product of
self
with the crystalsB
.EXAMPLES:
sage: C = crystals.Letters(['A', 3]) sage: B = crystals.infinity.Tableaux(['A', 3]) sage: T = C.tensor(C, B); T Full tensor product of the crystals [The crystal of letters for type ['A', 3], The crystal of letters for type ['A', 3], The infinity crystal of tableaux of type ['A', 3]] sage: tensor([C, C, B]) is T True sage: C = crystals.Letters(['A',2]) sage: T = C.tensor(C, C, generators=[[C(2),C(1),C(1)],[C(1),C(2),C(1)]]); T The 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.module_generators [[2, 1, 1], [1, 2, 1]]
-
weight_lattice_realization
()¶ Returns the weight lattice realization used to express weights.
This default implementation uses the ambient space of the root system for (non relabelled) finite types and the weight lattice otherwise. This is a legacy from when ambient spaces were partially implemented, and may be changed in the future.
EXAMPLES:
sage: C = crystals.Letters(['A', 5]) sage: C.weight_lattice_realization() Ambient space of the Root system of type ['A', 5] sage: K = crystals.KirillovReshetikhin(['A',2,1], 1, 1) sage: K.weight_lattice_realization() Weight lattice of the Root system of type ['A', 2, 1]
-
-
class
Crystals.
SubcategoryMethods
¶ Methods for all subcategories.
-
TensorProducts
()¶ Return the full subcategory of objects of
self
constructed as tensor products.See also
tensor.TensorProductsCategory
RegressiveCovariantFunctorialConstruction
.
EXAMPLES:
sage: HighestWeightCrystals().TensorProducts() Category of tensor products of highest weight crystals
-
-
class
Crystals.
TensorProducts
(category, *args)¶ Bases:
sage.categories.tensor.TensorProductsCategory
The category of crystals constructed by tensor product of crystals.
-
extra_super_categories
()¶ EXAMPLES:
sage: Crystals().TensorProducts().extra_super_categories() [Category of crystals]
-
-
Crystals.
example
(choice='highwt', **kwds)¶ Returns an example of a crystal, as per
Category.example()
.INPUT:
choice
– str [default: ‘highwt’]. Can be either ‘highwt’ for the highest weight crystal of type A, or ‘naive’ for an example of a broken crystal.**kwds
– keyword arguments passed onto the constructor for the chosen crystal.
EXAMPLES:
sage: Crystals().example(choice='highwt', n=5) Highest weight crystal of type A_5 of highest weight omega_1 sage: Crystals().example(choice='naive') A broken crystal, defined by digraph, of dimension five.
-
Crystals.
super_categories
()¶ EXAMPLES:
sage: Crystals().super_categories() [Category of enumerated sets]
- either an attribute