########################################################################## ## alternate.g ## ## Author: Nils Bruin ## date: 29 May 2001 ## ## Computations for the example in "N-covers of hyperelliptic curves" by ## Nils Bruin and Victor Flynn. ## ## Alternative proof - a little bit slicker, but needs some massaging ## due to some limitations in KASH: ## ## let p and q be primes over the same rational prime. If a is integral at ## p but not at q, then KASH has difficulties computing a mod p. ## ## In anticipation of a new version of this package in MAGMA, we just make do ## with the existing limitations and do some of the work manually. ########################################################################## delta:=3; InitPolyAlg(Z,["x","y","z"]); k:=1; Ghom:=x^3+2*z^3; Hhom:=x^2+x*z+z^2; F:=2*k*Ghom-y^3-3*k*Hhom*y; ec:=Quar(x^3+1485*x-75762); Cubic(F,[0,1,1],ec); mp:=ec.tocub([x,y,z]); dn:=Gcd(Gcd(List(PolyDecomp(mp[1]),u->u[1])), Gcd(List(PolyDecomp(mp[3]),u->u[1]))); O:=OrderMaximal(x^3-k*delta); alpha:=XOrderPrimElt(O); phi:=[mp[1]/dn+RingZero(O),mp[3]/dn+RingZero(O)]; ecO:=Quar(EllYsqr(ec,x)+RingZero(O)); g1:=EllPnt(ecO,[31,8]); g2:=EllPnt(ecO,[43,260]); g3:=EllPnt(ecO,[39+60*alpha+36*alpha^2,1008+828*alpha+324*alpha^2]); basis:=[g1, g3, -g1+g2+3*g3]; Rpnt:=basis[3]; # prime above 17 of inertia degree 1 p17:=Ideal(2+alpha^2); # cofactor of inertia degree 2 q17:=17/p17; # make a little bit more powerful data structure out of them PlcP:=PlaceInit(p17); PlcQ:=PlaceInit(q17); # Rpnt reduces to the identity mod p Rpnt mod PlcP; # And in fact the Mordell-Weil group surjects onto (ec mod p)(F_17) # (the answer shows a group structure of Z/5 + Z/4) EllSpan(ecO mod PlcP,[basis[1] mod PlcP,basis[2] mod PlcP])[1]; # and point counting gives 20 (in fact, the Hasse bound already # gives index 1 for the image of the MW-group) EllSize(ecO mod PlcP); # So we now know that all trace-0 points pnt on ecO with a rational image under # phi have the same value for phi(pnt) mod 17 (which is 0) # First, we figure out the order of Rpnt mod PlcQ RpntmodQ:=(Rpnt+basis[1]) mod PlcQ - (basis[1] mod PlcQ); 8*RpntmodQ; 16*RpntmodQ; #so that's 16 # see what the size of the MW-group is EllSpan(ecO mod PlcQ,[basis[1] mod PlcQ,basis[2] mod PlcQ,RpntmodQ])[1]; # that's 5*2*16=160 EllSize(ecO mod PlcQ); # which has index 2 in (ecO mod PlcQ)(F_{17^2}) #since we know that our points have odd index in the proper MW-group, we know #that we really have the entire image of the MW-group here. # Now let's figure out which of those have a rational image = 0 mod PlcQ Those # are the residue classes that may contain the points we're looking for. cov:=EllCov(ecO,phi); covr:=EllCovRed(cov,PlcQ); Filtered([0..15],i->covr.phi(i*RpntmodQ)=covr.phi(0*RpntmodQ)); # OK! so now we know that here too, only the residue class of the identity # element contains trace 0 points with rational image under phi. In other # words, we only have to look in the group generated by 16*Rpnt # we've been computing reductions before we set the generators, so we have # to clear the memory. Safest thing: just redeclare. ecO:=Quar(EllYsqr(ec,x)+RingZero(O)); EllGenInit([16*EllPntMove(Rpnt,ecO)],1); cov:=EllCov(ecO,phi); EllCovChab(cov,[EllZero(ecO)],17); #note the warnings about 20 and 320 being coprime to the index. We've checked #that manually, so we're fine. Of course, we need the index to be prime to 17 #too, but the fact that this computation works out already proves that #we see that because Rpnt.x/Rpnt.y has valuation of only 1 at PlcP.