Path: blob/master/src/sage/combinat/crystals/highest_weight_crystals.py
8817 views
r"""1Highest weight crystals2"""34#*****************************************************************************5# Copyright (C) 2009 Anne Schilling <anne at math.ucdavis.edu>6#7# Distributed under the terms of the GNU General Public License (GPL)8#9# This code is distributed in the hope that it will be useful,10# but WITHOUT ANY WARRANTY; without even the implied warranty of11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU12# General Public License for more details.13#14# The full text of the GPL is available at:15#16# http://www.gnu.org/licenses/17#****************************************************************************1819from sage.categories.classical_crystals import ClassicalCrystals20from sage.structure.parent import Parent21from sage.combinat.root_system.cartan_type import CartanType22from sage.combinat.crystals.letters import CrystalOfLetters23from sage.combinat.crystals.tensor_product import TensorProductOfCrystals, \24TensorProductOfRegularCrystalsElement25from sage.combinat.crystals.littelmann_path import CrystalOfLSPaths262728def HighestWeightCrystal(dominant_weight):29r"""30Returns an implementation of the highest weight crystal of highest weight `dominant_weight`.3132This is currently only implemented for crystals of type `E_6` and `E_7`.3334TODO: implement highest weight crystals for classical types `A_n`, `B_n`, `C_n`, `D_n` using tableaux.3536EXAMPLES::3738sage: C=CartanType(['E',6])39sage: La=C.root_system().weight_lattice().fundamental_weights()40sage: T = HighestWeightCrystal(La[1])41sage: T.cardinality()422743sage: T = HighestWeightCrystal(La[6])44sage: T.cardinality()452746sage: T = HighestWeightCrystal(La[2])47sage: T.cardinality()487849sage: T = HighestWeightCrystal(La[4])50sage: T.cardinality()51292552sage: T = HighestWeightCrystal(La[3])53sage: T.cardinality()5435155sage: T = HighestWeightCrystal(La[5])56sage: T.cardinality()573515859sage: C=CartanType(['E',7])60sage: La=C.root_system().weight_lattice().fundamental_weights()61sage: T = HighestWeightCrystal(La[1])62sage: T.cardinality()6313364sage: T = HighestWeightCrystal(La[2])65sage: T.cardinality()6691267sage: T = HighestWeightCrystal(La[3])68sage: T.cardinality()69864570sage: T = HighestWeightCrystal(La[4])71sage: T.cardinality()7236575073sage: T = HighestWeightCrystal(La[5])74sage: T.cardinality()752766476sage: T = HighestWeightCrystal(La[6])77sage: T.cardinality()78153979sage: T = HighestWeightCrystal(La[7])80sage: T.cardinality()81568283sage: C = CartanType(['C',2,1])84sage: La = C.root_system().weight_lattice().fundamental_weights()85sage: T = HighestWeightCrystal(La[1])86sage: [p for p in T.subcrystal(max_depth=3)]87[(Lambda[1],), (Lambda[0] - Lambda[1] + Lambda[2],), (-Lambda[0] + Lambda[1] + Lambda[2] - delta,),88(Lambda[0] + Lambda[1] - Lambda[2],), (-Lambda[0] + 3*Lambda[1] - Lambda[2] - delta,), (2*Lambda[0] - Lambda[1],),89(-Lambda[1] + 2*Lambda[2] - delta,)]90"""91cartan_type = dominant_weight.parent().cartan_type()92if cartan_type.is_finite() and cartan_type.type() in ['A','B','C','D']:93raise NotImplementedError94elif cartan_type == CartanType(['E',6]):95return FiniteDimensionalHighestWeightCrystal_TypeE6(dominant_weight)96elif cartan_type == CartanType(['E',7]):97return FiniteDimensionalHighestWeightCrystal_TypeE7(dominant_weight)98elif cartan_type.is_affine():99return CrystalOfLSPaths(cartan_type,[dominant_weight[i] for i in cartan_type.index_set()])100else:101raise NotImplementedError102103class FiniteDimensionalHighestWeightCrystal_TypeE(TensorProductOfCrystals):104"""105Commonalities for all finite dimensional type E highest weight crystals106107Subclasses should setup an attribute column_crystal in their108__init__ method before calling the __init__ method of this class.109"""110111def __init__(self, dominant_weight):112"""113EXAMPLES::114115sage: C=CartanType(['E',6])116sage: La=C.root_system().weight_lattice().fundamental_weights()117sage: T = HighestWeightCrystal(2*La[2])118sage: T.cartan_type()119['E', 6]120sage: T.module_generators121[[[(2, -1), (1,)], [(2, -1), (1,)]]]122sage: T.cardinality()1232430124sage: T = HighestWeightCrystal(La[2])125sage: T.cardinality()12678127"""128self._cartan_type = dominant_weight.parent().cartan_type()129self._highest_weight = dominant_weight130assert dominant_weight.is_dominant()131self.rename("Finite dimensional highest weight crystal of type %s and highest weight %s"%(self._cartan_type, dominant_weight))132Parent.__init__(self, category = ClassicalCrystals())133self.module_generators = [self.module_generator()]134135Element = TensorProductOfRegularCrystalsElement136137def module_generator(self):138"""139This yields the module generator (or highest weight element) of the classical140crystal of given dominant weight in self.141142EXAMPLES::143144sage: C=CartanType(['E',6])145sage: La=C.root_system().weight_lattice().fundamental_weights()146sage: T = HighestWeightCrystal(La[2])147sage: T.module_generator()148[[(2, -1), (1,)]]149sage: T = HighestWeightCrystal(0*La[2])150sage: T.module_generator()151[]152153sage: C=CartanType(['E',7])154sage: La=C.root_system().weight_lattice().fundamental_weights()155sage: T = HighestWeightCrystal(La[1])156sage: T.module_generator()157[[(-7, 1), (7,)]]158"""159dominant_weight = self._highest_weight160tensor = sum(( [self.column_crystal[i]]*dominant_weight.coefficient(i) for i in dominant_weight.support()), [])161return self._element_constructor_(*[B.module_generators[0] for B in tensor])162163class FiniteDimensionalHighestWeightCrystal_TypeE6(FiniteDimensionalHighestWeightCrystal_TypeE):164r"""165Class of finite dimensional highest weight crystals of type `E_6`.166167EXAMPLES::168169sage: C=CartanType(['E',6])170sage: La=C.root_system().weight_lattice().fundamental_weights()171sage: T = HighestWeightCrystal(La[2]); T172Finite dimensional highest weight crystal of type ['E', 6] and highest weight Lambda[2]173sage: B1 = T.column_crystal[1]; B1174The crystal of letters for type ['E', 6]175sage: B6 = T.column_crystal[6]; B6176The crystal of letters for type ['E', 6] (dual)177sage: t = T(B6([-1]),B1([-1,3])); t178[(-1,), (-1, 3)]179sage: [t.epsilon(i) for i in T.index_set()]180[2, 0, 0, 0, 0, 0]181sage: [t.phi(i) for i in T.index_set()]182[0, 0, 1, 0, 0, 0]183sage: TestSuite(t).run()184"""185186def __init__(self, dominant_weight):187"""188EXAMPLES::189190sage: C=CartanType(['E',6])191sage: La=C.root_system().weight_lattice().fundamental_weights()192sage: p2=2*La[2]193sage: p1=La[2]194sage: p0=0*La[2]195sage: T = HighestWeightCrystal(0*La[2])196sage: T.cardinality()1971198sage: T = HighestWeightCrystal(La[2])199sage: T.cardinality()20078201sage: T = HighestWeightCrystal(2*La[2])202sage: T.cardinality()2032430204"""205B1 = CrystalOfLetters(['E',6])206B6 = CrystalOfLetters(['E',6], dual = True)207self.column_crystal = {1 : B1, 6 : B6,2084 : TensorProductOfCrystals(B1,B1,B1,generators=[[B1([-3,4]),B1([-1,3]),B1([1])]]),2093 : TensorProductOfCrystals(B1,B1,generators=[[B1([-1,3]),B1([1])]]),2105 : TensorProductOfCrystals(B6,B6,generators=[[B6([5,-6]),B6([6])]]),2112 : TensorProductOfCrystals(B6,B1,generators=[[B6([2,-1]),B1([1])]])}212FiniteDimensionalHighestWeightCrystal_TypeE.__init__(self, dominant_weight)213214215class FiniteDimensionalHighestWeightCrystal_TypeE7(FiniteDimensionalHighestWeightCrystal_TypeE):216r"""217Class of finite dimensional highest weight crystals of type `E_7`.218219EXAMPLES::220221sage: C=CartanType(['E',7])222sage: La=C.root_system().weight_lattice().fundamental_weights()223sage: T = HighestWeightCrystal(La[1])224sage: T.cardinality()225133226sage: B7 = T.column_crystal[7]; B7227The crystal of letters for type ['E', 7]228sage: t = T(B7([-5, 6]), B7([-2, 3])); t229[(-5, 6), (-2, 3)]230sage: [t.epsilon(i) for i in T.index_set()]231[0, 1, 0, 0, 1, 0, 0]232sage: [t.phi(i) for i in T.index_set()]233[0, 0, 1, 0, 0, 1, 0]234sage: TestSuite(t).run()235"""236237def __init__(self, dominant_weight):238"""239EXAMPLES::240241sage: C=CartanType(['E',7])242sage: La=C.root_system().weight_lattice().fundamental_weights()243sage: T = HighestWeightCrystal(0*La[1])244sage: T.cardinality()2451246sage: T = HighestWeightCrystal(La[1])247sage: T.cardinality()248133249sage: T = HighestWeightCrystal(2*La[1])250sage: T.cardinality()2517371252"""253B = CrystalOfLetters(['E',7])254self.column_crystal = {7 : B,2551 : TensorProductOfCrystals(B,B,generators=[[B([-7,1]),B([7])]]),2562 : TensorProductOfCrystals(B,B,B,generators=[[B([-1,2]),B([-7,1]),B([7])]]),2573 : TensorProductOfCrystals(B,B,B,B,generators=[[B([-2,3]),B([-1,2]),B([-7,1]),B([7])]]),2584 : TensorProductOfCrystals(B,B,B,B,generators=[[B([-5,4]),B([-6,5]),B([-7,6]),B([7])]]),2595 : TensorProductOfCrystals(B,B,B,generators=[[B([-6,5]),B([-7,6]),B([7])]]),2606 : TensorProductOfCrystals(B,B,generators=[[B([-7,6]),B([7])]])}261FiniteDimensionalHighestWeightCrystal_TypeE.__init__(self, dominant_weight)262263264