Path: blob/master/sage/combinat/crystals/highest_weight_crystals.py
4095 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, CrystalOfWords242526def HighestWeightCrystal(dominant_weight):27r"""28Returns an implementation of the highest weight crystal of highest weight `dominant_weight`.2930This is currently only implemented for crystals of type `E_6` and `E_7`.3132TODO: implement highest weight crystals for classical types `A_n`, `B_n`, `C_n`, `D_n` using tableaux.3334TODO: implement the Littelmann path model or alcove model to obtain a realization35for any highest weight crystal of given type (even affine).3637EXAMPLES::3839sage: C=CartanType(['E',6])40sage: La=C.root_system().weight_lattice().fundamental_weights()41sage: T = HighestWeightCrystal(La[1])42sage: T.cardinality()432744sage: T = HighestWeightCrystal(La[6])45sage: T.cardinality()462747sage: T = HighestWeightCrystal(La[2])48sage: T.cardinality()497850sage: T = HighestWeightCrystal(La[4])51sage: T.cardinality()52292553sage: T = HighestWeightCrystal(La[3])54sage: T.cardinality()5535156sage: T = HighestWeightCrystal(La[5])57sage: T.cardinality()583515960sage: C=CartanType(['E',7])61sage: La=C.root_system().weight_lattice().fundamental_weights()62sage: T = HighestWeightCrystal(La[1])63sage: T.cardinality()6413365sage: T = HighestWeightCrystal(La[2])66sage: T.cardinality()6791268sage: T = HighestWeightCrystal(La[3])69sage: T.cardinality()70864571sage: T = HighestWeightCrystal(La[4])72sage: T.cardinality()7336575074sage: T = HighestWeightCrystal(La[5])75sage: T.cardinality()762766477sage: T = HighestWeightCrystal(La[6])78sage: T.cardinality()79153980sage: T = HighestWeightCrystal(La[7])81sage: T.cardinality()825683"""84cartan_type = dominant_weight.parent().cartan_type()85if cartan_type.is_finite() and cartan_type.type() in ['A','B','C','D']:86raise NotImplementedError87elif cartan_type == CartanType(['E',6]):88return FiniteDimensionalHighestWeightCrystal_TypeE6(dominant_weight)89elif cartan_type == CartanType(['E',7]):90return FiniteDimensionalHighestWeightCrystal_TypeE7(dominant_weight)91else:92raise NotImplementedError9394class FiniteDimensionalHighestWeightCrystal_TypeE(CrystalOfWords):95"""96Commonalities for all finite dimensional type E highest weight crystals9798Subclasses should setup an attribute column_crystal in their99__init__ method before calling the __init__ method of this class.100"""101102def __init__(self, dominant_weight):103"""104EXAMPLES::105106sage: C=CartanType(['E',6])107sage: La=C.root_system().weight_lattice().fundamental_weights()108sage: T = HighestWeightCrystal(2*La[2])109sage: T.cartan_type()110['E', 6]111sage: T.module_generators112[[[[2, -1], [1]], [[2, -1], [1]]]]113sage: T.cardinality()1142430115sage: T = HighestWeightCrystal(La[2])116sage: T.cardinality()11778118"""119self._cartan_type = dominant_weight.parent().cartan_type()120self._highest_weight = dominant_weight121assert dominant_weight.is_dominant()122self.rename("Finite dimensional highest weight crystal of type %s and highest weight %s"%(self._cartan_type, dominant_weight))123Parent.__init__(self, category = ClassicalCrystals())124self.module_generators = [self.module_generator()]125126127def module_generator(self):128"""129This yields the module generator (or highest weight element) of the classical130crystal of given dominant weight in self.131132EXAMPLES::133134sage: C=CartanType(['E',6])135sage: La=C.root_system().weight_lattice().fundamental_weights()136sage: T = HighestWeightCrystal(La[2])137sage: T.module_generator()138[[[2, -1], [1]]]139sage: T = HighestWeightCrystal(0*La[2])140sage: T.module_generator()141[]142143sage: C=CartanType(['E',7])144sage: La=C.root_system().weight_lattice().fundamental_weights()145sage: T = HighestWeightCrystal(La[1])146sage: T.module_generator()147[[[-7, 1], [7]]]148"""149dominant_weight = self._highest_weight150tensor = sum(( [self.column_crystal[i]]*dominant_weight.coefficient(i) for i in dominant_weight.support()), [])151return self._element_constructor_(*[B.module_generators[0] for B in tensor])152153class FiniteDimensionalHighestWeightCrystal_TypeE6(FiniteDimensionalHighestWeightCrystal_TypeE):154r"""155Class of finite dimensional highest weight crystals of type `E_6`.156157EXAMPLES::158159sage: C=CartanType(['E',6])160sage: La=C.root_system().weight_lattice().fundamental_weights()161sage: T = HighestWeightCrystal(La[2]); T162Finite dimensional highest weight crystal of type ['E', 6] and highest weight Lambda[2]163sage: B1 = T.column_crystal[1]; B1164The crystal of letters for type ['E', 6]165sage: B6 = T.column_crystal[6]; B6166The crystal of letters for type ['E', 6] (dual)167sage: t = T(B6([-1]),B1([-1,3])); t168[[-1], [-1, 3]]169sage: [t.epsilon(i) for i in T.index_set()]170[2, 0, 0, 0, 0, 0]171sage: [t.phi(i) for i in T.index_set()]172[0, 0, 1, 0, 0, 0]173sage: TestSuite(t).run()174"""175176def __init__(self, dominant_weight):177"""178EXAMPLES::179180sage: C=CartanType(['E',6])181sage: La=C.root_system().weight_lattice().fundamental_weights()182sage: p2=2*La[2]183sage: p1=La[2]184sage: p0=0*La[2]185sage: T = HighestWeightCrystal(0*La[2])186sage: T.cardinality()1871188sage: T = HighestWeightCrystal(La[2])189sage: T.cardinality()19078191sage: T = HighestWeightCrystal(2*La[2])192sage: T.cardinality()1932430194"""195B1 = CrystalOfLetters(['E',6])196B6 = CrystalOfLetters(['E',6], dual = True)197self.column_crystal = {1 : B1, 6 : B6,1984 : TensorProductOfCrystals(B1,B1,B1,generators=[[B1([-3,4]),B1([-1,3]),B1([1])]]),1993 : TensorProductOfCrystals(B1,B1,generators=[[B1([-1,3]),B1([1])]]),2005 : TensorProductOfCrystals(B6,B6,generators=[[B6([5,-6]),B6([6])]]),2012 : TensorProductOfCrystals(B6,B1,generators=[[B6([2,-1]),B1([1])]])}202FiniteDimensionalHighestWeightCrystal_TypeE.__init__(self, dominant_weight)203204205class FiniteDimensionalHighestWeightCrystal_TypeE7(FiniteDimensionalHighestWeightCrystal_TypeE):206r"""207Class of finite dimensional highest weight crystals of type `E_7`.208209EXAMPLES::210211sage: C=CartanType(['E',7])212sage: La=C.root_system().weight_lattice().fundamental_weights()213sage: T = HighestWeightCrystal(La[1])214sage: T.cardinality()215133216sage: B7 = T.column_crystal[7]; B7217The crystal of letters for type ['E', 7]218sage: t = T(B7([-5, 6]), B7([-2, 3])); t219[[-5, 6], [-2, 3]]220sage: [t.epsilon(i) for i in T.index_set()]221[0, 1, 0, 0, 1, 0, 0]222sage: [t.phi(i) for i in T.index_set()]223[0, 0, 1, 0, 0, 1, 0]224sage: TestSuite(t).run()225"""226227def __init__(self, dominant_weight):228"""229EXAMPLES::230231sage: C=CartanType(['E',7])232sage: La=C.root_system().weight_lattice().fundamental_weights()233sage: T = HighestWeightCrystal(0*La[1])234sage: T.cardinality()2351236sage: T = HighestWeightCrystal(La[1])237sage: T.cardinality()238133239sage: T = HighestWeightCrystal(2*La[1])240sage: T.cardinality()2417371242"""243B = CrystalOfLetters(['E',7])244self.column_crystal = {7 : B,2451 : TensorProductOfCrystals(B,B,generators=[[B([-7,1]),B([7])]]),2462 : TensorProductOfCrystals(B,B,B,generators=[[B([-1,2]),B([-7,1]),B([7])]]),2473 : TensorProductOfCrystals(B,B,B,B,generators=[[B([-2,3]),B([-1,2]),B([-7,1]),B([7])]]),2484 : TensorProductOfCrystals(B,B,B,B,generators=[[B([-5,4]),B([-6,5]),B([-7,6]),B([7])]]),2495 : TensorProductOfCrystals(B,B,B,generators=[[B([-6,5]),B([-7,6]),B([7])]]),2506 : TensorProductOfCrystals(B,B,generators=[[B([-7,6]),B([7])]])}251FiniteDimensionalHighestWeightCrystal_TypeE.__init__(self, dominant_weight)252253254