On 1 April 2014 22:36, William Stein <[email protected]> wrote: > On Tue, Apr 1, 2014 at 2:17 PM, Kevin Buzzard <[email protected]> > wrote: >> Meh where is the reply I wrote just after William answered? >> >> 1) I don't even knew what new_subspace is doing. At level 22 and weight 2 it >> gives a non-zero subspace mod 5 (and there are no level 22 newforms). This >> can't be torsion in the space of modular symbols; it is either some >> congruence within the oldforms which is giving rise to a spurious mod 5 >> newform, or the perfect pairing being used to compute the newforms being >> degenerate mod 5 (or the trace maps being degenerate mod 5 perhaps). I'm not >> sure one should allow new_subspace to be invoked on a space of mod p forms >> (at least until someone explains what it's doing) > > It computes the intersection of the kernels of the degeneracy maps. > You can see the source code for the function by typing the following: > > > sage.modular.hecke.ambient_module.AmbientHeckeModule.new_submodule?? > >> >> 2) How about this for an algorithm. Take the space of cuspidal modular >> symbols over Z. Compute the old subspace and quotient out by it. We get a >> finitely-generated Z-module with perhaps some torsion. Quotient out by the >> torsion. Now we have a finite free Z-module with a Hecke action which, when >> tensored up to the reals gives a Hecke module isomorphic to the classical >> newforms. Instead take the subspace where complex conjugation acts by some >> fixed eigenspace, and then reduce this space mod p. That's now a mod p Hecke >> module and the systems of eigenvalues showing up will be precisely those >> coming from the reductions of char 0 newforms. Isn't that the space I want? >> How can I compute this space in sage? > > It might be very slow/hard to compute it since "Take the space of > cuspidal modular symbols over Z. Compute the old subspace and quotient > out by it...." involves Hermite normal forms on large dense matrices. > It may be harder than just "compute that char poly in char 0 and then > reduce." > > That said, here's an example of how to do basically the same thing: > > # make module over Q that's "what you want but over Q" > sage: M0 = ModularSymbols(33,2,1, > base_ring=QQ).cuspidal_subspace().new_subspace() > > # make ambient space mod p that contains the thing you really want > sage: M3 = ModularSymbols(33,2,sign=1, base_ring=GF(3)) > > # The (only) hard part -- compute a ZZ-basis for "the thing you want over Z" > sage: M0.integral_basis() > > # Now reduce that ZZ-basis to characteristic p: > sage: V = M3.free_module() > sage: B = [V(x.element()) for x in M0.integral_basis()] > > # Be sneaky with check=False, so Sage doesn't try to take the hecke span > sage: X = M3.submodule(V.span(B), check=False); X > > # Compute the hecke operator. > sage: X.hecke_matrix(2) > > > I'm *nervous* about this though, since it isn't clear to me that X is > TT-invariant. Really we would want to compute or what trouble (if > any) would be caused by X not being TT-invariant. (The problem being > torsion -- not an issue in this example, but it is in yours.)
Surely X would be Hecke invariant, since M3 is, hence V is, and reduction of the spaces mod 3 would commute with Hecke action (away from 3)? I may be wrong, of course. John > > -- William > >> >> Kevin >> >> >> >> On Tuesday, 1 April 2014 15:39:24 UTC+1, William wrote: >>> >>> On Tue, Apr 1, 2014 at 4:05 AM, Kevin Buzzard <[email protected]> >>> wrote: >>> > I know too little about what is going on under the hood to write the >>> > code I want to write. >>> > >>> > I would like to compute the mod 3 reduction of the char poly of the >>> > Hecke operator T(5) on the space of weight 2 level Gamma_0(N) cuspidal >>> > newforms for all N<=500 (say). This problem might be a bit more subtle >>> > than >>> > it looks. >>> > >>> > Fix N. I suspect I do *not* want to go down the following route: >>> > >>> > 1) compute the newforms in char 0, >>> > 2) compute the Hecke operator in char 0 >>> > 3) compute the char poly in char 0 >>> > 4) reduce it mod 3. >>> > >>> > Because this way, in step 3, I end up having to compute the char poly of >>> > a possibly large matrix in char 0, which is hard work (I actually want to >>> > go >>> > much further than N=500). If memory serves, I once explained to William >>> > Stein a method for doing this involving reducing the matrix mod p for lots >>> > of small primes p and then using the Ramanujan bounds -- but this is still >>> > really excessive if all I want is the mod 3 reduction of the answer. >>> > >>> > Basically, I want to reduce mod 3 as soon as possible. But I don't know >>> > how to do this! >>> > >>> > Now here's what I have tried, illustrated with some nasty choices of N. >>> > Let's start with level 7, where there are no newforms. >>> > >>> > >>> > ModularSymbols(7,2,1).change_ring(GF(3)).cuspidal_subspace().new_subspace() >>> > >>> > This gives an answer I don't want, because the computation happily spits >>> > out an answer and it's a vector space of positive dimension, presumably >>> > coming from torsion in modular symbols. So I've reduced mod 3 too early. >>> > So >>> > let's try this: >>> > >>> > >>> > ModularSymbols(7,2,1).cuspidal_subspace().new_subspace().change_ring(GF(3)) >>> > >>> > This doesn't work: I can't reduce a char 0 space of newforms mod 3; I >>> > get an error. >>> > >>> > So far I've failed to reduce the space of modular symbols mod 3, so let >>> > me give up and compute this space and the Hecke operator in characteristic >>> > 0. Now let me move to level 351 where we see a new phenomenon: >>> > >>> > >>> > t=ModularSymbols(351,2,1).cuspidal_subspace().new_subspace().hecke_operator(5) >>> > >>> > There's the Hecke operator I want, and I'm already a little >>> > uncomfortable because it's living in char 0 and so already more work is >>> > being done than is necessary. Aah well -- at least I can reduce the matrix >>> > of t mod 3...GAAARGH no I can't, because there are 3's in the denominator >>> > :-/ >>> > >>> > So now I am stuck. I really don't want to compute that char poly in char >>> > 0 and then reduce. Help! >>> > >>> >>> I don't think there is anything implemented in Sage (or Magma) for >>> doing the computation you want. "So I've reduced mod 3 too early." >>> I don't even know how -- in theory -- to do the computation you are >>> requesting. This comes the closest: >>> >>> >>> ModularSymbols(7,2,1).change_ring(GF(3)).cuspidal_subspace().new_subspace() >>> >>> Though I'm confused that even works and think what it does is wrong. >>> Anyways, I prefer to write the much clearer: >>> >>> ModularSymbols(7,2,1, >>> base_ring=GF(3)).cuspidal_subspace().new_subspace() >>> >>> which means take the presentation from char 0 and reduce it mod 3. >>> >>> It seems like you're asking for a command whose existence requires >>> knowing (or quickly computing) "the presentation for modular symbols >>> (without extra torsion!) in char 3". Do you know how to write down >>> such a presentation efficiently? I don't. One can get such a thing >>> *very slowly* by computing in characteristic 0 over QQ, then computing >>> the ZZ-span (using hermite normal form) of all Manin symbols. >>> >>> -- William >>> >>> > Kevin >>> > >>> > >>> > -- >>> > You received this message because you are subscribed to the Google >>> > Groups "sage-support" group. >>> > To unsubscribe from this group and stop receiving emails from it, send >>> > an email to [email protected]. >>> > To post to this group, send email to [email protected]. >>> > Visit this group at http://groups.google.com/group/sage-support. >>> > For more options, visit https://groups.google.com/d/optout. >>> >>> >>> >>> -- >>> William Stein >>> Professor of Mathematics >>> University of Washington >>> http://wstein.org >> >> -- >> You received this message because you are subscribed to the Google Groups >> "sage-support" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To post to this group, send email to [email protected]. >> Visit this group at http://groups.google.com/group/sage-support. >> For more options, visit https://groups.google.com/d/optout. > > > > -- > William Stein > Professor of Mathematics > University of Washington > http://wstein.org > > -- > You received this message because you are subscribed to the Google Groups > "sage-support" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/sage-support. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sage-support. For more options, visit https://groups.google.com/d/optout.
