Magma V2.11-12 Tue Feb 8 2005 22:50:20 on ella [Seed = 2900843562] Type ? for help. Type -D to quit. > > //////////////////////////////////////////////////////////////////////////// > //Case: x^4+y^4=D*z^2 > // > //Section 2, Proof of Proposition 1. > > _:=PolynomialRing(Rationals()); > Dset:={2,3,5,6,10,11,13,17}; > {D:D in Dset| IsLocallySolvable(HyperellipticCurve(D*(x^4+1)),2)}; { 2, 17 } > > //////////////// > > C2:=HyperellipticCurve(2*(x^4+1)); > p0:=C2![1,2]; > E,C2toE:=EllipticCurve(C2,p0); > RankBound(E); 0 > #TorsionSubgroup(E); 4 > > //////////////// > > C17:=HyperellipticCurve(17*(x^4+1)); > p0:=C17![2,17]; > E,C17toE:=EllipticCurve(C17,p0); > RankBound(E); 2 > > //////////////// > > G,GtoE:=MordellWeilGroup(E); > G; Abelian Group isomorphic to Z/2 + Z/2 + Z + Z Defined on 4 generators Relations: 2*G.1 = 0 2*G.2 = 0 > [Inverse(C17toE)(GtoE(g)):g in OrderedGenerators(G)]; [ (-1 : 17 : 2), (-2 : -17 : 1), (13 : 697 : 2), (314 : 3097553 : 863) ] > > //////////////////////////////////////////////////////////////////////////// > //Case: x^5+y^5=D*z^2 > // > //Section 4: The equation x^5+y^5=Dz^2 > > _:=PolynomialRing(Rationals()); > f:=x^5+1; > A:=quo; > > //////////////// > > PA:=PolynomialRing(A,5); > AP,swap:=SwapExtension(PA); > _:=BaseRing(AP); > P4:=Proj(BaseRing(AP)); > P1:=ProjectiveSpace(Rationals(),1); > > //////////////// > > function Cdelta(delta) function> g:=delta*(&+[PA.i*theta^(i-1): i in [1..5]])^2; function> Q:=Coefficients(swap(g)); function> Crv:=Scheme(P4,[Q[3],Q[4],Q[5]]); function> phi:=mapP1|[Q[1],-Q[2]]>; function> return Crv,phi; function> end function; > > //////////////// > > Q:=NumberField(x-1:DoLinearExtension); > OQ:=IntegerRing(Q); > Qx:=PolynomialRing(Q); > AQ:=quo; > AQtoA:=homA|[theta]>; > K:=NumberField(x^4 - x^3 + x^2 - x + 1); > OK:=IntegerRing(K); > Aa,toAa:=AbsoluteAlgebra(AQ:Fields:={Q,K}); > > //////////////// > > function DeltaForD(D) function> S:=Support(D*Discriminant(f)*OQ); function> slmA,slmAmap:=pSelmerGroup(AQ,2,S); function> slmQ,slmQmap:=pSelmerGroup(2,S); function> slmNorm:=mapslmQ|a:->slmQmap(Norm(a@@slmAmap))>; function> slmSquareNorm:=Kernel(homslmQ| function> [slmNorm(a):a in OrderedGenerators(slmA)]>); function> classD:=slmAmap(D); function> return {AQtoA( (d-classD)@@slmAmap):d in slmSquareNorm}; function> end function; > > Dset:={2,3,5,6,10,11,13,17}; > BigDelta:=&join{DeltaForD(D):D in Dset}; > Delta:=BigDelta; > Delta:={delta:delta in Delta| IsLocallySolvable(Cdelta(delta),2: > AssumeIrreducible,AssumeNonsingular)}; > Delta:={delta:delta in Delta| IsLocallySolvable(Cdelta(delta),5: > AssumeIrreducible,AssumeNonsingular)}; > Delta:={delta:delta in Delta| IsLocallySolvable(Cdelta(delta),11: > AssumeIrreducible,AssumeNonsingular)}; > > //////////////// > > m1:=homRationals()|-1>; > {PowerFreePart(Norm(delta)/m1(delta),2):delta in Delta}; { 1, 5, 55 } > > //////////////// > > E5:=HyperellipticCurve(5*(x^4-x^3+x^2-x+1)); > p0:=E5![-1,5]; > ell:=EllipticCurve(E5,p0); > RankBound(ell); 0 > #TorsionSubgroup(ell); 2 > > //////////////// > > Delta:={delta:delta in Delta|PowerFreePart(Norm(delta)/m1(delta),2) ne 5}; > #Delta; 16 > > //////////////// > > m2:=homK|zeta>; > slmK,slmKmap:=pSelmerGroup(2,Support(2*3*5*11*13*17*OK)); > dset:={K|(slmKmap(Norm(delta)/m2(delta)))@@slmKmap:delta in Delta}; > dset; { -2*zeta^2 + 2*zeta - 2, 2*zeta^3 - 2*zeta^2, 1, 5*zeta^3 - 9*zeta^2 - zeta - 2, -3*zeta^3 - 7*zeta^2 + 3*zeta + 2 } > > //////////////// > > Kd:=RationalFunctionField(K); > KdX:=PolynomialRing(Kd); > FEd1:=(X^4+zeta*X^3+zeta^2*X^2+zeta^3*X+zeta^4)/d; > Ed1:=HyperellipticCurve(FEd1); > Ed2,toEd2:=EllipticCurve(Ed1,Ed1![-1,0]); > umap:=mapP1|[Ed1.1,Ed1.3]>; > FEd:=X^3+(-3*zeta^3-zeta+1)*d*X^2+(-zeta^2-zeta-1)*d^2*X; > Ed:=EllipticCurve(FEd); > bl,toEd:=IsIsomorphic(Ed2,Ed); > u:=Expand(Inverse(toEd2*toEd)*umap); > u:Minimal; (xE : yE : zE) -> ((-2*zeta^3 + 3*zeta^2 - 3*zeta + 2)/d^2*xE + (-zeta^3 - 2*zeta + 2)/d*zE : (2*zeta^3 - 3*zeta^2 + 3*zeta - 2)/d^2*xE + (2*zeta^2 - zeta + 2)/d*zE) > > //////////////////////////////////////////////////////////////////////////// > //The following code is not literally mentioned in the article. > //The computations here verify the results in the table at the end of Section 4. > //The methods used are explained in Section 7. The examples occurring in that > //Section occur below. > > d:=1; > Ed:=EllipticCurve([0,-3*zeta^3-zeta+1*d,0,(-zeta^2-zeta-1)*d^2,0]); > u:=mapP1|[-X + (zeta^3 - 1)*d*Z,X+(-zeta^3-zeta)*d*Z]>; > two:=MultiplicationByMMap(Ed,2); > mu:=IsogenyMu(two:Fields:={K}); > S2Ed,S2map:=SelmerGroup(two); > gs:=[Ed|[zeta^3,0],[zeta^3+zeta-1,zeta^2],[zeta^3+zeta,zeta^2+1]]; > assert S2Ed eq sub; > G:=AbelianGroup([2,4,0]); > mwmap:=mapEd|g:->&+[c[i]*gs[i]:i in [1..#gs]] where c:=Eltseq(g)>; > N,V,R:=Chabauty(mwmap,u,31); > assert N eq #V and PrimeDivisors(R) subset {2}; > {EvaluateByPowerSeries(u,mwmap(p)):p in V}; { (-1 : 1), (0 : 1), (1 : 0) } > > //////////////// > > d:=-2*zeta^2-2; > Ed:=EllipticCurve([0,(-3*zeta^3-zeta+1)*d,0,(-zeta^2-zeta-1)*d^2,0]); > u:=mapP1|[-X + (zeta^3 - 1)*d*Z,X+(-zeta^3-zeta)*d*Z]>; > two:=MultiplicationByMMap(Ed,2); > mu:=IsogenyMu(two:Fields:={K}); > S2Ed,S2map:=SelmerGroup(two); > gs:=[Ed![0,0],Ed![2-2*zeta^3,0],Ed![4-4*zeta^3,4*zeta^2+4], > Ed![-8*zeta^3 + 4*zeta^2 - 4*zeta + 8,8*zeta^3 + 4*zeta - 8]]; > assert S2Ed eq sub; > G:=AbelianGroup([2,2,0,0]); > mwmap:=mapEd|g:->&+[c[i]*gs[i]:i in [1..#gs]] where c:=Eltseq(g)>; > N,V,R:=Chabauty(mwmap,u,31); > assert N eq #V and PrimeDivisors(R) subset {2}; > {EvaluateByPowerSeries(u,mwmap(p)):p in V}; { (1 : 1), (-1 : 1) } > > //////////////// > > d:=2*zeta^3-2*zeta^2-2; > Ed:=EllipticCurve([0,(-3*zeta^3-zeta+1)*d,0,(-zeta^2-zeta-1)*d^2,0]); > u:=mapP1|[-X + (zeta^3 - 1)*d*Z,X+(-zeta^3-zeta)*d*Z]>; > two:=MultiplicationByMMap(Ed,2); > mu:=IsogenyMu(two:Fields:={K}); > S2Ed,S2map:=SelmerGroup(two); > gs:=[Ed![0,0],Ed![-2*zeta^3 - 2*zeta + 2,0],Ed![-2*zeta^3,-4*zeta^2], > Ed![-2*zeta^3 - 4*zeta + 4,-4*zeta^3 + 4*zeta]]; > assert S2Ed eq sub; > G:=AbelianGroup([2,2,0,0]); > mwmap:=mapEd|g:->&+[c[i]*gs[i]:i in [1..#gs]] where c:=Eltseq(g)>; > N,V,R:=Chabauty(mwmap,u,31); > assert N eq #V and PrimeDivisors(R) subset {2}; > {EvaluateByPowerSeries(u,mwmap(p)):p in V}; { (-1 : 1), (-1/3 : 1), (-3 : 1) } > > //////////////// > > d:=-3*zeta^3-7*zeta^2-8*zeta-9; > Ed:=EllipticCurve([0,(-3*zeta^3-zeta+1)*d,0,(-zeta^2-zeta-1)*d^2,0]); > u:=mapP1|[-X + (zeta^3 - 1)*d*Z,X+(-zeta^3-zeta)*d*Z]>; > two:=MultiplicationByMMap(Ed,2); > mu:=IsogenyMu(two:Fields:={K}); > S2Ed,S2map:=SelmerGroup(two); > gs:=[Ed![0,0], > Ed![-17*zeta^3 + 8*zeta^2 - 5*zeta + 15,0], > Ed![-4*zeta^3 + 14*zeta^2 + 8*zeta + 15,-147*zeta^3 - 89*zeta + 89], > Ed![-5*zeta^3 + 6*zeta^2 + 9, -69*zeta^3 + 17*zeta^2 - 34*zeta + 60], > Ed![-6*zeta^3 + 3*zeta^2 - zeta + 6,57*zeta^3 - 16*zeta^2 + 27*zeta - 51]]; > assert S2Ed eq sub; > G:=AbelianGroup([2,2,0,0,0]); > mwmap:=mapEd|g:->&+[c[i]*gs[i]:i in [1..#gs]] where c:=Eltseq(g)>; > N,V,R:=Chabauty(mwmap,u,191); > assert N eq #V and PrimeDivisors(R) subset {2}; > {EvaluateByPowerSeries(u,mwmap(p)):p in V}; { (3/2 : 1), (-1 : 1) } > > //////////////// > > d:=15*zeta^3-5*zeta^2+8*zeta-17; > Ed:=EllipticCurve([0,(-3*zeta^3-zeta+1)*d,0,(-zeta^2-zeta-1)*d^2,0]); > u:=mapP1|[-X + (zeta^3 - 1)*d*Z,X+(-zeta^3-zeta)*d*Z]>; > two:=MultiplicationByMMap(Ed,2); > mu:=IsogenyMu(two:Fields:={K}); > S2Ed,S2map:=SelmerGroup(two); > gs:=[Ed![0,0], > Ed![-9*zeta^3 - 8*zeta^2 - 7*zeta - 3,0], > Ed![10*zeta^3 - 14*zeta^2 - zeta - 22,-89*zeta^2 - 58*zeta - 89], > Ed![zeta^3 - 6*zeta^2 - 3*zeta - 6,-26*zeta^3 + 43*zeta^2 + 9*zeta + 60], > Ed![-3*zeta^3 - 3*zeta^2 - 3*zeta - 2,24*zeta^3 - 35*zeta^2 - 6*zeta - 51] > ]; > assert S2Ed eq sub; > G:=AbelianGroup([2,2,0,0,0]); > mwmap:=mapEd|g:->&+[c[i]*gs[i]:i in [1..#gs]] where c:=Eltseq(g)>; > N,V,R:=Chabauty(mwmap,u,191); > assert N eq #V and PrimeDivisors(R) subset {2}; > {EvaluateByPowerSeries(u,mwmap(p)):p in V}; { (2/3 : 1), (-1 : 1) } > > //////////////////////////////////////////////////////////////////////////// > //Section 6: Mordell-Weil groups of Elliptic curves > > _:=PolynomialRing(Rationals()); > K:=NumberField(x^4-x^3+x^2-x+1); > OK:=IntegerRing(K); > d:=2*zeta^3-2*zeta^2-2; > E:=EllipticCurve([0,(-3*zeta^3-zeta+1)*d,0,(-zeta^2-zeta-1)*d^2,0]); > two:=MultiplicationByMMap(E,2); > mu,tor:=IsogenyMu(two); > S2E,toS2E:=SelmerGroup(two);S2E; Abelian Group isomorphic to Z/2 + Z/2 + Z/2 + Z/2 Defined on 4 generators in supergroup: S2E.1 = $.1 + $.2 + $.6 + $.7 + $.8 + $.9 S2E.2 = $.2 + $.4 + $.7 + $.8 S2E.3 = $.1 + $.2 + $.5 + $.7 S2E.4 = $.3 + $.9 Relations: 2*S2E.1 = 0 2*S2E.2 = 0 2*S2E.3 = 0 2*S2E.4 = 0 > > //////////////// > > Etors,EtorsMap:=TorsionSubgroup(E); > sub; Abelian Group isomorphic to Z/2 + Z/2 Defined on 2 generators in supergroup S2E: $.1 = S2E.3 + S2E.4 $.2 = S2E.1 + S2E.4 Relations: 2*$.1 = 0 2*$.2 = 0 Mapping from: Abelian Group isomorphic to Z/2 + Z/2 Defined on 2 generators in supergroup S2E: $.1 = S2E.3 + S2E.4 $.2 = S2E.1 + S2E.4 Relations: 2*$.1 = 0 2*$.2 = 0 to GrpAb: S2E > > //////////////// > > V:=RationalPoints(E:Bound:=5); > sub eq S2E; true > > //////////////// > > gs:=[E![0,0], > E![-2*zeta^3 - 2*zeta + 2,0], > E![-2*zeta^3,-4*zeta^2], > E![-2*zeta^3 - 4*zeta + 4,-4*zeta^3 + 4*zeta]]; > assert S2E eq sub; > G:=AbelianGroup([2,2,0,0]); > mwmap:=mapE|g:->&+[c[i]*gs[i]:i in [1..#gs]] where c:=Eltseq(g)>; > > //////////////// > > success,G,mwmap:=PseudoMordellWeilGroup(E); > assert success; > > //////////////// > > phi:=TwoIsogeny(E![0,0]); > Sphi,toSphi:=SelmerGroup(phi); > phihat:=DualIsogeny(phi); > Sphihat,toSphihat:=SelmerGroup(phihat); > 4*#S2E, #Sphi, #Sphihat, #TwoTorsionSubgroup(E); 64 2 8 4 > > //////////////// > > //We need to fix the notation of delta to get around the randomness in the > //algorithm > delta:=S2E!toS2E([1,1/2*(5*zeta^3-10*zeta^2+5*zeta),1/4*(-4*zeta^3+11*zeta^2-11*zeta+4)]); > psi:=tor(delta@@toS2E); > XX:=Domain(psi); > C,CtoXX:=Quartic(XX); > > //////////////// > > V:=RationalPoints(C:Bound:=20); > assert #V gt 0; > P:=psi(CtoXX(Rep(V)));P; (-16/5*zeta^3 : 1/25*(-72*zeta^3 + 136*zeta^2 - 72*zeta) : 1) > assert delta eq toS2E(mu(P)); > > //////////////////////////////////////////////////////////////////////////// > //Section 7: Chabauty methods using elliptic curves > > P1:=ProjectiveSpace(Rationals(),1); > u:=mapP1|[-X + (zeta^3 - 1)*d*Z,X+(-zeta^3-zeta)*d*Z]>; > V3:=RelevantCosets(mwmap,u,Support(3*OK)); > Lambda3:=Kernel(V3[1]); > GmodLambda3:=Codomain(V3[1]); > V3; > > //////////////// > > V11:=RelevantCosets(mwmap,u,Support(11*OK)); > V3i11:=CosetIntersection(V3,V11:Weak); > V3i11; > > //////////////// > > P0:=mwmap(G.3+G.4); > u(P0); (-3 : 1) > theta:=ChabautyEquations(P0,u,mwmap,Support(3*OK)); > PrintToPrecision(theta[1],1);"";PrintToPrecision(theta[2],1);"";PrintToPrecision(theta[3],1); O(3^5) + (10*3^2 + O(3^5))*$.1 - (3 + O(3^5))*$.2 O(3^5) - (32*3 + O(3^5))*$.1 - (29*3 + O(3^5))*$.2 O(3^5) - (3^4 + O(3^5))*$.1 - (5*3^2 + O(3^5))*$.2> > //////////////// > > N,V,R,C:=Chabauty(mwmap,u,3:Aux:={7}); > assert N eq #V; > assert #C[2] eq 0; > R; 4 > V; { 0, G.3 - G.4, -G.3 + G.4, G.3 + G.4, -G.3 - G.4 } > {EvaluateByPowerSeries(u,mwmap(P)):P in V}; { (-1 : 1), (-1/3 : 1), (-3 : 1) } > > //////////////// > > d:=-3*zeta^3-7*zeta^2-8*zeta-9; > E:=EllipticCurve([0,(-3*zeta^3-zeta+1)*d,0,(-zeta^2-zeta-1)*d^2,0]); > P1:=ProjectiveSpace(Rationals(),1); > u:=mapP1|[-X + (zeta^3 - 1)*d*Z,X+(-zeta^3-zeta)*d*Z]>; > success,G,mwmap:=PseudoMordellWeilGroup(E); > assert success; > [mwmap(P):P in OrderedGenerators(G)]; [ (-41*zeta^3 + 18*zeta^2 - 14*zeta + 42 : 0 : 1), (0 : 0 : 1), (-5*zeta^3 + 6*zeta^2 + 9 : -69*zeta^3 + 17*zeta^2 - 34*zeta + 60 : 1), (-6*zeta^3 + 3*zeta^2 - zeta + 6 : 57*zeta^3 - 16*zeta^2 + 27*zeta - 51 : 1), (-36*zeta^3 + 8*zeta^2 - 20*zeta + 32 : 10*zeta^3 + 72*zeta^2 + 60*zeta + 62 : 1) ] > N,V,R,C:=Chabauty(mwmap,u,3); > C31,R31:=RelevantCosets(mwmap,u,Support(31*OK)); > R:=LCM(R,R31); > Cnew:=CosetIntersection(C,C31:Weak); > assert #Cnew[2] eq 0; > R; 2 > V; { 0, G.4 - G.5, -G.4 + G.5 } > {EvaluateByPowerSeries(u,mwmap(P)):P in V}; { (3/2 : 1), (-1 : 1) } > > //////////////////////////////////////////////////////////////////////////// > //Section 8: The equations x^n+y^n=Dz^2 for n=6,7,9,11,13,17 > // > //The computations in this section do not occur literally in the article, > //but verify the computations sketched in Section 8. > > //////////////////////////////////////////////////////////////////////////// > //Case: x^6+y^6=D*z^2 > > Cs:=[HyperellipticCurve(D*(x^6+1)):D in [2,3,5,6,10,11,13,17]]; > Cs:=[C:C in Cs|IsLocallySolvable(C,2) and IsLocallySolvable(C,7)]; > > f:=2*x^2+2;g:=(x^4-x^2+1); > deltas:={1,2,3,6}; > deltas:={delta:delta in deltas| > IsLocallySolvable(HyperellipticCurve(delta*f),2) and > IsLocallySolvable(HyperellipticCurve(delta*g),2)}; > assert deltas eq {1}; > C:=HyperellipticCurve(g); > E:=EllipticCurve(C); > assert RankBound(E) eq 0; > assert #TorsionSubgroup(E) eq 8; > V:=RationalPoints(C:Bound:=1); > assert #V eq 8; > V; {@ (1 : -1 : 0), (1 : 1 : 0), (-1 : -1 : 1), (-1 : 1 : 1), (0 : -1 : 1), (0 : 1 : 1), (1 : -1 : 1), (1 : 1 : 1) @} > > //////////////////////////////////////////////////////////////////////////// > //Case: x^7+y^7=D*z^2 > > QQ:=RationalField(); > > f:=x^7+1; > g:=ExactQuotient(f,x+1); > deltas:=&join[{QQ!(d@@mp):d in s} where s,mp:=pSelmerGroup(2,Support(7*D*OQ)): > D in [2,3,5,6,10,11,13,17]]; > deltas:={d:d in deltas | d gt 0}; > deltas:={d:d in deltas|IsLocallySolvable(HyperellipticCurve(d*g),2)}; > deltas:={d:d in deltas|IsLocallySolvable(HyperellipticCurve(d*g),7)}; > deltas:={d:d in deltas|IsLocallySolvable(HyperellipticCurve(d*g),11)}; > deltas; { 1, 7 } > > C:=HyperellipticCurve(7*g); > J:=Jacobian(C); > assert TwoSelmerGroupData(J) eq 1; > gen:=elt; > B:=Ceiling(Exp(CanonicalHeight(gen)/4+HeightConstant(J:Factor,Effort:=10))+1); > assert RationalPoints(J:Bound:=B) subset {n*gen: n in [-1..1]}; > Chabauty(gen,3); //only 1 pair of points (there are no rational WS points) {@ <80, 1, 4, 1> @} > RationalPoints(C:Bound:=100); {@ (-1 : -7 : 1), (-1 : 7 : 1) @} > > C:=HyperellipticCurve(1*g); > K:=NumberField(x^3 + x^2 - 2*x - 1); > OK:=IntegerRing(K); > KX:=PolynomialRing(K); > Qpol:=X^2+beta*X+1; > Rpol:=ExactQuotient(Polynomial(K,g),Qpol); > slm,mp:=pSelmerGroup(2, Support(2*Resultant(Rpol,Qpol)*OK)); > slmQ,mpQ:=pSelmerGroup(2, Support(Norm(2*Resultant(Rpol,Qpol))*OQ)); > H:=Kernel(homslmQ|[mpQ(Norm(a@@mp)):a in OrderedGenerators(slm)]>); > p:=2*OK; > Kp,toKp:=Completion(K,p); > KpX:=PolynomialRing(Kp); > toKpX:=homKpX|toKp*Coercion(Kp,KpX),KpX.1>; > deltas:=[a:a in H | HasRatXpoint([toKpX(d*Rpol),toKpX(d*Qpol)]) where d:=a@@mp]; > [K|delta@@mp:delta in deltas]; [ 1 ] > > P1:=ProjectiveSpace(Rationals(),1); > D:=HyperellipticCurve(Rpol); > Dcov:=mapP1|[D.1,D.3]>; > E,DtoE:=EllipticCurve(D); > bl,G,mwmap:=PseudoMordellWeilGroup(E); > assert bl; > [mwmap(g):g in OrderedGenerators(G)]; [ (1/4*(3*beta^2 - 2*beta - 1) : 1/2*(-beta^2 + beta + 2) : 1), (1/4*(-beta^2 + 2*beta + 7) : 1/2*(2*beta + 3) : 1), (1/4*(-5*beta^2 - 2*beta + 11) : 1/2*(3*beta^2 + 2*beta - 5) : 1) ] > Ecov:=Expand(Inverse(DtoE)*Dcov); > N,V,R:=Chabauty(mwmap,Ecov,3); > assert N eq #V and PrimeDivisors(R) subset {2}; > {EvaluateByPowerSeries(Ecov,mwmap(P)):P in V}; { (-1 : 1), (1 : 1), (0 : 1), (1 : 0) } > > //////////////////////////////////////////////////////////////////////////// > //Case: x^9+y^9=D*z^2 > > g1:=x^6-x^3+1; > g2:=x^2-x+1; > deltas:=&join[{:d1,d2 in s} where > s,mp:=pSelmerGroup(2,Support(3*D*OQ)): > D in [2,3,5,6,10,11,13,17]]; > deltas:={d:d in deltas| d[1] gt 0 and d[2] gt 0}; > deltas:={d:d in deltas| Seqset(PrimeDivisors(GCD(d[1],d[2]))) subset {3}}; > Qp:=pAdicField(2); > QpX:=PolynomialRing(Qp); > deltas:={d:d in deltas| HasRatXpoint([QpX!(d[1]*g1),QpX!(d[2]*g2)])}; > Qp:=pAdicField(3); > QpX:=PolynomialRing(Qp); > deltas:={d:d in deltas| HasRatXpoint([QpX!(d[1]*g1),QpX!(d[2]*g2)])}; > Qp:=pAdicField(5); > QpX:=PolynomialRing(Qp); > deltas:={d:d in deltas| HasRatXpoint([QpX!(d[1]*g1),QpX!(d[2]*g2)])}; > {d[1]:d in deltas}; { 1, 3 } > > C:=HyperellipticCurve(1*g1); > J:=Jacobian(C); > assert TwoSelmerGroupData(J) eq 1; > gen:=elt; > B:=Ceiling(Exp(CanonicalHeight(gen)/4+HeightConstant(J:Effort:=10,Factor))+1); > assert CanonicalHeight(ReducedBasis(RationalPoints(J:Bound:=B))[1]) gt assert> CanonicalHeight(gen)/2; > Chabauty(gen,11); //gives 6 points {@ <0, 1, 4, 1>, <1, 1, 4, 1>, <1, 0, 4, 1> @} > RationalPoints(C:Bound:=1000); {@ (1 : -1 : 0), (1 : 1 : 0), (0 : -1 : 1), (0 : 1 : 1), (1 : -1 : 1), (1 : 1 : 1) @} > > C:=HyperellipticCurve(3*g1); > J:=Jacobian(C); > assert TwoSelmerGroupData(J) eq 1; > gen:=elt; > assert CanonicalHeight(ReducedBasis(RationalPoints(J:Bound:=B))[1]) gt assert> CanonicalHeight(gen)/2; > Chabauty(gen,11); //gives 2 points {@ <14640, 1, 4, 1> @} > RationalPoints(C:Bound:=1000); {@ (-1 : -3 : 1), (-1 : 3 : 1) @} > > //////////////////////////////////////////////////////////////////////////// > //Case: x^11+y^11=D*z^2 > > f:=x^11+1; > g:=ExactQuotient(f,x+1); > deltas:=&join[{QQ!(d@@mp):d in s} where s,mp:=pSelmerGroup(2,Support(11*D*OQ)): > D in [2,3,5,6,10,11,13,17]]; > deltas:={d:d in deltas | d gt 0}; > > deltas:={d:d in deltas|IsLocallySolvable(HyperellipticCurve(d*g),2)}; > deltas:={d:d in deltas|IsLocallySolvable(HyperellipticCurve(d*g),3)}; > deltas:={d:d in deltas|IsLocallySolvable(HyperellipticCurve(d*g),5)}; > deltas:={d:d in deltas|IsLocallySolvable(HyperellipticCurve(d*g),7)}; > deltas:={d:d in deltas|IsLocallySolvable(HyperellipticCurve(d*g),11)}; > > deltas; { 1, 11 } > > C:=HyperellipticCurve(g); > D:=HyperellipticCurve(x^6 + x^5 - 6*x^4 - 5*x^3 + 9*x^2 + 5*x - 2); > CtoD:=mapD|[C.1^2+C.3^2,C.2*(C.1+C.3),C.1*C.3]>; > > // delta=1 > f:=(x^6 + x^5 - 6*x^4 - 5*x^3 + 9*x^2 + 5*x - 2); > K:=NumberField(x^5 - x^4 - 4*x^3 + 3*x^2 + 3*x - 1); > OK:=IntegerRing(K); > KX:=PolynomialRing(K); > Qpol:=(X+2)*(X-beta); > Rpol:=ExactQuotient(f,Qpol); > deltas:={d@@mp: d in s} where s,mp:=pSelmerGroup(2,Support(2*11*OK)); > > Kp,toKp:=Completion(K,2*OK); > KpX:=PolynomialRing(Kp); > toKpX:=homKpX|toKp*Coercion(Kp,KpX),KpX.1>; > d1:=[d: d in deltas| IsSquare(toKp(Evaluate(d*Rpol,-2)))]; > deltas:={K|d: d in deltas| d in d1 or HasRatXpoint([toKpX(d*Qpol),toKpX(d*Rpol)])}; > deltas; //we find {1,beta^2-beta-2} { beta^2 - beta - 2, 1 } > > HC:=HyperellipticCurve(Rpol); > P1:=ProjectiveSpace(Rationals(),1); > HCcov:=mapP1|[HC.1,HC.3]>; > E,toE:=EllipticCurve(HC); > bl,G,mwmap:=PseudoMordellWeilGroup(E); > assert bl; > Ecov:=Expand(Inverse(toE)*HCcov); > N,V,R:=Chabauty(mwmap,Ecov,3); > assert N eq #V and PrimeDivisors(R) subset {2}; > {EvaluateByPowerSeries(Ecov,mwmap(a)):a in V}; { (2 : 1), (-2 : 1), (1 : 0) } > > HC:=HyperellipticCurve((beta^2-beta-2)*Rpol); > HCcov:=mapP1|[HC.1,HC.3]>; > E,toE:=EllipticCurve(HC); > bl,G,mwmap:=PseudoMordellWeilGroup(E); > assert bl and IsPSaturated(mwmap,3) and IsPSaturated(mwmap,5); > Ecov:=Expand(Inverse(toE)*HCcov); > N,V,R:=Chabauty(mwmap,Ecov,3); > assert N eq #V and PrimeDivisors(R) subset {2,3,5}; > {EvaluateByPowerSeries(Ecov,mwmap(a)):a in V}; { (-1 : 1) } > > //delta=11 > > f:=11*(x^6 + x^5 - 6*x^4 - 5*x^3 + 9*x^2 + 5*x - 2); > K:=NumberField(x^5 - x^4 - 4*x^3 + 3*x^2 + 3*x - 1); > OK:=IntegerRing(K); > KX:=PolynomialRing(K); > Qpol:=11*(X+2)*(X-beta); > Rpol:=ExactQuotient(f,Qpol); > deltas:={d@@mp: d in s} where s,mp:=pSelmerGroup(2,Support(2*11*OK)); > > Kp,toKp:=Completion(K,2*OK); > KpX:=PolynomialRing(Kp); > toKpX:=homKpX|toKp*Coercion(Kp,KpX),KpX.1>; > d1:=[d: d in deltas| IsSquare(toKp(Evaluate(d*Rpol,-2)))]; > deltas:={K|d: d in deltas| d in d1 or HasRatXpoint([toKpX(d*Qpol),toKpX(d*Rpol)])}; > > Kp,toKp:=Completion(K,(beta^2+beta-2)*OK); > KpX:=PolynomialRing(Kp); > toKpX:=homKpX|toKp*Coercion(Kp,KpX),KpX.1>; > d1:=[d: d in deltas| IsSquare(toKp(Evaluate(d*Rpol,-2)))]; > deltas:={K|d: d in deltas| d in d1 or HasRatXpoint([toKpX(d*Qpol),toKpX(d*Rpol)])}; > deltas; { beta^4 - 4*beta^2 - beta + 2, 1, beta^4 - 4*beta^2 - beta + 1 } > //{1,beta^3 - 2*beta^2 - beta + 1,beta^4 - beta^3 - 3*beta^2 + beta + 2} > > //we have already done delta=1; > > HC:=HyperellipticCurve((beta^3 - 2*beta^2 - beta + 1)*Rpol); > P1:=ProjectiveSpace(Rationals(),1); > HCcov:=mapP1|[HC.1,HC.3]>; > E,toE:=EllipticCurve(HC); > T,Tm:=TwoTorsionSubgroup(E); > [RankBound(E:Isogeny:=TwoIsogeny(Tm(t))):t in T | Order(t) ne 1]; [ 2, 0, 2 ] > Ecov:=Expand(Inverse(toE)*HCcov); > T,Tm:=TorsionSubgroup(E); > {EvaluateByPowerSeries(Ecov,Tm(t)):t in T}; { (-beta^2 + 2 : 1), (-beta^4 + 4*beta^2 - 2 : 1), (beta^4 - beta^3 - 3*beta^2 + 2*beta + 1 : 1), (beta^3 - 3*beta : 1) } > > HC:=HyperellipticCurve((beta^4 - beta^3 - 3*beta^2 + beta + 2)*Rpol); > P1:=ProjectiveSpace(Rationals(),1); > HCcov:=mapP1|[HC.1,HC.3]>; > E,toE:=EllipticCurve(HC); > bl,G,mwmap:=PseudoMordellWeilGroup(E:Isogeny:=2); > Ecov:=Expand(Inverse(toE)*HCcov); > N,V,R:=Chabauty(mwmap,Ecov,3); > assert N eq #V and PrimeDivisors(R) subset {2}; > {EvaluateByPowerSeries(Ecov,mwmap(a)):a in V}; { (1 : 1) } > > Uvals:={P1|[-2,1],[-1,1],[1,1],[2,1],[1,0]}; > XtoU:=mapP1|[s^2+t^2,s*t]>; > Xvals:=&join{RationalPoints(p@@XtoU):p in Uvals}; > Xvals; {@ (0 : 1), (1 : 0), (1 : 1), (-1 : 1) @} > > //////////////////////////////////////////////////////////////////////////// > //Case: x^13+y^13=D*z^2 > > f:=x^13+1; > g:=ExactQuotient(f,x+1); > deltas:=&join[{QQ!(d@@mp):d in s} where s,mp:=pSelmerGroup(2,Support(13*D*OQ)): > D in [2,3,5,6,10,11,13,17]]; > deltas:={d:d in deltas | d gt 0}; > > deltas:={d:d in deltas|IsLocallySolvable(HyperellipticCurve(d*g),2)}; > deltas:={d:d in deltas|IsLocallySolvable(HyperellipticCurve(d*g),3)}; > deltas; { 1, 13 } > //we find delta in {1,13} > > > //delta=1 > K:=NumberField(x^3 + x^2 - 4*x + 1); > OK:=IntegerRing(K); > KX:=PolynomialRing(K); > > Rpol:=X^4+beta*X^3+(beta^2+beta-1)*X^2+beta*X+1; > Qpol:=ExactQuotient(g,Rpol); > > slm,mp:=pSelmerGroup(2,Support(2*13*OK)); > slmQ,mpQ:=pSelmerGroup(2, Support(Norm(2*Resultant(Rpol,Qpol))*OQ)); > H:=Kernel(homslmQ|[mpQ(Norm(a@@mp)):a in OrderedGenerators(slm)]>); > > deltas:={K|d@@mp: d in H}; > Kp,toKp:=Completion(K,2*OK); > KpX:=PolynomialRing(Kp); > toKpX:=homKpX|toKp*Coercion(Kp,KpX),KpX.1>; > deltas:={K|d: d in deltas| HasRatXpoint([toKpX(d*Qpol),toKpX(d*Rpol)])}; > deltas; { 1 } > //only delta=1 is left; > > HC:=HyperellipticCurve(Rpol); > P1:=ProjectiveSpace(Rationals(),1); > HCcov:=mapP1|[HC.1,HC.3]>; > E,toE:=EllipticCurve(HC); > bl,G,mwmap:=PseudoMordellWeilGroup(E); > Ecov:=Expand(Inverse(toE)*HCcov); > N,V,R:=Chabauty(mwmap,Ecov,3); > assert N eq #V and PrimeDivisors(R) subset {2}; > {EvaluateByPowerSeries(Ecov,mwmap(a)):a in V}; { (1 : 1), (0 : 1), (1 : 0) } > > //delta=13 > C:=HyperellipticCurve(13*g); > D:=HyperellipticCurve(13*(x^6 - x^5 - 5*x^4 + 4*x^3 + 6*x^2 - 3*x - 1)); > CtoD:=mapD|[C.1^2+C.3^2,C.2,C.1*C.3]>; > J:=Jacobian(D); > assert TwoSelmerGroupData(J) eq 1; > gen:=elt; > B:=CanonicalHeight(gen)/4+HeightConstant(J:Factor,Effort:=10); > V:=RationalPoints(J:Bound:=Ceiling(Exp(B))); > assert forall{v: v in V| IsZero(v) or CanonicalHeight(v) gt assert> CanonicalHeight(gen)/2}; > Chabauty(gen,5); //only 1 U-coordinate {@ <623, 1, 4, 1> @} > RationalPoints(D:Bound:=100); {@ (-2 : -13 : 1), (-2 : 13 : 1) @} > > Uvals:={P1|[-2,1]}; > XtoU:=mapP1|[s^2+t^2,s*t]>; > Xvals:=&join{RationalPoints(p@@XtoU):p in Uvals}; > Xvals; {@ (-1 : 1) @} > > //////////////////////////////////////////////////////////////////////////// > //Case: x^17+y^17=D*z^2 > > f:=x^17+1; > g:=ExactQuotient(f,x+1); > deltas:=&join[{QQ!(d@@mp):d in s} where s,mp:=pSelmerGroup(2,Support(17*D*OQ)): > D in [2,3,5,6,10,11,13,17]]; > deltas:={d:d in deltas | d gt 0}; > > deltas:={d:d in deltas|IsLocallySolvable(HyperellipticCurve(d*g),2)}; > deltas:={d:d in deltas|IsLocallySolvable(HyperellipticCurve(d*g),3)}; > deltas:={d:d in deltas|IsLocallySolvable(HyperellipticCurve(d*g),5)}; > deltas:={d:d in deltas|IsLocallySolvable(HyperellipticCurve(d*g),11)}; > deltas:={d:d in deltas|IsLocallySolvable(HyperellipticCurve(d*g),13)}; > deltas; { 1, 17 } > //we find delta in {1,17} > > K:=NumberField(x^4 + x^3 - 6*x^2 - x + 1); > OK:=IntegerRing(K); > KX:=PolynomialRing(K); > > Rpol:=X^4+beta*X^3+1/2*(-beta^3+6*beta+1)*X^2+beta*X+1; > Qpol:=ExactQuotient(g,Rpol); > > slm,mp:=pSelmerGroup(2,Support(2*17*OK)); > slmQ,mpQ:=pSelmerGroup(2, Support(Norm(2*Resultant(Rpol,Qpol))*OQ)); > H:=Kernel(homslmQ|[mpQ(Norm(a@@mp)):a in OrderedGenerators(slm)]>); > pi17:=1/2*(-3*beta^3 + 20*beta - 7); > assert Norm(pi17) eq 17; > s17:=mp(pi17); > deltas:={K|d@@mp: d in H} join{K|(d+s17)@@mp:d in H}; > > Kp,toKp:=Completion(K,(-beta^3 - beta^2 + 6*beta)*OK); > KpX:=PolynomialRing(Kp); > toKpX:=homKpX|toKp*Coercion(Kp,KpX),KpX.1>; > deltas:={K|d: d in deltas| HasRatXpoint([toKpX(d*Qpol),toKpX(d*Rpol)])}; > > Kp,toKp:=Completion(K,1/2*(beta^3 - 6*beta + 5)*OK); > KpX:=PolynomialRing(Kp); > toKpX:=homKpX|toKp*Coercion(Kp,KpX),KpX.1>; > deltas:={K|d: d in deltas| HasRatXpoint([toKpX(d*Qpol),toKpX(d*Rpol)])}; > deltas; { 1, 1/2*(9*beta^3 + 6*beta^2 - 58*beta + 19) } > //deltas = {1,beta^3 + 2*beta^2 - 3*beta + 1} > > HC:=HyperellipticCurve(Rpol); > P1:=ProjectiveSpace(Rationals(),1); > HCcov:=mapP1|[HC.1,HC.3]>; > E,toE:=EllipticCurve(HC); > bl,G,mwmap:=PseudoMordellWeilGroup(E); > assert bl; > Ecov:=Expand(Inverse(toE)*HCcov); > N,V,R:=Chabauty(mwmap,Ecov,3); > assert N eq #V and PrimeDivisors(R) subset {2}; > {EvaluateByPowerSeries(Ecov,mwmap(a)):a in V}; { (1 : 1), (0 : 1), (1 : 0) } > > HC:=HyperellipticCurve((beta^3 + 2*beta^2 - 3*beta + 1)*Rpol); > P1:=ProjectiveSpace(Rationals(),1); > HCcov:=mapP1|[HC.1,HC.3]>; > E,toE:=EllipticCurve(HC,RationalPoints(HC,-1)[1]); > assert RankBound(E) eq 0; > T,Tm:=TorsionSubgroup(E); > Ecov:=Expand(Inverse(toE)*HCcov); > {EvaluateByPowerSeries(Ecov,Tm(t)):t in T}; { (-1 : 1) } Total time: 190.850 seconds, Total memory usage: 59.75MB