-------------------------- -- -- Elliptic curves, Abelian surfaces, equations and moduli -- -------------------------- -- SP/ 2/10/00 -- Compute equations for elliptic normal curves, Shioda surfaces, -- abelian surfaces, and certain "toric" degenerations. -- Exemplify this in the case of (1,11) polarized abelian surfaces, -- where we compute explicitly a projective model for their -- moduli. -- Routines: -- mooreMatrix -- zModularCurve -- ellipticNormCurve -- shiodaSurface -- heisenbergQuadrics -- discriminant -- toricDegeneration -- points (from points.m2 DE+SP) mooreMatrix = method() mooreMatrix (ZZ, Ring) := (d,R) -> ( if not isAffineRing(R) then error "expected an affine ring"; if numgens R=!=2*d then error "not enough many variables"; if (d % 2)==1 then (m:=(d+1)//2; matrix(R, table(d,d,(i,j)->R_(m*(i+j) % d)*R_(d+(m*(i-j) % d))))) else (m:=d//2; matrix(R, table(m,m,(i,j)-> R_((i+j) % d)*R_(d+((i-j) % d))+R_((i+j+m) % d)*R_(d+((i-j+m) % d))))) ) mooreMatrix (ZZ, ZZ) := (d,k) -> ( KK:=ZZ/k; R:=KK[Variables => 2*d]; mooreMatrix(d,R) ) document { mooreMatrix, TT "mooreMatrix(d,R)", "-- returns a Moore matrix over the ring R", BR,NOINDENT, "Given a ring R with 2d variables x_0..x_(d-1),y_0..y_(d-1), where the last d are considered as coordinates of a parameter point, it returns the matrix (of theta functions) M=(x_(m(i+j))y_(m*(i-j)), where m=(d+1)/2, if d is odd, or M=(x_(i+j)y_(i-j)+ x_(i+j+m)y_(i-j+m), where m=d/2, if d is even."} TEST /// R=ZZ/101[x_0..x_4,y_0..y_4] mooreMatrix(5,R) /// zModularCurve = method() zModularCurve Ring := (R) -> ( if not isPolynomialRing(R) then error "expected a polynomial ring"; d := numgens R; if not isPrime(d) then error "expected a prime number of variables"; KK := coefficientRing R; Rbig := tensor(R,KK[Variables => d]); M := mooreMatrix(d,Rbig); fmin := matrix(R,table(1,d,(i,j)->( if j==0 then 0_R else (if j<=(d//2) then R_j else -R_(d-j))))); f := map(R,Rbig, fmin | fmin); ideal mingens pfaffians(4,f(M)) ) document { zModularCurve, TT "zModularCurve(R)", "-- Computes the ideal defining the embedding of the modular curve X(p) into P^((p-3)/2) induced by the negative part of the linear system |L^((p-3)/2)|, where L is free generator of the Picard group of PSL(2,p)-invariant line bundles on X(p), and p>4 is a prime number", PARA, "X(p) is a compactification of the moduli space of isomorphism classes (E,B), where E is an elliptic curve and B is a (symplectic) basis of its group (ZZ/p)^2 of p-torsion points." } TEST /// R = ZZ/101[x_0..x_(10)] X = zModularCurve(R) --This is Klein's model for X(11) in P^4 betti res X -- total: 1 10 35 40 15 1 -- 0: 1 . . . . . -- 1: . . . . . . -- 2: . . . . . . -- 3: . 10 . . . . -- 4: . . 35 40 15 . -- 5: . . . . . 1 -- p = 7 R = ZZ/101[x_0..x_(p-1)] X = zModularCurve(R); S = ZZ/101[x_1..x_((p-3)//2+1)] i = substitute(X,S); betti i betti res i degree i hilbertPolynomial(S/i) hilbertFunction(1,S/i) hilbertFunction(2,S/i) hilbertFunction(3,S/i) /// ellipticNormCurve = method() ellipticNormCurve (Ring, List) := (R,L) -> ( if not isPolynomialRing(R) then error "expected a polynomial ring"; d := numgens R; if (d % 2 == 0) then error "expected an odd number of variables"; if (d=!=#L) then error "The # of entries in the list doesn't match the # of variables"; Big := tensor(R,(coefficientRing R)[Variables => d]); M := mooreMatrix(d,Big); f := map(R,Big, vars R | matrix(R,{L})); ideal mingens pfaffians(4,f(M)) ) document { ellipticNormCurve, TT "ellipticNormCurve(R,L)", "-- Computes the ideal of the level n elliptic normal curve in Proj(R), R a polynomial ring in n variables, whose origin is the point with coordinates given by the list (row matrix) L. For the moment this works only if n>3 is odd." } TEST /// R5 = ZZ/101[x_0..x_4] ellipticNormCurve(R5,{0,5,19,-19,-5}) -- X(5) is P^1_minus R7 = ZZ/127[x_0..x_6] C = ellipticNormCurve(R7,{0,1,65,17,-17,-65,-1}) -- a random point on X(7) hilbertPolynomial(R7/C) betti res C /// shiodaSurface = method() shiodaSurface Ring := (R) -> ( if not isPolynomialRing(R) then error "expected a polynomial ring"; d := numgens R; S :=(coefficientRing R)[Variables => d]; Rbig := tensor(R, S); M := mooreMatrix(d, Rbig); Pmin := matrix(S,table(1,d//2+1,(i,j)->( if j==0 then S_0 else S_j+S_(d-j)))); Xd := zModularCurve(S)+ideal(Pmin); fmin := matrix(S,table(1,d,(i,j)->( if j==0 then 0_S else (if j<=(d//2) then S_j else -S_(d-j))))); f := map(Rbig,Rbig, substitute(vars R, Rbig) | substitute(fmin, Rbig)); gEll := ideal mingens pfaffians(4,f(M)); tFam := saturate(gEll + substitute(Xd, Rbig), ideal substitute(vars S, Rbig)); Rtmp := Rbig/tFam; g := map(Rtmp, R, substitute(vars R, Rtmp)); ideal mingens ker(g) ) document { shiodaSurface, TT "shiodaSurface(R)", "-- The script returns the ideal of a projective model of the Shioda modular surface S(n) in Proj(R), where R is a polynomial ring in n >4 variables. For the moment this works only for n odd.", PARA, "The surface S(n) is constructed using the principal congruence subgroup Gamma(n) of SL(2,Z) and is a natural (toroidal) compactification of the universal elliptic curve with level-n-structure. The smooth fibers of S(n) map to Proj(R) as Heisenberg invariant elliptic normal curves." } TEST /// ------------------------------------------------------------ -- P^4, Here any H_5 invariant elliptic curve is cut out by 5 -- Pfaffian quadrics and the (projective) Shioda modular -- surface S(5) is a surface of degree 15 (Barth-Hulek) R5=ZZ/101[x_0..x_4] X=zModularCurve(R5) --this P^1 the eigenspace (-1) for iota S=shiodaSurface(R5) degree S --this should be 15 dim S betti res S sing = radical saturate(ideal presentation singularLocus(R5/S), ideal vars R5) hilbertPolynomial(R5/sing) -- The vertices of 6 complete pentagons, on which -- map the 12 singular fibres of S(5) ------------------------------------------------------------ -- P^6, Here any H_7 invariant elliptic curve is cut out by -- Pfaffian quadrics and the (projective) Shioda modular -- surface S(7) is a surface of degree 70 (Barth-Hulek) R7=ZZ/101[x_0..x_6] X=zModularCurve(R7) --this is Klein's quartic in P^2 (x_1^3*x_2-x_2^3*x_3-x_1*x_3^3=0) S=shiodaSurface(R7) degree S --this should be 70 dim S betti res S -- total: 1 140 440 525 280 56 -- 0: 1 . . . . . -- 1: . . . . . . -- 2: . . . . . . -- 3: . . . . . . -- 4: . . . . . . -- 5: . 140 440 525 280 56 hilbertPolynomial(R7/S) -- - 168*P + 70*P -- 1 2 /// heisenbergQuadrics = method() heisenbergQuadrics Ring := (R) -> ( if not isAffineRing(R) then error "expected an affine ring"; d := numgens R; if (d % 2 == 0) then error "the number of variables is not an odd integer"; matrix(R, table((d+1)//2,d,(i,j)->x_((i+j) % d)*x_((j-i+2*d) % d))) ) document { heisenbergQuadrics, TT "heisenbergQuadrics(R)", "-- Computes a matrix (over R) whose columns form a basis for the Heisenberg subrepresentations of quadrics on Proj(R); R is a polynomial ring in d variables, d an odd integer, and the Heisenberg group is H_d " } discriminant = method() discriminant (Ideal, Ring) := (I,R) -> ( if not isPolynomialRing(R) then error "expected a polynomial ring"; d := numgens I; -- One should also check if I is an ideal of quadrics if d=!=numgens R then error "the given ring has not enough many variables"; Big := tensor(ring I, R); quadrics := gens substitute(I, Big); v := substitute(transpose vars R, Big); w := substitute(vars(ring I), Big); Hessian := diff(transpose w * w, quadrics*v); det substitute(Hessian, R) ) discriminant (Matrix, Ring) := (M,R) -> ( if ((rank target M)=!=1) then error "given matrix not a row matrix"; discriminant(ideal M,R) ) document { discriminant, TT "discriminant(I,R)", "-- Computes the equation of the discriminant hypersurface in P^d=Proj(R), of ( an ideal I generated by ) (d+1) hyperquadrics. R is a polynomial ring with (d+1) variables." } toricDegeneration =method() toricDegeneration (Ring, ZZ) := (R,m) -> ( if not isPolynomialRing(R) then error "expected a polynomial ring"; d := numgens R; if not (d>9) then error "expected a ring with at least 10 vars"; I1:=ideal matrix(R, table(1,d,(i,j)->R_(j % d)*R_((j+2) % d)+m*R_((j-1) % d)*R_((j+3) % d))); I2:=ideal(R); scan(d-1, i-> scan (i..(d-1), j-> (if (((i-j)%d > 4) and ((j-i)%d > 4)) then I2=I2+ideal(R_i*R_j)))); ideal mingens (I1+I2)) toricDegeneration (Ring) := (R)-> (toricDegeneration (R, 1)) document { toricDegeneration, TT "toricDegeneration(R,m)", "- Computes the equations of a toric degeneration of a (1,d)-polarized abelian surface, as described in Gross-Popescu, Math Ann 310, p.360 Theorem 4.6. R is a polynomial ring with d variables. m is a coefficient in the coefficient ring of R.", PARA, TT "toricDegeneration(R)", "- The same as above but the param m=1."} TEST /// R = ZZ/101[x_0..x_10] I = toricDegeneration(R,1) betti res I hilbertPolynomial(R/I) -- (1,11) polarization /// -- The following is from "points.m2" (DE+SP, version 10/98): points = method() points Matrix := (M) -> ( V := vars ring M; if not isPolynomialRing(ring M) then error "expected a matrix over a polynomial ring"; if rank source V =!= rank target M then error "given matrix has not expected number of rows"; Points := ideal(V*(gens ker transpose M_{0})); scan(rank(source M)-1, i -> Points = intersect(Points,ideal(V*(gens ker transpose M_{i+1})))); Points ) document { points, TT "points(M)", " -- returns the ideal of the set of points in Proj(R) whose coordinates are the columns of M, a matrix over the polynomial ring R."} TEST /// -- Equation of a (classical) Kummer surface in P^3: R = ZZ/101[a,b,c,d] I = points(random(R^4,R^6)) --the ideal of (quadrics through) 6 points in P^3 S = ZZ/101[x_0,x_1,x_2,x_3] Kummer = discriminant(I,S) -- A Kummer surface in P^3 singK = saturate(ideal presentation singularLocus(S/Kummer), ideal vars S) hilbertPolynomial(S/singK) -- 16 nodes /// TEST /// --------------------------------------------- -- (1,11) polarized abelian surfaces with level structure --------------------------------------------- -- We work over a prime field of small characteristic, -- over which we may find rational points in the corresponding -- moduli space which is NOT rational (it is however unirational)! R = ZZ/419[x_0..x_(10)] sqi = 13 -- This is an 11th order root of unity mod 419 M = heisenbergQuadrics(R) pm = map(R,R,matrix(R,{{0,x_1,x_2,x_3,x_4,x_5,-x_5,-x_4,-x_3,-x_2,-x_1}})) S = submatrix(pm(M), {0..5}, {0..5}) -- The ideal of the eigenspaces for the eigenvalue -1 and 1, respectively -- of the Heisenberg involution iota: Pmin = ideal(x_0, x_1+x_(10), x_2+x_9, x_3+x_8, x_4+x_7, x_5+x_6) Pplus = ideal(x_1-x_(10), x_2-x_9, x_3-x_8, x_4-x_7, x_5-x_6) -- The locus of odd 2-torsion points of (1,11) polarized abelian surfaces: D2 = ideal mingens(pfaffians(6,S)+Pmin) degree D2 D1 = ideal mingens(pfaffians(4,S)+Pmin) D1 == zModularCurve(R)+Pmin -- D1 is the modular curve X(11) (Klein's z-model) dim D1 degree D1 hilbertPolynomial (R/D1) -- - 45*P + 20*P -- 0 1 -- Let P={{0, 1, 37, 10, 21, 1, -1,-21,-10,-37,-1}}\in P^(10) be a point -- on D2\D1 over ZZ/419 (found by brute force): pp = map(R,R,matrix(R,{{0, 1, 37, 10, 21, 1, -1,-21,-10,-37,-1}} )) Sp = pp(S) -- Sp=S(p) has rank 4, and thus a 2-dimensional kernel. -- We construct the ideal I generated by all (Heisenberg) -- H_(11)-subrepresentations of quadrics on Proj(R) -- that vanish at the chosen point P: nuc = transpose syz Sp nuc1 = submatrix(nuc,{0},{0..5}) nuc2 = submatrix(nuc,{1},{0..5}) I = ideal(nuc1*M)+ideal(nuc2*M) -- This turns out to be the homogeneous ideal of -- the (1,11) polarized abelian, one of whose odd -- 2-torsion points map to P. hilbertPolynomial (R/I) betti res I -- total: 1 22 88 319 616 638 385 132 23 2 -- 0: 1 . . . . . . . . . -- 1: . 22 55 11 . . . . . . -- 2: . . 33 308 616 638 385 132 22 2 -- 3: . . . . . . . . 1 . -- We construct next the two asociated Kummer surfaces: --1) The projection from P^(10) to Pmin=P^4 (above) maps 2:1 the abelian surface -- V(I) to a Kummer surface Kum1, whose 6 nodes (nodes1) correspond to the -- odd 2-torsion points of V(I): Rmin = ZZ/419[x_1..x_5] use R fmin = map(R/I, Rmin, {x_1-x_(10), x_2-x_9, x_3-x_8, x_4-x_7, x_5-x_6}) Kum1 = ker(fmin) betti res Kum1 --a 6-nodal complete intersection of a quadric and a cubic in P^4 nodes1 = saturate(ideal presentation singularLocus(Rmin/Kum1), ideal vars Rmin) hilbertPolynomial(Rmin/nodes1) --2) The projection from P^(10) to Pplus=P^5 (above) maps 2:1 the abelian surface -- V(I) to a Kummer surface Kum2, whose 10 nodes (nodes2) correspond to the -- even 2-torsion points of V(I): Rplus = ZZ/419[x_0..x_5] use R fplus = map(R/I, Rplus, {x_0,x_1+x_(10), x_2+x_9, x_3+x_8, x_4+x_7, x_5+x_6}) Kum2 = saturate(ker(fplus), ideal vars Rplus) betti res Kum2 --a 10-nodal complete intersection of 3 quadrics in P^5 nodes2 = saturate(ideal presentation singularLocus(Rplus/Kum2), ideal vars Rplus) hilbertPolynomial(Rplus/nodes2) Rdisc = ZZ/419[a,b,c] C = discriminant(Kum2, Rdisc) -- The discriminant of the web of quadrics defining Kum2 singC = saturate(ideal presentation singularLocus(Rdisc/C), ideal vars Rdisc) hilbertPolynomial (Rdisc/singC) --10*P -- 0 (Thus the discriminant C is a rational plane sextic curve. -- The Kummer surface Kum2 is isomorphic to a double cover of P^2 -- branched along the sextic C.) --- Moduli of (1,11) polarized abelians with level structure: --- A point of D2 (an odd 2-torsion of an abelian surface) is mapped --- to the pencil of H_(11) representations of quadrics in P^10 containing it: Rpluecker = ZZ/419[p_0..p_(14)] Rq = Rmin/substitute(ideal mingens(pfaffians(6,S)),Rmin) Theta = map(Rq, Rpluecker, substitute(gens pfaffians(4,S), Rq)) moduli = ideal mingens ker(Theta) betti moduli hilbertPolynomial(Rpluecker/moduli) -- - P + 9*P - 21*P + 14*P (This is a codimension 5 linear section of the Pluecker -- 0 1 2 3 embedding of Gr(2,6) in P^(14). If smooth -- this is a Fano 3fold X of genus 8. -- linearsect = submatrix( gens moduli, {0}, {0..4}) N = genericSkewMatrix(Rpluecker, p_0, 6) grass26 = pfaffians(4,N) moduli == grass26 + ideal(linearsect) -- true -- Such a smooth Fano 3-fold is birational to the intersection -- of the secant variety of Gr(2,6) (in dual coordinates) with the P^4 -- dual to "linearsect" above: P4dual = (vars Rpluecker)*(syz transpose jacobian linearsect) --(p + p , p + p , p + p , p + p , p + p , p , p , p , p , p ) -- 1 14 3 13 4 5 6 11 8 12 10 9 7 2 0 -- So choose new coordinates y_0..y_4 for P4dual corresponding to: -- p_0->0, p_1->y_2, p_2->0, p_3->-y_4, p_4->-y_0, p_5->y_0, -- p_6->y_3, p_7->0, p_8->y_1, p_9->0, p_10->0, p_11->-y_3 ,p_12->-y_1, -- p_13->y_4, p_14->-y_2. RP4 = ZZ/419[y_0..y_4] restr = map(RP4, Rpluecker, matrix {{0, y_2, 0, -y_4, -y_0, y_0, y_3, 0, y_1, 0, 0, -y_3, -y_1, y_4, -y_2}}) KleinCubic = pfaffians(6,restr(N)) -- This is the secant var of Gr(2,6) \cap P4dual: -- 2 2 2 2 2 -- ideal(y y + y y + y y + y y + y y ) -- 0 1 1 2 2 3 3 4 0 4 -- Klein's cubic (smooth), the unique PSL(2,11) invariant of degree 3 in P^4, -- is thus birational to the moduli space. ------ /// TEST /// --------------------------------------------- -- (1,9) polarized abelian surfaces with level structure --------------------------------------------- R = ZZ/829[x_0..x_8] sqi = 5 -- This is a primitive 9th order root of unity mod 829 M = heisenbergQuadrics(R) pm = map(R,R,matrix(R,{{0,x_1,x_2,x_3,x_4,-x_4,-x_3,-x_2,-x_1}})) S = submatrix(pm(M), {0..4}, {0..4}) -- The ideal of the eigenspaces for the eigenvalue -1 and 1, respectively -- of the Heisenberg involution iota: Pmin = ideal(x_0, x_1+x_8, x_2+x_7, x_3+x_6, x_4+x_5) Pplus = ideal(x_1-x_8, x_2-x_7, x_3-x_6, x_4-x_5) -- The locus of odd 2-torsion points of (1,9) polarized abelian surfaces is all of Pmin -- D1 contains the modular curve X(9) (z-model) D1 = ideal mingens(pfaffians(4,S)+Pmin) C1 = removeLowestDimension(D1) hilbertPolynomial(R/C1) -- o40 = - 18*P + 9*P -- 0 1 -- C1 is a curve of degree 9, and genus 10 iso to X(9) -- It is a complete intersection of two cubics ! resid = D1:C1 degree resid dim resid decompose(resid) -- Thus 4 distinct points, so the pfaffians do not cut out X(9) (9 is not prime !) -- Choose a "random" H_9 subrepresentation of quadrics Pt = matrix(R,{{1,31,5,-1,15}}) Imixed = ideal(Pt*M) --This ideal vanishes on a (1,9) polarized surface I = removeLowestDimension(Imixed) hilbertPolynomial(R/I) betti res I -- A (1,9) polarized abelian surface -- total: 1 15 84 171 165 81 19 2 -- 0: 1 . . . . . . . -- 1: . 9 3 . . . . . -- 2: . 6 81 171 165 81 18 2 -- 3: . . . . . . 1 . -- Thus a (1,9) polarized abelian is not cut out by quadrics -- as it happens for general (1,d) polarized surfaces for d>9. -- The quadrics cut out the abelian surface + 9 points: rest = Imixed : I hilbertPolynomial(R/rest) -- Generators of the Heisenberg group H_9 sigma = map(R,R, matrix {{x_8,x_0,x_1,x_2,x_3,x_4,x_5,x_6,x_7}}) tau = map(R,R, matrix table(1,9, (i,j)->sqi^j*x_j)) P0 = ideal(x_0-x_3,x_1,x_2,x_4,x_5,x_3-x_6,x_7,x_8) P0 == saturate((Pplus+rest), ideal vars R) --true Ptmp = P0 scan(3, i->(Ptmp=intersect(Ptmp,tau(Ptmp)))) scan(3, i->(Ptmp=intersect(Ptmp,sigma(Ptmp)))) Ptmp == rest --true. Thus the 9 extra points are the H_9 orbit --of the point P0 (independent of the choice of the surface) ///