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.

Reply via email to