//Lemma 3.2. E := EllipticCurve([0, -1, 1, 0, 0]); DescentInformation(E); K := Subfields(CyclotomicField(25),5)[1][1]; E1 := BaseChange(E,K); DescentInformation(E1); //Lemma 4.2. Q := PolynomialRing(Rationals()); K:=NumberField(x^16-16*x^14+104*x^12-352*x^10+660*x^8-672*x^6+336*x^4-64*x^2+2); f := function(E, K) r := Factorization(DivisionPolynomial(E,17) : DegreeLimit := 16); for p in r do if HasRoot(p[1], K) then return true; end if; end for; return false; end function; f(EllipticCurve("14450p1"), K); f(EllipticCurve("14450p2"), K); //Lemma 4.4.-1 Q := PolynomialRing(Rationals()); E := EllipticCurve(x^3 + x^2, x + 1); K := NumberField(x^4 - 4*x^2 + 2); E := ChangeRing(E, K); DescentInformation(E); //Lemma 4.4.-2 Q := PolynomialRing(Rationals()); E := EllipticCurve(x^3 + x^2 - x); K := NumberField(x^2 - 2); E := ChangeRing(E, K); DescentInformation(E); //Lemma 5.1. E := EllipticCurve("361a1"); P := DivisionPolynomial(E,19); K := Subfields(CyclotomicField(27),9)[1][1]; HasRoot(P,K); //Lemma 5.2. Check := function(C, pts, P1, P2) print #pts; S := {}; for i := 1 to 50 do for j := 1 to 50 do S := S join {i*P1 + j*P2}; end for; end for; pts1 := PointsAtInfinity(C); for P in S do p := Roots(P[1]); for i := 1 to #p do pts1 := pts1 join Points(C, p[i][1]); end for; end for; return #S, (pts eq pts1); end function; Q := PolynomialRing(Rationals()); C := HyperellipticCurve(x^6 - 2*x^5 + x^4 - 2*x^3 + 6*x^2 - 4*x + 1); K := Subfields(CyclotomicField(9),3)[1][1]; C1 := ChangeRing(C, K); RankBound(Jacobian(C1)); Discriminant(C1); Factorization(177209344); O := RingOfIntegers(K); Factorization(11*O); AbelianGroup(Jacobian(ChangeRing(C1,GF(11^3)))); Factorization(19*O); AbelianGroup(Jacobian(ChangeRing(C1,GF(19)))); AbelianGroup(Jacobian(ChangeRing(C,GF(3)))); pts := Points(C1 : Bound := 10); P1 := pts[1] - pts[4]; P2 := pts[2] - pts[5]; Check(C1, pts, P1, P2); pts := Points(C : Bound := 10); P1 := pts[1] - pts[4]; P2 := pts[2] - pts[5]; Check(C, pts, P1, P2); //Lemma 5.4. Q := PolynomialRing(Rationals()); E := EllipticCurve(x^3 - x, x + 1); K := Subfields(CyclotomicField(9),3)[1][1]; E := ChangeRing(E, K); DescentInformation(E); //Lemma 5.6. Check := function(C, pts, P1, P2) print #pts; S := {}; for i := 1 to 50 do for j := 1 to 50 do S := S join {i*P1 + j*P2}; end for; end for; pts1 := PointsAtInfinity(C); for P in S do p := Roots(P[1]); for i := 1 to #p do pts1 := pts1 join Points(C, p[i][1]); end for; end for; return #S, (pts eq pts1); end function; Find := function(C, K) o := RingOfIntegers(K); q := Degree(K); for p := 5 to 100 do if IsPrime(p) then if #Factorization(p*o) eq q then print AbelianGroup(Jacobian(ChangeRing(C,GF(p)))); break; end if; end if; end for; pts := Points(C : Bound := 10); P1 := pts[3] - pts[7]; P2 := pts[5] - pts[10]; return Check(C, pts, P1, P2); end function; Q := PolynomialRing(Rationals()); C := HyperellipticCurve(x^6 + 2*x^5 + 5*x^4 + 10*x^3 + 10*x^2 + 4*x + 1); K := Subfields(CyclotomicField(9),3)[1][1]; C1 := ChangeRing(C, K); RankBound(Jacobian(C1)); Find(C1, K); pts := PointsAtInfinity(C1); for p in Roots(x*(x + 1)*(x^2 + x + 1)*(x^3 - 3*x - 1), K) do pts := pts join Points(C1,p[1]); end for; #pts; K := CyclotomicField(3); Find(ChangeRing(C, K), K); K := CyclotomicField(9); Find(ChangeRing(C, K), K); //Proof of Theorem 1.3. E := EllipticCurve("27a2"); K := Subfields(CyclotomicField(27),9)[1][1]; f := DivisionPolynomial(E, 27) div DivisionPolynomial(E, 9); f := Factorization(f : DegreeLimit := 9); f; r := Roots(f[1][1], K); a := r[1][1]; _ := PolynomialRing(K); Norm(Discriminant(y^2 + y - (a^3 - 270*a - 1708))); Factorization(239299329230617529590083); E1 := QuadraticTwist(E,3); TorsionSubgroup(ChangeRing(E1,K)); E1 := QuadraticTwist(E,-3); TorsionSubgroup(ChangeRing(E1,K)); //Theorem 6.1.-1 F := FunctionField(Rationals()); a := <0, t, (2*t-1)*(t-1)/t>; b := ; for i := 1 to 3 do E := EllipticCurve([1-a[i],-b[i],-b[i],0,0]); g, m := TorsionSubgroup(E); g; Discriminant(E); end for; A := AffineSpace(Rationals(),2); a := <16*t + 1, (9*t+1)*(t+1), 2*(t^2 - t + 1/8)>; for i := 1 to 3 do C := ProjectiveClosure(Curve(A,a[i] - 2*s^2)); Genus(C); #Points(C : Bound := 100); C := ProjectiveClosure(Curve(A,a[i] + s^2)); Genus(C); #Points(C : Bound := 100); end for; //Theorem 6.1.-2 F := FunctionField(Rationals()); E := EllipticCurve([0,4/(1-2*t^2),0,4/(1-2*t^2),0]); TorsionSubgroup(E); Discriminant(E);