// // // code for Proposition 3.4 with X0(8) // // K:=PolynomialRing(Rationals()); j:=((h^4-16*h^2+16)^3)/((h^2-16)*h^2); // this is the parameterization of the j-invariants of curves that are non-cuspidal points on X0(8) E:=MinimalModel(EllipticCurveFromjInvariant(j)); // we get an elliptic curve from j (up to a twist) D:=Discriminant(E); // this gives the discriminant of E c4:=cInvariants(E)[1]; // this gives the c4-invariant of E Factorization(K!D); Factorization(K!c4); Factorization(Integers()!Resultant(h, K!(D/(h^2)))); // =2^64, the factorization of the resultant of the factor h from the discriminant with the remaining factors Factorization(Integers()!Resultant(h, K!c4)); // =2^24, the factorization of the resultant of the factor h from the discriminant with c4-invariant K:=PolynomialRing(Rationals()); // here we are thinking of h as +/-2^k j:=((h^4-16*h^2+16)^3)/((h^2-16)*h^2); // this is the parameterization of the j-invariants of curves that are non-cuspidal points on X0(8) E:=MinimalModel(EllipticCurveFromjInvariant(j)); // we get an elliptic curve from j (up to a twist) D:=Discriminant(E); // this gives the discriminant of E c4:=cInvariants(E)[1]; // this gives the c4-invariant of E Factorization(K!D); // we get the factorization with a variable h, but h represents h=+/-2^k so now we can count multiplicities of 2 in the discriminant, we do the same thing for the c4-invariant Factorization(K!c4); // We can count the multiplicities of 2 in delta(t) and c_4(t) that we have in Proposition ?? // after the change of variables x->x*2^12, y->y*2^18 having in mind that delta(t)=2^(-72)*D, c_4(t)=2^(-24)*c4 // (see Table 3.1 in J. Silverman: The arithmetic of elliptic curves). // below is the code used for specific h in the proof h:=-1; // it is clear from the j-invariant that we will get the same curve for h=1 and h=-1 j:=((h^4-16*h^2+16)^3)/((h^2-16)*h^2); // this is the parameterization of the j-invariants of curves that are non-cuspidal points on X0(8) E:=MinimalModel(EllipticCurveFromjInvariant(j)); IsQuadraticTwist(E, EllipticCurve("15A8")); // here we see that E is really a twist of 15a8=15.a7 and we get d such that E^d is the curve 15a8=15.a7 (this we use in the next row) LocalInformation(QuadraticTwist(E, 161)); // this function gives us primes of bad reduction and their reduction types and Tamagawa numbers LocalInformation(QuadraticTwist(EllipticCurve("15A8"), -1)); // the next 7 lines are examining the properties of Tamagawa numbers at p=2 of the curve 15a8=15.a7 under twisting LocalInformation(QuadraticTwist(EllipticCurve("15A8"), 2)); LocalInformation(QuadraticTwist(EllipticCurve("15A8"), 5)); LocalInformation(QuadraticTwist(EllipticCurve("15A8"), -2)); LocalInformation(QuadraticTwist(EllipticCurve("15A8"), -5)); LocalInformation(QuadraticTwist(EllipticCurve("15A8"), 10)); LocalInformation(QuadraticTwist(EllipticCurve("15A8"), -10)); h:=-2; // it is clear from the j-invariant that we will get the same curve for h=2 and h=-2 j:=((h^4-16*h^2+16)^3)/((h^2-16)*h^2); // this is the parameterization of the j-invariants of curves that are non-cuspidal points on X0(8) E:=MinimalModel(EllipticCurveFromjInvariant(j)); IsQuadraticTwist(E, EllipticCurve("48A4")); // here we see that E is really a twist of 48a4=48.a5 and we get d such that E^d is the curve 48a4=48.a5 (this we use in the next row) LocalInformation(QuadraticTwist(E, 7)); // this function gives us primes of bad reduction and their reduction types and Tamagawa numbers LocalInformation(QuadraticTwist(EllipticCurve("48A4"), -1)); // the next 7 lines are examining the properties of Tamagawa numbers at p=2 of the curve 48a4=48.a5 under twisting LocalInformation(QuadraticTwist(EllipticCurve("48A4"), 2)); LocalInformation(QuadraticTwist(EllipticCurve("48A4"), 5)); LocalInformation(QuadraticTwist(EllipticCurve("48A4"), -2)); LocalInformation(QuadraticTwist(EllipticCurve("48A4"), -5)); LocalInformation(QuadraticTwist(EllipticCurve("48A4"), 10)); LocalInformation(QuadraticTwist(EllipticCurve("48A4"), -10)); h:=-8; // it is clear from the j-invariant that we will get the same curve for h=8 and h=-8 j:=((h^4-16*h^2+16)^3)/((h^2-16)*h^2); // this is the parameterization of the j-invariants of curves that are non-cuspidal points on X0(8) E:=MinimalModel(EllipticCurveFromjInvariant(j)); IsQuadraticTwist(E, EllipticCurve("24A3")); // here we see that E is really a twist of 24a3=24.a2 and we get d such that E^d is the curve 24a3=24.a2 (this we use in the next row) LocalInformation(QuadraticTwist(E, 517433)); // this function gives us primes of bad reduction and their reduction types and Tamagawa numbers LocalInformation(QuadraticTwist(EllipticCurve("24A3"), -1)); // the next 7 lines are examining the properties of Tamagawa numbers at p=2 of the curve 24a3=24.a2 under twisting LocalInformation(QuadraticTwist(EllipticCurve("24A3"), 2)); LocalInformation(QuadraticTwist(EllipticCurve("24A3"), 5)); LocalInformation(QuadraticTwist(EllipticCurve("24A3"), -2)); LocalInformation(QuadraticTwist(EllipticCurve("24A3"), -5)); LocalInformation(QuadraticTwist(EllipticCurve("24A3"), 10)); LocalInformation(QuadraticTwist(EllipticCurve("24A3"), -10)); h:=-16; // it is clear from the j-invariant that we will get the same curve for h=16 and h=-16 j:=((h^4-16*h^2+16)^3)/((h^2-16)*h^2); // this is the parameterization of the j-invariants of curves that are non-cuspidal points on X0(8) E:=MinimalModel(EllipticCurveFromjInvariant(j)); IsQuadraticTwist(E, EllipticCurve("15A7")); // here we see that E is really a twist of 15a7=15.a4 and we get d such that E^d is the curve 15a7=15.a4 (this we use in the next row) LocalInformation(QuadraticTwist(E, 914346209)); // this function gives us primes of bad reduction and their reduction types and Tamagawa numbers LocalInformation(QuadraticTwist(EllipticCurve("15A7"), -1)); // the next 7 lines are examining the properties of Tamagawa numbers at p=2 of the curve 15a7=15.a4 under twisting LocalInformation(QuadraticTwist(EllipticCurve("15A7"), 2)); LocalInformation(QuadraticTwist(EllipticCurve("15A7"), 5)); LocalInformation(QuadraticTwist(EllipticCurve("15A7"), -2)); LocalInformation(QuadraticTwist(EllipticCurve("15A7"), -5)); LocalInformation(QuadraticTwist(EllipticCurve("15A7"), 10)); LocalInformation(QuadraticTwist(EllipticCurve("15A7"), -10)); K:=PolynomialRing(Rationals()); h:=1/m; // this is the substitution m:=1/h j:=((h^4-16*h^2+16)^3)/((h^2-16)*h^2); // this is the parameterization of the j-invariants of curves that are non-cuspidal points on X0(8) E:=MinimalModel(EllipticCurveFromjInvariant(j)); // we get an elliptic curve from j (up to a twist) D:=Discriminant(E); // this gives the discriminant of E c4:=cInvariants(E)[1]; // this gives the c4-invariant of E Factorization(K!D); // we have to have in mind that this function gives the factorization where each irreducible factor is normalized, so to get the complete factorization we have to multiply what we get with -1/256 (in this case) Factorization(K!c4); // this was already normalized // The factorizations of delta(m) and c_4(m) that we have in Proposition ?? are after the change // of variables x->x*2^(-12), y->y*2^(-18). We got the factorizations as delta(m)=2^72*D, c_4(m)=2^24*c4 // (see Table 3.1 in J. Silverman: The arithmetic of elliptic curves). Resultant(m, K!(2^72*(D/m^8))); // =1, the resultant of the factor m from the discriminant with the remaining factors Resultant(m, K!(2^24*c4)); // =1, the resultant of the factor m from the discriminant with the c4-invariant