Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

Environment to perform calculations of equivariant vector bundles on homogeneous varieties

1842 views
License: GPL3
ubuntu2204
1
from Equivariant_Vector_Bundles_On_Homogeneous_Varieties.Base_Space.Homogeneous_Variety import Irreducible_Homogeneous_Variety
2
3
4
5
class Grassmannian ( Irreducible_Homogeneous_Variety ) :
6
7
def __init__( self , k :int , N :int ) -> None :
8
"""
9
Initialize the Grassmannian Gr(k,N).
10
11
INPUT:
12
- ``k`` -- Integer ;
13
- ``N`` -- Integer ;
14
15
OUTPUT: None.
16
"""
17
assert isinstance( N , Integer ) , \
18
TypeError('The input for `N` must be an integer.')
19
assert 2 <= N , \
20
ValueError('The integer `N` must be equal to or greater than 2.')
21
self._N = N
22
23
assert isinstance( k , Integer ) , \
24
TypeError('The input for `k` must be an integer.')
25
assert k in [ 1 .. N-1 ] , \
26
ValueError('The integer `k` need to be in the range '+str([ 1 .. N-1 ])+'.')
27
self._k = k
28
29
from Equivariant_Vector_Bundles_On_Homogeneous_Varieties.Base_Space.Homogeneous_Variety import Irreducible_Cartan_Group
30
G = Irreducible_Cartan_Group( Cartan_Family='A' , Cartan_Degree=N-1 )
31
P = G.Maximal_Parabolic_Subgroup( Excluded_Node=k )
32
super( Grassmannian , self ).__init__( P )
33
34
35
def __repr__ ( self ) -> tuple[ int ] :
36
"""Returns all attributes which are necessary to initialize the object."""
37
return self.k() , self.N()
38
39
40
def __str__ ( self , Output_Style='Long' ) -> str :
41
"""Returns a one-line string as short description."""
42
if Output_Style == 'Short' : return 'Gr('+str(self.k())+';'+str(self.N())+')'
43
elif Output_Style == 'Long' : return 'Grassmannian variety of '+str(self.k())+'-dimensional linear subspaces in a '+str(self.N())+'-dimensional ambient vector space.'
44
else : raise ValueError('The input for ``Output_Style`` is inappropriate.')
45
46
47
def Fano_Index ( self ) -> int :
48
"""Returns the Fano index of ``self``."""
49
return self.N()
50
51
52
def Fonarev_Collection ( self ) -> "Lefschetz_Collection" :
53
"""
54
Returns Fonarev's (conjecturally full) minimal exceptional collection on ``self``.
55
56
OUTPUT:
57
- (Conjecturally full) minimal exceptional collection
58
59
REFERENCE:
60
- [Fon2012] Fonarev, A.: On minimal Lefschetz decompositions for Grassmannians
61
"""
62
fw = self.Basis('fw')
63
LC = self.Lefschetz_Collection( Starting_Block=[] , Support_Pattern='Trivial' )
64
for YD , Orbit_Length in Young_Diagram.Minimal_Upper_Triangulars( self.N()-self.k() , self.k() ) :
65
New_Object = self.Equivariant_Vector_Bundle( YD )
66
LC += self.Lefschetz_Collection( Starting_Block=[New_Object] , Support_Pattern=tuple(Orbit_Length*[1]) )
67
return LC
68
69
70
def Kapranov_Collection ( self ) -> "Lefschetz_Collection" :
71
"""
72
Returns Kapranov's full exceptional collection on ``self``.
73
74
OUTPUT:
75
- Full exceptional collection cU^alpha with n-k => alpha_1 => alpha_2 => ... => alpha_k => 0 (lexicographically orderd)
76
77
REFERENCE:
78
- [Kap1988] Kapranov, M. M.: On the derived categories of coherent sheaves on some homogeneous spaces. Invent. Math.92(1988), no.3, 479–508.
79
"""
80
k = self.k()
81
N = self.N()
82
fw = self.Basis('fw')
83
Weights = [ list(Weight)+[ 0 ] for Weight in IntegerListsLex( length=k , max_part=N-k , max_slope=0 ) ]
84
Weights.reverse()
85
Starting_Block = [ self.Irreducible_Equivariant_Vector_Bundle( sum([ self.Null_Weight() ] + [ (Weight[Node-1]-Weight[Node]) * fw[Node] for Node in [ 1 .. k ] ]) )
86
for Weight in Weights
87
]
88
Support_Pattern = 'Trivial'
89
return self.Lefschetz_Collection( Starting_Block=Starting_Block , Support_Pattern=Support_Pattern )
90
91
92
93
class Projective_Space ( Grassmannian ) :
94
95
def __init__( self , Dimension :int ) -> None :
96
"""
97
Initialize the projective space of a given dimension.
98
99
INPUT:
100
- ``Dimension`` -- Integer ;
101
102
OUTPUT: None.
103
"""
104
assert isinstance( Dimension , Integer ) , \
105
TypeError('The input for `Dimension` must be an integer.')
106
assert 0 < Dimension , \
107
ValueError('The dimension must be greater than zero.')
108
109
super( Projective_Space , self ).__init__( k=1 , N=Dimension+1 )
110
111
112
def __repr__ ( self ) -> int :
113
"""Returns all attributes which are necessary to initialize the object."""
114
return self.Dimension()
115
116
117
def __str__ ( self , Output_Style='Long' ) -> str :
118
"""Returns a one-line string as short description."""
119
if Output_Style == 'Short' : return 'PP^'+str(self.Dimension())
120
elif Output_Style == 'Long' : return 'Projective space of dimension '+str(self.Dimension())+'.'
121
else : raise ValueError('The input for ``Output_Style`` is inappropriate.')
122
123
124
def Beilinson_Collection ( self ) -> "Lefschetz_Collection" :
125
"""
126
Returns Beilinson's full exceptional collection on ``self``.
127
128
OUTPUT:
129
- Lefschetz collection with starting block ( O_X ) and support partition (self.Dimension()+1)*[ 1 ].
130
131
REFERENCE:
132
- [Bei1978] Beilinson, A. A.: Coherent sheaves on Pn and problems in linear algebra. Funktsional. Anal. i Prilozhen.12(1978), no.3, 68–69.
133
"""
134
Starting_Block = [ self.calO() ]
135
Support_Pattern = tuple( (self.Dimension()+1)*[ 1 ])
136
return self.Lefschetz_Collection( Starting_Block=Starting_Block , Support_Pattern=Support_Pattern )
137
138
139
140
class Dual_Projective_Space ( Grassmannian ) :
141
142
def __init__( self , Dimension :int ) -> None :
143
"""
144
Initialize the dual projective space of a given dimension.
145
146
INPUT:
147
- ``Dimension`` -- Integer ;
148
149
OUTPUT: None.
150
"""
151
assert isinstance( Dimension , Integer ) , \
152
TypeError('The input for `Dimension` must be an integer.')
153
assert 0 < Dimension , \
154
ValueError('The dimension must be greater than zero.')
155
156
super( Dual_Projective_Space , self ).__init__( k=Dimension , N=Dimension+1 )
157
158
159
def __repr__ ( self ) -> int :
160
"""Returns all attributes which are necessary to initialize the object."""
161
return self.Dimension()
162
163
164
def __str__ ( self , Output_Style='Long' ) -> str :
165
"""Returns a one-line string as short description."""
166
if Output_Style == 'Short' : return 'PP^('+str(self.Dimension())+',v)'
167
elif Output_Style == 'Long' : return 'Dual projective space of dimension '+str(self.Dimension())+'.'
168
else : raise ValueError('The input for ``Output_Style`` is inappropriate.')
169
170