Environment to perform calculations of equivariant vector bundles on homogeneous varieties
Equivariant_Vector_Bundles_On_Homogeneous_Varieties__0-2 / src / Equivariant_Vector_Bundles_On_Homogeneous_Varieties / Base_Space / Grassmannian.sage
1842 viewsLicense: GPL3
ubuntu2204
from Equivariant_Vector_Bundles_On_Homogeneous_Varieties.Base_Space.Homogeneous_Variety import Irreducible_Homogeneous_Variety1234class Grassmannian ( Irreducible_Homogeneous_Variety ) :56def __init__( self , k :int , N :int ) -> None :7"""8Initialize the Grassmannian Gr(k,N).910INPUT:11- ``k`` -- Integer ;12- ``N`` -- Integer ;1314OUTPUT: None.15"""16assert isinstance( N , Integer ) , \17TypeError('The input for `N` must be an integer.')18assert 2 <= N , \19ValueError('The integer `N` must be equal to or greater than 2.')20self._N = N2122assert isinstance( k , Integer ) , \23TypeError('The input for `k` must be an integer.')24assert k in [ 1 .. N-1 ] , \25ValueError('The integer `k` need to be in the range '+str([ 1 .. N-1 ])+'.')26self._k = k2728from Equivariant_Vector_Bundles_On_Homogeneous_Varieties.Base_Space.Homogeneous_Variety import Irreducible_Cartan_Group29G = Irreducible_Cartan_Group( Cartan_Family='A' , Cartan_Degree=N-1 )30P = G.Maximal_Parabolic_Subgroup( Excluded_Node=k )31super( Grassmannian , self ).__init__( P )323334def __repr__ ( self ) -> tuple[ int ] :35"""Returns all attributes which are necessary to initialize the object."""36return self.k() , self.N()373839def __str__ ( self , Output_Style='Long' ) -> str :40"""Returns a one-line string as short description."""41if Output_Style == 'Short' : return 'Gr('+str(self.k())+';'+str(self.N())+')'42elif Output_Style == 'Long' : return 'Grassmannian variety of '+str(self.k())+'-dimensional linear subspaces in a '+str(self.N())+'-dimensional ambient vector space.'43else : raise ValueError('The input for ``Output_Style`` is inappropriate.')444546def Fano_Index ( self ) -> int :47"""Returns the Fano index of ``self``."""48return self.N()495051def Fonarev_Collection ( self ) -> "Lefschetz_Collection" :52"""53Returns Fonarev's (conjecturally full) minimal exceptional collection on ``self``.5455OUTPUT:56- (Conjecturally full) minimal exceptional collection5758REFERENCE:59- [Fon2012] Fonarev, A.: On minimal Lefschetz decompositions for Grassmannians60"""61fw = self.Basis('fw')62LC = self.Lefschetz_Collection( Starting_Block=[] , Support_Pattern='Trivial' )63for YD , Orbit_Length in Young_Diagram.Minimal_Upper_Triangulars( self.N()-self.k() , self.k() ) :64New_Object = self.Equivariant_Vector_Bundle( YD )65LC += self.Lefschetz_Collection( Starting_Block=[New_Object] , Support_Pattern=tuple(Orbit_Length*[1]) )66return LC676869def Kapranov_Collection ( self ) -> "Lefschetz_Collection" :70"""71Returns Kapranov's full exceptional collection on ``self``.7273OUTPUT:74- Full exceptional collection cU^alpha with n-k => alpha_1 => alpha_2 => ... => alpha_k => 0 (lexicographically orderd)7576REFERENCE:77- [Kap1988] Kapranov, M. M.: On the derived categories of coherent sheaves on some homogeneous spaces. Invent. Math.92(1988), no.3, 479–508.78"""79k = self.k()80N = self.N()81fw = self.Basis('fw')82Weights = [ list(Weight)+[ 0 ] for Weight in IntegerListsLex( length=k , max_part=N-k , max_slope=0 ) ]83Weights.reverse()84Starting_Block = [ self.Irreducible_Equivariant_Vector_Bundle( sum([ self.Null_Weight() ] + [ (Weight[Node-1]-Weight[Node]) * fw[Node] for Node in [ 1 .. k ] ]) )85for Weight in Weights86]87Support_Pattern = 'Trivial'88return self.Lefschetz_Collection( Starting_Block=Starting_Block , Support_Pattern=Support_Pattern )89909192class Projective_Space ( Grassmannian ) :9394def __init__( self , Dimension :int ) -> None :95"""96Initialize the projective space of a given dimension.9798INPUT:99- ``Dimension`` -- Integer ;100101OUTPUT: None.102"""103assert isinstance( Dimension , Integer ) , \104TypeError('The input for `Dimension` must be an integer.')105assert 0 < Dimension , \106ValueError('The dimension must be greater than zero.')107108super( Projective_Space , self ).__init__( k=1 , N=Dimension+1 )109110111def __repr__ ( self ) -> int :112"""Returns all attributes which are necessary to initialize the object."""113return self.Dimension()114115116def __str__ ( self , Output_Style='Long' ) -> str :117"""Returns a one-line string as short description."""118if Output_Style == 'Short' : return 'PP^'+str(self.Dimension())119elif Output_Style == 'Long' : return 'Projective space of dimension '+str(self.Dimension())+'.'120else : raise ValueError('The input for ``Output_Style`` is inappropriate.')121122123def Beilinson_Collection ( self ) -> "Lefschetz_Collection" :124"""125Returns Beilinson's full exceptional collection on ``self``.126127OUTPUT:128- Lefschetz collection with starting block ( O_X ) and support partition (self.Dimension()+1)*[ 1 ].129130REFERENCE:131- [Bei1978] Beilinson, A. A.: Coherent sheaves on Pn and problems in linear algebra. Funktsional. Anal. i Prilozhen.12(1978), no.3, 68–69.132"""133Starting_Block = [ self.calO() ]134Support_Pattern = tuple( (self.Dimension()+1)*[ 1 ])135return self.Lefschetz_Collection( Starting_Block=Starting_Block , Support_Pattern=Support_Pattern )136137138139class Dual_Projective_Space ( Grassmannian ) :140141def __init__( self , Dimension :int ) -> None :142"""143Initialize the dual projective space of a given dimension.144145INPUT:146- ``Dimension`` -- Integer ;147148OUTPUT: None.149"""150assert isinstance( Dimension , Integer ) , \151TypeError('The input for `Dimension` must be an integer.')152assert 0 < Dimension , \153ValueError('The dimension must be greater than zero.')154155super( Dual_Projective_Space , self ).__init__( k=Dimension , N=Dimension+1 )156157158def __repr__ ( self ) -> int :159"""Returns all attributes which are necessary to initialize the object."""160return self.Dimension()161162163def __str__ ( self , Output_Style='Long' ) -> str :164"""Returns a one-line string as short description."""165if Output_Style == 'Short' : return 'PP^('+str(self.Dimension())+',v)'166elif Output_Style == 'Long' : return 'Dual projective space of dimension '+str(self.Dimension())+'.'167else : raise ValueError('The input for ``Output_Style`` is inappropriate.')168169170