-- calculations for the paper -- "..." -- by Asher Auel, Christian Boehning and Hans-Christian Graf v. Bothmer restart -- surfaces n = 2 -- of degree 6 d = 6 --------------------- -- Proposition 2.5 -- --------------------- -- Intersection lattice H_2^0(X_6,ZZ) following Looijenga -- the ring R0 = ZZ[u_0..u_(n+1)] -- the group ring ZZ[mu_d^4/mu_d] I0 = ideal(1-product gens R0)+ideal (apply(n+2,i->1-u_i^d)) R1 = R0/I0 -- the quotient ring describing H_2^0(Xd,ZZ) Id = ideal(apply(n+2,i->sum apply(d,k->u_i^k))) H2 = R1/Id -- a monomial basis of H_2^0(Xd,ZZ) monomialBasis = basis H2 monomialBasisList = flatten entries monomialBasis -- test: is the dimension of H_2^0(X_6,ZZ) == 105 assert (105==rank source basis H2) -- the intersection form use R1 Pu = product(n+2,i->(1-u_i)) time Q = matrix apply(monomialBasisList,uK-> apply(monomialBasisList,uL->( -- constant part of u^(K-L)*P (-1)^((n*(n+1))//2)*sub(sub(uK,R1)*(sub(uL,R1))^-1*Pu,ZZ) ))); -- used 22.8307 seconds -- test: determinant == d time assert (-d==sub(det sub(Q,QQ),ZZ)) -- used 0.725359 seconds -- coefficients of a polynomial in H2 with repect to the -- monomial basis coeffs = (F) -> sub(contract(monomialBasis,sub(F,H2)),ZZ) -- evaluate Q(f,g) for f,g polynomials evalQ = (f,g) -> (coeffs f)*Q*transpose coeffs g -- test: diagonal entries == 2 assert (-2 == evalQ(monomialBasisList#0,monomialBasisList#0)) ---------------- -- Remark 2.6 -- ---------------- -- all weights allWeights = (d,n) -> ( if n==-2 then {{}} else ( flatten apply(allWeights(d,n-1),i->apply(d,j->i|{j}))) ) -- test: are there really d^(n+2) weights assert (#allWeights(d,n) == d^(n+2)) -- relevant weights relevantWeights = (d,n) -> ( select(allWeights(d,n),u->(product u !=0) and ((sum u) % d == 0)) ) allChi = relevantWeights(d,n); -- test: are there really 105 relevant weights? assert (105==#allChi) -- field extension containing a primitive -- 6th root of unity xi S =toField (QQ[xi]/(xi^2-xi+1)) -- test: is xi really a 6th root of unity? assert (1==xi^d) -- make a point from a weight P = (K) -> matrix{apply(K,i->xi^i)} -- all points allPoints = apply(allChi,K->P(K)); -- test: are the points really zeros of Id? apply(allPoints,point->assert (0==sub(Id,point))); ------------------ -- Notation 3.1 -- ------------------ Z1113 = { P({1,1,1,3}),P({1,1,3,1}),P({1,3,1,1}),P({3,1,1,1}), P({5,5,5,3}),P({5,5,3,5}),P({5,3,5,5}),P({3,5,5,5}) } Z1122 = {P({1,1,2,2}),P({2,2,1,1}),P({5,5,4,4}),P({4,4,5,5})} Z1212 = {P({1,2,1,2}),P({2,1,2,1}),P({5,4,5,4}),P({4,5,4,5})} Z1221 = {P({1,2,2,1}),P({2,1,121}),P({5,4,4,5}),P({4,5,5,4})} --------------------- -- Proposition 3.2 -- --------------------- Q1113 = matrix{ {32, 8, 8, 8, 4, 16, 16, 16}, { 8, 32, 8, 8, 16, 4, 16, 16}, { 8, 8, 32, 8, 16, 16, 4, 16}, { 8, 8, 8, 32, 16, 16, 16, 4}, { 4, 16, 16, 16, 32, 8, 8, 8}, {16, 4, 16, 16, 8, 32, 8, 8}, {16, 16, 4, 16, 8, 8, 32, 8}, {16, 16, 16, 4, 8, 8, 8, 32} } assert (det Q1113 == 2^16*3^12) ------------------------------ -- proof of Proposition 3.2 -- ------------------------------ -- the matix of values M1113 = 12*(xi+1)*matrix{ {xi^4,xi^2,xi^2,xi^2,xi^1,xi^3,xi^3,xi^3}, {xi^2,xi^4,xi^2,xi^2,xi^3,xi^1,xi^3,xi^3}, {xi^2,xi^2,xi^4,xi^2,xi^3,xi^3,xi^1,xi^3}, {xi^2,xi^2,xi^2,xi^4,xi^3,xi^3,xi^3,xi^1}, {xi^1,xi^3,xi^3,xi^3,xi^4,xi^2,xi^2,xi^2}, {xi^3,xi^1,xi^3,xi^3,xi^2,xi^4,xi^2,xi^2}, {xi^3,xi^3,xi^1,xi^3,xi^2,xi^2,xi^4,xi^2}, {xi^3,xi^3,xi^3,xi^1,xi^2,xi^2,xi^2,xi^4} } -- the first basis vector s_1 = u_0+u_1+u_2 s_2 = u_0*u_1+u_0*u_2+u_1*u_2 s_3 = u_0*u_1*u_2 phi1 = matrix{{u_3^4,u_3^3,u_3^2,u_3^1,1}}* matrix{ {1}, {s_1^2-2*s_2+s_1+2}, {s_1^2-3*s_2+1}, { -s_1^2*s_2+2*s_2^2-s_3+2*s_1^2-5*s_2+s_1+1}, { -s_1^2*s_3+3*s_2*s_3-s_1^2*s_2+3*s_2^2-s_1*s_3-3*s_3-2*s_2-1} }; -- test: does phi1 have support on Z1113 ? pointsNotInZ1113 = select(allPoints,point->not member(point,Z1113)); apply(pointsNotInZ1113,point->assert (0==sub(phi1,point))); -- test: does phi1 have the values of the -- first column of M1113 assert (M1113_{0} == matrix apply(Z1113,point->{sub(phi1,point)})) -- the other basis vectors are obtained by -- appropiate permutation of variables shift = {u_1=>u_0,u_2=>u_1,u_3=>u_2,u_0=>u_3} -- and inversion of variables u_i^-1=u_i^5 bar = apply(4,i->u_i=>u_i^5) phi2 = sub(phi1,shift); phi3 = sub(phi2,shift); phi4 = sub(phi3,shift); phi5 = sub(phi1,bar); phi6 = sub(phi2,bar); phi7 = sub(phi3,bar); phi8 = sub(phi4,bar); basis1113 = {phi1,phi2,phi3,phi4,phi5,phi6,phi7,phi8}; -- test: do the values of the basis vectors at -- the points of Z1113 give M1113? assert (M1113 == matrix apply(Z1113,point->apply(basis1113,phi->sub(phi,point)))) -- the values of the baisis vectors on the -- complex conjugate points M1113bar = M1113^{4,5,6,7,0,1,2,3} -- calculating alpha_P(1,1,1,3) assert ( 1/108 == (evalQ(phi1,phi1))_0_0 / ((transpose M1113)*M1113bar)_0_0 ) -- test: is the intersection form the claimed one? assert (sub(Q1113,S) == 1/108 * (transpose M1113)*M1113bar) -- the intersection form on Z1113 calculated using -- Proposition 2.5 time Q1113looijenga = matrix apply(basis1113,i->apply(basis1113,j->evalQ(i,j))) -- used 0.531477 seconds -- test: does the intersection form agree with the -- one calculated directly by Proposition 2.5 assert (Q1113 == Q1113looijenga) --------------------- -- Proposition 3.3 -- --------------------- Q1122 = matrix{ {24,12, 0, 0}, {12,24, 0, 0}, { 0, 0,24,12}, { 0, 0,12,24} } assert (det Q1122 == 2^8*3^6) ------------------------------ -- proof of Proposition 3.3 -- ------------------------------ -- the values M1122 = 12*(xi+1)*matrix{ {xi^0,xi^5,xi^1,xi^0}, {xi^2,xi^3,xi^4,xi^5}, {xi^5,xi^0,xi^4,xi^5}, {xi^3,xi^2,xi^1,xi^0} } -- the interpolation polynomials q_1 = u_0+u_1 q_2 = u_0*u_1 r_1 = u_2+u_3 r_2 = u_2*u_3 psi_1 = ( q_1*q_2*r_1^2-q_1*r_1^2*r_2-r_1^2*r_2 +r_1^2*r_2+q_1*r_2^2-q_1^3*r_1+3*q_1*q_2*r_1+q_2*r_1^2-q_1^2*r_2-q_1*r_1*r_2 -q_1^3+3*q_1*q_2-2*q_1^2*r_1+3*q_2*r_1-q_1*r_2+r_1*r_2-q_1^2 +2*q_2-q_1*r_1-r_1^2+2*r_2-2*q_1-2*r_1-2 ); -- test: does phi1 have support on Z1113 ? pointsNotInZ1122 = select(allPoints,point->not member(point,Z1122)); apply(pointsNotInZ1122,point->assert (0==sub(psi_1,point))); psi_2 = sub(psi_1,bar); psi_3 = u_1*psi_1; psi_4 = u_1*psi_2; -- the basis basis1122 = {psi_1,psi_2,psi_3,psi_4}; -- test: do the values of the basis vectors at -- the points of Z1122 give M1122? assert (M1122 == matrix apply(Z1122,point->apply(basis1122,phi->sub(phi,point)))) -- the values of the baisis vectors on the -- complex conjugate points M1122bar = M1122^{2,3,0,1} -- calculating alpha_P(1,1,1,3) assert ( 1/72 == (evalQ(psi_1,psi_1))_0_0 / ((transpose M1122)*M1122bar)_0_0 ) -- test: is the intersection form the claimed one? assert (sub(Q1122,S) == 1/72 * (transpose M1122)*M1122bar) -- the intersection form on Z1122 calculated using -- Proposition 2.5 time Q1122looijenga = matrix apply(basis1122,i->apply(basis1122,j->evalQ(i,j))) -- used 0.531477 seconds -- test: does the intersection form agree with the -- one calculated directly by Proposition 2.5 assert (Q1122 == Q1122looijenga) -- the other bases basis1212 = apply(basis1122,psi->sub(psi,{u_1=>u_2,u_2=>u_1})); basis1221 = apply(basis1122,psi->sub(psi,{u_1=>u_3,u_3=>u_1})); -- test: is the intersection form on Z1212 and Z1221 -- calculated using Proposition 2.5 equal to -- the one on Z1122? assert (Q1122looijenga == matrix apply(basis1212,i->apply(basis1212,j->evalQ(i,j)))) assert (Q1122looijenga == matrix apply(basis1221,i->apply(basis1221,j->evalQ(i,j)))) ------------------------------ -- Proof of Proposition 3.4 -- ------------------------------ basisTprime = basis1113|basis1122|basis1212|basis1221; coeffBasisTprime = matrix apply(basisTprime,i->flatten entries coeffs(i)) -- test: basis vectors independent over QQ? assert (20==rank sub(coeffBasisTprime,QQ)) -- test: basis vectors independent over ZZ/2? assert (20==rank sub(coeffBasisTprime,ZZ/2)) -- test: basis vectors independent over ZZ/3? assert (20==rank sub(coeffBasisTprime,ZZ/3))