How to compute modular symbols

This post is a wiki. Anyone with karma >750 is welcome to improve it.

Let $N \geq 1$ be an integer. I'd like to compute a basis of the homology $H^1(X_0(N), \mathbb{Z})$ where $X_0(N)$ is the classical modular curve for the congruence subgroup $\Gamma_0(N)$. I'd like to have a basis in terms of { $\alpha, \beta$ } (here $\alpha$ and $\beta$ are cusps, and { $\alpha, \beta$ } is the geodesic path with endpoints $\alpha$ and $\beta$). More importantly, I'd like to be able to create some element $x$ in $H^1(X_0(N), \mathbb{Z})$ by summing some elements of the form { $\alpha, \beta$ }, and then I'd like to apply Hecke operators on $x$ and express the result in terms of a basis of $H^1(X_0(N), \mathbb{Z})$.

Thanks for help.

edit retag close merge delete

Sort by ยป oldest newest most voted

In fact there is a "ready to use" procedure. M = ModularSymbols(N,2) creates the space of weight 2 modular symbols for $\Gamma_0(N)$ (i.e. a basis of $H^1(X_0(N), \mathbb{Z})$). We can create the element { $\alpha, \beta$ }, of M by putting x=M.modular_symbol([alpha, beta]). The n-th Hecke operator is computed as follow: M.T(n)(x)

more

Have a look at FareySymbol. It gives a nice presentation of the surface in the way you want. There is no "ready to use" procedure for getting the homology but it is straightforward.

Vincent

more