// MAGMA script for the Mordell-Weil Sieve computations in the context of // "Integral Points on Hyperelliptic Curves" // by Y. Bugeaud, M. Mignotte, S. Siksek, M. Stoll and Sz. Tengely // // Here: (y choose 2) = (x choose 5) // // Set up a suitable model of the curve // y(y-1)/2 = x(x-1)(x-2)(x-3)(x-4)/120 P := PolynomialRing(Rationals()); C := HyperellipticCurve(15*x^5 - 75*x^3 + 60*x + 225); J := Jacobian(C); // This gives a basis of the Mordell-Weil group J(Q) bas, hmat := ReducedBasis(Points(J : Bound := 50)); // Point at infinity as base-point for the embedding of C into J pt0 := Rep(PointsAtInfinity(C)); // Load the necessary code load "MWdemo.magma"; // Set verbose flags SetVerbose("GroupInfo", 1); SetVerbose("DeepInfo", 1); SetVerbose("MWSieve", 1); // For later use: the Mordell-Weil group as an abstract abelian group MW := FreeAbelianGroup(6); // The image in J(Q) of the known points in C(Q), given as linear // combinations on the basis S := {MW | [ 0, 1, 0, 0, 0, 0 ], [ 0, 0, 1, 0, 0, 0 ], [ -1, -1, 1, -1, 0, -1 ], [ -1, 0, 0, 0, 0, 0 ], [ 2, 0, -1, 1, 1, 1 ], [ 1, 0, 0, 0, 0, 0 ], [ -1, 0, -1, 0, 0, -1 ], [ -1, -1, 1, -1, 0, 0 ], [ 1, 1, -1, 1, 0, 1 ], [ 1, -1, 1, 1, 0, 0 ], [ 0, 0, 0, 0, 1, 0 ], [ 1, 1, -1, 1, 0, 0 ], [ 0, 0, 0, 1, 0, 0 ], [ 1, 3, -1, 1, 2, 1 ], [ 0, -2, 1, -2, 0, 0 ], [ 2, 2, 0, 1, 0, 0 ], [ -1, -3, 1, -1, -2, -1 ], [ 0, 2, -1, 2, 0, 0 ], [ 0, 0, 0, -1, 0, 0 ], [ -1, 1, 0, 0, 0, 1 ], [ -1, -1, 1, 0, 0, 1 ], [ 0, -1, 0, 0, 0, 0 ], [ 0, 1, 1, 1, 1, 0 ], [ 0, 0, 0, 0, -1, 0 ], [ 0, 0, 0, 0, 0, 0 ], [ 0, 0, -1, 0, 0, 0 ], [ 0, -1, 0, -1, -1, -1 ], [ -1, 1, 1, -1, 1, 0 ], [ 1, -1, 0, 0, 0, -1 ], [ 1, 0, 0, 1, -1, -1 ], [ 1, 0, 1, 0, 0, 1 ], [ -1, 0, 0, -1, 1, 1 ], [ 0, -1, -1, -1, -1, 0 ], [ -2, -2, 0, -1, 0, 0 ], [ -2, 0, 1, -1, -1, -1 ], [ 1, 1, -1, 0, 0, -1 ], [ 1, -1, -1, 1, -1, 0 ], [ -1, 1, -1, -1, 0, 0 ], [ 0, 1, 0, 1, 1, 1 ] }; // check: ptsC := Points(C : Bound := 1000); assert {&+[Eltseq(c)[i]*bas[i] : i in [1..6]] : c in S} eq {pt - pt0 : pt in ptsC}; // The list of primes and prime powers for the required local information deep := [<2,8>, <3,6>, <5,4>, <7,3>, <11,3>, <13,2>, <17,2>, <19,2>] cat [ : p in [ 23, 29, 31, 37, 43, 47, 53, 59, 61, 71, 73, 79, 89, 97, 101, 103, 109, 131, 137, 149, 157, 163, 167, 173, 179, 191, 197, 199, 227, 229, 251, 257, 269, 277, 281, 283, 307, 317, 347, 359, 379, 389, 409, 419, 421, 431, 443, 449, 463, 467, 487, 509, 523, 541, 557, 563, 569, 587, 599, 601, 617, 631, 641, 643, 653, 659, 677, 683, 691, 701, 709, 727, 733, 739, 743, 751, 773, 787, 797, 811, 821, 823, 829, 839, 853, 857, 877, 881, 883, 887, 919, 929, 971, 997, 1019, 1021, 1031, 1049, 1069, 1093, 1123, 1171, 1193, 1213, 1361, 1373, 1399, 1423, 1427, 1429, 1453, 1471, 1523, 1543, 1549, 1567, 1571, 1607, 1693, 1699, 1721, 1733, 1747, 1801, 1873, 1877, 1901, 1907, 1933, 1987, 1999, 2003, 2207, 2237, 2243, 2251, 2267, 2287, 2333, 2399, 2423, 2437, 2467, 2473, 2539, 2593, 2659, 2671, 2693, 2713, 2729, 2731, 2777, 2789, 2803, 2851, 2879, 2927, 2953, 2957, 3001, 3163, 3217, 3343, 3361, 3391, 3407, 3463, 3467, 3469, 3541, 3547, 3559, 3631, 3701, 3733, 3847, 3917, 3919, 3929, 4007, 4013, 4129, 4133, 4153, 4177, 4259, 4363, 4451, 4583, 4643, 4679, 4703, 4723, 4751, 4871, 4877, 5197, 5347, 5477, 5581, 5591, 5701, 5779, 5821, 5827, 6553, 6581, 6653, 6841, 6869, 7159, 7817, 7879, 7907, 8081, 8219, 8263, 8387, 8623, 8627, 9521, 9803, 9931, 10067, 10133, 10289, 10321, 10499, 10501, 10531, 10729, 10831, 10957, 11027, 11087, 11353, 12263, 12289, 12613, 12619, 12647, 12713, 12809, 12911, 13063, 13291, 13411, 13499, 13513, 13873, 14389, 14411, 15307, 15797, 16057, 16217, 16381, 16903, 17293, 17327, 17519, 17573, 17921, 18493, 18521, 19031, 19213, 19333, 19423, 19891, 20023, 20071, 20443, 20857, 21061, 21143, 21277, 21599, 21647, 22063, 22409, 22637, 23201, 23327, 23399, 24281, 24527, 24847, 25343, 25583, 25609, 26237, 26513, 27241, 27737, 28279, 28351, 28393, 28447, 28619, 28643, 29363, 29803, 30983, 31091, 31469, 31481, 31531, 31607, 32063, 32327, 32579, 33023, 33359, 33487, 34297, 34549, 34603, 35149, 36541, 36671, 37003, 37039, 38231, 38569, 39839, 42239, 42839, 42841, 43669, 45161, 45817, 45979, 45989, 46051, 46261, 46633, 48767, 49333, 50159, 51257, 52903, 54367, 55339, 56123, 56929, 57107, 58013, 58391, 59419, 59509, 60337, 60923, 61091, 62591, 63839, 64483, 64879, 64891, 64921, 65053, 65287, 65827, 66491, 66643, 67129, 67829, 69143, 69221, 70379, 70951, 71849, 72671, 72893, 73553, 73849, 74441, 74717, 74933, 76147, 78797, 82757, 82939, 86143, 87491, 88811, 89959, 90599, 91009, 91867, 94111, 94351, 94903, 95003, 95233, 95783, 96323, 99233, 100393, 101149, 102217, 103969, 105173, 106739, 108023, 108991, 109001, 109357, 109507, 109831, 110069, 110879, 110933, 111509, 113453, 116279, 116371 ]]; // Compute the local information time GI := DeepGI(J, 0, bas, pt0 : Deep := deep, PrimeBound := 500, SmoothBound := 500); // The sequence of prime factors to build the number B run := [ 2, 2, 3, 2, 5, 3, 7, 11, 13, 23, 19, 17, 31, 3, 5, 41, 37, 67, 29, 97, 47, 2, 11, 59, 43, 107, 149, 2, 73, 113, 53, 89, 109, 139, 151, 5, 101, 103, 71, 7, 359, 3, 191, 211, 61, 13, 367, 223, 229, 137, 79, 2, 83, 127, 163, 281, 239, 2, 181, 3, 167, 277, 157, 19, 307, 419, 5, 179, 397, 17, 271, 2, 131 ]; // Now do the MW sieve computation time r1, cands, primes := BMCompute(GI, run); assert r1 eq run; // B is the product of the numbers in run B := &*r1; rd := func< a, b | 2*r gt b select r-b else r where r := a mod b >; // Check that what survives is exactly the image of the known points cands1 := {[rd(c,B) : c in a] : a in cands}; assert #cands1 eq 39; assert ChangeUniverse(cands1, MW) eq S; // L is the currently known subgroup of MW s.t. the image of C(Q) in MW/L // equals the image of the known points L := sub; // The list of primes for the second stage of the sieve pl := [ 1699, 72671, 12619, 110069, 45989, 83761, 109831, 10133, 5779, 6869, 8081, 103969, 13463, 39839, 160639, 683, 3001, 6037, 56929, 6841, 29363, 12647, 110933, 1733, 13411, 105173, 99233, 100549, 109357, 25343, 190523, 63839, 12263, 23327, 166843, 26513, 65287, 87491, 122819, 136993, 148387, 59419, 74933, 183343, 17573, 125777, 172721, 22409, 35863, 2957, 28643, 45119, 45817, 17293, 89959, 7079, 64891, 109507, 117959, 131023, 7907, 155717, 158791, 180413, 25583, 9091, 14341, 16127, 108949, 7879, 8263, 20023, 90599, 2039, 86197, 148537, 196541, 17327, 23399, 60337, 8059, 16381, 18191, 118673, 155833, 168197, 34549, 49603, 64483, 88811, 32717, 81899, 89627, 20143, 42499, 67679, 70951, 156719, 31063, 70241, 75541, 109001, 63949, 12809, 42197, 182341, 65827, 66491, 69151, 112253, 24281, 32327, 60923, 118691, 13933, 25609, 95003, 152809, 27241, 64717, 66553, 15391, 43669, 86143, 138239, 16729, 75833, 76777, 91397, 132523, 22637, 67933, 94111, 125329, 29429, 73553, 106727, 22247, 23087, 107209, 70969, 79393, 90803, 9473, 49199, 65867, 85909, 149159, 36791, 54287, 177383, 35069, 75169, 49921, 174679, 50647, 141803, 188437, 11437, 5903, 54493, 92893, 54721, 14699, 95087, 23021, 79427, 87119, 66179, 18143, 21191, 69557, 133253, 114157, 20333, 48311, 151847, 18341, 24137, 35447, 3847, 44371, 69143, 62761, 134989, 73897, 75773, 37201, 12517, 119359, 35879, 43579, 174407, 55127, 100913, 171713, 74779, 94477, 123787, 32059, 196771, 52889, 86573, 115933, 166561, 7927, 24151, 58169, 104729, 57131, 193541, 46687, 38327, 113779, 136657, 182839, 84991, 123547, 17737, 32789, 53479, 101873, 11903, 117041, 167437, 67427, 87421, 121727, 56999, 48731, 90793, 50503, 98689, 53923, 63541, 110939, 50849, 150401, 135559, 70997, 109297, 113381, 17713, 118247, 24847, 73681, 101347, 195887, 132851, 137147, 184721, 164471, 141649, 53437, 150559, 36571, 41999, 39499, 42929, 65029, 170603, 67867, 12979, 59357, 137177, 142711, 47441, 51043, 181763, 52919, 40697, 42643, 159773, 31271, 155371, 96779, 179603, 69127, 52291, 146309, 53047, 199499, 53987, 151337, 21929, 37273, 104123, 123229, 54521, 108961, 131171, 25031, 138739, 189613, 146857, 178351, 97583, 181639, 90271, 63857, 177481, 59627, 179429, 73849, 140603, 33023, 179161, 170701, 7243, 146639, 81533, 163819, 155069, 111217, 153281, 182423, 41299, 193451, 98389, 146563, 17477, 93581, 36011, 86719, 46511, 83137, 123269, 171757, 26641, 13883, 101119, 104381, 84211, 167441, 176791, 40507, 99607, 53401, 94559, 97651, 172553, 41687, 57773, 67139, 57557, 93703, 199151, 24019, 95581, 157837, 76123, 77977, 155299, 184649, 165479, 88819, 196961, 39217, 199583, 153427, 107351, 188957, 187223, 63823, 29027, 136177, 68711, 179989, 80473, 94693, 125471, 91513, 69193, 108007, 36833, 102461, 158927, 158371, 53161, 35251, 82609, 62143 ]; /* 175781, 127207, 157637, 96703, 61363, 76207, 113909, 79031, 81019, 146539, 117071, 141529, 151121, 142553, 37511, 101197, 118297, 192383, 127703, 45191, 135101, 64373, 175079, 40499, 89237, 175631, 195751, 135403, 192949, 123289, 126743, 148531, 57047, 32371, 163637, 152063, 80849, 58913, 39703, 106243, 100699, 54799, 185813, 164371, 81001, 90971, 190579, 131707, 145753, 172423, 184279, 122231, 91733, 163811, 198281, 145267, 167393, 169457, 169321, 45557, 187139, 191453, 79841, 114781, 98057, 87293, 183499, 181739, 144103, 131759, 186763, 183683, 199153, 197647, 172021, 116539, 125383, 144577, 167779, 73819, 180647, 99559, 182443, 185543, 72089, 182029, 190711, 132049, 131891, 134753, 100703, 83701, 190871, 149183 ]; */ // Do the second stage computation, increasing the index of L in MW time for p in pl do _, L := TestEnlarge(L, S, p, J, bas); end for; // Convert L into a lattice LLat := Lattice(Matrix([Eltseq(MW!g) : g in Generators(L)])); // Find smallest length of a nonzero lattice vector mL := Sqrt(Minimum(LLat)); mL; // Determine mu_1 mu1 := -c2 where _,c2 := HeightConstant(J); // Determine mu_2 ... mu2 := Max([Sqrt(Height(&+[Eltseq(s)[i]*bas[i] : i in [1..#bas]])) : s in S]); // ... and mu_3 mu3 := Min([Sqrt(l[1]) : l in Eigenvalues(HeightPairingMatrix(bas))]); // Then a lower bound for the height of an unkown rational point is lb := (mu3*mL - mu2)^2 + mu1; printf "Lower bound: %o\n", lb; // Now compute the upper bound from Baker's method: ub := logxBound(HyperellipticPolynomials(C), ptsC); printf "Upper bound: %o\n", ub; assert lb gt ub;