Subsection 4.2.2
Schubert2 identifies G(1,3) with its Chow ring. We can see this directly using the command intersectionRing.
i1 : G = flagBundle({2,2}) o1 = G o1 : a flag bundle with subquotient ranks {2:2} |
i2 : intersectionRing G QQ[][H , H , H , H ] 1,1 1,2 2,1 2,2 o2 = --------------------------------------------------------------------------- (- H - H , - H - H H - H , - H H - H H , -H H ) 1,1 2,1 1,2 1,1 2,1 2,2 1,2 2,1 1,1 2,2 1,2 2,2 o2 : QuotientRing |
The generators Hi,j of the above ring are defined by the formula Hi,j = cj(Bi) where Bi is the i-th bundle in the list G.Bundles (numbered starting with 1) and cj is the j-th Chern class, defined in Ch. 5. The relationship with the Schubert classes on G(1,3) is as follows:
H2,1 = σ1
H2,2 = σ2
H1,1 = -σ1
H1,2 = σ1,1
The Schubert classes can also be accessed directly using the placeholderSchubertCycle command -- see Section 4.3 for details.
As an example, we can compute (σ1)2:
i3 : sigma_1 = H_(2,1) o3 = H 2,1 QQ[][H , H , H , H ] 1,1 1,2 2,1 2,2 o3 : --------------------------------------------------------------------------- (- H - H , - H - H H - H , - H H - H H , -H H ) 1,1 2,1 1,2 1,1 2,1 2,2 1,2 2,1 1,1 2,2 1,2 2,2 |
i4 : c = (sigma_1)^2 2 o4 = H 2,1 QQ[][H , H , H , H ] 1,1 1,2 2,1 2,2 o4 : --------------------------------------------------------------------------- (- H - H , - H - H H - H , - H H - H H , -H H ) 1,1 2,1 1,2 1,1 2,1 2,2 1,2 2,1 1,1 2,2 1,2 2,2 |
Oops! This just gave us H2,12 back! Schubert2 actually uses σ12 and σ1,1 as its "preferred basis" for the codimension-2 part of the Chow ring of G(1,3). To convert to the Schubert basis, we use the function placeholderToSchubertBasis:
i5 : placeholderToSchubertBasis(c,G) o5 = s + s {1, 1} {2, 0} o5 : QQ[][s , s , s , s , s , s ] {0, 0} {1, 0} {1, 1} {2, 0} {2, 1} {2, 2} |
We recover the formula of Theorem 4.13: σ12 = σ2 + σ1,1.
Subsection 4.2.4
How many lines in ℙ3 meet four general lines?
After phrasing the problem in terms of Schubert calculus, this is easy to calculate both by hand and in Schubert2:
i6 : sigma_1 = H_(2,1) o6 = H 2,1 QQ[][H , H , H , H ] 1,1 1,2 2,1 2,2 o6 : --------------------------------------------------------------------------- (- H - H , - H - H H - H , - H H - H H , -H H ) 1,1 2,1 1,2 1,1 2,1 2,2 1,2 2,1 1,1 2,2 1,2 2,2 |
i7 : integral (sigma_1)^4 o7 = 2 |
The command integral here returns the degree of the zero-cycle (σ1)4, which is the number we want (namely, 2).
Lines meeting a curve
We can easily build a function which, given the degree d of a space curve C, returns the cycle of lines in ℙ3 meeting C:
i8 : sigma_1 = H_(2,1) o8 = H 2,1 QQ[][H , H , H , H ] 1,1 1,2 2,1 2,2 o8 : --------------------------------------------------------------------------- (- H - H , - H - H H - H , - H H - H H , -H H ) 1,1 2,1 1,2 1,1 2,1 2,2 1,2 2,1 1,1 2,2 1,2 2,2 |
i9 : linesMeetingCurve = d -> d*sigma_1 o9 = linesMeetingCurve o9 : FunctionClosure |
And now we can calculate, for example, how many lines meet four general conics:
i10 : integral (linesMeetingCurve(2))^4 o10 = 32 |
But we really want to answer the question once and for all: how many lines meet four general curves of degree d? To do this, we use the base command, which allows us auxiliary parameters:
i11 : S = base d --Our base variety, with one "auxiliary parameter" d o11 = S o11 : an abstract variety of dimension 0 |
i12 : G' = flagBundle({2,2},S,VariableNames => K) --GG(1,3) with our extra parameter o12 = G' o12 : a flag bundle with subquotient ranks {2:2} |
i13 : intersectionRing G' --note the additional parameter d QQ[d][K , K , K , K ] 1,1 1,2 2,1 2,2 o13 = --------------------------------------------------------------------------- (- K - K , - K - K K - K , - K K - K K , -K K ) 1,1 2,1 1,2 1,1 2,1 2,2 1,2 2,1 1,1 2,2 1,2 2,2 o13 : QuotientRing |
i14 : sigma_1 = K_(2,1) o14 = K 2,1 QQ[d][K , K , K , K ] 1,1 1,2 2,1 2,2 o14 : --------------------------------------------------------------------------- (- K - K , - K - K K - K , - K K - K K , -K K ) 1,1 2,1 1,2 1,1 2,1 2,2 1,2 2,1 1,1 2,2 1,2 2,2 |
i15 : linesmeetingcurve = d*sigma_1 o15 = d*K 2,1 QQ[d][K , K , K , K ] 1,1 1,2 2,1 2,2 o15 : --------------------------------------------------------------------------- (- K - K , - K - K K - K , - K K - K K , -K K ) 1,1 2,1 1,2 1,1 2,1 2,2 1,2 2,1 1,1 2,2 1,2 2,2 |
i16 : integral linesmeetingcurve^4 4 o16 = 2d o16 : QQ[d] |
And we get back the answer 2d4, solving the problem once and for all.
Chords to a Space Curve
For each d and g we build the cycle in G(1,3) of lines secant to a general curve of degree d and genus g:
i17 : S = base(g,d') --We use d' to avoid the d from the last example o17 = S o17 : an abstract variety of dimension 0 |
i18 : G'' = flagBundle({2,2},S,VariableNames => L) o18 = G'' o18 : a flag bundle with subquotient ranks {2:2} |
i19 : sigma_2 = L_(2,2) o19 = L 2,2 QQ[g, d'][L , L , L , L ] 1,1 1,2 2,1 2,2 o19 : --------------------------------------------------------------------------- (- L - L , - L - L L - L , - L L - L L , -L L ) 1,1 2,1 1,2 1,1 2,1 2,2 1,2 2,1 1,1 2,2 1,2 2,2 |
i20 : sigma_(1,1) = L_(1,2) 2 o20 = L - L 2,1 2,2 QQ[g, d'][L , L , L , L ] 1,1 1,2 2,1 2,2 o20 : --------------------------------------------------------------------------- (- L - L , - L - L L - L , - L L - L L , -L L ) 1,1 2,1 1,2 1,1 2,1 2,2 1,2 2,1 1,1 2,2 1,2 2,2 |
i21 : cycleofchords = ((d'-1)*(d'-2)/2 - g)*sigma_2 + (d'*(d'-1)/2)*sigma_(1,1) 1 2 1 2 o21 = (-d' - -d')L + (- g - d' + 1)L 2 2 2,1 2,2 QQ[g, d'][L , L , L , L ] 1,1 1,2 2,1 2,2 o21 : --------------------------------------------------------------------------- (- L - L , - L - L L - L , - L L - L L , -L L ) 1,1 2,1 1,2 1,1 2,1 2,2 1,2 2,1 1,1 2,2 1,2 2,2 |
The keynote question was: how many lines are secant to two general twisted cubics? But we can do better, and answer the question: how many lines are secant to two general curves of degree d and genus d?
i22 : chordstotwocurves = integral cycleofchords^2 1 4 2 3 2 7 2 o22 = -d' - g*d' - 2d' + g + 3g*d' + -d' - 2g - 3d' + 1 2 2 o22 : QQ[g, d'] |
Now if we want to answer our specific question, we just subsitute in the desired values for d and g:
i23 : sub(chordstotwocurves, {d' => 3, g => 0/1}) o23 = 10 o23 : QQ |
WARNING: because of some ugly M2 design decisions, if you don’t make at least one of d’ or g a rational number, this subsitute will return the wrong answer! Hopefully this design will be changed in the future.
Exercise 4.25 (a):
If C is a smooth, nondegenerate space curve and L and M are general lines in ℙ3, how many chords to C meet both L and M? Using our work above, we immediately compute:
i24 : sigma_1 = L_(2,1) o24 = L 2,1 QQ[g, d'][L , L , L , L ] 1,1 1,2 2,1 2,2 o24 : --------------------------------------------------------------------------- (- L - L , - L - L L - L , - L L - L L , -L L ) 1,1 2,1 1,2 1,1 2,1 2,2 1,2 2,1 1,1 2,2 1,2 2,2 |
i25 : integral (cycleofchords*(sigma_1)^2) 2 o25 = d' - g - 2d' + 1 o25 : QQ[g, d'] |
Tangent Lines to a Surface
Exercise 4.28:
Using our Grassmannian G’ with an extra base parameter d, we build the cycle of tangent lines to a general surface of degree d:
i26 : sigma_1 = K_(2,1) o26 = K 2,1 QQ[d][K , K , K , K ] 1,1 1,2 2,1 2,2 o26 : --------------------------------------------------------------------------- (- K - K , - K - K K - K , - K K - K K , -K K ) 1,1 2,1 1,2 1,1 2,1 2,2 1,2 2,1 1,1 2,2 1,2 2,2 |
i27 : tangentcycle = d*(d-1)*sigma_1 2 o27 = (d - d)K 2,1 QQ[d][K , K , K , K ] 1,1 1,2 2,1 2,2 o27 : --------------------------------------------------------------------------- (- K - K , - K - K K - K , - K K - K K , -K K ) 1,1 2,1 1,2 1,1 2,1 2,2 1,2 2,1 1,1 2,2 1,2 2,2 |
Now we can compute the number of lines tangent to four general surfaces of degree d:
i28 : tangentlines = integral tangentcycle^4 8 7 6 5 4 o28 = 2d - 8d + 12d - 8d + 2d o28 : QQ[d] |
In particular, we calculate the number of lines tangent to four general quadric surfaces:
i29 : sub(tangentlines, d => 2/1) o29 = 32 o29 : QQ |