Homology of modular abelian varieties - Modular Abelian Varieties

Skip to content
Back to top
View this page
Edit this page

# Homology of modular abelian varieties

Sage can compute with homology groups associated to modular abelian varieties with coefficients in any commutative ring. Supported operations include computing matrices and characteristic polynomials of Hecke operators, rank, and rational decomposition as a direct sum of factors (obtained by cutting out kernels of Hecke operators).

AUTHORS:

- William Stein (2007-03)

EXAMPLES:

Sage

    sage: J = J0(43)
    sage: H = J.integral_homology()
    sage: H
    Integral Homology of Abelian variety J0(43) of dimension 3
    sage: H.hecke_matrix(19)
    [ 0  0 -2  0  2  0]
    [ 2 -4 -2  0  2  0]
    [ 0  0 -2 -2  0  0]
    [ 2  0 -2 -4  2 -2]
    [ 0  2  0 -2 -2  0]
    [ 0  2  0 -2  0  0]
    sage: H.base_ring()
    Integer Ring
    sage: d = H.decomposition(); d
    [Submodule of rank 2 of Integral Homology of Abelian variety J0(43) of dimension 3,
     Submodule of rank 4 of Integral Homology of Abelian variety J0(43) of dimension 3]
    sage: a = d[0]
    sage: a.hecke_matrix(5)
    [-4  0]
    [ 0 -4]
    sage: a.T(7)
    Hecke operator T_7 on
     Submodule of rank 2 of Integral Homology of Abelian variety J0(43) of dimension 3

Python

    >>> from sage.all import *
    >>> J = J0(Integer(43))
    >>> H = J.integral_homology()
    >>> H
    Integral Homology of Abelian variety J0(43) of dimension 3
    >>> H.hecke_matrix(Integer(19))
    [ 0  0 -2  0  2  0]
    [ 2 -4 -2  0  2  0]
    [ 0  0 -2 -2  0  0]
    [ 2  0 -2 -4  2 -2]
    [ 0  2  0 -2 -2  0]
    [ 0  2  0 -2  0  0]
    >>> H.base_ring()
    Integer Ring
    >>> d = H.decomposition(); d
    [Submodule of rank 2 of Integral Homology of Abelian variety J0(43) of dimension 3,
     Submodule of rank 4 of Integral Homology of Abelian variety J0(43) of dimension 3]
    >>> a = d[Integer(0)]
    >>> a.hecke_matrix(Integer(5))
    [-4  0]
    [ 0 -4]
    >>> a.T(Integer(7))
    Hecke operator T_7 on
     Submodule of rank 2 of Integral Homology of Abelian variety J0(43) of dimension 3

class sage.modular.abvar.homology.Homology(base_ring, level, weight, category=None)

  Bases: `HeckeModule_free_module`

  A homology group of an abelian variety, equipped with a Hecke action.

  hecke_polynomial(n, var='x')

    Return the \(n\)-th Hecke polynomial in the given variable.

    INPUT:

    - `n` – positive integer

    - `var` – string (default: `'x'`); the variable name

    OUTPUT: a polynomial over \(\ZZ\) in the given variable

    EXAMPLES:

    Sage

        sage: H = J0(43).integral_homology(); H
        Integral Homology of Abelian variety J0(43) of dimension 3
        sage: f = H.hecke_polynomial(3); f
        x^6 + 4*x^5 - 16*x^3 - 12*x^2 + 16*x + 16
        sage: parent(f)
        Univariate Polynomial Ring in x over Integer Ring
        sage: H.hecke_polynomial(3,'w')
        w^6 + 4*w^5 - 16*w^3 - 12*w^2 + 16*w + 16

    Python

        >>> from sage.all import *
        >>> H = J0(Integer(43)).integral_homology(); H
        Integral Homology of Abelian variety J0(43) of dimension 3
        >>> f = H.hecke_polynomial(Integer(3)); f
        x^6 + 4*x^5 - 16*x^3 - 12*x^2 + 16*x + 16
        >>> parent(f)
        Univariate Polynomial Ring in x over Integer Ring
        >>> H.hecke_polynomial(Integer(3),'w')
        w^6 + 4*w^5 - 16*w^3 - 12*w^2 + 16*w + 16

class sage.modular.abvar.homology.Homology_abvar(abvar, base)

  Bases: `Homology`

  The homology of a modular abelian variety.

  abelian_variety()

    Return the abelian variety that this is the homology of.

    EXAMPLES:

    Sage

        sage: H = J0(48).homology()
        sage: H.abelian_variety()
        Abelian variety J0(48) of dimension 3

    Python

        >>> from sage.all import *
        >>> H = J0(Integer(48)).homology()
        >>> H.abelian_variety()
        Abelian variety J0(48) of dimension 3

  ambient_hecke_module()

    Return the ambient Hecke module that this homology is contained in.

    EXAMPLES:

    Sage

        sage: H = J0(48).homology(); H
        Integral Homology of Abelian variety J0(48) of dimension 3
        sage: H.ambient_hecke_module()
        Integral Homology of Abelian variety J0(48) of dimension 3

    Python

        >>> from sage.all import *
        >>> H = J0(Integer(48)).homology(); H
        Integral Homology of Abelian variety J0(48) of dimension 3
        >>> H.ambient_hecke_module()
        Integral Homology of Abelian variety J0(48) of dimension 3

  free_module()

    Return the underlying free module of this homology group.

    EXAMPLES:

    Sage

        sage: H = J0(48).homology()
        sage: H.free_module()
        Ambient free module of rank 6 over the principal ideal domain Integer Ring

    Python

        >>> from sage.all import *
        >>> H = J0(Integer(48)).homology()
        >>> H.free_module()
        Ambient free module of rank 6 over the principal ideal domain Integer Ring

  gen(n)

    Return \(n\)-th generator of `self`.

    This is not yet implemented!

    EXAMPLES:

    Sage

        sage: H = J0(37).homology()
        sage: H.gen(0)    # this will change
        Traceback (most recent call last):
        ...
        NotImplementedError: homology classes not yet implemented

    Python

        >>> from sage.all import *
        >>> H = J0(Integer(37)).homology()
        >>> H.gen(Integer(0))    # this will change
        Traceback (most recent call last):
        ...
        NotImplementedError: homology classes not yet implemented

  gens()

    Return generators of `self`.

    This is not yet implemented!

    EXAMPLES:

    Sage

        sage: H = J0(37).homology()
        sage: H.gens()    # this will change
        Traceback (most recent call last):
        ...
        NotImplementedError: homology classes not yet implemented

    Python

        >>> from sage.all import *
        >>> H = J0(Integer(37)).homology()
        >>> H.gens()    # this will change
        Traceback (most recent call last):
        ...
        NotImplementedError: homology classes not yet implemented

  hecke_bound()

    Return bound on the number of Hecke operators needed to generate the Hecke algebra as a \(\ZZ\)-module acting on this space.

    EXAMPLES:

    Sage

        sage: J0(48).homology().hecke_bound()
        16
        sage: J1(15).homology().hecke_bound()
        32

    Python

        >>> from sage.all import *
        >>> J0(Integer(48)).homology().hecke_bound()
        16
        >>> J1(Integer(15)).homology().hecke_bound()
        32

  hecke_matrix(n)

    Return the matrix of the \(n\)-th Hecke operator acting on this homology group.

    INPUT:

    - `n` – positive integer

    OUTPUT: a matrix over the coefficient ring of this homology group

    EXAMPLES:

    Sage

        sage: H = J0(23).integral_homology()
        sage: H.hecke_matrix(3)
        [-1 -2  2  0]
        [ 0 -3  2 -2]
        [ 2 -4  3 -2]
        [ 2 -2  0  1]

    Python

        >>> from sage.all import *
        >>> H = J0(Integer(23)).integral_homology()
        >>> H.hecke_matrix(Integer(3))
        [-1 -2  2  0]
        [ 0 -3  2 -2]
        [ 2 -4  3 -2]
        [ 2 -2  0  1]

    The matrix is over the coefficient ring:

    Sage

        sage: J = J0(23)
        sage: J.homology(QQ[I]).hecke_matrix(3).parent()
        Full MatrixSpace of 4 by 4 dense matrices over
         Number Field in I with defining polynomial x^2 + 1 with I = 1*I

    [Python]

        >>> from sage.all import *
        >>> J = J0(Integer(23))
        >>> J.homology(QQ[I]).hecke_matrix(Integer(3)).parent()
        Full MatrixSpace of 4 by 4 dense matrices over
         Number Field in I with defining polynomial x^2 + 1 with I = 1*I

  rank()

    Return the rank as a module or vector space of this homology group.

    EXAMPLES:

    Sage

        sage: H = J0(5077).homology(); H
        Integral Homology of Abelian variety J0(5077) of dimension 422
        sage: H.rank()
        844

    Python

        >>> from sage.all import *
        >>> H = J0(Integer(5077)).homology(); H
        Integral Homology of Abelian variety J0(5077) of dimension 422
        >>> H.rank()
        844

  submodule(U, check=True)

    Return the submodule of this homology group given by \(U\), which should be a submodule of the free module associated to this homology group.

    INPUT:

    - `U` – submodule of ambient free module (or something that defines one)

    - `check` – currently ignored

    Note

    We do not check that U is invariant under all Hecke operators.

    EXAMPLES:

    Sage

        sage: H = J0(23).homology(); H
        Integral Homology of Abelian variety J0(23) of dimension 2
        sage: F = H.free_module()
        sage: U = F.span([[1,2,3,4]])
        sage: M = H.submodule(U); M
        Submodule of rank 1 of Integral Homology of Abelian variety J0(23) of dimension 2

    Python

        >>> from sage.all import *
        >>> H = J0(Integer(23)).homology(); H
        Integral Homology of Abelian variety J0(23) of dimension 2
        >>> F = H.free_module()
        >>> U = F.span([[Integer(1),Integer(2),Integer(3),Integer(4)]])
        >>> M = H.submodule(U); M
        Submodule of rank 1 of Integral Homology of Abelian variety J0(23) of dimension 2

    Note that the submodule command doesn’t actually check that the object defined is a homology group or is invariant under the Hecke operators. For example, the fairly random \(M\) that we just defined is not invariant under the Hecke operators, so it is not a Hecke submodule - it is only a \(\ZZ\)-submodule.

    Sage

        sage: M.hecke_matrix(3)
        Traceback (most recent call last):
        ...
        ArithmeticError: subspace is not invariant under matrix

    [Python]

        >>> from sage.all import *
        >>> M.hecke_matrix(Integer(3))
        Traceback (most recent call last):
        ...
        ArithmeticError: subspace is not invariant under matrix

class sage.modular.abvar.homology.Homology_over_base(abvar, base_ring)

  Bases: `Homology_abvar`

  The homology over a modular abelian variety over an arbitrary base commutative ring (not \(\ZZ\) or \(\QQ\)).

  hecke_matrix(n)

    Return the matrix of the \(n\)-th Hecke operator acting on this homology group.

    EXAMPLES:

    Sage

        sage: t = J1(13).homology(GF(3)).hecke_matrix(3); t
        [1 2 2 1]
        [1 0 2 0]
        [0 0 0 1]
        [0 0 2 1]
        sage: t.base_ring()
        Finite Field of size 3

    Python

        >>> from sage.all import *
        >>> t = J1(Integer(13)).homology(GF(Integer(3))).hecke_matrix(Integer(3)); t
        [1 2 2 1]
        [1 0 2 0]
        [0 0 0 1]
        [0 0 2 1]
        >>> t.base_ring()
        Finite Field of size 3

class sage.modular.abvar.homology.Homology_submodule(ambient, submodule)

  Bases: `Homology`

  A submodule of the homology of a modular abelian variety.

  ambient_hecke_module()

    Return the ambient Hecke module that this homology is contained in.

    EXAMPLES:

    Sage

        sage: H = J0(48).homology(); H
        Integral Homology of Abelian variety J0(48) of dimension 3
        sage: d = H.decomposition(); d
        [Submodule of rank 2 of Integral Homology of Abelian variety J0(48) of dimension 3,
         Submodule of rank 4 of Integral Homology of Abelian variety J0(48) of dimension 3]
        sage: d[0].ambient_hecke_module()
        Integral Homology of Abelian variety J0(48) of dimension 3

    Python

        >>> from sage.all import *
        >>> H = J0(Integer(48)).homology(); H
        Integral Homology of Abelian variety J0(48) of dimension 3
        >>> d = H.decomposition(); d
        [Submodule of rank 2 of Integral Homology of Abelian variety J0(48) of dimension 3,
         Submodule of rank 4 of Integral Homology of Abelian variety J0(48) of dimension 3]
        >>> d[Integer(0)].ambient_hecke_module()
        Integral Homology of Abelian variety J0(48) of dimension 3

  free_module()

    Return the underlying free module of the homology group.

    EXAMPLES:

    Sage

        sage: H = J0(48).homology()
        sage: K = H.decomposition()[1]; K
        Submodule of rank 4 of Integral Homology of Abelian variety J0(48) of dimension 3
        sage: K.free_module()
        Free module of degree 6 and rank 4 over Integer Ring
        Echelon basis matrix:
        [ 1  0  0  0  0  0]
        [ 0  1  0  0  1 -1]
        [ 0  0  1  0 -1  1]
        [ 0  0  0  1  0 -1]

    Python

        >>> from sage.all import *
        >>> H = J0(Integer(48)).homology()
        >>> K = H.decomposition()[Integer(1)]; K
        Submodule of rank 4 of Integral Homology of Abelian variety J0(48) of dimension 3
        >>> K.free_module()
        Free module of degree 6 and rank 4 over Integer Ring
        Echelon basis matrix:
        [ 1  0  0  0  0  0]
        [ 0  1  0  0  1 -1]
        [ 0  0  1  0 -1  1]
        [ 0  0  0  1  0 -1]

  hecke_bound()

    Return a bound on the number of Hecke operators needed to generate the Hecke algebra acting on this homology group.

    EXAMPLES:

    Sage

        sage: d = J0(43).homology().decomposition(2); d
        [Submodule of rank 2 of Integral Homology of Abelian variety J0(43) of dimension 3,
         Submodule of rank 4 of Integral Homology of Abelian variety J0(43) of dimension 3]

    Python

        >>> from sage.all import *
        >>> d = J0(Integer(43)).homology().decomposition(Integer(2)); d
        [Submodule of rank 2 of Integral Homology of Abelian variety J0(43) of dimension 3,
         Submodule of rank 4 of Integral Homology of Abelian variety J0(43) of dimension 3]

    Because the first factor has dimension 2 it corresponds to an elliptic curve, so we have a Hecke bound of 1.

    Sage

        sage: d[0].hecke_bound()
        1
        sage: d[1].hecke_bound()
        8

    [Python]

        >>> from sage.all import *
        >>> d[Integer(0)].hecke_bound()
        1
        >>> d[Integer(1)].hecke_bound()
        8

  hecke_matrix(n)

    Return the matrix of the \(n\)-th Hecke operator acting on this homology group.

    EXAMPLES:

    Sage

        sage: d = J0(125).homology(GF(17)).decomposition(2); d
        [Submodule of rank 4 of Homology with coefficients in Finite Field of size 17 of Abelian variety J0(125) of dimension 8,
         Submodule of rank 4 of Homology with coefficients in Finite Field of size 17 of Abelian variety J0(125) of dimension 8,
         Submodule of rank 8 of Homology with coefficients in Finite Field of size 17 of Abelian variety J0(125) of dimension 8]
        sage: t = d[0].hecke_matrix(17); t
        [16 15 15  0]
        [ 0  5  0  2]
        [ 2  0  5 15]
        [ 0 15  0 16]
        sage: t.base_ring()
        Finite Field of size 17
        sage: t.fcp()
        (x^2 + 13*x + 16)^2

    Python

        >>> from sage.all import *
        >>> d = J0(Integer(125)).homology(GF(Integer(17))).decomposition(Integer(2)); d
        [Submodule of rank 4 of Homology with coefficients in Finite Field of size 17 of Abelian variety J0(125) of dimension 8,
         Submodule of rank 4 of Homology with coefficients in Finite Field of size 17 of Abelian variety J0(125) of dimension 8,
         Submodule of rank 8 of Homology with coefficients in Finite Field of size 17 of Abelian variety J0(125) of dimension 8]
        >>> t = d[Integer(0)].hecke_matrix(Integer(17)); t
        [16 15 15  0]
        [ 0  5  0  2]
        [ 2  0  5 15]
        [ 0 15  0 16]
        >>> t.base_ring()
        Finite Field of size 17
        >>> t.fcp()
        (x^2 + 13*x + 16)^2

  rank()

    Return the rank of this homology group.

    EXAMPLES:

    Sage

        sage: d = J0(43).homology().decomposition(2)
        sage: [H.rank() for H in d]
        [2, 4]

    Python

        >>> from sage.all import *
        >>> d = J0(Integer(43)).homology().decomposition(Integer(2))
        >>> [H.rank() for H in d]
        [2, 4]

class sage.modular.abvar.homology.IntegralHomology(abvar)

  Bases: `Homology_abvar`

  The integral homology \(H_1(A,\ZZ)\) of a modular abelian variety.

  hecke_matrix(n)

    Return the matrix of the \(n\)-th Hecke operator acting on this homology group.

    EXAMPLES:

    Sage

        sage: J0(48).integral_homology().hecke_bound()
        16
        sage: t = J1(13).integral_homology().hecke_matrix(3); t
        [-2  2  2 -2]
        [-2  0  2  0]
        [ 0  0  0 -2]
        [ 0  0  2 -2]
        sage: t.base_ring()
        Integer Ring

    Python

        >>> from sage.all import *
        >>> J0(Integer(48)).integral_homology().hecke_bound()
        16
        >>> t = J1(Integer(13)).integral_homology().hecke_matrix(Integer(3)); t
        [-2  2  2 -2]
        [-2  0  2  0]
        [ 0  0  0 -2]
        [ 0  0  2 -2]
        >>> t.base_ring()
        Integer Ring

  hecke_polynomial(n, var='x')

    Return the \(n\)-th Hecke polynomial on this integral homology group.

    EXAMPLES:

    Sage

        sage: f = J0(43).integral_homology().hecke_polynomial(2)
        sage: f.base_ring()
        Integer Ring
        sage: factor(f)
        (x + 2)^2 * (x^2 - 2)^2

    Python

        >>> from sage.all import *
        >>> f = J0(Integer(43)).integral_homology().hecke_polynomial(Integer(2))
        >>> f.base_ring()
        Integer Ring
        >>> factor(f)
        (x + 2)^2 * (x^2 - 2)^2

class sage.modular.abvar.homology.RationalHomology(abvar)

  Bases: `Homology_abvar`

  The rational homology \(H_1(A,\QQ)\) of a modular abelian variety.

  hecke_matrix(n)

    Return the matrix of the \(n\)-th Hecke operator acting on this homology group.

    EXAMPLES:

    Sage

        sage: t = J1(13).homology(QQ).hecke_matrix(3); t
        [-2  2  2 -2]
        [-2  0  2  0]
        [ 0  0  0 -2]
        [ 0  0  2 -2]
        sage: t.base_ring()
        Rational Field
        sage: t = J1(13).homology(GF(3)).hecke_matrix(3); t
        [1 2 2 1]
        [1 0 2 0]
        [0 0 0 1]
        [0 0 2 1]
        sage: t.base_ring()
        Finite Field of size 3

    Python

        >>> from sage.all import *
        >>> t = J1(Integer(13)).homology(QQ).hecke_matrix(Integer(3)); t
        [-2  2  2 -2]
        [-2  0  2  0]
        [ 0  0  0 -2]
        [ 0  0  2 -2]
        >>> t.base_ring()
        Rational Field
        >>> t = J1(Integer(13)).homology(GF(Integer(3))).hecke_matrix(Integer(3)); t
        [1 2 2 1]
        [1 0 2 0]
        [0 0 0 1]
        [0 0 2 1]
        >>> t.base_ring()
        Finite Field of size 3

  hecke_polynomial(n, var='x')

    Return the \(n\)-th Hecke polynomial on this rational homology group.

    EXAMPLES:

    Sage

        sage: f = J0(43).rational_homology().hecke_polynomial(2)
        sage: f.base_ring()
        Rational Field
        sage: factor(f)
        (x + 2) * (x^2 - 2)

    Python

        >>> from sage.all import *
        >>> f = J0(Integer(43)).rational_homology().hecke_polynomial(Integer(2))
        >>> f.base_ring()
        Rational Field
        >>> factor(f)
        (x + 2) * (x^2 - 2)