Congruence subgroup \(\Gamma(N)\) - Arithmetic Subgroups of $\SL_2(\ZZ)$

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

# Congruence subgroup \(\Gamma(N)\)

class sage.modular.arithgroup.congroup_gamma.Gamma_class(*args, **kwds)

  Bases: `CongruenceSubgroup`

  The principal congruence subgroup \(\Gamma(N)\).

  are_equivalent(x, y, trans=False)

    Check if the cusps \(x\) and \(y\) are equivalent under the action of this group.

    ALGORITHM: The cusps \(u_1 / v_1\) and \(u_2 / v_2\) are equivalent modulo \(\Gamma(N)\) if and only if \((u_1, v_1) = \pm (u_2, v_2) \bmod N\).

    EXAMPLES:

    Sage

        sage: Gamma(7).are_equivalent(Cusp(2/3), Cusp(5/4))
        True

    Python

        >>> from sage.all import *
        >>> Gamma(Integer(7)).are_equivalent(Cusp(Integer(2)/Integer(3)), Cusp(Integer(5)/Integer(4)))
        True

  image_mod_n()

    Return the image of this group modulo \(N\), as a subgroup of \(SL(2, \ZZ / N\ZZ)\). This is just the trivial subgroup.

    EXAMPLES:

    Sage

        sage: Gamma(3).image_mod_n()
        Matrix group over Ring of integers modulo 3 with 1 generators (
        [1 0]
        [0 1]
        )

    Python

        >>> from sage.all import *
        >>> Gamma(Integer(3)).image_mod_n()
        Matrix group over Ring of integers modulo 3 with 1 generators (
        [1 0]
        [0 1]
        )

  index()

    Return the index of `self` in the full modular group. This is given by

    \[\begin{split}\prod_{\substack{p \mid N \\ \text{$p$ prime}}}\left(p^{3e}-p^{3e-2}\right).\end{split}\]

    EXAMPLES:

    Sage

        sage: [Gamma(n).index() for n in [1..19]]
        [1, 6, 24, 48, 120, 144, 336, 384, 648, 720, 1320, 1152, 2184, 2016, 2880, 3072, 4896, 3888, 6840]
        sage: Gamma(32041).index()
        32893086819240

    Python

        >>> from sage.all import *
        >>> [Gamma(n).index() for n in (ellipsis_range(Integer(1),Ellipsis,Integer(19)))]
        [1, 6, 24, 48, 120, 144, 336, 384, 648, 720, 1320, 1152, 2184, 2016, 2880, 3072, 4896, 3888, 6840]
        >>> Gamma(Integer(32041)).index()
        32893086819240

  ncusps()

    Return the number of cusps of this subgroup \(\Gamma(N)\).

    EXAMPLES:

    Sage

        sage: [Gamma(n).ncusps() for n in [1..19]]
        [1, 3, 4, 6, 12, 12, 24, 24, 36, 36, 60, 48, 84, 72, 96, 96, 144, 108, 180]
        sage: Gamma(30030).ncusps()
        278691840
        sage: Gamma(2^30).ncusps()
        432345564227567616

    Python

        >>> from sage.all import *
        >>> [Gamma(n).ncusps() for n in (ellipsis_range(Integer(1),Ellipsis,Integer(19)))]
        [1, 3, 4, 6, 12, 12, 24, 24, 36, 36, 60, 48, 84, 72, 96, 96, 144, 108, 180]
        >>> Gamma(Integer(30030)).ncusps()
        278691840
        >>> Gamma(Integer(2)**Integer(30)).ncusps()
        432345564227567616

  nirregcusps()

    Return the number of irregular cusps of `self`. For principal congruence subgroups this is always 0.

    EXAMPLES:

    Sage

        sage: Gamma(17).nirregcusps()
        0

    Python

        >>> from sage.all import *
        >>> Gamma(Integer(17)).nirregcusps()
        0

  nu3()

    Return the number of elliptic points of order 3 for this arithmetic subgroup. Since this subgroup is \(\Gamma(N)\) for \(N \ge 2\), there are no such points, so we return 0.

    EXAMPLES:

    Sage

        sage: Gamma(89).nu3()
        0

    Python

        >>> from sage.all import *
        >>> Gamma(Integer(89)).nu3()
        0

  reduce_cusp(c)

    Calculate the unique reduced representative of the equivalence of the cusp \(c\) modulo this group. The reduced representative of an equivalence class is the unique cusp in the class of the form \(u/v\) with \(u, v \ge 0\) coprime, \(v\) minimal, and \(u\) minimal for that \(v\).

    EXAMPLES:

    Sage

        sage: Gamma(5).reduce_cusp(1/5)
        Infinity
        sage: Gamma(5).reduce_cusp(7/8)
        3/2
        sage: Gamma(6).reduce_cusp(4/3)
        2/3

    Python

        >>> from sage.all import *
        >>> Gamma(Integer(5)).reduce_cusp(Integer(1)/Integer(5))
        Infinity
        >>> Gamma(Integer(5)).reduce_cusp(Integer(7)/Integer(8))
        3/2
        >>> Gamma(Integer(6)).reduce_cusp(Integer(4)/Integer(3))
        2/3

sage.modular.arithgroup.congroup_gamma.Gamma_constructor(N)

  Return the congruence subgroup \(\Gamma(N)\).

  EXAMPLES:

  Sage

      sage: Gamma(5) # indirect doctest
      Congruence Subgroup Gamma(5)
      sage: G = Gamma(23)
      sage: G is Gamma(23)
      True
      sage: TestSuite(G).run()

  Python

      >>> from sage.all import *
      >>> Gamma(Integer(5)) # indirect doctest
      Congruence Subgroup Gamma(5)
      >>> G = Gamma(Integer(23))
      >>> G is Gamma(Integer(23))
      True
      >>> TestSuite(G).run()

  Test global uniqueness:

  Sage

      sage: G = Gamma(17)
      sage: G is loads(dumps(G))
      True
      sage: G2 = sage.modular.arithgroup.congroup_gamma.Gamma_class(17)
      sage: G == G2
      True
      sage: G is G2
      False

  [Python]

      >>> from sage.all import *
      >>> G = Gamma(Integer(17))
      >>> G is loads(dumps(G))
      True
      >>> G2 = sage.modular.arithgroup.congroup_gamma.Gamma_class(Integer(17))
      >>> G == G2
      True
      >>> G is G2
      False