I don't know if anyone's still following this thread -- I only just saw it myself.
As William says, Sage's modular symbols code for mod p coefficients doesn't compute the thing you might expect (the homology with mod p coefficients). However, there is some old code floating around on the Sage trac server by GeorgSWeber here: https://trac.sagemath.org/ticket/10857 which, I believe, *does* compute the homology of the modular curve mod p. I have no idea if it still works, or if it's useful. It's 9 years old, but that part of Sage has not changed much since then, so there's at least a non-zero chance the code might still be workable. Best wishes, David On Sun, 31 May 2020 at 16:26, William Stein <[email protected]> wrote: > On Sun, May 31, 2020 at 6:58 AM Preston Wake <[email protected]> > wrote: > > > > Thanks for your answer, William! I think I understand now what > ModularSymbols is computing. Let me say it in a different way, to see how > it compares to the group denoted \bM_k(G;R) in the Definition 1.23 of your > book (https://wstein.org/books/modform/modform/modular_symbols.html). The > command ModularSymbols(G,k,base_ring=R) is first computing a free abelian > group M given by the Manin symbols, and then it computes a subgroup M' of M > such that: > > (i) M' maps to zero in \bM_k(G), and > > (ii) M/M' \otimes \Q is equal to \bM_k(G;\Q)/ > > Then it returns the R-module M/M' \otimes R. Currently this is only > implemented when R is a field. > > > > How does this output compare to \bM_k(G;R)? Well, we know that the Manin > symbols M generate \bM_k(G) integerally (this is Proposition 1.24), so by > (i) there is a surjection M/M' -->> \bM_k(G). Since \bM_k(G) is a free > ZZ-module of finite rank, (ii) implies that the kernel of this surjection > is exactly the torsion subgroup of M/M'. Hence, when R is a > characteristic-zero field, then the output is actually equal to \bM_k(G;R), > but when R has characteristic p, the output is equal to \bM_k(G;R) if and > only if M/M' is p-torsion-free. If M/M' has p-torsion, then probably the > output is useless (?). > > > > That sounds right. > > > Some questions: > > - Why isn't ModularSymbols(G,k,base_ring=R) implemented for rings (like > R=ZZ)? It seems like, given what is already there, it wouldn't be too hard > to ask it to output (M/M')/(torsion) (although this may be hard for it to > actually compute...) > > Because it can be hard to compute and I've never needed it for my > research. Other than that, it could be done. > > There is some very closely related functionality that is implemented: > > sage: M = ModularSymbols(7,8,1).cuspidal_submodule() > sage: M.integral_hecke_matrix(5) > [-320460 285880 67032] > [-212550 189650 44448] > [-626400 558720 131056] > > Try M.integral[tab] to find several other related commands. The > above is a matrix for T_5 on Modular symbols over ZZ (mod any > torsion, just to be clear). You could reduce it modulo 5 and that may > be what you're interested in: > > sage: T5 = M.integral_hecke_matrix(5).change_ring(GF(5)) > sage: T5.fcp() > (x + 4) * x^2 > sage: T5.minimal_polynomial().factor() > x * (x + 4) > > > https://share.cocalc.com/share/df81e09e5b8f16f28b3a2e818dcdd4560e7818ae/support/2020-05-28-modular-over-R.ipynb?viewer=share > > > - For characteristic-p fields, why does Sage output M/M' \otimes R > instead of (M/M')/(torsion) \otimes R? The obvious reason is the one > William says: outputing M/M' \otimes R may be much faster. But isn't this > anathema to what Sage normally does? By default, Sage normally makes you do > the more mathematically-meaningful thing, rather than the faster thing. > > As mathematicians like to say "for historical reasons". Consider that > I implemented all this about 15 years ago before anybody else used > Sage... > > >> But for > >> some > >> small values of p, e.g., p=2 or 3, you can end up with an object that > >> is basically useless (e.g., "Hecke operators" on it don't commute). > > > > I don't think this torsion phenomenon is just about small primes. Are > you saying that when p is large, the resulting space is not basically > useless? > > Sorry, I should have been clear that I was only talking about weight 2 > and trivial character in that remark. > > > For example: > > ModularSymbols(5,16,1); # M has dimension 9 > > Mp=ModularSymbols(5,16,1,GF(13)); #Mp has dimension 10; > > Is this because 13 is small, in this case? Or are you saying that this > Mp is not "basically useless"? If so, what is its basic use? > > Certainly with work you can hope to find a useful vector subspace in > that 10 dimensional space... > > > Best, > > Preston > > > > > > -- > > You received this message because you are subscribed to the Google > Groups "sage-nt" group. > > To unsubscribe from this group and stop receiving emails from it, send > an email to [email protected]. > > To view this discussion on the web visit > https://groups.google.com/d/msgid/sage-nt/CAOjp0GFPB%3DJeLw7HXqpvuG6UzOuWePAudwJ%2B01R%3D5Z7Zg6tBew%40mail.gmail.com > . > > > > -- > William (http://wstein.org) > > -- > You received this message because you are subscribed to the Google Groups > "sage-nt" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sage-nt/CACLE5GAqSj51jjQsKMb2Fe2aKahsPr8x1NOYPUD9hWPGNCF2Vg%40mail.gmail.com > . > -- You received this message because you are subscribed to the Google Groups "sage-nt" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/sage-nt/CANDN%3Dhz%3D%2BFP4eQXAodNHn9zN8LRK5OOQ6ySa-nAYx9GqJKfAoA%40mail.gmail.com.
