Example of a crystal#
- class sage.categories.examples.crystals.HighestWeightCrystalOfTypeA(n=3)[source]#
Bases:
UniqueRepresentation
,Parent
An example of a crystal: the highest weight crystal of type \(A_n\) of highest weight \(\omega_1\).
The purpose of this class is to provide a minimal template for implementing crystals. See
CrystalOfLetters
for a full featured and optimized implementation.EXAMPLES:
sage: C = Crystals().example() sage: C Highest weight crystal of type A_3 of highest weight omega_1 sage: C.category() Category of classical crystals
>>> from sage.all import * >>> C = Crystals().example() >>> C Highest weight crystal of type A_3 of highest weight omega_1 >>> C.category() Category of classical crystals
The elements of this crystal are in the set \(\{1,\ldots,n+1\}\):
sage: C.list() [1, 2, 3, 4] sage: C.module_generators[0] 1
>>> from sage.all import * >>> C.list() [1, 2, 3, 4] >>> C.module_generators[Integer(0)] 1
The crystal operators themselves correspond to the elementary transpositions:
sage: b = C.module_generators[0] sage: b.f(1) 2 sage: b.f(1).e(1) == b True
>>> from sage.all import * >>> b = C.module_generators[Integer(0)] >>> b.f(Integer(1)) 2 >>> b.f(Integer(1)).e(Integer(1)) == b True
Only the following basic operations are implemented:
cartan_type()
or an attribute _cartan_typean attribute module_generators
All the other usual crystal operations are inherited from the categories; for example:
sage: C.cardinality() 4
>>> from sage.all import * >>> C.cardinality() 4
- class Element[source]#
Bases:
ElementWrapper
- e(i)[source]#
Returns the action of \(e_i\) on
self
.EXAMPLES:
sage: C = Crystals().example(4) sage: [[c,i,c.e(i)] for i in C.index_set() for c in C if c.e(i) is not None] [[2, 1, 1], [3, 2, 2], [4, 3, 3], [5, 4, 4]]
>>> from sage.all import * >>> C = Crystals().example(Integer(4)) >>> [[c,i,c.e(i)] for i in C.index_set() for c in C if c.e(i) is not None] [[2, 1, 1], [3, 2, 2], [4, 3, 3], [5, 4, 4]]
- f(i)[source]#
Returns the action of \(f_i\) on
self
.EXAMPLES:
sage: C = Crystals().example(4) sage: [[c,i,c.f(i)] for i in C.index_set() for c in C if c.f(i) is not None] [[1, 1, 2], [2, 2, 3], [3, 3, 4], [4, 4, 5]]
>>> from sage.all import * >>> C = Crystals().example(Integer(4)) >>> [[c,i,c.f(i)] for i in C.index_set() for c in C if c.f(i) is not None] [[1, 1, 2], [2, 2, 3], [3, 3, 4], [4, 4, 5]]
- class sage.categories.examples.crystals.NaiveCrystal[source]#
Bases:
UniqueRepresentation
,Parent
This is an example of a “crystal” which does not come from any kind of representation, designed primarily to test the Stembridge local rules with. The crystal has vertices labeled 0 through 5, with 0 the highest weight.
The code here could also possibly be generalized to create a class that automatically builds a crystal from an edge-colored digraph, if someone feels adventurous.
Currently, only the methods
highest_weight_vector()
,e()
, andf()
are guaranteed to work.EXAMPLES:
sage: C = Crystals().example(choice='naive') sage: C.highest_weight_vector() 0
>>> from sage.all import * >>> C = Crystals().example(choice='naive') >>> C.highest_weight_vector() 0
- class Element[source]#
Bases:
ElementWrapper
- e(i)[source]#
Returns the action of \(e_i\) on
self
.EXAMPLES:
sage: C = Crystals().example(choice='naive') sage: [[c,i,c.e(i)] for i in C.index_set() for c in [C(j) for j in [0..5]] if c.e(i) is not None] [[1, 1, 0], [2, 1, 1], [3, 1, 2], [5, 1, 3], [4, 2, 0], [5, 2, 4]]
>>> from sage.all import * >>> C = Crystals().example(choice='naive') >>> [[c,i,c.e(i)] for i in C.index_set() for c in [C(j) for j in (ellipsis_range(Integer(0),Ellipsis,Integer(5)))] if c.e(i) is not None] [[1, 1, 0], [2, 1, 1], [3, 1, 2], [5, 1, 3], [4, 2, 0], [5, 2, 4]]
- f(i)[source]#
Returns the action of \(f_i\) on
self
.EXAMPLES:
sage: C = Crystals().example(choice='naive') sage: [[c,i,c.f(i)] for i in C.index_set() for c in [C(j) for j in [0..5]] if c.f(i) is not None] [[0, 1, 1], [1, 1, 2], [2, 1, 3], [3, 1, 5], [0, 2, 4], [4, 2, 5]]
>>> from sage.all import * >>> C = Crystals().example(choice='naive') >>> [[c,i,c.f(i)] for i in C.index_set() for c in [C(j) for j in (ellipsis_range(Integer(0),Ellipsis,Integer(5)))] if c.f(i) is not None] [[0, 1, 1], [1, 1, 2], [2, 1, 3], [3, 1, 5], [0, 2, 4], [4, 2, 5]]