Level 559
{{{id=1| M = ModularSymbols(559,sign=1); M /// Modular Symbols space of dimension 52 for Gamma_0(559) of weight 2 with sign 1 over Rational Field }}} {{{id=3| S = M.cuspidal_subspace() /// }}} {{{id=4| S /// Modular Symbols subspace of dimension 49 of Modular Symbols space of dimension 52 for Gamma_0(559) of weight 2 with sign 1 over Rational Field }}} {{{id=6| def eta(ell): T = S.hecke_matrix(ell) if ell == 13: return T + 1 elif ell == 43: return T - 1 return T - (ell+1) /// }}} {{{id=7| d = 0 for ell in primes(100): de = ZZ(eta(ell).det()) d = gcd(de, d) print ell, d.factor() /// 2 2^2 * 3 * 5^3 * 7^4 * 11^2 * 17 * 31 * 59 * 101 * 1031 3 2^2 * 3 * 5^3 * 7^4 * 11 * 17 5 2^2 * 3 * 5^2 * 7^4 * 11 7 2^2 * 3 * 5^2 * 7^4 * 11 11 2^2 * 3 * 5 * 7^4 * 11 13 2^2 * 3 * 5 * 7^4 * 11 17 2^2 * 3 * 7^4 * 11 19 2^2 * 3 * 7^4 * 11 23 2^2 * 3 * 7^4 * 11 29 2^2 * 3 * 7^4 * 11 31 2^2 * 3 * 7^4 * 11 37 2^2 * 3 * 7^4 * 11 41 2^2 * 3 * 7^4 * 11 43 2^2 * 3 * 7^4 * 11 47 2^2 * 3 * 7^4 * 11 53 2^2 * 3 * 7^4 * 11 59 2^2 * 3 * 7^4 * 11 61 2^2 * 3 * 7^4 * 11 67 2^2 * 3 * 7^4 * 11 71 2^2 * 3 * 7^4 * 11 73 2^2 * 3 * 7^4 * 11 79 2^2 * 3 * 7^4 * 11 83 2^2 * 3 * 7^4 * 11 89 2^2 * 3 * 7^4 * 11 97 2^2 * 3 * 7^4 * 11 }}}
Find a random vector v such that the map $t \to vt$ is injective on the Hecke algebra.
{{{id=12| def hecke_image(v, B): X = [] for i in [1..B]: T = S.hecke_matrix(i) w = v*T X.append(w) return X /// }}} {{{id=11| v = vector(QQ,49) v[0]=2 time X = hecke_image(v, 49) /// Time: CPU 0.11 s, Wall: 0.11 s }}} {{{id=10| L49 = span(ZZ,hecke_image(v,49)); L49 /// Free module of degree 49 and rank 49 over Integer Ring Echelon basis matrix: 49 x 49 dense matrix over Rational Field }}} {{{id=8| S.sturm_bound() /// 103 }}} {{{id=14| time L103 = span(ZZ,hecke_image(v,103)); L103 /// Time: CPU 3.76 s, Wall: 3.79 s Free module of degree 49 and rank 49 over Integer Ring Echelon basis matrix: 49 x 49 dense matrix over Rational Field }}} {{{id=19| L49.index_in(L103).factor() /// 2^8 * 3967 * 2392141 }}} {{{id=18| L49.index_in(span(ZZ,hecke_image(v,52))).factor() /// 2^8 * 3967 * 2392141 }}} {{{id=17| hecke_bound = 52 # this is enough to get the whole Hecke algebra TT = span(ZZ, hecke_image(v, hecke_bound)) /// }}} {{{id=27| TT.index_in(span(ZZ,hecke_image(v,103))) /// 1 }}} {{{id=28| /// }}}Now the Eisenstein ideal we are interested in is generated by
$T_n - e_n$
for $1 \leq n\leq 52$, where the $e_n$ are integers.
{{{id=25| def evec(B=hecke_bound): # compute the vector of e, so e[n] = e_n above for all n<=hecke_bound e = [0,1] + [None for i in range(B-1)] # first primes: for p in primes(B+1): if p == 13: e[p] = -1 elif p == 43: e[p] = 1 else: e[p] = p+1 # now powers of p k = 2 while p^k <= B: if p == 13 or p == 43: e[p^k] = e[p]^k else: e[p^k] = e[p^(k-1)]*e[p] - p*e[p^(k-2)] k += 1 # next composite non-prime powers: extend multiplicatively for n in [1..B]: if not n.is_prime_power(): e[n] = prod(e[F[0]^F[1]] for F in factor(n)) return e /// }}} {{{id=29| hecke_bound+13 /// 65 }}} {{{id=24| e = evec(hecke_bound+13); e /// [0, 1, 3, 4, 7, 6, 12, 8, 15, 13, 18, 12, 28, -1, 24, 24, 31, 18, 39, 20, 42, 32, 36, 24, 60, 31, -3, 40, 56, 30, 72, 32, 63, 48, 54, 48, 91, 38, 60, -4, 90, 42, 96, 1, 84, 78, 72, 48, 124, 57, 93, 72, -7, 54, 120, 72, 120, 80, 90, 60, 168, 62, 96, 104, 127, -6] }}} {{{id=23| def eisenstein_ideal(v, e): X = [] for i in [1..len(e)-1]: t = S.hecke_matrix(i) - e[i] w = v*t X.append(w) return X /// }}} {{{id=21| I = eisenstein_ideal(v, e) /// }}} {{{id=20| span(ZZ,I).index_in(TT).factor() /// 2 * 7^2 }}} {{{id=16| TT/span(ZZ,I) /// Finitely generated module V/W over Integer Ring with invariants (98) }}}The problem is that using only the operators up to the hecke bound gives us generators for the ideal, but not the ideal itself.
I think what we need to do is come up with a candidate bound $m$ such that we guess that $T_n-e_n$ for $n\leq m$ are $\ZZ$-module generators for the ideal itself.
Then, check that the module over $\ZZ$ generated by that list of elements is closed under multiplication by the Hecke operators $T_p$ for $p$ up to the Hecke bound, since those $T_p$ generate the Hecke algebra as a ring.
{{{id=31| /// }}}It would surely be useful to write the Hecke algebra $T$ as a subring of a polynomial ring $\QQ[x]/(f(x))$. We can do this by finding one element $t \in T$ with squarefree characteristic polynomial $f(x)$, i.e., with minpoly = charpoly. But there is no such thing, since there are oldforms!
{{{id=15| S.hecke_matrix(2).fcp() /// (x + 2)^2 * (x^2 - 2)^2 * (x^3 + 3*x^2 - 3) * (x^4 + x^3 - 5*x^2 - 3*x + 1) * (x^7 + 2*x^6 - 6*x^5 - 9*x^4 + 11*x^3 + 10*x^2 - 5*x - 1) * (x^14 - 7*x^13 + 3*x^12 + 78*x^11 - 145*x^10 - 243*x^9 + 758*x^8 + 83*x^7 - 1422*x^6 + 532*x^5 + 1004*x^4 - 525*x^3 - 224*x^2 + 82*x + 23) * (x^15 - 2*x^14 - 22*x^13 + 43*x^12 + 187*x^11 - 354*x^10 - 769*x^9 + 1395*x^8 + 1553*x^7 - 2684*x^6 - 1328*x^5 + 2265*x^4 + 241*x^3 - 606*x^2 + 33*x + 13) }}}So instead we could hope to write $T$ as a subring of $\QQ[x,y]/(f(x,y), g(x,y))$? Actually, make it of the form $R=\QQ[x]/(f(x))$, then $S = R[y]/(g(x,y))$. We get $R$ by computing the minpoly of a Hecke operator. Then we get $S$ in the same way with another Hecke operator, and we ensure somehow that $S$ contains $T$.
{{{id=36| /// }}}Ohh, I just thought of an awesome trick! Suppose we have what we think is a basis $g_1, \ldots, g_n$ for $I$, where the $g_i$ are in the Hecke algebra, represented as $49 \times 49$ matrices. We have fixed a vector $v$ so we get to $\QQ^{49}$ by the map $t\mapsto v\cdot t$. Let $T_p$ be one of the generators of the Hecke algebra as a ring. To compute the $\ZZ$-module generated by all $T_p(g_i)$, note that $v T_p(g_i) = (v T_p) g_i$. I.e., we can just compute the embedding again, but instead of using $v$, use $v T_p$. Thus if $T_2, T_3, \ldots, T_b$ are generators for the Hecke algebra, we compute the modules got by mapping to $\QQ^{49}$ by using $v, v T_2, \ldots, v T_b$, then add them all together. Alternatively, for each $T_p$ we just check that embedding using $v T_p$ gives a submodule of the embedding of the span of the $g_i$. Let's try this:
{{{id=39| /// }}}First, one that must fail:
{{{id=38| e = evec(hecke_bound) I = span(ZZ,eisenstein_ideal(v, e)) /// }}} {{{id=34| J = span(ZZ, eisenstein_ideal(v * S.hecke_matrix(2), e)) /// }}} {{{id=41| J.is_submodule(I) /// False }}}Now try with a big enough bound that we think each should work.
{{{id=43| e = evec(hecke_bound+13) I = span(ZZ,eisenstein_ideal(v, e)) /// }}} {{{id=42| J = span(ZZ, eisenstein_ideal(v * S.hecke_matrix(2), e)) /// }}} {{{id=45| J.is_submodule(I) /// True }}}Now use all $T_p$ for $p\leq 52$:
{{{id=47| for p in primes(53): J = span(ZZ, eisenstein_ideal(v * S.hecke_matrix(2), e)) print J.is_submodule(I) /// True True True True True True True True True True True True True True True }}}Yeah!
{{{id=46| /// }}}