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.)
-- 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.