# MAPLE script for computing the number 317.206.375 # # of twisted cubics in the general 5ic of P4 using Xavier's space # # cf. # # adapted by A. Meireles from a script by P. Meurer , # # The number of rational quartics on Calabi-Yau hypersurfaces in # # weighted projective space $\ps{2,1^4}$} Math. Scandin, #78, 63-83 1996,# # http://arXiv.org/abs/math/alg-geom/9409001 # ########################################################################## #sf vector space of forms of deg d in variables vars sf:=proc(vars,d) local i; coeff(expand(series(product((1/(1-t*vars[i])), i=1..nops(vars)),t=0,d+1)),t^d) end: n:=4; d:= 18; xx:= seq(x.i, i=0..n); ww:= seq(w.i, i=0..n); # F vector space of linear forms xi, i=0..n FF:=0: for i from 0 to n do FF:= FF + x.i od: FF:=FF; S2F:=sf([op(FF)],2): S3F:=sf([op(FF)],3): S4F:=sf([op(FF)],4): S5F:=sf([op(FF)],5): ############# some useful procedures ############# # TGo(r) tangent space of G_o at r TGo:= proc(r_) local res; res:= expand( (F- r_ )* dualrep(r_) ): end: # TGrass(idd,E) tangent space of Grass(2,E) at idd TGrass:= proc(idd_,E_) local res; res:= expand( (E_ - idd_)*dualrep(idd_) ): end: # Blow_up(TB , TX ) tangent space and O_B(1) # blow up de X along B Blow_up:=proc(TB_,TX_) local Tang_, i , N_, TL_, TPN_; N_:=expand(TX_-TB_): for i from 1 to nops(N_) do TL_:=op(i,N_): TPN_:=expand( (N_-TL_)/TL_ ): Tang_[1][i]:= expand(TB_ + TL_ + TPN_): # Tang_[1] stores the total tangent space Tang_[2][i]:=TL_: # Tang_[2] stores normal direction od: Tang_[3]:=nops(N_): Tang_[4]:=N_: Tang_ end: ########## actual computation starts here ################ fp:= 0; # fp counts the number of fixpts chave=0: for j from n to 0 by -1 do # choice of 3-plane F:=FF-x.j: for j1 from 1 to n-1 do for j2 from j1+1 to n do X1:=op(j1,F): X2:=op(j2,F): # choice of line F_:=expand(X1+X2): EGo:=expand(X1*F+X2*F-X1*X2): # space of quadratic formas # zero on TBase:=TGo(X1+X2) + F/x.j: q_:=dualrep(X1+X2): cont1:=0: cont2:=0: cont3:=0: # at the base for i0 from 1 to n do for i1 from i0 to n do if member(op(i0,F)*op(i1,F),{op(EGo)}) then for i2 from i0 to n do for i3 from i2 to n do if member(op(i2,F)*op(i3,F),{op(EGo-op(i0,F)*op(i1,F))}) then if ( (i0<>i2) and (i0<>i3) and (i1<>i2) and (i1<>i3) ) then fp:=fp+1: A[fp]:=op(i0,F)*op(i1,F)+op(i2,F)*op(i3,F): Q[fp]:=q_: id[fp]:=[op(i0,F)*op(i1,F),op(i2,F)*op(i3,F), op(i0,F)*op(i1,F)*op(i2,F)*op(i3,F)/(X1*X2),0,0]: T[fp]:=expand(TGrass(A[fp],EGo) + TBase): E1[fp]:=1: E2[fp]:=1: E3[fp]:=1: EE[fp]:=S5F-convert({op(expand(id[fp][1]*S3F)), op(expand(id[fp][2]*S3F)),op(expand(id[fp][3]*S3F)), op(expand(x.j*S4F))},`+`): fi: fi: od: od: fi: od: od: # on X^1 for k from 1 to 2 do for i0 from 1 to n-1 do for i1 from (i0+1) to n do X:=X.k: Y:=expand(F_-X): TB:=expand((F-op(i0,F)-op(i1,F))*dualrep(op(i0,F)+ op(i1,F))+Y/X): Tang:=Blow_up(TB,TGrass(X*op(i0,F)+X*op(i1,F),EGo)): T1:=Tang[1]: T2:=Tang[2]: for i from 1 to Tang[3] do # searching points in Y1 inters B = Y1 inters Y2 # that appear on Y1' (ou Y2') if ((((op(i0,F)=X) and (op(i1,F)=Y)) or ((op(i0,F)=Y) and (op(i1,F)=X))) and (member(op(i0,F)*op(i1,F)*T2[i]/Y, {op(F)}))) then cont1:=cont1+1: Taux1[1][cont1]:=T1[i]: Taux1[2][cont1]:=T2[i]: Taux1[3][cont1]:=[X,Y,op(i0,F),op(i1,F), op(i0,F)*op(i1,F)*T2[i]/Y]: elif (((op(i0,F)=X) or (op(i1,F)=X) ) and (member(op(i0,F)*op(i1,F)*T2[i]/Y,{op(F)}))) then cont3:=cont3+1: Taux3[1][cont3]:=T1[i]: Taux3[2][cont3]:=T2[i]: Taux3[3][cont3]:=1: Taux3[4][cont3]:=[X,Y,op(i0,F),op(i1,F), op(i0,F)*op(i1,F)*T2[i]/Y]: else fp:=fp+1: A[fp]:=X*op(i0,F)+X*op(i1,F): Q[fp]:=q_: id[fp]:=[X*op(i0,F),X*op(i1,F), X*op(i0,F)*op(i1,F)*T2[i]/Y,0,0]: E1[fp]:=T2[i]: E2[fp]:=1: E3[fp]:=1: T[fp]:=expand(T1[i]+TBase): EE[fp]:=S5F-convert({op(expand(id[fp][1]*S3F)), op(expand(id[fp][2]*S3F)),op(expand(id[fp][3]*S3F)), op(expand(x.j*S4F))},`+`): fi: od: od: od: od: # on X^2 # 1st kind: X^2 + XY + XZ for k from 1 to cont1 do X:=Taux1[3][k][1]: Y:=Taux1[3][k][2]: Z1:=Taux1[3][k][3]:Z2:=Taux1[3][k][4]: Z:=Taux1[3][k][5]: Tang:=Blow_up(Y/X+Z/X+(F-F_-Z)/Z,Taux1[1][k]): T1:=Tang[1]: T2:=Tang[2]: for i from 1 to Tang[3] do if (member(T2[i]*Y,{op(F)})) then cont2:=cont2+1: Taux2[1][cont2]:=T1[i]: Taux2[2][cont2]:=Taux1[2][k]: Taux2[3][cont2]:=T2[i]: Taux2[4][cont2]:=[X,Y,Z1,Z2,Z,T2[i]*Y]: else fp:=fp+1: A[fp]:=X^2+X*Y: Q[fp]:=q_: id[fp]:=[X^2,X*Y,X*Z,T2[i]*X*Y*Z,0] : E1[fp]:=Taux1[2][k]: E2[fp]:=T2[i]: E3[fp]:=1: T[fp]:=expand(T1[i]+TBase): EE[fp]:=S5F-convert({op(expand(id[fp][1]*S3F)), op(expand(id[fp][2]*S3F)),op(expand(id[fp][3]*S3F)), op(expand(id[fp][4]*S2F)),op(expand(x.j*S4F))},`+`): fi: od: od: # 2nd kind: WX + WY (+ W^2) for k from 1 to n do if ((op(k,F)<>X1) and (op(k,F)<>X2)) then idd:=op(k,F)*X1+op(k,F)*X2: Tang:=Blow_up((F-op(k,F))/op(k,F),TGrass(idd,EGo)): T1:=Tang[1]: T2:=Tang[2]: for i from 1 to Tang[3] do fp:=fp+1: A[fp]:=idd: Q[fp]:=q_: id[fp]:=[op(k,F)*X1,op(k,F)*X2,op(k,F)^2, T2[i]*op(k,F)*X1*X2,0]: E1[fp]:=1: E2[fp]:=T2[i]: E3[fp]:=1: T[fp]:=expand(T1[i]+TBase): EE[fp]:=S5F-convert({op(expand(id[fp][1]*S3F)), op(expand(id[fp][2]*S3F)),op(expand(id[fp][3]*S3F)), op(expand(id[fp][4]*S2F)),op(expand(x.j*S4F))},`+`): od: fi: od: # X^3 # 1st kind: X^2 + XY + XZ + XZK for k from 1 to cont2 do X:=Taux2[4][k][1]: Y:=Taux2[4][k][2]: Z1:=Taux2[4][k][3]: Z2:=Taux2[4][k][4]: Z:=Taux2[4][k][5]: K:=Taux2[4][k][6]: idd:=X^2+X*Y: Tang:=Blow_up((F-F_-K)/K+K/Y+(F-F_-Z)/Z+Y/X,Taux2[1][k]): for i from 1 to Tang[3] do fp:=fp+1: A[fp]:= idd: Q[fp]:=q_: id[fp]:= [X^2,X*Y,X*Z,X*Z*K,Tang[2][i]*K*Z*X]: E1[fp]:=Taux2[2][k]: E2[fp]:=Taux2[3][k]: E3[fp]:=Tang[2][i]: T[fp]:=expand(Tang[1][i]+TBase): EE[fp]:=S5F-convert({op(expand(id[fp][1]*S3F)), op(expand(id[fp][2]*S3F)),op(expand(id[fp][3]*S3F)), op(expand(id[fp][4]*S2F)),op(expand(id[fp][5]*S2F)), op(expand(x.j*S4F))},`+`): od: od: # 2nd kind: X^2 + XK + XZ for k from 1 to cont3 do X:=Taux3[4][k][1]: Y:=Taux3[4][k][2]: Z1:=Taux3[4][k][3]: Z2:=Taux3[4][k][4]: Z:=Taux3[4][k][5]: if (Z1=X) then K:=Z2 else K:=Z1 fi: idd:=X^2+X*K: Tang:=Blow_up(Y/X+(F-X-K-Z)/Z+(F-X-K)/K,Taux3[1][k]): for i from 1 to Tang[3] do fp:=fp+1: A[fp]:= idd: Q[fp]:=q_: id[fp]:=[X^2,X*K,X*Z,X*K*Z,Tang[2][i]*X*Z*K]: E1[fp]:=Taux3[2][k]: E2[fp]:=Taux3[3][k]: E3[fp]:=Tang[2][i]: T[fp]:=expand(Tang[1][i]+TBase): EE[fp]:=S5F-convert({op(expand(id[fp][1]*S3F)), op(expand(id[fp][2]*S3F)),op(expand(id[fp][3]*S3F)), op(expand(id[fp][4]*S2F)),op(expand(id[fp][5]*S2F)), op(expand(x.j*S4F))},`+`): od: od: od: od: od: # Using Bott WG:=[-2,7,13,17,39]; wg:= seq(WG[i], i=1..n+1); resultado:=0: for i from 1 to fp do den:=unapply(prodwts(T[i]), ww): den:=den(wg): f1:=unapply(prodwts(EE[i]), ww): f1:=f1(wg): g:=unapply(prodwts(Q[i]), ww): g:=g(wg): f:=(f1*g)/den: resultado:=simplify(resultado+f): od: print(fp, resultado); # should find fp=5550 with resultado=317206375 # I.e., there are 317.206.375 twisted cubics in the general 5ic of P4