// This is the MAGMA file accompanying Chapter 3 of the thesis. // In here one can find the codes that are complementary to the proofs // in the thesis. // In the code, the surface X_eta will be here denoted with S // In order to perform any part of the code, // is often require to run also some previous parts. // To avoid errors we therefore encourage to run the code from the very beginning to // the desired point. /***************************************************************/ /* */ /* Proof of Remark 3.2.12 */ /* */ /***************************************************************/ // See after the proof of Proposition 3.6.6. /***************************************************************/ /* */ /* End of proof of Remark 3.2.12 */ /* */ /***************************************************************/ /***************************************************************/ /* */ /* Proof of Remark 3.3.5 */ /* */ /***************************************************************/ QQ:=Rationals(); Pol:=PolynomialRing(QQ,7); Polt:=PolynomialRing(Pol); P2:=PolynomialRing(Polt,3); f:=x^6+y^6+z^6+D*x^2*y^2*z^2; fg:=Evaluate(f,[-b*t-c,t,1]); sq:=(a0*t^3+a1*t^2+a2*t+a3)^2; df:=fg-sq; Coeff:=Coefficients(df); I:=Ideal([Pol!g : g in Coeff]); 1 in I; GB:=GroebnerBasis(I); Polw:=PolynomialRing(QQ); n:=#GB; h:=GB[n]; h:=Polw!Evaluate(h,[0,0,0,0,0,0,w]); K1:=CyclotomicField(3); Roots(h,K1); /***************************************************************/ /* */ /* End of proof of Remark 3.3.5 */ /* */ /***************************************************************/ // We define the field of definition of Pic X_eta, denoted by K2, // together with the weighted projective space and // the surface itself preK:=CyclotomicField(12); zeta3:=zeta12^4; zeta4:=zeta12^3; zeta6:=zeta12^2; K:=FunctionField(preK); R:=PolynomialRing(K,3); K1:=quo; S:=PolynomialRing(K1); K2:=quo; delta:=4*zeta4*b0*b1*b2; eps:=delta/(c0*(3*c0+2*t)); c1:=(-t-c0+eps)/2; c2:=-t-c0-c1; assert c2 eq (-t-c0-eps)/2; PT:=ProjectiveSpace(K2,[1,1,1,3]); T:=CoordinateRing(PT); fS:=x^6+y^6+z^6+t*x^2*y^2*z^2-w^2; S:=Scheme(PT,fS); // In order to compute the Gram matrix, we will need // to perform some computations over a finite field FF_p^n. // Let K_{2,t0} be the number field given by specialising K_2 to t=t0=7. // One can see that p=79 is a prime of good reduction for X_7. // Let pp be a prime of K_2,t0 lying above p=79, // then the residue field of pp is FF_{79^2}. p:=79; F:=GF(p^2); tp:=F!7; Pol:=PolynomialRing(F); zeta12p:=Roots(v^12-1)[12][1]; zeta6p:=zeta12p^2; zeta4p:=zeta12p^3; zeta3p:=zeta12p^4; h:=v^3+tp*v^2+4; cp:=Roots(h); c0p:=cp[1][1]; c1p:=cp[2][1]; c2p:=cp[3][1]; _,b0p:=IsSquare(3+tp); _,b1p:=IsSquare(3*zeta3p+tp); _,b2p:=IsSquare(3*zeta3p^2+tp); PP:=ProjectiveSpace(F,[1,1,1,3]); PPW:=CoordinateRing(PP); // We define the reduction maps mod p // namely the reduction map of fields and polynomial rings. // and also the reduction of S mod p. // Using these maps we define the reduction mod p=79 // of X_7. prePsi:=homF | zeta12p>; Psi:=homF| prePsi, tp>; Psi1:=homF | Psi, [b0p,b1p,b2p]>; Psi2:=homF | Psi1, c0p>; PsiP:=homPPW | Psi2, [X,Y,Z,W]>; assert Psi2(c1) eq c1p; assert Psi2(c2) eq c2p; fSp:=PsiP(fS); Sp:=Scheme(PP,fSp); // We define the subgroup G of the automorphism of X_eta Var:={x,y,z}; Perm:=Permutations(Var); idT:=homT | x,y,z,w>; t1:=homT | y,x,z,w>; t2:=homT | y,z,x,w>; p105:=homT | zeta6*x,y,zeta6^(-1)*z,w >; p015:=homT | x,zeta6*y,zeta6^(-1)*z,w >; p003:=homT | x,y,-z,w >; genG:=[t1,t2,p105,p015,p003]; S3:=[hom T | perm[1],perm[2],perm[3],w> : perm in Perm]; C2a:=[idT,p003]; C6a:=[homT | zeta6^i*x, y, zeta6^(-i)*z,w >: i in [0..5]]; C6b:=[homT | x, zeta6^i*y, zeta6^(-i)*z,w >: i in [0..5]]; C2b:=[p015,idT]; GG:=car; G:=[s[1]*s[2]*s[3]*s[4] : s in GG]; assert #G eq 36*4; /* // we check that G keeps S fixed for s in G do assert s(fS) eq fS; end for; */ // We define the divisors D'_1,...,D'_4. a3:=(9*c0+6*t)*delta/4/(t^3+27); b3:=-c0^2-t*c0; c3:=(18-3*t^2*c0-3*t*c0^2)/8/(t^3+27)*delta; Ddp:= [ [x^2 + y^2 + zeta3*z^2, w-b1*x*y*z], [x^2 + zeta3*y^2 + zeta3^2*z^2, w-b0*x*y*z], [c0*x^2 - 2*(9 * c0^2 + 3 * t * c0 - 2 * t^2) / delta *x*y + 2*y^2 - z^2, (x^3+a3*x^2*y+ b3*x*y^2 + c3*y^3)*(-c0^2*c1/2+1)-w], [x^2+y^2+zeta3^2*z^2, w-b2*x*y*z] ]; // We let G act on Ddp, // getting a list of divisors that is G-invariant // we denote it by GDdp GDdp:={}; for eqn in Ddp do for t in G do eqn11:=t(eqn[1]); eqn12:=t(eqn[2]); if Psi2(LeadingCoefficient(eqn11)) ne F!0 and Psi2(LeadingCoefficient(eqn12)) ne F!0 then Include(~GDdp, [eqn11/LeadingCoefficient(eqn11), eqn12/LeadingCoefficient(eqn12)]); else Include(~GDdp, [eqn11, eqn12]); end if; end for; end for; #GDdp; /***************************************************************/ /* */ /* Proof of Proposition 3.3.14 */ /* */ /***************************************************************/ DivsG:=GDdp; DivsGd:={[eqn[1]/LeadingCoefficient(eqn[1]),eqn[2]/LeadingCoefficient(eqn[2])] : eqn in DivsG}; assert #DivsGd eq #DivsG; DivsGp:=[[PsiP(eqn[1]),PsiP(eqn[2])]:eqn in GDdp]; DivsGpp:={[eqn[1]/LeadingCoefficient(eqn[1]),eqn[2]/LeadingCoefficient(eqn[2])] : eqn in DivsGp}; assert #DivsGp eq #DivsGpp; ListDivsGp:=[Scheme(PP,eqn) : eqn in DivsGp]; function GramMatrixD(List) m:=#List; M:=ScalarMatrix(Integers(),m,-2); for i in [1..m] do for j in [1..i] do Int:=List[i] meet List[j]; if Dimension(Int) eq 1 then M[i,j]:=2*ArithmeticGenus(Int)-2; else M[i,j]:=Degree(Int); end if; M[j,i]:=M[i,j]; end for; end for; return M; end function; AG:=GramMatrixD(ListDivsGp); LG:=Lattice(AG); BG:=Basis(LG); rk:=#BG; SolG:=Solution(AG,[Vector(b) : b in BG]); MG:=Matrix(SolG); GramG:=MG*AG*Transpose(MG); assert Rank(GramG) eq 19; assert Determinant(GramG) eq 2^21*3^3; L:=LatticeWithGram(GramG: CheckPositive:= false); AL,_,_:=DualQuotient(L); AL; /***************************************************************/ /* */ /* End of proof of Proposition 3.3.14 */ /* */ /***************************************************************/ /***************************************************************/ /* */ /* Proof of Remark 3.3.17 */ /* */ /***************************************************************/ for i in [1..#Ddp] do Ddm:=Remove(Ddp,i); GDdm:={}; for eqn in Ddm do for t in G do eqn11:=t(eqn[1]); eqn12:=t(eqn[2]); if Psi2(LeadingCoefficient(eqn11)) ne F!0 and Psi2(LeadingCoefficient(eqn12)) ne F!0 then Include(~GDdm, [eqn11/LeadingCoefficient(eqn11), eqn12/LeadingCoefficient(eqn12)]); else Include(~GDdm, [eqn11, eqn12]); end if; end for; end for; DivsG:=GDdm; DivsGd:={[eqn[1]/LeadingCoefficient(eqn[1]),eqn[2]/LeadingCoefficient(eqn[2])] : eqn in DivsG}; assert #DivsGd eq #DivsG; DivsGp:=[[PsiP(eqn[1]),PsiP(eqn[2])]:eqn in GDdm]; DivsGpp:={[eqn[1]/LeadingCoefficient(eqn[1]),eqn[2]/LeadingCoefficient(eqn[2])] : eqn in DivsGp}; assert #DivsGp eq #DivsGpp; ListDivsGp:=[Scheme(PP,eqn) : eqn in DivsGp]; AG:=GramMatrixD(ListDivsGp); LG:=Lattice(AG); BG:=Basis(LG); SolG:=Solution(AG,[Vector(b) : b in BG]); MG:=Matrix(SolG); GramG:=MG*AG*Transpose(MG); assert Rank(GramG) le 17; end for; /***************************************************************/ /* */ /* End of proof of Remark 3.3.17 */ /* */ /***************************************************************/ /***************************************************************/ /* */ /* Proof of Remark 3.3.20 */ /* */ /***************************************************************/ // See at the end. /***************************************************************/ /* */ /* End of proof of Remark 3.3.20 */ /* */ /***************************************************************/ // Now we define the divisors D_1,...,D_5 inside Dd // and the set GDd a3:=(9*c0+6*t)*delta/4/(t^3+27); b3:=-c0^2-t*c0; c3:=(18-3*t^2*c0-3*t*c0^2)/8/(t^3+27)*delta; a5:=zeta12*(-zeta6+2)*(b0*b1+b0*b2+b1*b2+t)/9; c5:=zeta12*(zeta6-2)/3; r5:=zeta12*(zeta6-2)*(2*b0*b1*b2+(2*t-3)*b0+(2*t-3*zeta3)*b1+(2*t+3*zeta6)*b2)/9; v5:=-b0-b1-b2; Dd:= [ [x^2 + y^2 + zeta3*z^2, w-b1*x*y*z], [x^2 + zeta3*y^2 + zeta3^2*z^2, w-b0*x*y*z], [c0*x^2 - 2*(9 * c0^2 + 3 * t * c0 - 2 * t^2) / delta *x*y + 2*y^2 - z^2, (x^3+a3*x^2*y+ b3*x*y^2 + c3*y^3)*(-c0^2*c1/2+1)-w], [2*x*y-c1*z^2, x^3-y^3-w], [a5*x^2 +c5*(y^2+z^2)+y*z, r5*x^3+ v5*x*y*z-w] ]; GDd:={}; for eqn in Dd do for t in G do eqn11:=t(eqn[1]); eqn12:=t(eqn[2]); if Psi2(LeadingCoefficient(eqn11)) ne F!0 and Psi2(LeadingCoefficient(eqn12)) ne F!0 then Include(~GDd, [eqn11/LeadingCoefficient(eqn11), eqn12/LeadingCoefficient(eqn12)]); else Include(~GDd, [eqn11, eqn12]); end if; end for; end for; #GDd; /***************************************************************/ /* */ /* Proof of Remark 3.4.6 */ /* */ /***************************************************************/ // See at the end /***************************************************************/ /* */ /* End of Proof of Remark 3.4.6 */ /* */ /***************************************************************/ /***************************************************************/ /* */ /* Proof of Proposition 3.5.4 */ /* */ /***************************************************************/ DivsG:=GDd; DivsGd:={[eqn[1]/LeadingCoefficient(eqn[1]),eqn[2]/LeadingCoefficient(eqn[2])] : eqn in DivsG}; assert #DivsGd eq #DivsG; DivsGp:=[[PsiP(eqn[1]),PsiP(eqn[2])]:eqn in GDd]; DivsGpp:={[eqn[1]/LeadingCoefficient(eqn[1]),eqn[2]/LeadingCoefficient(eqn[2])] : eqn in DivsGp}; assert #DivsGp eq #DivsGpp; ListDivsGp:=[Scheme(PP,eqn) : eqn in DivsGp]; AG:=GramMatrixD(ListDivsGp); LG:=Lattice(AG); BG:=Basis(LG); rk:=#BG; SolG:=Solution(AG,[Vector(b) : b in BG]); MG:=Matrix(SolG); GramG:=MG*AG*Transpose(MG); assert Rank(GramG) eq 19; assert Determinant(GramG) eq 2^5*3^3; L:=LatticeWithGram(GramG: CheckPositive:= false); AL,_,_:=DualQuotient(L); pSignature(L,-1) eq -17; AL; /***************************************************************/ /* */ /* End of proof of Proposition 3.5.4 */ /* */ /***************************************************************/ /***************************************************************/ /* */ /* Proof of Remark 3.5.5 */ /* */ /***************************************************************/ for i in [1..#Dd] do Ddm:=Remove(Dd,i); GDdm:={}; for eqn in Ddm do for t in G do eqn11:=t(eqn[1]); eqn12:=t(eqn[2]); if Psi2(LeadingCoefficient(eqn11)) ne F!0 and Psi2(LeadingCoefficient(eqn12)) ne F!0 then Include(~GDdm, [eqn11/LeadingCoefficient(eqn11), eqn12/LeadingCoefficient(eqn12)]); else Include(~GDdm, [eqn11, eqn12]); end if; end for; end for; DivsG:=GDdm; DivsGd:={[eqn[1]/LeadingCoefficient(eqn[1]),eqn[2]/LeadingCoefficient(eqn[2])] : eqn in DivsG}; assert #DivsGd eq #DivsG; DivsGp:=[[PsiP(eqn[1]),PsiP(eqn[2])]:eqn in GDdm]; DivsGpp:={[eqn[1]/LeadingCoefficient(eqn[1]),eqn[2]/LeadingCoefficient(eqn[2])] : eqn in DivsGp}; assert #DivsGp eq #DivsGpp; ListDivsGp:=[Scheme(PP,eqn) : eqn in DivsGp]; AGm:=GramMatrixD(ListDivsGp); LGm:=Lattice(AGm); BGm:=Basis(LGm); SolGm:=Solution(AGm,[Vector(b) : b in BGm]); MGm:=Matrix(SolGm); GramGm:=MGm*AGm*Transpose(MGm); assert Rank(GramGm) le 18 or Determinant(GramGm) ge 2^5*3^5 ; end for; /***************************************************************/ /* */ /* End of proof of Remark 3.5.5 */ /* */ /***************************************************************/ /***************************************************************/ /* */ /* Proof of Corollary 3.5.6 */ /* */ /***************************************************************/ /* auxiliary function */ function Rep2(x) return x-2*Round(x/2); end function; /* end auxiliary function */ L:=LatticeWithGram(GramG: CheckPositive:= false); AL,DL,phi:=DualQuotient(L); mE8:=-Matrix(GramMatrix(Lattice("E",8))); mE8:=ChangeRing(mE8,Integers()); U:=Matrix([[0,1],[1,0]]); mA5:=-Matrix(GramMatrix(Lattice("A",5))); mA2:=-Matrix([[2,-1],[-1,2]]); m4A2:=-4*Matrix([[2,-1],[-1,2]]); Dec1:=< , , , , >; L1:=Dec1[1,1]; for i in [1..#Dec1] do if i eq 1 and Dec1[i,2] ne 1 then for j in [2..Dec1[1,2]] do L1:=DiagonalJoin(L1,Dec1[i,1]); end for; end if; if i gt 1 then for j in [1..Dec1[i,2]] do L1:=DiagonalJoin(L1,Dec1[i,1]); end for; end if; end for; L1:=LatticeWithGram(L1: CheckPositive:= false); AL1,DL1,phi1:=DualQuotient(L1); q:={* Rep2(Norm((phi^-1)(g))) : g in AL *}; q1:={* Rep2(Norm((phi1^-1)(g1))) : g1 in AL1 *}; assert pSignature(L1,-1) eq pSignature(L,-1); assert Rank(L1) eq Rank(L); assert Factorisation(Determinant(L1)) eq Factorisation(Determinant(L)); assert #Generators(AL1) eq #Generators(AL); assert q eq q1; assert IsIsomorphic(AL,AL1); /***************************************************************/ /* */ /* End of proof of Corollary 3.5.6 */ /* */ /***************************************************************/ // We define the Galois group Gal(K_2/K) Gal:=[]; EPhi12:=[1,5,7,11]; Ipm:=[1,-1]; GalK1K:=CartesianPower(Ipm,3); cc:=[K2!c0,K2!c1,K2!c2]; GalLE:=CartesianPower(Ipm,2); for i in EPhi12 do presigma := homK2| zeta12^i>; sigma := homK2 | presigma, t>; for s in GalK1K do if sigma(zeta3) eq K2!zeta3 then sigma1:=homK2 | sigma, [s[1]*b0,s[2]*b1,s[3]*b2]>; else sigma1:=homK2 | sigma, [s[1]*b0,s[2]*b2,s[3]*b1]>; end if; for j in [1..#cc] do c:=cc[j]; sigma2:=homK2 | sigma1, c>; Append(~Gal,sigma2); end for; end for; end for; // we name a set of generators genGal:=[tau1,...,tau5] of Gal(K2/K) // (see Remark 6.4) gen:=[zeta12,b0,b1,b2,c0]; ImTau:=[ [zeta12^7, b0, b1, b2, c0], [zeta12, b0, b1, b2, c1], [zeta12^7, -b0, b1, b2, c0], [zeta12^11, b0, -b2, b1, c0], [zeta12^7, b0, b1, -b2, c0] ]; genGal:=[]; for i in [1..#ImTau] do for s in Gal do if [s(gg) : gg in gen] eq ImTau[i] then Append(~genGal,s); end if; end for; end for; GalT:=[homT | s,[x,y,z,w]> : s in Gal]; genGalT:=[homT | s,[x,y,z,w]> : s in genGal]; // We let GalT act on GDd // getting a list of divisor that is invariant // under the action of G and Gal. GGalDd:={}; for eqn in GDd do for s in GalT do eqn11:=s(eqn[1]); eqn12:=s(eqn[2]); if Psi2(LeadingCoefficient(eqn11)) ne F!0 and Psi2(LeadingCoefficient(eqn12)) ne F!0 then Include(~GGalDd, [eqn11/LeadingCoefficient(eqn11), eqn12/LeadingCoefficient(eqn12)]); else Include(~GGalDd, [eqn11, eqn12]); end if; end for; end for; GGDd:=[eqn : eqn in GGalDd]; #GGDd; // We skim the list GGDd deleting the repetitions, // getting two different lists of equations of divisors: // SetDivs5 and SetDivsp. // The elements of the list at the same position are the same up to a scalar // SetDivsp will be used to reduce the equation mod p // SetDivs5 will be used to compute the matrices // corresponding to the action of on Pic(S) SetDivsNP:=[eqn : eqn in GGDd | {LeadingCoefficient(eqn[1]),LeadingCoefficient(eqn[2])} eq {1}]; SetDivsP:=[eqn : eqn in GGDd | {LeadingCoefficient(eqn[1]),LeadingCoefficient(eqn[2])} ne {1}]; #SetDivsP; #SetDivsNP; assert #SetDivsP+#SetDivsNP eq #GGDd; SetDivsP1:=[[eqn[1]/LeadingCoefficient(eqn[1]),eqn[2]/LeadingCoefficient(eqn[2])]: eqn in SetDivsP]; SetDivsP2:=Set(SetDivsP1); IndProb:=[Index(SetDivsP1,eqn) : eqn in SetDivsP2 ]; SetDivsP3:=[SetDivsP[i] : i in IndProb]; SetDivsP4:=[[eqn[1]/LeadingCoefficient(eqn[1]),eqn[2]/LeadingCoefficient(eqn[2])]: eqn in SetDivsP3]; SetDivs5:= SetDivsNP cat SetDivsP4; SetDivsGGal:=SetDivs5; SetDivsp:=SetDivsNP cat SetDivsP3; assert #SetDivsp eq #SetDivs5; #SetDivsp; Divsp:=[[PsiP(eqn[1]),PsiP(eqn[2])]:eqn in SetDivsp]; ListDivsp:=[Scheme(PP,eqn) : eqn in Divsp]; /***************************************************************/ /* */ /* Proof of Proposition 3.6.6 */ /* */ /***************************************************************/ A0:=GramMatrixD(ListDivsp); L0:=Lattice(A0); B0:=Basis(L0); rk:=#B0; Sol0:=Solution(A0,[Vector(b) : b in B0]); M0:=Matrix(Sol0); Gram0:=M0*A0*Transpose(M0); assert Rank(GramG) eq Rank(Gram0); assert Determinant(GramG) eq Determinant(Gram0); /***************************************************************/ /* */ /* End of proof of Proposition 3.6.6 */ /* */ /***************************************************************/ // By construction of the list GGalDd, // the groups Gal and G act as permutations on it. // We want to compute the 414x414 permutation matrices that correspond to the // elements of G and Galois. // Notice that they will all be 414x414 permutation matrices. // Since these divisors generate a rank 19 lattice // we can write these matrices as 19x19 matrices nD:=#SetDivsGGal; GalGraphs:=[]; for s in genGalT do Graph:=[]; for i in [1..nD] do eqn:=SetDivsGGal[i]; eqn1:=[s(eqn[1]),s(eqn[2])]; j:=Index(SetDivsGGal,[eqn1[1]/LeadingCoefficient(eqn1[1]), eqn1[2]/LeadingCoefficient(eqn1[2])]); Append(~Graph,j); end for; Append(~GalGraphs,Graph); end for; MgenGal:=[]; // 414x414 matrices corresponding to the generators // of the Galois group for Gr in GalGraphs do Ms:=[[0: i in [1..nD]] : j in [1..nD]]; for i in [1..nD] do Ms[i][Gr[i]]:=1; end for; Append(~MgenGal,Matrix(Ms)); end for; GGraphs:=[]; for t in genG do Graph:=[]; for i in [1..nD] do eqn:=SetDivsGGal[i]; eqn1:=[t(eqn[1]),t(eqn[2])]; j:=Index(SetDivsGGal,[eqn1[1]/LeadingCoefficient(eqn1[1]), eqn1[2]/LeadingCoefficient(eqn1[2])]); Append(~Graph,j); end for; Append(~GGraphs,Graph); end for; MgenG:=[]; // 414x414 matrices corresponding to the generators // of G for Gr in GGraphs do Ms:=[[0: i in [1..nD]] : j in [1..nD]]; for i in [1..nD] do Ms[i][Gr[i]]:=1; end for; Append(~MgenG,Matrix(Ms)); end for; MgenGGal:=MgenG cat MgenGal; // 414x414 matrices corresponding to the generators // of // The matrix M0 defines a map from ZZ^19 to ZZ^414 // We need a section of this map, represented by the matrix N0 // With this matrix we compute the 19x19 matrices // representing the generators of G and Gal BB0:=Matrix(B0); Id19:=ScalarMatrix(19,1); N0:=Matrix(Solution(BB0,[A0[i] : i in [1..#ListDivsp]])); assert M0*N0 eq Id19; assert N0*Gram0*Transpose(N0) eq A0; M19genGGal:=[M0*M*N0 : M in MgenGGal]; // 19x19 matrices corresponding // to the generators of // , that is, // the union of the generators // of G and Gal M19genG:=[M0*M*N0 : M in MgenG]; // 19x19 matrices corresponding // to the generators of // G. M19genGal:=[M0*M*N0 : M in MgenGal]; // 19x19 matrices corresponding // to the generators of // Gal. GG:=MatrixGroup<19,Integers()|M19genGGal>; // The group of 19x19 matrices // corresponding to . G19:=MatrixGroup<19,Integers()|M19genG>; // The group of 19x19 matrices // corresponding to G. Gal19:=MatrixGroup<19,Integers()|M19genGal>; // The group of 19x19 matrices // corresponding to Gal. tM1:=M19genGal[1]; tM2:=M19genGal[2]; tM3:=M19genGal[3]; tM4:=M19genGal[4]; tM5:=M19genGal[5]; t1M:=M19genG[1]; t2M:=M19genG[2]; p105M:=M19genG[3]; p015M:=M19genG[4]; p003M:=M19genG[5]; /***************************************************************/ /* */ /* Proof of Remark 3.2.12 */ /* */ /***************************************************************/ p333M:=p105M^3*p015M^3*p003M; p240M:=p105M^2*p015M^4; p033M:=p015M^3; p303M:=p105M^3; GsGen:=[p333M*t1M, t2M, p240M, p033M, p303M ]; Gs:=MatrixGroup<19, Integers() | GsGen >; IdentifyGroup(Gs); /***************************************************************/ /* */ /* End of proof of Remark 3.2.12 */ /* */ /***************************************************************/ /***************************************************************/ /* */ /* Proof of Theorem 3.1.4 */ /* */ /***************************************************************/ /* auxuliary function */ // This function compute the self intersection of // the element v of a lattice L having M as intersection form function QuadInt(v,w,M) v1:=ChangeRing(Matrix(v),Integers()); w1:=ChangeRing(Matrix(w),Integers()); return (v1*M*Transpose(w1))[1,1]; end function; /* end auxiliary function */ // First we prove the injectivity of iota_p for p=2. // We compute k'p F2:=GF(2); V2:=VectorSpace(F2,19); Gram2:=ChangeRing(Gram0,F2); k2:=sub; k2; GenG2:=[ChangeRing(M,F2) : M in M19genG]; G2:=MatrixGroup<19,F2|GenG2>; G2t:=[M : M in Set(G2)]; k2p:=[v : v in k2 | QuadInt(v,v,Gram0) mod 8 eq 0]; Vk2p:=[v : v in k2p | Dimension(sub) le 2]; W:=sub; assert Set(W) eq Set(Vk2p); // we compute a basis of W v1:=Basis(W)[1]; v2:=Basis(W)[2]; // We see which representative of v1 has been used by MAGMA elv1:=Eltseq(v1); u1:=&+[elv1[i]*B0[i] : i in [1..#B0]]; // We write w1 as combination // of the elements of the basis // of L0. uu,N:=Solution(A0,u1); // we write it as combination // of -2 curves. // It does not need to be minimal // We pick a particular representative w1 of v1, // such that w1^2 = -8 // and we check that ut is indeed a representative of v1 ww:=[ 0 : i in [1..414]]; ww[37]:=1; ww[70]:=-1; ww:=Parent(uu)!(ww); w1:=ww*N0; assert QuadInt(w1,w1,Gram0) eq -8; assert V2!w1 eq v1; /* p030:=homT | x,-y,z,w >; tau2:=genGalT[2]; e:=Dd[3]; e1:=[tau2(tau2(t1(p030(e[1])))),tau2(tau2(t1(p030(e[2]))))]; e1:=[e1[1]/LeadingCoefficient(e1[1]), e1[2]/LeadingCoefficient(e1[2])]; Index(GGDd,e1); e2:=[tau2(tau2(t1(e[1]))),tau2(tau2(t1(e[2])))]; e2:=[e2[1]/LeadingCoefficient(e2[1]), e2[2]/LeadingCoefficient(e2[2])]; Index(GGDd,e2); */ ww:=[ 0 : i in [1..414]]; ww[389]:=1; ww[84]:=-1; ww:=Parent(uu)!(ww); w2:=ww*N0; assert QuadInt(w2,w2,Gram0) eq -8; assert V2!w2 eq v2; // Then we prove the injectivity for p=3 F3:=GF(3); V3:=VectorSpace(F3,19); Gram3:=ChangeRing(Gram0,F3); k3:=sub; k3; GenGG3:=[ChangeRing(M,F3) : M in M19genGGal]; GG3:=MatrixGroup<19,F3|GenGG3>; k3p:=[v : v in k3 | QuadInt(v,v,Gram0) mod 18 eq 0]; Vk3p:=[v : v in k3p | Dimension(sub) le 1]; assert Vk3p eq [V3![0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]; /***************************************************************/ /* */ /* End of proof of Theorem 3.1.4 */ /* */ /***************************************************************/ /***************************************************************/ /* */ /* Proof of Proposition 3.7.3 */ /* */ /***************************************************************/ assert #Set(Gal19) eq 6*2*8; /***************************************************************/ /* */ /* End of proof of Proposition 3.7.3 */ /* */ /***************************************************************/ /***************************************************************/ /* */ /* Proof of Theorem 3.7.5 */ /* */ /***************************************************************/ // Using the matrix representation of the action of GG on L0 // We can compute the H^0(Gal,Pic), gmpic:=GModule(Gal19); cmpic:=CohomologyModule(Gal19,gmpic); cgpic:=CohomologyGroup(cmpic,0); cgpic; // Using the matrix representation of the action of GG on L0 // We can compute the H^1(Gal,Pic), // and H^1(H,Pic) for any H:=CyclotomicField(12); zeta3:=zeta12^4; zeta4:=zeta12^3; zeta6:=zeta12^2; K:=FunctionField(preK); R:=PolynomialRing(K,3); K1:=quo; S:=PolynomialRing(K1); K2:=quo; delta:=4*zeta4*b0*b1*b2; eps:=delta/(c0*(3*c0+2*t)); c1:=(-t-c0+eps)/2; c2:=-t-c0-c1; assert c2 eq (-t-c0-eps)/2; PT:=ProjectiveSpace(K2,[1,1,1,3]); T:=CoordinateRing(PT); fS:=x^6+y^6+z^6+t*x^2*y^2*z^2-w^2; S:=Scheme(PT,fS); preK:=CyclotomicField(12); zeta3:=zeta12^4; zeta4:=zeta12^3; zeta6:=zeta12^2; K:=FunctionField(preK); R:=PolynomialRing(K,3); K1:=quo; S:=PolynomialRing(K1); K2:=quo; delta:=4*zeta4*b0*b1*b2; eps:=delta/(c0*(3*c0+2*t)); c1:=(-t-c0+eps)/2; c2:=-t-c0-c1; assert c2 eq (-t-c0-eps)/2; PT:=ProjectiveSpace(K2,[1,1,1,3]); T:=CoordinateRing(PT); fS:=x^6+y^6+z^6+t*x^2*y^2*z^2-w^2; S:=Scheme(PT,fS); p:=13; F:=GF(p^3); tp:=F!0; Pol:=PolynomialRing(F); zeta12p:=Roots(v^12-1)[12][1]; zeta6p:=zeta12p^2; zeta4p:=zeta12p^3; zeta3p:=zeta12p^4; h:=v^3+tp*v^2+4; cp:=Roots(h); c0p:=cp[1][1]; c1p:=cp[2][1]; c2p:=cp[3][1]; _,b0p:=IsSquare(3+tp); _,b1p:=IsSquare(3*zeta3p+tp); _,b2p:=IsSquare(3*zeta3p^2+tp); PP:=ProjectiveSpace(F,[1,1,1,3]); PPW:=CoordinateRing(PP); // We define the reduction maps mod p // namely the reduction map of fields and polynomial rings. // and also the reduction of S mod p. // Using these maps we define the reduction mod p=79 // of X_7. prePsi:=homF | zeta12p>; Psi:=homF| prePsi, tp>; Psi1:=homF | Psi, [b0p,b1p,b2p]>; Psi2:=homF | Psi1, c0p>; PsiP:=homPPW | Psi2, [X,Y,Z,W]>; assert Psi2(c1) eq c1p; assert Psi2(c2) eq c2p; fSp:=PsiP(fS); Sp:=Scheme(PP,fSp); // We define the subgroup G of the automorphism of X_eta Var:={X,Y,Z}; Perm:=Permutations(Var); idT:=homPPW | X,Y,Z,W>; t1:=homPPW | Y,X,Z,W>; t2:=homPPW | Y,Z,X,W>; p105:=homPPW | zeta6p*X,Y,zeta6p^(-1)*Z,W >; p015:=homPPW | X,zeta6p*Y,zeta6p^(-1)*Z,W >; p003:=homPPW | X,Y,-Z,W >; genG:=[t1,t2,p105,p015,p003]; S3:=[hom PPW | perm[1],perm[2],perm[3],W> : perm in Perm]; C2a:=[idT,p003]; C6a:=[homPPW | zeta6p^i*X, Y, zeta6p^(-i)*Z,W >: i in [0..5]]; C6b:=[homPPW | X, zeta6p^i*Y, zeta6p^(-i)*Z,W >: i in [0..5]]; C2b:=[p015,idT]; GG:=car; G:=[s[1]*s[2]*s[3]*s[4] : s in GG]; assert #G eq 36*4; /* // we check that G keeps S fixed for s in G do assert s(fSp) eq fSp; end for; */ a3:=(9*c0+6*t)*delta/4/(t^3+27); b3:=-c0^2-t*c0; c3:=(18-3*t^2*c0-3*t*c0^2)/8/(t^3+27)*delta; a5:=zeta12*(-zeta6+2)*(b0*b1+b0*b2+b1*b2+t)/9; c5:=zeta12*(zeta6-2)/3; r5:=zeta12*(zeta6-2)*(2*b0*b1*b2+(2*t-3)*b0+(2*t-3*zeta3)*b1+(2*t+3*zeta6)*b2)/9; v5:=-b0-b1-b2; Dd:= [ [x^2 + y^2 + zeta3*z^2, w-b1*x*y*z], [x^2 + zeta3*y^2 + zeta3^2*z^2, w-b0*x*y*z], [c0*x^2 - 2*(9 * c0^2 + 3 * t * c0 - 2 * t^2) / delta *x*y + 2*y^2 - z^2, (x^3+a3*x^2*y+ b3*x*y^2 + c3*y^3)*(-c0^2*c1/2+1)-w], [x^2+y^2+zeta3^2*z^2, w-b2*x*y*z], [y-zeta12*z, w-x^3] ]; Ddp:=[[PsiP(eqn[1]),PsiP(eqn[2])]:eqn in Dd]; Ddpsc:=[Scheme(PP,eqn) : eqn in Ddp ]; for i in [1..#Ddpsc] do i; C:=Ddpsc[i]; assert IsCurve(C); assert IsSubscheme(C,Sp); I:=C meet Sp; assert Dimension(I) eq 1; end for; GDdp:={}; for eqn in Ddp do for t in G do eqn11:=t(eqn[1]); eqn12:=t(eqn[2]); Include(~GDdp, [eqn11, eqn12]); end for; end for; #GDdp; DivsGpp:={[eqn[1]/LeadingCoefficient(eqn[1]),eqn[2]/LeadingCoefficient(eqn[2])] : eqn in GDdp}; #DivsGpp; ListDivsGp:=[Scheme(PP,eqn) : eqn in DivsGpp]; AG:=GramMatrixD(ListDivsGp); LG:=Lattice(AG); BG:=Basis(LG); rk:=#BG;rk; SolG:=Solution(AG,[Vector(b) : b in BG]); MG:=Matrix(SolG); GramG:=MG*AG*Transpose(MG); assert Rank(GramG) eq 20; Factorisation(Determinant(GramG)); L:=LatticeWithGram(GramG: CheckPositive:= false); AL,_,_:=DualQuotient(L); assert pSignature(L,-1) eq -18; AL; /***************************************************************/ /* */ /* End of proof of Example 3.3.20 */ /* */ /***************************************************************/ /***************************************************************/ /* */ /* Proof of Remark 3.4.6 */ /* */ /***************************************************************/ QQ:=Rationals(); R:=PolynomialRing(QQ); K:=FieldOfFractions(R); Rz:= PolynomialRing(QQ,7); I := ideal; GB :=GroebnerBasis(I); n:=#GB; for i in GB do LeadingTerm(i); end for; Kz12 := CyclotomicField(12); Kz12c := PolynomialRing(Kz12); x00 := z12; K0 := ext; Rz:=ChangeRing(Rz,K0); f := Evaluate(Rz!GB[n-2],[Rz!t,Rz!b0,Rz!b2,Rz!b1,Rz!c00,Rz!x00,Rz!z12]); b10:=K0!(-Coefficient(f,Rz!b1,0)/Coefficient(f,Rz!b1,1)); f1:= Evaluate(Rz!GB[n-3],[Rz!t,Rz!b0,Rz!b2,Rz!b1,Rz!c00,Rz!x00,Rz!z12]); assert Evaluate(f1,[Rz!t,Rz!b0,Rz!b2,Rz!b10,Rz!c00,Rz!x00,Rz!z12]) eq 0; f2:= Evaluate(Rz!GB[n-4],[Rz!t,Rz!b0,Rz!b2,Rz!b1,Rz!c00,Rz!x00,Rz!z12]); assert Evaluate(f2,[Rz!t,Rz!b0,Rz!b2,Rz!b10,Rz!c00,Rz!x00,Rz!z12]) eq 0; f := Evaluate(Rz!GB[n-5],[Rz!t,Rz!b0,Rz!b2,Rz!b10,Rz!c00,Rz!x00,Rz!z12]); b20:=K0!(-Coefficient(f,Rz!b2,0)/Coefficient(f,Rz!b2,1)); f := Evaluate(Rz!GB[n-6],[Rz!t,Rz!b0,Rz!b20,Rz!b10,Rz!c00,Rz!x00,Rz!z12]); b00:=K0!(-Coefficient(f,Rz!b0,0)/Coefficient(f,Rz!b0,1)); f := Evaluate(Rz!GB[n-7],[Rz!t,Rz!b00,Rz!b20,Rz!b10,Rz!c00,Rz!x00,Rz!z12]); t00:=K0!(-Coefficient(f,Rz!t,0)/Coefficient(f,Rz!t,1)); [[Degree(e[1]),e[2]]: e in Factorisation(AbsoluteCharacteristicPolynomial(t00))]; f0:=AbsoluteCharacteristicPolynomial(t00); K0:=ext; R0:=PolynomialRing(K0); assert #Roots(x^12-1) eq 12; assert #Roots(x^3+t0*x^2+4) eq 3; zeta3:=Roots(x^2+x+1)[1][1]; for i in [0,1,2] do i; assert #Roots(x^2-t0-3*zeta3^i) eq 2; end for; /***************************************************************/ /* */ /* End of Proof of Remark 3.4.6 */ /* */ /***************************************************************/