//This code accompanies the the article "Order 5 Brauer-Manin obstruction to the integral Hasse principle on log K3 surfaces" by Julian Lyczak. //It checks all the claims made in Section 5. //One is advised to completely execute the code and from the output at the end look back at the relevant section if necessary. // //============General objects================ // R := PolynomialRing(Rationals(),3); P2 := ProjectiveSpace(R); S := PolynomialRing(Rationals(),6); P5 := ProjectiveSpace(S); T := PolynomialRing(Rationals(),9,"elim",[1,2,3]); map := homT| [xx,yy,zz]>; map2 := homS| [0,0,0,u0,u1,u2,u3,u4,u5]>; // //=============First example with splitting field of conductor 25============== // //First fix the splitting field 'K' and a generator 'a' of 'K' over the rationals K := Subfields(CyclotomicField(25),5)[1,1]; a := K.1; ma := MinimalPolynomial(a); disc := Integers()!Discriminant(MinimalPolynomial(a)); //We compute the ideal defining (alpha^2, alpha, 1) and its conjugates I := Ideal(Cluster(P2(K)![a^2,a,1])); //Next we compute a Groebner basis for polynomial vanishing of order at least 2 at all 5 points. O5 := LinearSystem(P2,5); LinSys := LinearSystem(O5,Scheme(P2,I^2)); sections := Sections(LinSys); GroebnerSections := GroebnerBasis(sections); //To compute the image of the morphism coming from the linear system S, we will need to do an explicit Groebner basis computation to keep track of inverted primes. groebnerGraph, invertedprimes := GroebnerBasis([T.(i+3) - map(sections[i]): i in [1..6]]: ReturnDenominators := true); Equs := [map2(equ): equ in groebnerGraph| &and[Degree(equ,var) eq 0: var in [xx,yy,zz]]]; XX := Scheme(P5,Equs); //The following two linear equation should define the special hyperplane sections on XX l1 := u0 + 25*u1 - 700*u2 + 200*u3 - 3425*u4 + 575*u5; l2 := u0 + 75*u1 - 1675*u2 + 375*u3 - 5175*u4 + 575*u5; //Primes over which the fibres are singular primes := PrimeFactors(disc); P5mod5 := ProjectiveSpace(GF(5),5); XX5 := Reduction(XX,5: ambient := P5mod5); L := ReducedSubscheme(Scheme(XX5,l1)); Ldiv := Divisor(XX5,L); RR3L := RiemannRochBasis(3*Ldiv); RR4L := RiemannRochBasis(4*Ldiv); ptsmod5 := Points(XX5); //A birational map from this singular fibre XX5 to the projective plane P25 := ProjectiveSpace(GF(5),2); psi := map P25| RR3L>; IsInvertible(psi); psiinv := Inverse(psi); //These induce an isomorphism of affine schemes, which we will write a composition //L is given by the vanishing of l1, which is just w0 mod 5 XX5minusL := AffinePatch(XX5,6); map1 := mapXX5| [1] cat [XX5minusL.i: i in [1..5]]>; IsInvertible(map1); //And we remove a line in P2 over GF(5) A25 := AffineSpace(GF(5),2); map2 := map A25| [yy/xx,zz/xx]>; IsInvertible(map2); mapXX5A2 := map A25 | DefiningPolynomials(psi * map2), InverseDefiningPolynomials(psi * map2)>; //This should be the isomorphism isom := map A25 | DefiningPolynomials(map1 * mapXX5A2), InverseDefiningPolynomials(map1 * mapXX5A2)>; // //==========Local solubility=============== // //To prove local solubility at all primes we use the following points pts:= [ [ 1, 0, 0, 0, 0, 0 ], [ -599, -99, -5, 1, 0, 1 ], [ 649, 101, 5, -1, 0, 1 ], [ -3185, -320, -20, 0, 1, 1 ], [ -12724, -1576, -81, 1, 1, 0 ], [ -14651, -1238, -82, -4, 4, 4 ], [ -23985, -1875, -100, 0, 1, 0 ] ]; // //========The invariant map at 5========== // //Let us split the hyperplanes into the cases we are interested in //We can consider these hyperplanes up to scalar multiple, since this does not change the size of the image of the invariant map. (This speeds up this part of the computation by a factor of 4). hyperplaneswhichdonotonlycutoutL := [Polynomial([a0,a1,a2,a3,a4,a5],[XX5.i: i in [1..6]]): a0,a1,a2,a3,a4,a5 in GF(5)| not {a1,a2,a3,a4,a5} eq {0}]; //For the remaining hyperplane sections the invariant map does not need to assume 5 values and we are interested in when 0 is an invariant. So we consider all hyperplanes modulo 25 hyperplaneswhichonlycutoutL := [Polynomial([lambda,5*a1,5*a2,5*a3,5*a4,5*a5],[XX.i: i in [1..6]]): lambda in [i: i in [1..24]| not i mod 5 eq 0], a1,a2,a3,a4,a5 in [0..4]| not {lambda,a1,a2,a3,a4,a5} eq {0}]; //surjectivity of invariant map if h is not a scalar multiple of l1 modulo 5 //(We have sped this up by only considering hyperplanes up to scalar multiples) //We check the claim that there is point in the complement of l1=0 whose 25 lifts to points modulo 25 evaluate to 5 different invariant Aff := AffinePatch(XX5,6); ptsnotonL := {pt: pt in ptsmod5| Evaluate(l1,Coordinates(pt)) ne 0}; imagesize1 := {* Integers()| *}; for h in hyperplaneswhichdonotonlycutoutL do h2 := Inverse(map1)(h)/Inverse(map1)(l1); for pt in ptsnotonL do if Evaluate(h,Coordinates(pt)) ne 0 then T := TangentSpace(Inverse(map1)(pt)); valueofhonlifts := {Evaluate(h2,Coordinates(pta)): pta in Points(T)}; if not #valueofhonlifts in {1,5} then print "The hyperplane h gives ", #valueofhonlifts, "different invariants on point above the point ", pt; elif #valueofhonlifts eq 5 then Include(~imagesize1,5); continue h; end if; end if; end for; print "inv is not surjective for h=", h; end for; //To first check the computations T := Realtime(); imagesize2 := {* Integers()| *}; Z25 := ResidueClassRing(25); for h in hyperplaneswhichonlycutoutL do invs := {PowerSequence(Z25)| }; for pt in ptsnotonL do ptmod25 := [Z25!(Integers()!c): c in Coordinates(pt)]; val := Evaluate(l1,ptmod25)*Evaluate(h,ptmod25)^(-1); Include(~invs,[val,-val,7*val,-7*val]); if #invs eq 5 then Include(~imagesize2,5); continue h; end if; end for; Include(~imagesize2,#invs); end for; Realtime(T); //For the remaining hyperplanes we have more cases Z25inv := [i: i in [1..24]| not i mod 5 eq 0]; hyperplaneswhichonlycutoutL1invs := [Polynomial([lambda,0,0,0,0,0],[XX.i: i in [1..6]]): lambda in Z25inv]; hyperplaneswhichonlycutoutL3invs := [Polynomial([lambda,5*a1,0,5*a3,0,0],[XX.i: i in [1..6]]): lambda in Z25inv, a1,a3 in [0..4]| not a3 eq 0]; hyperplaneswhichonlycutoutL5invs := [h: h in hyperplaneswhichonlycutoutL| not h in hyperplaneswhichonlycutoutL1invs and not h in hyperplaneswhichonlycutoutL3invs]; //Those hyperplanes for which inv assumes 1 value numberofhyperplanestype2and0isinv := 0; imagesize2 := {* Integers()| *}; for h in hyperplaneswhichonlycutoutL1invs do invs := {PowerSet(Z25)| }; for pt in ptsnotonL do //The invariant map for any 5-adic point only depends on its reduction pt, but we will need any lift to compute coordsmod25 := ChangeUniverse(ChangeUniverse(Coordinates(pt),Integers()),Z25); val := Evaluate(l1, coordsmod25)*Evaluate(h,coordsmod25)^4; Include(~invs,{val,-val,7*val,-7*val}); end for; if {1,-1,7,-7} in invs then numberofhyperplanestype2and0isinv := numberofhyperplanestype2and0isinv +1; end if; Include(~imagesize2,#invs); end for; //Those hyperplanes for which inv assumes 3 values numberofhyperplanestype3and0isinv := 0; imagesize3 := {* Integers()| *}; for h in hyperplaneswhichonlycutoutL3invs do invs := {PowerSet(Z25)| }; for pt in ptsnotonL do //The invariant map for any 5-adic point only depends on its reduction pt, but we will need any lift to compute coordsmod25 := ChangeUniverse(ChangeUniverse(Coordinates(pt),Integers()),Z25); val := Evaluate(l1, coordsmod25)*Evaluate(h,coordsmod25)^4; Include(~invs,{val,-val,7*val,-7*val}); end for; if {1,-1,7,-7} in invs then numberofhyperplanestype3and0isinv := numberofhyperplanestype3and0isinv +1; end if; Include(~imagesize3,#invs); end for; //Those for which inv still surjective (again we can do this up to scalar multiple} imagesize4 := {* Integers()| *}; for hs in {{a*h: a in Z25inv}: h in hyperplaneswhichonlycutoutL5invs} do h := Random(hs); invs := {PowerSet(Z25)| }; for pt in ptsnotonL do //The invariant map for any 5-adic point only depends on its reduction pt, but we will need any lift to compute coordsmod25 := ChangeUniverse(ChangeUniverse(Coordinates(pt),Integers()),Z25); val := Evaluate(l1, coordsmod25)*Evaluate(h,coordsmod25)^4; Include(~invs,{val,-val,7*val,-7*val}); if #invs eq 5 then Include(~imagesize4,5); continue hs; end if; end for; Include(~imagesize4,#invs); end for; // //===========The output======== // print " \n\n\n\n\n =====================================================================\n You can start reading here and look back in the code where specific computations are done.\n =====================================================================\n \n\n\n We have picked a generator 'a' which is of degree ", Degree(ma), " and lies in the field 'K':", K,"\n\n", "A basis for the quintics which vanish at least twice at the point (a^2:a:1) and its conjugates is ", sections, "\n\n", "The same equations also define a basis over the integers: ", IsGroebner(GroebnerSections),&and[&and[IsIntegral(coef): coef in Coefficients(g)]: g in GroebnerSections], &and[LeadingCoefficient(s)^2 eq 1: s in GroebnerSections],"\n\n", "We will now compute the image of the birational map P^2 -> P^5 given by these quintics. This involves a Groebner basis computation over the integers. We will use the Groebner basis over the rationals and check no primes were inverted along the way: ", IsGroebner(groebnerGraph), &and[&and[IsIntegral(coef): coef in Coefficients(g)]: g in groebnerGraph], &and[LeadingCoefficient(g)^2 eq 1: g in groebnerGraph],"\n\n", "Hence XX in P^5 over the integers is given by", Equs, "By construction this is directly a Groebner basis for XX over the integers","\n\n", "Consider the two hyperplanes given by: \nl1 =", l1, "l2 = ", l2, "These are the two hyperlane sections on XX which are not geometrically irreducible: ", not IsIrreducible(Scheme(BaseChange(XX,K),l1)), not IsIrreducible(Scheme(BaseChange(XX,K),l2)), "\n\n", "The only prime divisor of the discrimant of 'a' are 5 and 7, indeed primes=", primes , "\n Hence a prime l=/=7 is inert/split in K precisely if the minimal polynomial is irreducible/splits completely over 'GF(l)'.\n\n", "The fibre XX5 over 5 is the ", XX5, "The zero-locus of l1 is ", L, "and hence a line in P5.\n\n", "The anticanonical sections vanishing on L are those in", RR4L, "\n\n", "The complete linear system of 3*L defines a morphism to P2 over GF(5)", psi, "and restricted to l1=/=0 on XX5 and xx=/=0 on P2 gives an isomorphism: ", IsIsomorphism(mapXX5A2), "\n\n", "Consider the points pts=",pts, "which lie on XX: ",&and[P5!pt in XX: pt in pts],"\n","The lattice spanned by these points is", Rowspace(Matrix(pts)), "has rank 6 and index 2, we conclude that any affine UU in XX is locally soluble except possibly at the prime 2 \n\n", "At the prime 2 we have that all points lie on the hyperplane:" , Polynomial(ChangeUniverse(ElementToSequence(Basis(Kernel(Transpose(Matrix([Coordinates(pt): pt in Points(Reduction(XX,2))]))))[1]),Integers()),[S.i: i in [1..6]]),"\n\n", "The invariant map of the cyclic algebra (l_1/h,K) on U_h is constant on local points on UU_h, except posibbly for primes in ", [p: p in primes| not IsSplit(p,MaximalOrder(K))], "\n\n", "For the prime l=5 we check the following: \n 1. The invariant map is surjective on UU\\L (and hence on UU) for hyperplane section which do not only cut out L. This number of such hyperplane sections equals ", #hyperplaneswhichonlycutoutL, "\n The image of the invariant map for each hyperplane (and its scalar multiples): ", imagesize1,"\n\n For the remaining hyperplane sections we have three cases. \n 2. For the hyperplane sections h=l*u0 mod 25 inv assumes one value. The number of such hyperplane sections equals ", #hyperplaneswhichonlycutoutL1invs, "\n The image of the invariant map for each hyperplane: ", imagesize2,"\n 3. For the hyperplane sections h=l*u0+5(c1*u1+c3*u3) with c3=/=0 inv assumes three values. The number of such hyperplane sections equals ", #hyperplaneswhichonlycutoutL3invs, "\n The image of the invariant map for each hyperplane: ", imagesize3,"\n 4. For the remaining hyperplane sections inv assumes five values. The number of such hyperplane sections (not! up to scaling) equals ", #hyperplaneswhichonlycutoutL5invs, "\n The image of the invariant map for each hyperplane (and its scalar multiples): ", imagesize4,"\n\n The total number of hyperplane sections of type 2 for which 0 is an invariant equals ", #hyperplaneswhichonlycutoutL1invs-numberofhyperplanestype2and0isinv, " and those of type 3: ", #hyperplaneswhichonlycutoutL3invs-numberofhyperplanestype3and0isinv, "\n\n", "Hence there are ", #hyperplaneswhichonlycutoutL1invs-numberofhyperplanestype2and0isinv+ #hyperplaneswhichonlycutoutL3invs-numberofhyperplanestype3and0isinv, "hyperplane sections modulo 5 out of the possible ", 25^6-5^6, "for which the sum of all invariant maps is 0.";