assaferan / ModFrmGL2

Extending magma's implementation of modular symbols to arbitrary congruence subgroups
2 stars 6 forks source link

Multiplicity 1 not taken advantage of? #6

Closed jvoight closed 4 months ago

jvoight commented 3 years ago

For:

> AttachSpec("ModFrmGL2/ModFrmGL2.spec");
> H_N := sub<GL(2,Integers(11^2))|[[1,61,45,1],[10,2,62,111]]>;
> H := PSL2Subgroup(H_N);
> M := ModularSymbols(H, 2, Rationals(), 0);
> S := CuspidalSubspace(M);
> T := HeckeOperator(S,2) + HeckeOperator(S,3);
> Sort([<Degree(v[1]),v[2] div 2> : v in Factorization(CharacteristicPolynomial(T))]);
[ <1, 1>, <5, 1>, <5, 1>, <35, 1>, <35, 1>, <50, 1>, <90, 1>, <90, 1>, <200, 1> ]

Because the multiplicities are 1 (well, 2 but we know we have forms and their complex conjugates), I think this implies immediately a decomposition of S. But it seems that Decomposition(S, SturmBound(S)) takes much longer. Why?

assaferan commented 3 years ago

Good question. This also happens for the standard modular symbols (with Gamma0(N)) - e.g. compare with:

p := NextPrime(6*1022); M := ModularSymbols(p); S := CuspidalSubspace(M); D := Decomposition(S, HeckeBound(S));

which takes a long while, and this is even though T2 is semi-simple. The code actually computes the characteristic polynomial of T2, which also decomposes in the same way, and uses it to break the space down to its subspaces. Profiling what happens, it seems that the difficult part is to construct the subspaces. In order to compute the subspace corresponding to a certain factor f, we compute the kernel of f(T). When f is (like in the above) a polynomial of degree 200 with large coefficients, and T is a 1000x1000 matrix, just computing f(T) is very lengthy. Instead, we could for each factor compute the number field, find the eigenspaces for each of the conjugate roots, add them all up and coerce back to the rationals, but that seems to take even longer. Do you have a different suggestion?

jvoight commented 3 years ago

In some cases, the desired algorithm is

So in the above, the input would be H_N and 2, and the desired output is the last line. This often happens to me: I sometimes just want to know if the Jacobian has any elliptic curve or abelian surface factors (with multiplicities). You can make the rigor flag a vararg if you like, but I think there are situations where the user will want to quickly know the answer even if later they want to go back and be sure it is rigorous. (And I don't know that we can be both fast and rigorous at all scales.)

If you repeat this with the non-split Cartan subgroups with N = 97 or more, this is already interesting information which wouldn't require such terrible linear algebra?

So can we write a function called IsotypicDimensionDecomposition (or something less horribly named) for the above?

We know it's rigorous once we find a semisimple Hecke operator; if we don't, then we have to avoid falling back to the Sturm bound, and so the best approach is to map to forms for Gamma_1(N^2) and then use degeneracy operators? If you're not already doing that, maybe it's something should talk about synchronously.

assaferan commented 3 years ago

The function IsotypicDimensionDecomposition has now been added.

Note that a semisimple Hecke operator (and all of them are such away from the level) is not enough - if there is an eigenspace which is more than 1-dimensional, the eigenspace might still be irreducible as a Hecke module. We can (and do) slightly better - if there is an eigenspace which is more than 1-dimensional (i.e. 2-dimensional on the modular symbols space), we can look at decomposition of Hecke operators restricted to this subspace.

Moreover, even if we find an Hecke operator with all eigenspaces 1-dimensional (i.e. 2-dimensional on the modular symbols space), it does not guarantee anything if there are oldforms, (and this is a Hecke operator at a prime dividing the level), see. e.g. the case of Gamma0(22).

However, I don't think I understand the approach using Gamma_1(N^2). Specifically, the space Sk(Gamma{H}) is usually not Hecke-invariant in S_k(Gamma(N)). It might not contain any oldform (nor any eigenform) for Gamma_1(N^2)(see issue #5 for example).