43.7 Cuspidal subgroups of modular abelian varieties

Module: sage.modular.abvar.cuspidal_subgroup

Cuspidal subgroups of modular abelian varieties

Author: William Stein (2007-03, 2008-02)

We compute the cuspidal subgroup of $ J_1(13)$ :

sage: A = J1(13)
sage: C = A.cuspidal_subgroup(); C
Finite subgroup with invariants [19, 19] over QQ of Abelian variety J1(13)
of dimension 2
sage: C.gens()
[[(1/19, 0, 0, 9/19)], [(0, 1/19, 1/19, 18/19)]]
sage: C.order()
361
sage: C.invariants()
[19, 19]

We compute the cuspidal subgroup of $ J_0(54)$ :

sage: A = J0(54)
sage: C = A.cuspidal_subgroup(); C
Finite subgroup with invariants [3, 3, 3, 3, 3, 9] over QQ of Abelian
variety J0(54) of dimension 4
sage: C.gens()
[[(1/3, 0, 0, 0, 0, 1/3, 0, 2/3)], [(0, 1/3, 0, 0, 0, 2/3, 0, 1/3)], [(0,
0, 1/9, 1/9, 1/9, 1/9, 1/9, 2/9)], [(0, 0, 0, 1/3, 0, 1/3, 0, 0)], [(0, 0,
0, 0, 1/3, 1/3, 0, 1/3)], [(0, 0, 0, 0, 0, 0, 1/3, 2/3)]]
sage: C.order()
2187
sage: C.invariants()
[3, 3, 3, 3, 3, 9]

We compute the subgroup of the cuspidal subgroup generated by rational cusps.

sage: C = J0(54).rational_cusp_subgroup(); C
Finite subgroup with invariants [3, 3, 9] over QQ of Abelian variety J0(54)
of dimension 4
sage: C.gens()
[[(1/3, 0, 0, 1/3, 2/3, 1/3, 0, 1/3)], [(0, 0, 1/9, 1/9, 7/9, 7/9, 1/9,
8/9)], [(0, 0, 0, 0, 0, 0, 1/3, 2/3)]]
sage: C.order()
81
sage: C.invariants()
[3, 3, 9]

This might not give us the exact rational torsion subgroup, since it might be bigger than order $ 81$ :

sage: J0(54).rational_torsion_subgroup().multiple_of_order()
243

TESTS:

sage: C = J0(54).cuspidal_subgroup()
sage: loads(dumps(C)) == C
True
sage: D = J0(54).rational_cusp_subgroup()
sage: loads(dumps(D)) == D
True

Module-level Functions

is_rational_cusp_gamma0( c, N, data)

Return True if the rational number c is a rational cusp of level N. This uses remarks in Glenn Steven's Ph.D. thesis.

Input:

c
- a cusp
N
- a positive integer
data
- the list [n for n in range(2,N) if gcd(n,N) == 1], which is passed in as a parameter purely for efficiency reasons.

sage: from sage.modular.abvar.cuspidal_subgroup import is_rational_cusp_gamma0
sage: N = 27
sage: data = [n for n in range(2,N) if gcd(n,N) == 1]
sage: is_rational_cusp_gamma0(Cusp(1/3), N, data)
False
sage: is_rational_cusp_gamma0(Cusp(1), N, data)
True
sage: is_rational_cusp_gamma0(Cusp(oo), N, data)
True
sage: is_rational_cusp_gamma0(Cusp(2/9), N, data)
False

Class: CuspidalSubgroup

class CuspidalSubgroup

sage: a = J0(65)[2]
sage: t = a.cuspidal_subgroup()
sage: t.order()
6

Functions: lattice

lattice( self)

Returned cached tuple of vectors that define elements of the rational homology that generate this finite subgroup.

Output:

tuple
- cached

sage: J = J0(27)
sage: G = J.cuspidal_subgroup()
sage: G.lattice()
Free module of degree 2 and rank 2 over Integer Ring
Echelon basis matrix:
[1/3   0]
[  0 1/3]

Test that the result is cached:

sage: G.lattice() is G.lattice()
True

Special Functions: _repr_

_repr_( self)

String representation of the cuspidal subgroup.

sage: G = J0(27).cuspidal_subgroup()
sage: G._repr_()
'Finite subgroup with invariants [3, 3] over QQ of Abelian variety J0(27)
of dimension 1'

Class: CuspidalSubgroup_generic

class CuspidalSubgroup_generic

Special Functions: _compute_lattice

_compute_lattice( self, [rational_only=False])

Return a list of vectors that define elements of the rational homology that generate this finite subgroup.

Input:

rational_only
- bool (default: False); if True, only use rational cusps.

Output:
list
- list of vectors

sage: J = J0(37)
sage: C = sage.modular.abvar.cuspidal_subgroup.CuspidalSubgroup(J)
sage: C._compute_lattice()
Free module of degree 4 and rank 4 over Integer Ring
Echelon basis matrix:
[  1   0   0   0]
[  0   1   0   0]
[  0   0   1   0]
[  0   0   0 1/3]
sage: J = J0(43)
sage: C = sage.modular.abvar.cuspidal_subgroup.CuspidalSubgroup(J)
sage: C._compute_lattice()
Free module of degree 6 and rank 6 over Integer Ring
Echelon basis matrix:
[  1   0   0   0   0   0]
[  0 1/7   0 6/7   0 5/7]
[  0   0   1   0   0   0]
[  0   0   0   1   0   0]
[  0   0   0   0   1   0]
[  0   0   0   0   0   1]
sage: J = J0(22)
sage: C = sage.modular.abvar.cuspidal_subgroup.CuspidalSubgroup(J)
sage: C._compute_lattice()
Free module of degree 4 and rank 4 over Integer Ring
Echelon basis matrix:
[1/5 1/5 4/5   0]
[  0   1   0   0]
[  0   0   1   0]
[  0   0   0 1/5]
sage: J = J1(13)
sage: C = sage.modular.abvar.cuspidal_subgroup.CuspidalSubgroup(J)
sage: C._compute_lattice()
Free module of degree 4 and rank 4 over Integer Ring
Echelon basis matrix:
[ 1/19     0     0  9/19]
[    0  1/19  1/19 18/19]
[    0     0     1     0]
[    0     0     0     1]

We compute with and without the optional rational_only option.

sage: J = J0(27); G = sage.modular.abvar.cuspidal_subgroup.CuspidalSubgroup(J)
sage: G._compute_lattice()
Free module of degree 2 and rank 2 over Integer Ring
Echelon basis matrix:
[1/3   0]
[  0 1/3]
sage: G._compute_lattice(rational_only=True)
Free module of degree 2 and rank 2 over Integer Ring
Echelon basis matrix:
[1/3   0]
[  0   1]

Class: RationalCuspidalSubgroup

class RationalCuspidalSubgroup

sage: a = J0(65)[2]
sage: t = a.rational_cusp_subgroup()
sage: t.order()
6

Functions: lattice

lattice( self)

Return lattice that defines this group.

Output: lattice

sage: G = J0(27).rational_cusp_subgroup()
sage: G.lattice()
Free module of degree 2 and rank 2 over Integer Ring
Echelon basis matrix:
[1/3   0]
[  0   1]

Test that the result is cached.

sage: G.lattice() is G.lattice()
True

Special Functions: _repr_

_repr_( self)

String representation of the cuspidal subgroup.

sage: G = J0(27).rational_cusp_subgroup()
sage: G._repr_()
'Finite subgroup with invariants [3] over QQ of Abelian variety J0(27) of
dimension 1'

See About this document... for information on suggesting changes.