-- We investigate the 27 lines on a cubic surface
restart
printWidth=68
viewHelp
viewHelp minors
-- We start by constructing a cubic surface in P^3.
-- We choose 6 points, and blow them p
P2 = QQ[r,s,t]
p1 = trim minors(2, matrix"r,s,t;0,0,1")
p2 = trim minors(2, matrix"r,s,t;0,1,0")
p3 = trim minors(2, matrix"r,s,t;1,0,0")
p4 = trim minors(2, matrix"r,s,t;1,1,1")
p5 = trim minors(2, matrix"r,s,t;1,2,6")
p6 = trim minors(2, matrix"r,s,t;3,7,-2")
pts = {p1,p2,p3,p4,p5,p6}
I = intersect pts
netList I_*
P3 = QQ[a..d]
phi = map(P2,P3,gens I)
IX = kernel phi
RX = P3/IX
X = Proj RX
dim X
degree X
codim singularLocus X
HH^0(OO_X)
for i from 0 to 10 list rank HH^0(OO_X(i))
-- Consider the strict transform of the lines through
-- two of the 6 points:
I1 = preimage(phi,ideal(t)) -- these are lines in P^3 on X
I2 = preimage(phi,ideal(s))
I3 = preimage(phi,ideal(r))
-- there are actually 15 of these
netList subsets(pts,2)
apply(subsets(pts,2), pq -> (
lin := (intersect(pq_0,pq_1))_0;
lin))
Lines2 = apply(subsets(pts,2), pq -> (
lin := (intersect(pq_0,pq_1))_0;
preimage(phi, ideal(lin))))
#Lines2
Lines2/codim
Lines2/degree
codim(Lines2_0 + Lines2_1) -- these two lines do not meet
-- there are 6 conics through each set of 5 of the points
-- the preimages of these are lines in P^3
intersect drop(pts,1)
J = ideal((intersect drop(pts,1))_0)
preimage(phi,J)
Lines3 = for i from 0 to 5 list (
J = intersect drop(pts,{i,i});
preimage(phi,ideal(J_0))
)
netList Lines3
-- There are 6 more lines on X: the exceptional curves
-- of the blowup.
-- These can be obtained in a number of ways
-- One way is to construct the graph of the map
-- phi:P2 ---> P3
-- (as a bigraded ideal)
S = QQ[r,s,t][a..d]
IS = sub(I,S)
m = matrix{{a,b,c,d},IS_*}
Gr = saturate(minors(2,m), ideal"a,b,c,d")
Gr = trim saturate(Gr,IS)
primaryDecomposition Gr
codim Gr -- so Gr defines a surface (which is isomorphic to X)
degree Gr_0
isHomogeneous Gr
trim(Gr + sub(p1,S))
primaryDecomposition oo
saturate(trim(Gr + sub(p1,S)), ideal(r_S,s,t))
select(oo_*, f -> first degree f > 0) -- equations of the line
Lines1 = apply(pts, p -> (
J := saturate(trim(Gr + sub(p,S)),
ideal(r_S,s,t));
substitute(ideal select(J_*, f ->
first degree f > 0), P3)
))
netList Lines1
Lines = join(Lines1,Lines2,Lines3)
netList Lines
-- check that they all lie on X
tally apply(Lines, L -> isSubset(IX, L))
-- theory tells us that these 27 lines are all
-- exceptional curves, i.e. have self
-- intersection -1 on X.
-- Let's check that.
-- How should we find intersection numbers
-- of curves on X?
LinesR = apply(Lines, L -> sub(L,RX));
L = LinesR_0
ML = sheaf Hom(L,RX)
euler RX
euler ML
euler(ML ** ML)
ML2 = ML ** ML
HH^0 ML2
HH^1 ML2
HH^2 ML2
intersectionNumber = (F,G) ->
euler ring F - euler F - euler G + euler(F**G)
intersectionNumber := method()
intersectionNumber(CoherentSheaf,CoherentSheaf) := (F,G) ->
euler ring F - euler F - euler G + euler(F**G)
LinesM = apply(Lines, L -> sheaf Hom(sub(L,RX),RX))
apply(LinesM, F -> intersectionNumber(F,F))
matrix for i from 0 to 26 list
for j from 0 to 26 list
intersectionNumber(LinesM_i, LinesM_j)
Lines13 = LinesM_{0..5,21..26}
matrix apply(Lines13, L ->
apply(Lines13, M ->
intersectionNumber(L,M)))
-- This configuration of 12 lines is called
-- Schlaffi's double six