︠a85aa894-8b96-4922-82cd-159b48384b70︠ ︠9731d058-825e-44de-a8db-0ef502f79df8i︠ %md ## Author of this worksheet: William Stein ### Question in email on May 28, 2015 from Nicolas Billerey > Hi William, > I suspect that there exists a CM form of weight 12, level $23^2$ and trivial Nebentypus character which is congruent to $\Delta$ mod 23. Similarly, I suspect that there also exists a CM form of weight 16, level $31^2$ and trivial Nebentypus congruent mod 31 to the unique newform of wt 16, level 1 and rational integer coefficients. ︡b788a14f-65ff-47eb-8674-c0a36aab85e3︡{"md":"## Author of this worksheet: William Stein\n\n### Question in email on May 28, 2015 from Nicolas Billerey\n\n> Hi William,\n> I suspect that there exists a CM form of weight 12, level $23^2$ and trivial Nebentypus character which is congruent to $\\Delta$ mod 23. Similarly, I suspect that there also exists a CM form of weight 16, level $31^2$ and trivial Nebentypus congruent mod 31 to the unique newform of wt 16, level 1 and rational integer coefficients.\n\n\n"}︡ ︠97a3bde2-f43b-4877-a38b-330db9917310i︠ %md First want to check there is nothing at level 23, so what we find below is at level $23^2$... ︡caa405f5-7c47-4095-b484-a72e1741064c︡{"md":"First want to check there is nothing at level 23, so what we find below is at level $23^2$...\n"}︡ ︠a7c877bd-1072-4027-b9a6-d53cf21464b1︠ %time M = ModularSymbols(23, base_ring=GF(23), weight=12, sign=1) ︡27fc73ce-c97e-4f53-beb0-edf15b463a9c︡{"stdout":"CPU time: 0.14 s, Wall time: 0.15 s"}︡{"stdout":"\n"}︡ ︠a2861dd0-cd89-49c4-934c-a8b18c59319a︠ d = delta_qexp(20); show(d) ︡faad4ee3-67ac-4044-bc64-a5059a37e932︡{"html":"
$\\displaystyle q - 24q^{2} + 252q^{3} - 1472q^{4} + 4830q^{5} - 6048q^{6} - 16744q^{7} + 84480q^{8} - 113643q^{9} - 115920q^{10} + 534612q^{11} - 370944q^{12} - 577738q^{13} + 401856q^{14} + 1217160q^{15} + 987136q^{16} - 6905934q^{17} + 2727432q^{18} + 10661420q^{19} + O(q^{20})$
"}︡ ︠ba1ae9bb-1b70-40f1-a56d-b4bec7c67b97︠ %time T2 = M.hecke_operator(2) ︡a8a25962-5f41-4dbe-b305-9f822559b1bf︡{"stdout":"CPU time: 0.01 s, Wall time: 0.01 s\n"}︡ ︠5bc732ed-1e98-4496-a761-fcc2c61fe325︠ %time V2 = (T2 - d[2]).kernel() ︡03476333-9d13-40b0-abdd-2c76f67beb1a︡{"stdout":"CPU time: 0.01 s, Wall time: 0.01 s\n"}︡ ︠b34fe0a1-0b2f-44be-839e-fe8ed1457d49i︠ %md The following dimension shows that we have *only* the two images of delta under degen map, namely delta(q) and delta(q^23). Nothing else is possible. ︡8b075444-c08d-46bf-8ec9-52c7aba1afdf︡{"md":"The following dimension shows that we have *only* the\ntwo images of delta under degen map, namely delta(q) and delta(q^23). Nothing else is possible.\n"}︡ ︠84854747-4ad2-4e85-af2e-7936267ebd02︠ V2.dimension() ︡6b95ce11-2456-492f-9d47-b2c3cd86b11f︡{"stdout":"2\n"}︡ ︠c4662bfd-ba7d-426b-ba01-1b9bde7e3df9i︠ %md OK, time to look into level $23^2$. We know *a priori* that we will have $\Delta(q)$, $\Delta(q^{23})$, and $\Delta(q^{23^2})$, the images under the degeneracy maps corresponding to the divisors of $23^2$. So the question is whether or not there is a fourth form. In the calculation below we will work modulo $23$ at level $23^2$ and deduce that there is such a fourth form (and no others). However, the mod $23$ calculation doesn't tell us anything else about that form -- just that it exists! Incidentally, working mod a prime like below is fine as long as the prime isn't $2$ or $3$ -- if it is, then there are problems. ︡e73bf1f6-6f36-40ec-a5e3-2e66138fc480︡{"md":"OK, time to look into level $23^2$.\nWe know *a priori* that we will have $\\Delta(q)$, $\\Delta(q^{23})$, and $\\Delta(q^{23^2})$,\nthe images under the degeneracy maps corresponding to the divisors of $23^2$.\nSo the question is whether or not there is a fourth form.\n\nIn the calculation below we will work modulo $23$ at level $23^2$ and deduce that there is\nsuch a fourth form (and no others). However, the mod $23$ calculation doesn't tell us anything else\nabout that form -- just that it exists!\n\nIncidentally, working mod a prime like below is fine as long as the prime isn't $2$ or $3$ -- if it is, then there are problems.\n"}︡ ︠15859edc-eb76-4c23-9bc0-723ee9addc6bs︠ import sage_server; sage_server.MAX_OUTPUT_MESSAGES = 10000 # below may generate a lot of output ︡693af869-1375-433f-8f9a-46306b5858e7︡ ︠d0b1c6f2-1cae-4ad9-82e3-5a7b9c381ad6s︠ # this is a nontrivial sparse linear algebra computation over a small finite field, which should take 10s. %time M = ModularSymbols(23^2, base_ring=GF(23), weight=12, sign=1) M ︡2c5060ba-b66b-4fe1-8aaf-9a51ef91aaaa︡{"stdout":"CPU time: 10.20 s, Wall time: 10.66 s"}︡{"stdout":"\n"}︡{"stdout":"Modular Symbols space of dimension 507 for Gamma_0(529) of weight 12 with sign 1 over Finite Field of size 23\n"}︡ ︠e922c91c-b72c-46f2-a703-f70f577075ees︠ d = delta_qexp(600); show(d[:15]) ︡2fefdc5e-d1d1-438b-b1fc-c1196d0f7866︡{"html":"
$\\displaystyle q - 24q^{2} + 252q^{3} - 1472q^{4} + 4830q^{5} - 6048q^{6} - 16744q^{7} + 84480q^{8} - 113643q^{9} - 115920q^{10} + 534612q^{11} - 370944q^{12} - 577738q^{13} + 401856q^{14} + O(q^{600})$
"}︡ ︠51a0296b-97c0-486a-8761-399f1e2dc3f7s︠ %time T2 = M.hecke_operator(2) ︡dac6ad04-9316-499a-914b-a13503bf30b3︡{"stdout":"CPU time: 0.02 s, Wall time: 0.02 s\n"}︡ ︠2d8518bd-e162-48b0-b460-9eb52f91cf2cs︠ %time V2 = (T2 - d[2]).kernel() ︡e3b507cf-d468-4f63-8c53-56dc61558ca9︡{"stdout":"CPU time: 0.39 s, Wall time: 0.49 s"}︡{"stdout":"\n"}︡ ︠a7c9c5d4-5b47-4faf-a2b1-446b3b7a2919s︠ # positive evidence V2.dimension() ︡28d34a40-950d-432a-b7b8-5be2ff1dbfac︡{"stdout":"4\n"}︡ ︠dd0976bf-e78e-43ea-b992-57ee602735d3s︠ %time V3 = (V2.hecke_operator(3) - d[3]).kernel() ︡b83cdd2d-b916-44ad-a7eb-faa6010d7d5e︡{"stdout":"CPU time: 0.33 s, Wall time: 0.33 s"}︡{"stdout":"\n"}︡ ︠c1ad793d-2799-4123-9d53-15ed87aa2d73s︠ # more positive evidence V3.dimension() ︡a32c96d7-7faa-48af-841f-bb7bf93102d5︡{"stdout":"4\n"}︡ ︠f02ec841-e4c6-41ff-bf77-032887d348b4s︠ %time V5 = (V3.hecke_operator(5) - d[5]).kernel() ︡8c396e14-92e8-4fad-89b5-f4c41f5abfa9︡{"stdout":"CPU time: 0.37 s, Wall time: 0.37 s"}︡{"stdout":"\n"}︡ ︠027be306-1025-47f9-97da-a88aad461c2fs︠ # even more evidence V5.dimension() ︡98cd5327-0020-451f-891c-33940968c850︡{"stdout":"4\n"}︡ ︠6e333b5c-f233-42f7-a9c6-bc3c7ca18307i︠ %md To *prove* we have a congruence with a newform we have to check up to the Sturm bound: ︡b6ae8b3b-2f21-4843-a9f0-413f04c65591︡{"md":"To *prove* we have a congruence with a newform we have to check up to the Sturm bound:\n"}︡ ︠08a75e25-5c63-4df7-80fa-3602c2e68e93︠ M.sturm_bound() ︡d76509be-73af-4e6d-a572-ab04ba2f6071︡{"stdout":"552\n"}︡ ︠da7c3065-9c84-4603-b0db-fda225a21b23i︠ %md That's big and could be done in the following straightforward way, which would take a day. However, I'm too impatient and there is a trick that is massively faster (reducing an O(N) computation to O(1)). ︡6056fe8e-b907-4cd5-8165-460ee2b9a2bb︡{"md":"That's big and could be done in the following straightforward way, which\nwould take a day. However, I'm too impatient and there is a trick that\nis massively faster (reducing an O(N) computation to O(1)).\n"}︡ ︠81b0bc62-ecc2-4385-a440-a338fff9563cs︠ %time # so get overall time d = delta_qexp(M.sturm_bound()+1) V = M p = 2 while p <= M.sturm_bound() and V.dimension()>1: print "working on p=%s"%p; sys.stdout.flush() if p != 23: %time V = (V.hecke_operator(p) - d[p]).kernel() print p, V.dimension() else: print "ignoring p=23 (for now)" p = next_prime(p) if p > 30: # THIS IS TOO SLOW FOR ME... but should work -- don't run. print "you should be morally convinced by now" break ︡9f3cbfcb-f2f7-4f0e-9297-1281b06ea897︡{"stdout":"working on p=2\n"}︡{"stdout":"CPU time: 0.10 s, Wall time: 0.10 s"}︡{"stdout":"\n2 4\nworking on p=3\n"}︡{"stdout":"CPU time: 0.00 s, Wall time: 0.01 s\n3 4\nworking on p=5\n"}︡{"stdout":"CPU time: 0.00 s, Wall time: 0.00 s\n5 4\nworking on p=7\n"}︡{"stdout":"CPU time: 0.43 s, Wall time: 0.43 s"}︡{"stdout":"\n7 4\nworking on p=11\n"}︡{"stdout":"CPU time: 0.59 s, Wall time: 0.61 s"}︡{"stdout":"\n11 4\nworking on p=13\n"}︡{"stdout":"CPU time: 0.68 s, Wall time: 0.69 s"}︡{"stdout":"\n13 4\nworking on p=17\n"}︡{"stdout":"CPU time: 0.79 s, Wall time: 0.80 s"}︡{"stdout":"\n17 4\nworking on p=19\n"}︡{"stdout":"CPU time: 0.82 s, Wall time: 0.83 s"}︡{"stdout":"\n19 4\nworking on p=23\n"}︡{"stdout":"ignoring p=23 (for now)\nworking on p=29\n"}︡{"stdout":"CPU time: 1.10 s, Wall time: 1.17 s"}︡{"stdout":"\n29 4\nyou should be morally convinced by now\n"}︡{"stdout":"CPU time: 4.52 s, Wall time: 4.66 s\n"}︡ ︠e9ed2d94-82cc-480f-8205-40205b795d2bs︠ d = delta_qexp(M.sturm_bound()+1) ︡5a455058-62f4-4d2d-b14f-f716aaa88b19︡ ︠ba3b54f0-6df6-4f68-9a52-a71acf941e23i︠ %md What do the matrices look like on this 4-dimensional space? ︡a0ec3d7b-3984-46d0-a9fc-9bd95dc7c16e︡{"md":"What do the matrices look like on this 4-dimensional space?\n"}︡ ︠b22e33a1-075c-4163-921c-c80ead80a7c7︠ V5 ︡184fc89f-2695-4124-be36-7d5730cc4d28︡{"stdout":"Modular Symbols subspace of dimension 4 of Modular Symbols space of dimension 507 for Gamma_0(529) of weight 12 with sign 1 over Finite Field of size 23\n"}︡ ︠109b5aa5-49dd-4840-9505-c9d1195fbdd3︠ show(V5.hecke_matrix(13)) ︡5bea95a4-9239-4836-a278-208f4f729141︡{"html":"
$\\displaystyle \\left(\\begin{array}{rrrr}\n22 & 0 & 0 & 0 \\\\\n0 & 22 & 0 & 0 \\\\\n0 & 0 & 22 & 0 \\\\\n0 & 0 & 0 & 22\n\\end{array}\\right)$
"}︡ ︠cd9646f9-94a3-407f-a4f8-db121c07ef3fi︠ %md I bet they are all diagonal except for $T_{23}$. ︡13341f41-05d0-45c5-95c8-296a97f34584︡{"md":"I bet they are all diagonal except for $T_{23}$.\n"}︡ ︠69c0a584-c0b8-4dfb-a1b8-d19ef77ef53b︠ T23 = V5.hecke_matrix(23) show(T23) show(T23.fcp()) ︡8816972a-fd33-45ab-bd24-5a20a850d6e1︡{"html":"
$\\displaystyle \\left(\\begin{array}{rrrr}\n6 & 4 & 0 & 14 \\\\\n3 & 2 & 0 & 7 \\\\\n16 & 3 & 0 & 22 \\\\\n20 & 21 & 0 & 16\n\\end{array}\\right)$
"}︡{"html":"
$\\displaystyle (x + 22) \\cdot x^{3}$
"}︡ ︠6ca9d2f8-73c9-4dce-9522-b2a56e0abef9︠ ︠0a0dbc2c-db02-4948-893a-76551de23641︠ d[23] % 23 ︡d38c3088-bd8c-4932-b348-f7b08f56a781︡{"stdout":"1\n"}︡ ︠4e1d94fe-a338-4210-b604-cdf12c05a48bis︠ %md Use a trick to reduce complexity dramatically... ︡41cabf36-587e-407e-8d37-0a2deeffef3a︡{"md":"Use a trick to reduce complexity dramatically...\n"}︡ ︠8a1d1fe5-5070-488f-9874-3af9a2d92915s︠ %time T2 = M.dual_hecke_matrix(2) ︡fac1ecbb-2b82-41ae-9314-536055cf5580︡{"stdout":"CPU time: 0.01 s, Wall time: 0.01 s\n"}︡ ︠4a2b13f3-dbdf-4ae3-a62d-83c986029cb0s︠ %time V2dual = (T2 - d[2]).kernel() ︡3aa94f07-9d00-44de-918a-f19c36bbc429︡{"stdout":"CPU time: 0.06 s, Wall time: 0.06 s\n"}︡ ︠49a7e572-a29c-4e4c-8b17-ba22f1b6bf47s︠ V2dual.dimension() ︡d998aa80-75dd-43b9-9b18-01625693d6ac︡{"stdout":"4\n"}︡ ︠9965d828-7129-4ec8-8478-e07f32b37db6s︠ B = V2dual.free_module().basis() # we need 4 easy-to-compute with basis elements that dot nonzero with our basis. guess = [M.gen(i).element() for i in [0..3]] A = matrix(4,4, [B[i].dot_product(guess[j]) for i in range(4) for j in range(4)]) show(A) ︡5b8e2f98-9ac9-497d-9db4-e9fcb7249ae8︡{"html":"
$\\displaystyle \\left(\\begin{array}{rrrr}\n1 & 0 & 0 & 0 \\\\\n0 & 1 & 0 & 0 \\\\\n0 & 0 & 1 & 0 \\\\\n0 & 0 & 0 & 1\n\\end{array}\\right)$
"}︡ ︠3a01cb3d-90cb-4d9e-b4aa-4459c26315f2s︠ # we got super lucky in this case. The above means that computing # the action of Tp on M.gen(0),..., M.gen(3) will give the same matrix # as computing the action on our 4-dimensional subspace. # But surprisingly it is massively easier... # In general would have to invert a matrix and multiply by that. # This should really be implemented in general in Sage, but evidently isn't... ︡66b7fd19-d1c8-42e4-90bc-0b2c5158190a︡ ︠931e7189-ea19-4d97-a970-fa9d6c0963fc︠ Tp = M.hecke_operator(37) %time x = Tp.apply_sparse(M.gen(0)) # fast even if "37" is large... ︡a0107377-b625-4503-ad4a-8500444f1aa1︡{"stdout":"CPU time: 0.02 s, Wall time: 0.02 s\n"}︡ ︠7c2a9939-12f7-45ba-917e-99747c9fbd7fs︠ def fastT(p): Tp = M.hecke_operator(p) C = [Tp.apply_sparse(M.gen(i)).element() for i in range(4)] # the real work return matrix(4,4,[b.dot_product(c) for b in B for c in C]) ︡4203b726-a823-47b0-b5ce-17d30ec54318︡ ︠53afb8d3-fd1a-4c3c-810d-95945185cba1s︠ fastT(2).fcp() ︡b996e074-a140-4549-8136-a96108deaafc︡{"stdout":"(x + 1)^4\n"}︡ ︠556a073d-226e-4439-ac3b-296bb575ecb0s︠ # compare with V2.hecke_matrix(2).fcp() ︡330905b8-88a9-4391-a272-69822ee596e7︡{"stdout":"(x + 1)^4\n"}︡ ︠c9307b29-5e86-4d3d-835a-df88b0842dccs︠ # try bigger %time show(fastT(37)) ︡85922d31-f5ff-4c7a-9086-5fc1994a4388︡{"html":"
$\\displaystyle \\left(\\begin{array}{rrrr}\n0 & 0 & 0 & 0 \\\\\n0 & 0 & 0 & 0 \\\\\n0 & 0 & 0 & 0 \\\\\n0 & 0 & 0 & 0\n\\end{array}\\right)$
"}︡{"stdout":"CPU time: 0.12 s, Wall time: 0.16 s"}︡{"stdout":"\n"}︡ ︠9abbce0c-0e0d-4608-9209-d04ff65c50f8s︠ %time show(V2.hecke_matrix(37)) ︡166413a2-ab30-4ba8-9f89-8e1cee241b34︡{"html":"
$\\displaystyle \\left(\\begin{array}{rrrr}\n0 & 0 & 0 & 0 \\\\\n0 & 0 & 0 & 0 \\\\\n0 & 0 & 0 & 0 \\\\\n0 & 0 & 0 & 0\n\\end{array}\\right)$
"}︡{"stdout":"CPU time: 1.25 s, Wall time: 1.32 s"}︡{"stdout":"\n"}︡ ︠7d893596-25f6-4a25-903c-5e192f529705s︠ show(fastT(23).fcp()) ︡4311e535-da12-450b-a6f2-3ac6becb2edb︡{"html":"
$\\displaystyle (x + 22) \\cdot x^{3}$
"}︡ ︠d07b7ed4-a4ad-4c01-ac7d-132151e285e4s︠ show(V2.hecke_matrix(23).fcp()) ︡9cf6035c-32b9-4211-8c67-c9b64c0cd1ec︡{"html":"
$\\displaystyle (x + 22) \\cdot x^{3}$
"}︡ ︠efad9234-7c72-4f16-9ed2-654832be3c48is︠ %md So now we do the hard computation above for primes up to the Sturm bound, but using our fastT: ︡ce86c9ac-fbf6-4d48-8f60-c9e909b909e1︡{"md":"So now we do the hard computation above for primes up to the Sturm bound, but using our fastT:\n"}︡ ︠02fd23ea-4055-4b97-83ee-552500888a4ds︠ %time # so get overall time d = delta_qexp(M.sturm_bound()+1) V = M p = 2 while p <= M.sturm_bound(): print "doing p=%s"%p; sys.stdout.flush() if p != 23: %time Tp = fastT(p) if Tp != d[p]: # the right scalar matrix print "FAIL at p=%s"%p else: print "ignoring p=23" p = next_prime(p) ︡3e893189-baf1-4162-91c6-2eae37be9093︡{"stdout":"doing p=2\n"}︡{"stdout":"CPU time: 0.09 s, Wall time: 0.09 s\ndoing p=3\n"}︡{"stdout":"CPU time: 0.08 s, Wall time: 0.11 s"}︡{"stdout":"\ndoing p=5\n"}︡{"stdout":"CPU time: 0.09 s, Wall time: 0.10 s\ndoing p=7\n"}︡{"stdout":"CPU time: 0.09 s, Wall time: 0.09 s\ndoing p=11\n"}︡{"stdout":"CPU time: 0.08 s, Wall time: 0.08 s\ndoing p=13\n"}︡{"stdout":"CPU time: 0.08 s, Wall time: 0.09 s\ndoing p=17\n"}︡{"stdout":"CPU time: 0.08 s, Wall time: 0.08 s\ndoing p=19\n"}︡{"stdout":"CPU time: 0.10 s, Wall time: 0.10 s"}︡{"stdout":"\ndoing p=23\n"}︡{"stdout":"ignoring p=23\ndoing p=29\n"}︡{"stdout":"CPU time: 0.08 s, Wall time: 0.09 s\ndoing p=31\n"}︡{"stdout":"CPU time: 0.09 s, Wall time: 0.09 s\ndoing p=37\n"}︡{"stdout":"CPU time: 0.10 s, Wall time: 0.10 s\ndoing p=41\n"}︡{"stdout":"CPU time: 0.10 s, Wall time: 0.10 s"}︡{"stdout":"\ndoing p=43\n"}︡{"stdout":"CPU time: 0.10 s, Wall time: 0.10 s"}︡{"stdout":"\ndoing p=47\n"}︡{"stdout":"CPU time: 0.10 s, Wall time: 0.10 s"}︡{"stdout":"\ndoing p=53\n"}︡{"stdout":"CPU time: 0.10 s, Wall time: 0.10 s"}︡{"stdout":"\ndoing p=59\n"}︡{"stdout":"CPU time: 0.10 s, Wall time: 0.11 s"}︡{"stdout":"\ndoing p=61\n"}︡{"stdout":"CPU time: 0.12 s, Wall time: 0.12 s"}︡{"stdout":"\ndoing p=67\n"}︡{"stdout":"CPU time: 0.11 s, Wall time: 0.11 s"}︡{"stdout":"\ndoing p=71\n"}︡{"stdout":"CPU time: 0.11 s, Wall time: 0.12 s"}︡{"stdout":"\ndoing p=73\n"}︡{"stdout":"CPU time: 0.12 s, Wall time: 0.12 s"}︡{"stdout":"\ndoing p=79\n"}︡{"stdout":"CPU time: 0.12 s, Wall time: 0.13 s"}︡{"stdout":"\ndoing p=83\n"}︡{"stdout":"CPU time: 0.13 s, Wall time: 0.14 s"}︡{"stdout":"\ndoing p=89\n"}︡{"stdout":"CPU time: 0.12 s, Wall time: 0.13 s"}︡{"stdout":"\ndoing p=97\n"}︡{"stdout":"CPU time: 0.19 s, Wall time: 0.20 s"}︡{"stdout":"\ndoing p=101\n"}︡{"stdout":"CPU time: 0.13 s, Wall time: 0.13 s"}︡{"stdout":"\ndoing p=103\n"}︡{"stdout":"CPU time: 0.13 s, Wall time: 0.14 s"}︡{"stdout":"\ndoing p=107\n"}︡{"stdout":"CPU time: 0.16 s, Wall time: 0.17 s"}︡{"stdout":"\ndoing p=109\n"}︡{"stdout":"CPU time: 0.14 s, Wall time: 0.14 s"}︡{"stdout":"\ndoing p=113\n"}︡{"stdout":"CPU time: 0.19 s, Wall time: 0.20 s"}︡{"stdout":"\ndoing p=127\n"}︡{"stdout":"CPU time: 0.23 s, Wall time: 0.25 s"}︡{"stdout":"\ndoing p=131\n"}︡{"stdout":"CPU time: 0.14 s, Wall time: 0.14 s"}︡{"stdout":"\ndoing p=137\n"}︡{"stdout":"CPU time: 0.14 s, Wall time: 0.15 s"}︡{"stdout":"\ndoing p=139\n"}︡{"stdout":"CPU time: 0.15 s, Wall time: 0.15 s"}︡{"stdout":"\ndoing p=149\n"}︡{"stdout":"CPU time: 0.21 s, Wall time: 0.22 s"}︡{"stdout":"\ndoing p=151\n"}︡{"stdout":"CPU time: 0.16 s, Wall time: 0.16 s"}︡{"stdout":"\ndoing p=157\n"}︡{"stdout":"CPU time: 0.15 s, Wall time: 0.15 s"}︡{"stdout":"\ndoing p=163\n"}︡{"stdout":"CPU time: 0.16 s, Wall time: 0.16 s"}︡{"stdout":"\ndoing p=167\n"}︡{"stdout":"CPU time: 0.16 s, Wall time: 0.16 s"}︡{"stdout":"\ndoing p=173\n"}︡{"stdout":"CPU time: 0.16 s, Wall time: 0.16 s"}︡{"stdout":"\ndoing p=179\n"}︡{"stdout":"CPU time: 0.16 s, Wall time: 0.16 s"}︡{"stdout":"\ndoing p=181\n"}︡{"stdout":"CPU time: 0.16 s, Wall time: 0.17 s"}︡{"stdout":"\ndoing p=191\n"}︡{"stdout":"CPU time: 0.16 s, Wall time: 0.17 s"}︡{"stdout":"\ndoing p=193\n"}︡{"stdout":"CPU time: 0.17 s, Wall time: 0.17 s"}︡{"stdout":"\ndoing p=197\n"}︡{"stdout":"CPU time: 0.17 s, Wall time: 0.17 s"}︡{"stdout":"\ndoing p=199\n"}︡{"stdout":"CPU time: 0.17 s, Wall time: 0.18 s"}︡{"stdout":"\ndoing p=211\n"}︡{"stdout":"CPU time: 0.18 s, Wall time: 0.18 s"}︡{"stdout":"\ndoing p=223\n"}︡{"stdout":"CPU time: 0.18 s, Wall time: 0.19 s"}︡{"stdout":"\ndoing p=227\n"}︡{"stdout":"CPU time: 0.18 s, Wall time: 0.19 s"}︡{"stdout":"\ndoing p=229\n"}︡{"stdout":"CPU time: 0.24 s, Wall time: 0.24 s"}︡{"stdout":"\ndoing p=233\n"}︡{"stdout":"CPU time: 0.24 s, Wall time: 0.25 s"}︡{"stdout":"\ndoing p=239\n"}︡{"stdout":"CPU time: 0.20 s, Wall time: 0.20 s"}︡{"stdout":"\ndoing p=241\n"}︡{"stdout":"CPU time: 0.20 s, Wall time: 0.20 s"}︡{"stdout":"\ndoing p=251\n"}︡{"stdout":"CPU time: 0.19 s, Wall time: 0.20 s"}︡{"stdout":"\ndoing p=257\n"}︡{"stdout":"CPU time: 0.20 s, Wall time: 0.21 s"}︡{"stdout":"\ndoing p=263\n"}︡{"stdout":"CPU time: 0.21 s, Wall time: 0.22 s"}︡{"stdout":"\ndoing p=269\n"}︡{"stdout":"CPU time: 0.25 s, Wall time: 0.26 s"}︡{"stdout":"\ndoing p=271\n"}︡{"stdout":"CPU time: 0.20 s, Wall time: 0.21 s"}︡{"stdout":"\ndoing p=277\n"}︡{"stdout":"CPU time: 0.23 s, Wall time: 0.23 s"}︡{"stdout":"\ndoing p=281\n"}︡{"stdout":"CPU time: 0.29 s, Wall time: 0.30 s"}︡{"stdout":"\ndoing p=283\n"}︡{"stdout":"CPU time: 0.22 s, Wall time: 0.23 s"}︡{"stdout":"\ndoing p=293\n"}︡{"stdout":"CPU time: 0.21 s, Wall time: 0.23 s"}︡{"stdout":"\ndoing p=307\n"}︡{"stdout":"CPU time: 0.22 s, Wall time: 0.23 s"}︡{"stdout":"\ndoing p=311\n"}︡{"stdout":"CPU time: 0.22 s, Wall time: 0.22 s"}︡{"stdout":"\ndoing p=313\n"}︡{"stdout":"CPU time: 0.22 s, Wall time: 0.23 s"}︡{"stdout":"\ndoing p=317\n"}︡{"stdout":"CPU time: 0.29 s, Wall time: 0.30 s"}︡{"stdout":"\ndoing p=331\n"}︡{"stdout":"CPU time: 0.24 s, Wall time: 0.25 s"}︡{"stdout":"\ndoing p=337\n"}︡{"stdout":"CPU time: 0.26 s, Wall time: 0.26 s"}︡{"stdout":"\ndoing p=347\n"}︡{"stdout":"CPU time: 0.24 s, Wall time: 0.24 s"}︡{"stdout":"\ndoing p=349\n"}︡{"stdout":"CPU time: 0.26 s, Wall time: 0.27 s"}︡{"stdout":"\ndoing p=353\n"}︡{"stdout":"CPU time: 0.25 s, Wall time: 0.26 s"}︡{"stdout":"\ndoing p=359\n"}︡{"stdout":"CPU time: 0.25 s, Wall time: 0.30 s"}︡{"stdout":"\ndoing p=367\n"}︡{"stdout":"CPU time: 0.26 s, Wall time: 0.33 s"}︡{"stdout":"\ndoing p=373\n"}︡{"stdout":"CPU time: 0.25 s, Wall time: 0.26 s"}︡{"stdout":"\ndoing p=379\n"}︡{"stdout":"CPU time: 0.26 s, Wall time: 0.26 s"}︡{"stdout":"\ndoing p=383\n"}︡{"stdout":"CPU time: 0.37 s, Wall time: 0.38 s"}︡{"stdout":"\ndoing p=389\n"}︡{"stdout":"CPU time: 0.46 s, Wall time: 0.49 s"}︡{"stdout":"\ndoing p=397\n"}︡{"stdout":"CPU time: 0.37 s, Wall time: 0.45 s"}︡{"stdout":"\ndoing p=401\n"}︡{"stdout":"CPU time: 0.31 s, Wall time: 0.31 s"}︡{"stdout":"\ndoing p=409\n"}︡{"stdout":"CPU time: 0.33 s, Wall time: 0.34 s"}︡{"stdout":"\ndoing p=419\n"}︡{"stdout":"CPU time: 0.30 s, Wall time: 0.30 s"}︡{"stdout":"\ndoing p=421\n"}︡{"stdout":"CPU time: 0.37 s, Wall time: 0.38 s"}︡{"stdout":"\ndoing p=431\n"}︡{"stdout":"CPU time: 0.28 s, Wall time: 0.29 s"}︡{"stdout":"\ndoing p=433\n"}︡{"stdout":"CPU time: 0.28 s, Wall time: 0.28 s"}︡{"stdout":"\ndoing p=439\n"}︡{"stdout":"CPU time: 0.28 s, Wall time: 0.29 s"}︡{"stdout":"\ndoing p=443\n"}︡{"stdout":"CPU time: 0.30 s, Wall time: 0.31 s"}︡{"stdout":"\ndoing p=449\n"}︡{"stdout":"CPU time: 0.30 s, Wall time: 0.31 s"}︡{"stdout":"\ndoing p=457\n"}︡{"stdout":"CPU time: 0.30 s, Wall time: 0.31 s"}︡{"stdout":"\ndoing p=461\n"}︡{"stdout":"CPU time: 0.29 s, Wall time: 0.30 s"}︡{"stdout":"\ndoing p=463\n"}︡{"stdout":"CPU time: 0.29 s, Wall time: 0.30 s"}︡{"stdout":"\ndoing p=467\n"}︡{"stdout":"CPU time: 0.29 s, Wall time: 0.31 s"}︡{"stdout":"\ndoing p=479\n"}︡{"stdout":"CPU time: 0.30 s, Wall time: 0.31 s"}︡{"stdout":"\ndoing p=487\n"}︡{"stdout":"CPU time: 0.30 s, Wall time: 0.31 s"}︡{"stdout":"\ndoing p=491\n"}︡{"stdout":"CPU time: 0.38 s, Wall time: 0.39 s"}︡{"stdout":"\ndoing p=499\n"}︡{"stdout":"CPU time: 0.33 s, Wall time: 0.34 s"}︡{"stdout":"\ndoing p=503\n"}︡{"stdout":"CPU time: 0.36 s, Wall time: 0.37 s"}︡{"stdout":"\ndoing p=509\n"}︡{"stdout":"CPU time: 0.32 s, Wall time: 0.33 s"}︡{"stdout":"\ndoing p=521\n"}︡{"stdout":"CPU time: 0.39 s, Wall time: 0.40 s"}︡{"stdout":"\ndoing p=523\n"}︡{"stdout":"CPU time: 0.40 s, Wall time: 0.41 s"}︡{"stdout":"\ndoing p=541\n"}︡{"stdout":"CPU time: 0.31 s, Wall time: 0.32 s"}︡{"stdout":"\ndoing p=547\n"}︡{"stdout":"CPU time: 0.50 s, Wall time: 0.60 s"}︡{"stdout":"\n"}︡{"stdout":"CPU time: 21.27 s, Wall time: 22.28 s\n"}︡ ︠c61edc91-8251-46a1-b2a0-3df5e0b72fd7is︠ %md So in less than minute total CPU time we've verified your first claim using exactly the right algorithms... ︡186aaa16-d750-41c8-a31a-004d6f531ddc︡{"md":"So in less than minute total CPU time we've verified your first claim using exactly the right algorithms...\n"}︡ ︠0594b6db-b633-4d50-acf8-fbf655c7c77f︠ ︠1cceb312-cf04-49ba-86ac-13c4d8dd9925︠ ︠468254dc-750c-4c4d-93f7-a6d2e5a6f980is︠ %md Some stuff involving new subspaces I left around... New subspaces with modular symbols behave funny in characteristic $p$. ︡c6edaada-020c-443d-a895-3594b87be832︡{"md":"Some stuff involving new subspaces I left around...\nNew subspaces with modular symbols behave funny in characteristic $p$.\n"}︡ ︠2b7206aa-a7ae-43ce-b96b-3fe37bd260b4︠ set_verbose(2) %time Mn = M.new_subspace() ︠3f663140-919f-497d-8ff3-410c88a1fce1︠ %time V2new = V2.new_subspace() ︠7807ea9f-fadd-4047-95ce-8b972d5e7833︠ V2new ︡910d690a-cada-4a50-8c08-2e6fce8daabc︡{"stdout":"Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 507 for Gamma_0(529) of weight 12 with sign 1 over Finite Field of size 23\n"}︡ ︠047c7dea-7636-46eb-81c6-a3a3a1057cfa︠ V2new.hecke_operator(23).fcp() ︡968a79e5-88e8-451f-ac98-4438d476c1c5︡{"stdout":"verbose 1 (6534: free_module.py, echelon_coordinates) mod-p multiply of 1 x 2 matrix by 2 x 507 matrix modulo 23\n"}︡{"stdout":"verbose 1 (6534: free_module.py, echelon_coordinates) mod-p multiply of 1 x 2 matrix by 2 x 507 matrix modulo 23\n"}︡{"stdout":"verbose 1 (579: matrix_morphism.py, characteristic_polynomial) _charpoly_linbox...\n"}︡{"stdout":"x^2\n"}︡ ︠ca6139e2-dd9a-4d1e-b48d-92ebd6d3bfbe︠ %time D = V2new.dual_free_module(bound=5) ︠7e4ff758-7af1-4b0b-ab25-39ced6736065︠