Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemath
GitHub Repository: sagemath/sagelib
Path: blob/master/sage/combinat/crystals/highest_weight_crystals.py
4095 views
1
r"""
2
Highest weight crystals
3
"""
4
5
#*****************************************************************************
6
# Copyright (C) 2009 Anne Schilling <anne at math.ucdavis.edu>
7
#
8
# Distributed under the terms of the GNU General Public License (GPL)
9
#
10
# This code is distributed in the hope that it will be useful,
11
# but WITHOUT ANY WARRANTY; without even the implied warranty of
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
# General Public License for more details.
14
#
15
# The full text of the GPL is available at:
16
#
17
# http://www.gnu.org/licenses/
18
#****************************************************************************
19
20
from sage.categories.classical_crystals import ClassicalCrystals
21
from sage.structure.parent import Parent
22
from sage.combinat.root_system.cartan_type import CartanType
23
from sage.combinat.crystals.letters import CrystalOfLetters
24
from sage.combinat.crystals.tensor_product import TensorProductOfCrystals, CrystalOfWords
25
26
27
def HighestWeightCrystal(dominant_weight):
28
r"""
29
Returns an implementation of the highest weight crystal of highest weight `dominant_weight`.
30
31
This is currently only implemented for crystals of type `E_6` and `E_7`.
32
33
TODO: implement highest weight crystals for classical types `A_n`, `B_n`, `C_n`, `D_n` using tableaux.
34
35
TODO: implement the Littelmann path model or alcove model to obtain a realization
36
for any highest weight crystal of given type (even affine).
37
38
EXAMPLES::
39
40
sage: C=CartanType(['E',6])
41
sage: La=C.root_system().weight_lattice().fundamental_weights()
42
sage: T = HighestWeightCrystal(La[1])
43
sage: T.cardinality()
44
27
45
sage: T = HighestWeightCrystal(La[6])
46
sage: T.cardinality()
47
27
48
sage: T = HighestWeightCrystal(La[2])
49
sage: T.cardinality()
50
78
51
sage: T = HighestWeightCrystal(La[4])
52
sage: T.cardinality()
53
2925
54
sage: T = HighestWeightCrystal(La[3])
55
sage: T.cardinality()
56
351
57
sage: T = HighestWeightCrystal(La[5])
58
sage: T.cardinality()
59
351
60
61
sage: C=CartanType(['E',7])
62
sage: La=C.root_system().weight_lattice().fundamental_weights()
63
sage: T = HighestWeightCrystal(La[1])
64
sage: T.cardinality()
65
133
66
sage: T = HighestWeightCrystal(La[2])
67
sage: T.cardinality()
68
912
69
sage: T = HighestWeightCrystal(La[3])
70
sage: T.cardinality()
71
8645
72
sage: T = HighestWeightCrystal(La[4])
73
sage: T.cardinality()
74
365750
75
sage: T = HighestWeightCrystal(La[5])
76
sage: T.cardinality()
77
27664
78
sage: T = HighestWeightCrystal(La[6])
79
sage: T.cardinality()
80
1539
81
sage: T = HighestWeightCrystal(La[7])
82
sage: T.cardinality()
83
56
84
"""
85
cartan_type = dominant_weight.parent().cartan_type()
86
if cartan_type.is_finite() and cartan_type.type() in ['A','B','C','D']:
87
raise NotImplementedError
88
elif cartan_type == CartanType(['E',6]):
89
return FiniteDimensionalHighestWeightCrystal_TypeE6(dominant_weight)
90
elif cartan_type == CartanType(['E',7]):
91
return FiniteDimensionalHighestWeightCrystal_TypeE7(dominant_weight)
92
else:
93
raise NotImplementedError
94
95
class FiniteDimensionalHighestWeightCrystal_TypeE(CrystalOfWords):
96
"""
97
Commonalities for all finite dimensional type E highest weight crystals
98
99
Subclasses should setup an attribute column_crystal in their
100
__init__ method before calling the __init__ method of this class.
101
"""
102
103
def __init__(self, dominant_weight):
104
"""
105
EXAMPLES::
106
107
sage: C=CartanType(['E',6])
108
sage: La=C.root_system().weight_lattice().fundamental_weights()
109
sage: T = HighestWeightCrystal(2*La[2])
110
sage: T.cartan_type()
111
['E', 6]
112
sage: T.module_generators
113
[[[[2, -1], [1]], [[2, -1], [1]]]]
114
sage: T.cardinality()
115
2430
116
sage: T = HighestWeightCrystal(La[2])
117
sage: T.cardinality()
118
78
119
"""
120
self._cartan_type = dominant_weight.parent().cartan_type()
121
self._highest_weight = dominant_weight
122
assert dominant_weight.is_dominant()
123
self.rename("Finite dimensional highest weight crystal of type %s and highest weight %s"%(self._cartan_type, dominant_weight))
124
Parent.__init__(self, category = ClassicalCrystals())
125
self.module_generators = [self.module_generator()]
126
127
128
def module_generator(self):
129
"""
130
This yields the module generator (or highest weight element) of the classical
131
crystal of given dominant weight in self.
132
133
EXAMPLES::
134
135
sage: C=CartanType(['E',6])
136
sage: La=C.root_system().weight_lattice().fundamental_weights()
137
sage: T = HighestWeightCrystal(La[2])
138
sage: T.module_generator()
139
[[[2, -1], [1]]]
140
sage: T = HighestWeightCrystal(0*La[2])
141
sage: T.module_generator()
142
[]
143
144
sage: C=CartanType(['E',7])
145
sage: La=C.root_system().weight_lattice().fundamental_weights()
146
sage: T = HighestWeightCrystal(La[1])
147
sage: T.module_generator()
148
[[[-7, 1], [7]]]
149
"""
150
dominant_weight = self._highest_weight
151
tensor = sum(( [self.column_crystal[i]]*dominant_weight.coefficient(i) for i in dominant_weight.support()), [])
152
return self._element_constructor_(*[B.module_generators[0] for B in tensor])
153
154
class FiniteDimensionalHighestWeightCrystal_TypeE6(FiniteDimensionalHighestWeightCrystal_TypeE):
155
r"""
156
Class of finite dimensional highest weight crystals of type `E_6`.
157
158
EXAMPLES::
159
160
sage: C=CartanType(['E',6])
161
sage: La=C.root_system().weight_lattice().fundamental_weights()
162
sage: T = HighestWeightCrystal(La[2]); T
163
Finite dimensional highest weight crystal of type ['E', 6] and highest weight Lambda[2]
164
sage: B1 = T.column_crystal[1]; B1
165
The crystal of letters for type ['E', 6]
166
sage: B6 = T.column_crystal[6]; B6
167
The crystal of letters for type ['E', 6] (dual)
168
sage: t = T(B6([-1]),B1([-1,3])); t
169
[[-1], [-1, 3]]
170
sage: [t.epsilon(i) for i in T.index_set()]
171
[2, 0, 0, 0, 0, 0]
172
sage: [t.phi(i) for i in T.index_set()]
173
[0, 0, 1, 0, 0, 0]
174
sage: TestSuite(t).run()
175
"""
176
177
def __init__(self, dominant_weight):
178
"""
179
EXAMPLES::
180
181
sage: C=CartanType(['E',6])
182
sage: La=C.root_system().weight_lattice().fundamental_weights()
183
sage: p2=2*La[2]
184
sage: p1=La[2]
185
sage: p0=0*La[2]
186
sage: T = HighestWeightCrystal(0*La[2])
187
sage: T.cardinality()
188
1
189
sage: T = HighestWeightCrystal(La[2])
190
sage: T.cardinality()
191
78
192
sage: T = HighestWeightCrystal(2*La[2])
193
sage: T.cardinality()
194
2430
195
"""
196
B1 = CrystalOfLetters(['E',6])
197
B6 = CrystalOfLetters(['E',6], dual = True)
198
self.column_crystal = {1 : B1, 6 : B6,
199
4 : TensorProductOfCrystals(B1,B1,B1,generators=[[B1([-3,4]),B1([-1,3]),B1([1])]]),
200
3 : TensorProductOfCrystals(B1,B1,generators=[[B1([-1,3]),B1([1])]]),
201
5 : TensorProductOfCrystals(B6,B6,generators=[[B6([5,-6]),B6([6])]]),
202
2 : TensorProductOfCrystals(B6,B1,generators=[[B6([2,-1]),B1([1])]])}
203
FiniteDimensionalHighestWeightCrystal_TypeE.__init__(self, dominant_weight)
204
205
206
class FiniteDimensionalHighestWeightCrystal_TypeE7(FiniteDimensionalHighestWeightCrystal_TypeE):
207
r"""
208
Class of finite dimensional highest weight crystals of type `E_7`.
209
210
EXAMPLES::
211
212
sage: C=CartanType(['E',7])
213
sage: La=C.root_system().weight_lattice().fundamental_weights()
214
sage: T = HighestWeightCrystal(La[1])
215
sage: T.cardinality()
216
133
217
sage: B7 = T.column_crystal[7]; B7
218
The crystal of letters for type ['E', 7]
219
sage: t = T(B7([-5, 6]), B7([-2, 3])); t
220
[[-5, 6], [-2, 3]]
221
sage: [t.epsilon(i) for i in T.index_set()]
222
[0, 1, 0, 0, 1, 0, 0]
223
sage: [t.phi(i) for i in T.index_set()]
224
[0, 0, 1, 0, 0, 1, 0]
225
sage: TestSuite(t).run()
226
"""
227
228
def __init__(self, dominant_weight):
229
"""
230
EXAMPLES::
231
232
sage: C=CartanType(['E',7])
233
sage: La=C.root_system().weight_lattice().fundamental_weights()
234
sage: T = HighestWeightCrystal(0*La[1])
235
sage: T.cardinality()
236
1
237
sage: T = HighestWeightCrystal(La[1])
238
sage: T.cardinality()
239
133
240
sage: T = HighestWeightCrystal(2*La[1])
241
sage: T.cardinality()
242
7371
243
"""
244
B = CrystalOfLetters(['E',7])
245
self.column_crystal = {7 : B,
246
1 : TensorProductOfCrystals(B,B,generators=[[B([-7,1]),B([7])]]),
247
2 : TensorProductOfCrystals(B,B,B,generators=[[B([-1,2]),B([-7,1]),B([7])]]),
248
3 : TensorProductOfCrystals(B,B,B,B,generators=[[B([-2,3]),B([-1,2]),B([-7,1]),B([7])]]),
249
4 : TensorProductOfCrystals(B,B,B,B,generators=[[B([-5,4]),B([-6,5]),B([-7,6]),B([7])]]),
250
5 : TensorProductOfCrystals(B,B,B,generators=[[B([-6,5]),B([-7,6]),B([7])]]),
251
6 : TensorProductOfCrystals(B,B,generators=[[B([-7,6]),B([7])]])}
252
FiniteDimensionalHighestWeightCrystal_TypeE.__init__(self, dominant_weight)
253
254