Regular Crystals¶
-
class
sage.categories.regular_crystals.
RegularCrystals
(s=None)¶ Bases:
sage.categories.category_singleton.Category_singleton
The category of regular crystals.
A crystal is called regular if every vertex
satisfies
Note
Regular crystals are sometimes referred to as normal. When only one of the conditions (on either
or
) holds, these crystals are sometimes called seminormal or semiregular.
EXAMPLES:
sage: C = RegularCrystals() sage: C Category of regular crystals sage: C.super_categories() [Category of crystals] sage: C.example() Highest weight crystal of type A_3 of highest weight omega_1
TESTS:
sage: TestSuite(C).run() sage: B = RegularCrystals().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
¶ -
demazure_operator_simple
(i, ring=None)¶ Return the Demazure operator
applied to
self
.INPUT:
i
– an element of the index set of the underlying crystalring
– (default:QQ
) a ring
OUTPUT:
An element of the
ring
-free module indexed by the underlying crystal.Let
, then
is defined as follows:
- If
, this returns the sum of the elements obtained from
self
by application offor
.
- If
, this returns the opposite of the sum of the elements obtained by application of
for
.
REFERENCES:
[L1995] Peter Littelmann, Crystal graphs and Young tableaux, J. Algebra 175 (1995), no. 1, 65–87. [K1993] Masaki Kashiwara, The crystal base and Littelmann’s refined Demazure character formula, Duke Math. J. 71 (1993), no. 3, 839–858. EXAMPLES:
sage: T = crystals.Tableaux(['A',2], shape=[2,1]) sage: t = T(rows=[[1,2],[2]]) sage: t.demazure_operator_simple(2) B[[[1, 2], [2]]] + B[[[1, 3], [2]]] + B[[[1, 3], [3]]] sage: t.demazure_operator_simple(2).parent() Free module generated by The crystal of tableaux of type ['A', 2] and shape(s) [[2, 1]] over Integer Ring sage: t.demazure_operator_simple(1) 0 sage: K = crystals.KirillovReshetikhin(['A',2,1],2,1) sage: t = K(rows=[[3],[2]]) sage: t.demazure_operator_simple(0) B[[[2, 3]]] + B[[[1, 2]]]
TESTS:
sage: K = crystals.KirillovReshetikhin(['A',2,1],1,1) sage: x = K.an_element(); x [[1]] sage: x.demazure_operator_simple(0) 0 sage: x.demazure_operator_simple(0, ring = QQ).parent() Free module generated by Kirillov-Reshetikhin crystal of type ['A', 2, 1] with (r,s)=(1,1) over Rational Field
-
dual_equivalence_class
(index_set=None)¶ Return the dual equivalence class indexed by
index_set
ofself
.The dual equivalence class of an element
is the set of all elements of
reachable from
via sequences of
-elementary dual equivalence relations (i.e.,
-elementary dual equivalence transformations and their inverses) for
in the index set of
.
For this to be well-defined, the element
has to be of weight
with respect to
; that is, we need to have
for all
.
See [Assaf08]. See also
dual_equivalence_graph()
for a definition of-elementary dual equivalence transformations.
INPUT:
index_set
– (optional) the index set(default: the whole index set of the crystal); this has to be a subset of the index set of the crystal (as a list or tuple)
OUTPUT:
The dual equivalence class of
self
indexed by the subsetindex_set
. This class is returned as an undirected edge-colored multigraph. The color of an edge is the indexof the dual equivalence relation it encodes.
EXAMPLES:
sage: T = crystals.Tableaux(['A',3], shape=[2,2]) sage: G = T(2,1,4,3).dual_equivalence_class() sage: sorted(G.edges()) [([[1, 3], [2, 4]], [[1, 2], [3, 4]], 2), ([[1, 3], [2, 4]], [[1, 2], [3, 4]], 3)] sage: T = crystals.Tableaux(['A',4], shape=[3,2]) sage: G = T(2,1,4,3,5).dual_equivalence_class() sage: sorted(G.edges()) [([[1, 3, 5], [2, 4]], [[1, 3, 4], [2, 5]], 4), ([[1, 3, 5], [2, 4]], [[1, 2, 5], [3, 4]], 2), ([[1, 3, 5], [2, 4]], [[1, 2, 5], [3, 4]], 3), ([[1, 3, 4], [2, 5]], [[1, 2, 4], [3, 5]], 2), ([[1, 2, 4], [3, 5]], [[1, 2, 3], [4, 5]], 3), ([[1, 2, 4], [3, 5]], [[1, 2, 3], [4, 5]], 4)]
-
epsilon
(i)¶ Return
of
self
.EXAMPLES:
sage: C = crystals.Letters(['A',5]) sage: C(1).epsilon(1) 0 sage: C(2).epsilon(1) 1
-
phi
(i)¶ Return
of
self
.EXAMPLES:
sage: C = crystals.Letters(['A',5]) sage: C(1).phi(1) 1 sage: C(2).phi(1) 0
-
stembridgeDel_depth
(i, j)¶ Return the difference in the
-depth of
self
andof
self
, whereand
are in the index set of the underlying crystal. This function is useful for checking the Stembridge local axioms for crystal bases.
The
-depth of a crystal node
is
.
EXAMPLES:
sage: T = crystals.Tableaux(['A',2], shape=[2,1]) sage: t=T(rows=[[1,1],[2]]) sage: t.stembridgeDel_depth(1,2) 0 sage: s=T(rows=[[1,3],[3]]) sage: s.stembridgeDel_depth(1,2) -1
-
stembridgeDel_rise
(i, j)¶ Return the difference in the
-rise of
self
andof
self
, whereand
are in the index set of the underlying crystal. This function is useful for checking the Stembridge local axioms for crystal bases.
The
-rise of a crystal node
is
.
EXAMPLES:
sage: T = crystals.Tableaux(['A',2], shape=[2,1]) sage: t=T(rows=[[1,1],[2]]) sage: t.stembridgeDel_rise(1,2) -1 sage: s=T(rows=[[1,3],[3]]) sage: s.stembridgeDel_rise(1,2) 0
-
stembridgeDelta_depth
(i, j)¶ Return the difference in the
-depth of
self
andof
self
, whereand
are in the index set of the underlying crystal. This function is useful for checking the Stembridge local axioms for crystal bases.
The
-depth of a crystal node
is
.
EXAMPLES:
sage: T = crystals.Tableaux(['A',2], shape=[2,1]) sage: t=T(rows=[[1,2],[2]]) sage: t.stembridgeDelta_depth(1,2) 0 sage: s=T(rows=[[2,3],[3]]) sage: s.stembridgeDelta_depth(1,2) -1
-
stembridgeDelta_rise
(i, j)¶ Return the difference in the
-rise of
self
andof
self
, whereand
are in the index set of the underlying crystal. This function is useful for checking the Stembridge local axioms for crystal bases.
The
-rise of a crystal node
is
.
EXAMPLES:
sage: T = crystals.Tableaux(['A',2], shape=[2,1]) sage: t=T(rows=[[1,2],[2]]) sage: t.stembridgeDelta_rise(1,2) -1 sage: s=T(rows=[[2,3],[3]]) sage: s.stembridgeDelta_rise(1,2) 0
-
stembridgeTriple
(i, j)¶ Let
be the Cartan matrix of the crystal,
a crystal element, and let
and
be in the index set of the crystal. Further, set
b=stembridgeDelta_depth(x,i,j)
, andc=stembridgeDelta_rise(x,i,j))
. Ifx.e(i)
is non-empty, this function returns the triple; otherwise it returns
None
. By the Stembridge local characterization of crystal bases, one should have.
EXAMPLES:
sage: T = crystals.Tableaux(['A',2], shape=[2,1]) sage: t=T(rows=[[1,1],[2]]) sage: t.stembridgeTriple(1,2) sage: s=T(rows=[[1,2],[2]]) sage: s.stembridgeTriple(1,2) (-1, 0, -1) sage: T = crystals.Tableaux(['B',2], shape=[2,1]) sage: t=T(rows=[[1,2],[2]]) sage: t.stembridgeTriple(1,2) (-2, 0, -2) sage: s=T(rows=[[-1,-1],[0]]) sage: s.stembridgeTriple(1,2) (-2, -2, 0) sage: u=T(rows=[[0,2],[1]]) sage: u.stembridgeTriple(1,2) (-2, -1, -1)
-
weight
()¶ Return the weight of this crystal element.
EXAMPLES:
sage: C = crystals.Letters(['A',5]) sage: C(1).weight() (1, 0, 0, 0, 0, 0)
-
-
class
RegularCrystals.
ParentMethods
¶ -
demazure_operator
(element, reduced_word)¶ Returns the application of Demazure operators
for
from
reduced_word
onelement
.INPUT:
element
– an element of a free module indexed by the underlying crystalreduced_word
– a reduced word of the Weyl group of the same type as the underlying crystal
OUTPUT:
- an element of the free module indexed by the underlying crystal
EXAMPLES:
sage: T = crystals.Tableaux(['A',2], shape=[2,1]) sage: C = CombinatorialFreeModule(QQ,T) sage: t = T.highest_weight_vector() sage: b = 2*C(t) sage: T.demazure_operator(b,[1,2,1]) 2*B[[[1, 1], [2]]] + 2*B[[[1, 2], [2]]] + 2*B[[[1, 3], [2]]] + 2*B[[[1, 1], [3]]] + 2*B[[[1, 2], [3]]] + 2*B[[[1, 3], [3]]] + 2*B[[[2, 2], [3]]] + 2*B[[[2, 3], [3]]]
The Demazure operator is idempotent:
sage: T = crystals.Tableaux("A1",shape=[4]) sage: C = CombinatorialFreeModule(QQ,T) sage: b = C(T.module_generators[0]); b B[[[1, 1, 1, 1]]] sage: e = T.demazure_operator(b,[1]); e B[[[1, 1, 1, 1]]] + B[[[1, 1, 1, 2]]] + B[[[1, 1, 2, 2]]] + B[[[1, 2, 2, 2]]] + B[[[2, 2, 2, 2]]] sage: e == T.demazure_operator(e,[1]) True sage: all(T.demazure_operator(T.demazure_operator(C(t),[1]),[1]) == T.demazure_operator(C(t),[1]) for t in T) True
-
dual_equivalence_graph
(X=None, index_set=None, directed=True)¶ Return the dual equivalence graph indexed by
index_set
on the subsetX
ofself
.Let
be an element of weight
, so
for all
, where
is the indexing set. We say
is an
-elementary dual equivalence transformation of
(where
) if
and
, and
.
We can do the inverse procedure by interchanging
and
above.
Note
If the index set is not an ordered interval, we let
mean the index appearing before
in
.
This definition comes from [Assaf08] Section 4 (where our
and
are denoted by
and
, respectively).
The dual equivalence graph of
is defined to be the colored graph whose vertices are the elements of
of weight
, and whose edges of color
(for
) connect pairs
such that
is an
-elementary dual equivalence transformation of
.
Note
This dual equivalence graph is a generalization of
in [Assaf08] Section 4 except we do not require
for all
.
This definition can be generalized by choosing a subset
of the set of all vertices of
of weight
, and restricting the dual equivalence graph to the vertex set
.
INPUT:
X
– (optional) the vertex set(default: the whole set of vertices of
self
of weight)
index_set
– (optional) the index set(default: the whole index set of
self
); this has to be a subset of the index set ofself
(as a list or tuple)directed
– (default:True
) whether to have the dual equivalence graph be directed, where the head of an edgeis
and the tail is
)
REFERENCES:
[Assaf08] (1, 2, 3) Sami Assaf. A combinatorial realization of Schur-Weyl duality via crystal graphs and dual equivalence graphs. FPSAC 2008, 141-152, Discrete Math. Theor. Comput. Sci. Proc., AJ, Assoc. Discrete Math. Theor. Comput. Sci., (2008). Arxiv 0804.1587v1 EXAMPLES:
sage: T = crystals.Tableaux(['A',3], shape=[2,2]) sage: G = T.dual_equivalence_graph() sage: sorted(G.edges()) [([[1, 3], [2, 4]], [[1, 2], [3, 4]], 2), ([[1, 2], [3, 4]], [[1, 3], [2, 4]], 3)] sage: T = crystals.Tableaux(['A',4], shape=[3,2]) sage: G = T.dual_equivalence_graph() sage: sorted(G.edges()) [([[1, 3, 5], [2, 4]], [[1, 3, 4], [2, 5]], 4), ([[1, 3, 5], [2, 4]], [[1, 2, 5], [3, 4]], 2), ([[1, 3, 4], [2, 5]], [[1, 2, 4], [3, 5]], 2), ([[1, 2, 5], [3, 4]], [[1, 3, 5], [2, 4]], 3), ([[1, 2, 4], [3, 5]], [[1, 2, 3], [4, 5]], 3), ([[1, 2, 3], [4, 5]], [[1, 2, 4], [3, 5]], 4)] sage: T = crystals.Tableaux(['A',4], shape=[3,1]) sage: G = T.dual_equivalence_graph(index_set=[1,2,3]) sage: G.vertices() [[[1, 3, 4], [2]], [[1, 2, 4], [3]], [[1, 2, 3], [4]]] sage: G.edges() [([[1, 3, 4], [2]], [[1, 2, 4], [3]], 2), ([[1, 2, 4], [3]], [[1, 2, 3], [4]], 3)]
TESTS:
sage: T = crystals.Tableaux(['A',4], shape=[3,1]) sage: G = T.dual_equivalence_graph(index_set=[2,3]) sage: sorted(G.edges()) [([[1, 2, 4], [3]], [[1, 2, 3], [4]], 3), ([[2, 4, 5], [3]], [[2, 3, 5], [4]], 3)] sage: sorted(G.vertices()) [[[1, 3, 4], [2]], [[1, 2, 4], [3]], [[2, 4, 5], [3]], [[1, 2, 3], [4]], [[2, 3, 5], [4]], [[1, 1, 1], [5]], [[1, 1, 5], [5]], [[1, 5, 5], [5]], [[2, 3, 4], [5]]]
-
-
class
RegularCrystals.
TensorProducts
(category, *args)¶ Bases:
sage.categories.tensor.TensorProductsCategory
The category of regular crystals constructed by tensor product of regular crystals.
-
extra_super_categories
()¶ EXAMPLES:
sage: RegularCrystals().TensorProducts().extra_super_categories() [Category of regular crystals]
-
-
RegularCrystals.
additional_structure
()¶ Return
None
.Indeed, the category of regular crystals defines no new structure: it only relates
and
to
and
respectively.
See also
Todo
Should this category be a
CategoryWithAxiom
?EXAMPLES:
sage: RegularCrystals().additional_structure()
-
RegularCrystals.
example
(n=3)¶ Returns an example of highest weight crystals, as per
Category.example()
.EXAMPLES:
sage: B = RegularCrystals().example(); B Highest weight crystal of type A_3 of highest weight omega_1
-
RegularCrystals.
super_categories
()¶ EXAMPLES:
sage: RegularCrystals().super_categories() [Category of crystals]
-
class