Hi All,
I wanted to implement degeneracy maps for GammaH so that I can compute old
spaces for things attached to GammaH
at https://trac.sagemath.org/ticket/24330. For this I was first trying to
understand the code that is in sage for Gamma0 and Gamma1. The main work is
done being done in a function that computes certain cosets representatives,
whose algorithm is nicely documented. I am mailing here because I think the
algorithm as documented contains a mistake, and hence the implementation
quite likely as well.
To quote from the documentation for gamma0 in
src/sage/modular/arithgroup/congroup.pyx
def degeneracy_coset_representatives_gamma0(int N, int M, int t):
>
> r"""
>
> Let `N` be a positive integer and `M` a divisor of `N`. Let `t` be a
>
> divisor of `N/M`, and let `T` be the `2 \times 2` matrix `(1, 0; 0,
> t)`.
>
> This function returns representatives for the orbit set `\Gamma_0(N)
>
> \backslash T \Gamma_0(M)`, where `\Gamma_0(N)` acts on the left on `T
>
> \Gamma_0(M)`.
>
>
>
>
> We use that `T^{-1} \cdot (a,b;c,d) \cdot T = (a,bt; c/t,d)`, that the
>
> group `T^{-1} \Gamma_0(N) T` is contained in `\Gamma_0(M)`, and that
>
> `\Gamma_0(N) T` is contained in `T \Gamma_0(M)`.
>
>
> ALGORITHM:
>
>
> 1. Compute representatives for $\Gamma_0(N/t,t)$ inside of
> $\Gamma_0(M)$,
>
where `\Gamma_0(N/t,t) := T^{-1} \Gamma_0(N) T`.
+ COSET EQUIVALENCE: Two right cosets represented by `[a,b;c,d]` and
>
> `[a',b';c',d']` of `\Gamma_0(N/t,t)` in `{\rm SL}_2(\ZZ)` are
> equivalent if
>
> and only if `(a,b)=(a',b')` as points of `\mathbf{P}^1(\ZZ/t\ZZ)`,
>
> i.e., `ab' \cong ba' \pmod{t}`, and `(c,d) = (c',d')` as points of
>
> `\mathbf{P}^1(\ZZ/(N/t)\ZZ)`.
>
>
>
> 2. There is a bijection between `\Gamma_0(N)\backslash T \Gamma_0(M)`
> and
>
> `\Gamma_0(N/t,t) \backslash \Gamma_0(M)` given by `T r
> \leftrightarrow
>
> r`. Consequently we obtain coset representatives for
>
> `\Gamma_0(N)\backslash T \Gamma_0(M)` by left multiplying by `T`
> each
>
> coset representative of `\Gamma_0(N/t,t) \backslash \Gamma_0(M)`
> found
>
> in step 1.
>
And the documentation for Gamma1
Let `N` be a positive integer and `M` a divisor of `N`. Let `t` be a
>
> divisor of `N/M`, and let `T` be the `2 \times 2` matrix `(1,0; 0,t)`.
>
> This function returns representatives for the orbit set `\Gamma_1(N)
>
> \backslash T \Gamma_1(M)`, where `\Gamma_1(N)` acts on the left on `T
>
> \Gamma_1(M)`.
>
>
>
> ALGORITHM:
>
>
> Everything is the same as for
>
> :func:`~degeneracy_coset_representatives_gamma0`, except for coset
>
> equivalence. Here `\Gamma_1(N/t,t)` consists of matrices that are of
> the
>
> form `(1,*; 0,1) \bmod N/t` and `(1,0; *,1) \bmod t`.
>
>
> COSET EQUIVALENCE: Two right cosets represented by `[a,b;c,d]` and
>
> `[a',b';c',d']` of `\Gamma_1(N/t,t)` in `{\rm SL}_2(\ZZ)` are
> equivalent if
>
> and only if
>
>
> .. MATH::
>
>
> a \cong a' \pmod{t},
>
> b \cong b' \pmod{t},
>
> c \cong c' \pmod{N/t},
>
> d \cong d' \pmod{N/t}.
>
Now here is the part that worries me:
The Gamma_1(N/t,t) described there is not equal to T^-1 Gamma_1(N/t,t) T.
Indeed T^-1 Gamma_1(N/t,t) T consists of the matrixes [a,b;c,d] with a = d
= 1 mod N, b = 0 mod N/t and c = 0 mod t. Now if N/t and t are coprime
there is no problem because the congruence conditions `(1,*; 0,1) \bmod
N/t` and `(1,0; *,1) \bmod t` together with CRT give the right conditions
on a and d. However if N and N/t are not coprime then it only gives a = d =
1 mod lcm(N/t,t) which is smaller then N.
Am I correct in that the algorithm outlined here is wrong?
--
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 post to this group, send an email to [email protected].
Visit this group at https://groups.google.com/group/sage-nt.
For more options, visit https://groups.google.com/d/optout.