### Navigation

- index
- modules |
- next |
- previous |
- Plane curves »

# Galois representations attached to elliptic curves

Given an elliptic curve \(E\) over \(\QQ\) and a rational prime number \(p\), the \(p^n\)-torsion \(E[p^n]\) points of \(E\) is a representation of the absolute Galois group \(G_{\QQ}\) of \(\QQ\). As \(n\) varies we obtain the Tate module \(T_p E\) which is a a representation of \(G_\QQ\) on a free \(\ZZ_p\)-module of rank \(2\). As \(p\) varies the representations are compatible.

Currently sage can decide whether the Galois module \(E[p]\) is reducible, i.e., if \(E\) admits an isogeny of degree \(p\), and whether the image of the representation on \(E[p]\) is surjective onto \(\text{Aut}(E[p]) = GL_2(\mathbb{F}_p)\).

The following are the most useful functions for the class `GaloisRepresentation`.

For the reducibility:

- `is_reducible(p)`
- `is_irreducible(p)`
- `reducible_primes()`

For the image:

- `is_surjective(p)`
- `non_surjective()`
- `image_type(p)`

For the classification of the representation

- `is_semistable(p)`
- `is_unramified(p, ell)`
- `is_crystalline(p)`

EXAMPLES:

    sage: E = EllipticCurve('196a1')
    sage: rho = E.galois_representation()
    sage: rho.is_irreducible(7)
    True
    sage: rho.is_reducible(3)
    True
    sage: rho.is_irreducible(2)
    True
    sage: rho.is_surjective(2)
    False
    sage: rho.is_surjective(3)
    False
    sage: rho.is_surjective(5)
    True
    sage: rho.reducible_primes()
    [3]
    sage: rho.non_surjective()
    [2, 3]
    sage: rho.image_type(2)
    'The image is cyclic of order 3.'
    sage: rho.image_type(3)
    'The image is contained in a Borel subgroup as there is a 3-isogeny.'
    sage: rho.image_type(5)
    'The image is all of GL_2(F_5).'

For semi-stable curve it is known that the representation is surjective if and only if it is irreducible:

    sage: E = EllipticCurve('11a1')
    sage: rho = E.galois_representation()
    sage: rho.non_surjective()
    [5]
    sage: rho.reducible_primes()
    [5]

For cm curves it is not true that there are only finitely many primes for which the Galois representation mod p is surjective onto \(GL_2(\mathbb{F}_p)\):

    sage: E = EllipticCurve('27a1')
    sage: rho = E.galois_representation()
    sage: rho.non_surjective()
    [0]
    sage: rho.reducible_primes()
    [3]
    sage: E.has_cm()
    True
    sage: rho.image_type(11)
    'The image is contained in the normalizer of a non-split Cartan group. (cm)'

REFERENCES:

[Se1] | Jean-Pierre Serre, Propriétés galoisiennes des points d’ordre fini des courbes elliptiques. Invent. Math. 15 (1972), no. 4, 259–331.

[Se2] | Jean-Pierre Serre, Sur les représentations modulaires de degré 2 de \(\text{Gal}(\bar\QQ/\QQ)\). Duke Math. J. 54 (1987), no. 1, 179–230.

[Co] | Alina Carmen Cojocaru, On the surjectivity of the Galois representations associated to non-CM elliptic curves. With an appendix by Ernst Kani. Canad. Math. Bull. 48 (2005), no. 1, 16–31.

AUTHORS:

- chris wuthrich (02/10) - moved from ell_rational_field.py.

class `sage.schemes.elliptic_curves.gal_reps.``GaloisRepresentation`(E)

  Bases: `sage.structure.sage_object.SageObject`

  The compatible family of Galois representation attached to an elliptic curve over the rational numbers.

  Given an elliptic curve \(E\) over \(\QQ\) and a rational prime number \(p\), the \(p^n\)-torsion \(E[p^n]\) points of \(E\) is a representation of the absolute Galois group. As \(n\) varies we obtain the Tate module \(T_p E\) which is a representation of the absolute Galois group on a free \(\ZZ_p\)-module of rank \(2\). As \(p\) varies the representations are compatible.

  EXAMPLES:

      sage: rho = EllipticCurve('11a1').galois_representation()
      sage: rho
      Compatible family of Galois representations associated to the Elliptic Curve defined by y^2 + y = x^3 - x^2 - 10*x - 20 over Rational Field

  `elliptic_curve`()

    The elliptic curve associated to this representation.

    EXAMPLES:

        sage: E = EllipticCurve('11a1')
        sage: rho = E.galois_representation()
        sage: rho.elliptic_curve() == E
        True

  `image_classes`(p, bound=10000)

    This function returns, given the representation \(\rho\) a list of \(p\) values that add up to 1, representing the frequency of the conjugacy classes of the projective image of \(\rho\) in \(PGL_2(\mathbb{F}_p)\).

    Let \(M\) be a matrix in \(GL_2(\mathbb{F}_p)\), then define \(u(M) = \text{tr}(M)^2/\det(M)\), which only depends on the conjugacy class of \(M\) in \(PGL_2(\mathbb{F}_p)\). Hence this defines a map \(u: PGL_2(\mathbb{F}_p) \to \mathbb{F}_p\), which is almost a bijection between conjugacy classes of the source and \(\mathbb{F}_p\) (the elements of order \(p\) and the identity map to \(4\) and both classes of elements of order 2 map to 0).

    This function returns the frequency with which the values of \(u\) appeared among the images of the Frobenius elements \(a_{\ell}`at `\ell\) for good primes \(\ell\neq p\) below a given `bound`.

    INPUT:

    - a prime `p`
    - a natural number `bound` (optional, default=10000)

    OUTPUT:

    - a list of \(p\) real numbers in the interval \([0,1]\) adding up to 1

    EXAMPLES:

        sage: E = EllipticCurve('14a1')
        sage: rho = E.galois_representation()
        sage: rho.image_classes(5)
        [0.2095, 0.1516, 0.2445, 0.1728, 0.2217]

        sage: E = EllipticCurve('11a1')
        sage: rho = E.galois_representation()
        sage: rho.image_classes(5)
        [0.2467, 0.0000, 0.5049, 0.0000, 0.2484]

        sage: EllipticCurve('27a1').galois_representation().image_classes(5)
        [0.5839, 0.1645, 0.0000, 0.1702, 0.08143]
        sage: EllipticCurve('30a1').galois_representation().image_classes(5)
        [0.1956, 0.1801, 0.2543, 0.1728, 0.1972]
        sage: EllipticCurve('32a1').galois_representation().image_classes(5)
        [0.6319, 0.0000, 0.2492, 0.0000, 0.1189]
        sage: EllipticCurve('900a1').galois_representation().image_classes(5)
        [0.5852, 0.1679, 0.0000, 0.1687, 0.07824]
        sage: EllipticCurve('441a1').galois_representation().image_classes(5)
        [0.5860, 0.1646, 0.0000, 0.1679, 0.08150]
        sage: EllipticCurve('648a1').galois_representation().image_classes(5)
        [0.3945, 0.3293, 0.2388, 0.0000, 0.03749]

        sage: EllipticCurve('784h1').galois_representation().image_classes(7)
        [0.5049, 0.0000, 0.0000, 0.0000, 0.4951, 0.0000, 0.0000]
        sage: EllipticCurve('49a1').galois_representation().image_classes(7)
        [0.5045, 0.0000, 0.0000, 0.0000, 0.4955, 0.0000, 0.0000]

        sage: EllipticCurve('121c1').galois_representation().image_classes(11)
        [0.1001, 0.0000, 0.0000, 0.0000, 0.1017, 0.1953, 0.1993, 0.0000, 0.0000, 0.2010, 0.2026]
        sage: EllipticCurve('121d1').galois_representation().image_classes(11)
        [0.08869, 0.07974, 0.08706, 0.08137, 0.1001, 0.09439, 0.09764, 0.08218, 0.08625, 0.1017, 0.1009]

        sage: EllipticCurve('441f1').galois_representation().image_classes(13)
        [0.08232, 0.1663, 0.1663, 0.1663, 0.08232, 0.0000, 0.1549, 0.0000, 0.0000, 0.0000, 0.0000, 0.1817, 0.0000]

    REMARKS:

    Conjugacy classes of subgroups of \(PGL_2(\mathbb{F}_5)\)

    For the case \(p=5\), the order of an element determines almost the value of \(u\):

    \(u\) | 0 | 1 | 2 | 3 | 4
    orders | 2 | 3 | 4 | 6 | 1 or 5

    Here we give here the full table of all conjugacy classes of subgroups with the values that `image_classes` should give (as `bound` tends to \(\infty\)). Comparing with the output of the above examples, it is now easy to guess what the image is.

    subgroup | order | frequencies of values of \(u\)
    --- | --- | ---
    trivial | 1 | [0.0000, 0.0000, 0.0000, 0.0000, 1.000]
    cyclic | 2 | [0.5000, 0.0000, 0.0000, 0.0000, 0.5000]
    cyclic | 2 | [0.5000, 0.0000, 0.0000, 0.0000, 0.5000]
    cyclic | 3 | [0.0000, 0.6667, 0.0000, 0.0000, 0.3333]
    Klein | 4 | [0.7500, 0.0000, 0.0000, 0.0000, 0.2500]
    cyclic | 4 | [0.2500, 0.0000, 0.5000, 0.0000, 0.2500]
    Klein | 4 | [0.7500, 0.0000, 0.0000, 0.0000, 0.2500]
    cyclic | 5 | [0.0000, 0.0000, 0.0000, 0.0000, 1.000]
    cyclic | 6 | [0.1667, 0.3333, 0.0000, 0.3333, 0.1667]
    \(S_3\) | 6 | [0.5000, 0.3333, 0.0000, 0.0000, 0.1667]
    \(S_3\) | 6 | [0.5000, 0.3333, 0.0000, 0.0000, 0.1667]
    \(D_4\) | 8 | [0.6250, 0.0000, 0.2500, 0.0000, 0.1250]
    \(D_5\) | 10 | [0.5000, 0.0000, 0.0000, 0.0000, 0.5000]
    \(A_4\) | 12 | [0.2500, 0.6667, 0.0000, 0.0000, 0.08333]
    \(D_6\) | 12 | [0.5833, 0.1667, 0.0000, 0.1667, 0.08333]
    Borel | 20 | [0.2500, 0.0000, 0.5000, 0.0000, 0.2500]
    \(S_4\) | 24 | [0.3750, 0.3333, 0.2500, 0.0000, 0.04167]
    \(PSL_2\) | 60 | [0.2500, 0.3333, 0.0000, 0.0000, 0.4167]
    \(PGL_2\) | 120 | [0.2083, 0.1667, 0.2500, 0.1667, 0.2083]

  `image_type`(p)

    Returns a string describing the image of the mod-p representation. The result is provably correct, but only indicates what sort of an image we have. If one wishes to determine the exact group one needs to work a bit harder. The probabilistic method of image_classes or Sutherland’s galrep package can give a very good guess what the image should be.

    INPUT:

    - `p` a prime number

    OUTPUT:

    - a string.

    EXAMPLES

        sage: E = EllipticCurve('14a1')
        sage: rho = E.galois_representation()
        sage: rho.image_type(5)
        'The image is all of GL_2(F_5).'

        sage: E = EllipticCurve('11a1')
        sage: rho = E.galois_representation()
        sage: rho.image_type(5)
        'The image is meta-cyclic inside a Borel subgroup as there is a 5-torsion point on the curve.'

        sage: EllipticCurve('27a1').galois_representation().image_type(5)
        'The image is contained in the normalizer of a non-split Cartan group. (cm)'
        sage: EllipticCurve('30a1').galois_representation().image_type(5)
        'The image is all of GL_2(F_5).'
        sage: EllipticCurve("324b1").galois_representation().image_type(5)
        'The image in PGL_2(F_5) is the exceptional group S_4.'

        sage: E = EllipticCurve([0,0,0,-56,4848])
        sage: rho = E.galois_representation()

        sage: rho.image_type(5)
        'The image is contained in the normalizer of a split Cartan group.'

        sage: EllipticCurve('49a1').galois_representation().image_type(7)
        'The image is contained in a Borel subgroup as there is a 7-isogeny.'

        sage: EllipticCurve('121c1').galois_representation().image_type(11)
        'The image is contained in a Borel subgroup as there is a 11-isogeny.'
        sage: EllipticCurve('121d1').galois_representation().image_type(11)
        'The image is all of GL_2(F_11).'
        sage: EllipticCurve('441f1').galois_representation().image_type(13)
        'The image is contained in a Borel subgroup as there is a 13-isogeny.'

        sage: EllipticCurve([1,-1,1,-5,2]).galois_representation().image_type(5)
        'The image is contained in the normalizer of a non-split Cartan group.'
        sage: EllipticCurve([0,0,1,-25650,1570826]).galois_representation().image_type(5)
        'The image is contained in the normalizer of a split Cartan group.'
        sage: EllipticCurve([1,-1,1,-2680,-50053]).galois_representation().image_type(7)    # the dots (...) in the output fix #11937 (installed 'Kash' may give additional output); long time (2s on sage.math, 2014)
        'The image is a... group of order 18.'
        sage: EllipticCurve([1,-1,0,-107,-379]).galois_representation().image_type(7)       # the dots (...) in the output fix #11937 (installed 'Kash' may give additional output); long time (1s on sage.math, 2014)
        'The image is a... group of order 36.'
        sage: EllipticCurve([0,0,1,2580,549326]).galois_representation().image_type(7)
        'The image is contained in the normalizer of a split Cartan group.'

    Test trac ticket #14577:

        sage: EllipticCurve([0, 1, 0, -4788, 109188]).galois_representation().image_type(13)
        'The image in PGL_2(F_13) is the exceptional group S_4.'

    Test trac ticket #14752:

        sage: EllipticCurve([0, 0, 0, -1129345880,-86028258620304]).galois_representation().image_type(11)
        'The image is contained in the normalizer of a non-split Cartan group.'

    For \(p=2\):

        sage: E = EllipticCurve('11a1')
        sage: rho = E.galois_representation()
        sage: rho.image_type(2)
        'The image is all of GL_2(F_2), i.e. a symmetric group of order 6.'

        sage: rho = EllipticCurve('14a1').galois_representation()
        sage: rho.image_type(2)
        'The image is cyclic of order 2 as there is exactly one rational 2-torsion point.'

        sage: rho = EllipticCurve('15a1').galois_representation()
        sage: rho.image_type(2)
        'The image is trivial as all 2-torsion points are rational.'

        sage: rho = EllipticCurve('196a1').galois_representation()
        sage: rho.image_type(2)
        'The image is cyclic of order 3.'

    \(p=3\):

        sage: rho = EllipticCurve('33a1').galois_representation()
        sage: rho.image_type(3)
        'The image is all of GL_2(F_3).'

        sage: rho = EllipticCurve('30a1').galois_representation()
        sage: rho.image_type(3)
        'The image is meta-cyclic inside a Borel subgroup as there is a 3-torsion point on the curve.'

        sage: rho = EllipticCurve('50b1').galois_representation()
        sage: rho.image_type(3)
        'The image is contained in a Borel subgroup as there is a 3-isogeny.'

        sage: rho = EllipticCurve('3840h1').galois_representation()
        sage: rho.image_type(3)
        'The image is contained in a dihedral group of order 8.'

        sage: rho = EllipticCurve('32a1').galois_representation()
        sage: rho.image_type(3)
        'The image is a semi-dihedral group of order 16, gap.SmallGroup([16,8]).'

    ALGORITHM: Mainly based on Serre’s paper.

  `is_crystalline`(p)

    Returns true is the \(p\)-adic Galois representation to \(GL_2(\ZZ_p)\) is crystalline.

    For an elliptic curve \(E\), this is to ask whether \(E\) has good reduction at \(p\).

    INPUT:

    - `p` a prime

    OUTPUT:

    - a Boolean

    EXAMPLES:

        sage: rho = EllipticCurve('64a1').galois_representation()
        sage: rho.is_crystalline(5)
        True
        sage: rho.is_crystalline(2)
        False

  `is_irreducible`(p)

    Return True if the mod p representation is irreducible.

    INPUT:

    - `p` - a prime number

    OUTPUT:

    - a boolean

    EXAMPLES:

        sage: rho = EllipticCurve('37b').galois_representation()
        sage: rho.is_irreducible(2)
        True
        sage: rho.is_irreducible(3)
        False
        sage: rho.is_reducible(2)
        False
        sage: rho.is_reducible(3)
        True

  `is_ordinary`(p)

    Returns true if the \(p\)-adic Galois representation to \(GL_2(\ZZ_p)\) is ordinary, i.e. if the image of the decomposition group in \(\text{Gal}(\bar\QQ/\QQ)\) above he prime \(p\) maps into a Borel subgroup.

    For an elliptic curve \(E\), this is to ask whether \(E\) is ordinary at \(p\), i.e. good ordinary or multiplicative.

    INPUT:

    - `p` a prime

    OUTPUT:

    - a Boolean

    EXAMPLES:

        sage: rho = EllipticCurve('11a3').galois_representation()
        sage: rho.is_ordinary(11)
        True
        sage: rho.is_ordinary(5)
        True
        sage: rho.is_ordinary(19)
        False

  `is_potentially_crystalline`(p)

    Returns true is the \(p\)-adic Galois representation to \(GL_2(\ZZ_p)\) is potentially crystalline, i.e. if there is a finite extension \(K/\QQ_p\) such that the \(p\)-adic representation becomes crystalline.

    For an elliptic curve \(E\), this is to ask whether \(E\) has potentially good reduction at \(p\).

    INPUT:

    - `p` a prime

    OUTPUT:

    - a Boolean

    EXAMPLES:

        sage: rho = EllipticCurve('37b1').galois_representation()
        sage: rho.is_potentially_crystalline(37)
        False
        sage: rho.is_potentially_crystalline(7)
        True

  `is_potentially_semistable`(p)

    Returns true if the \(p\)-adic Galois representation to \(GL_2(\ZZ_p)\) is potentially semistable.

    For an elliptic curve \(E\), this returns True always

    INPUT:

    - `p` a prime

    OUTPUT:

    - a Boolean

    EXAMPLES:

        sage: rho = EllipticCurve('27a2').galois_representation()
        sage: rho.is_potentially_semistable(3)
        True

  `is_quasi_unipotent`(p, ell)

    Returns true if the Galois representation to \(GL_2(\ZZ_p)\) is quasi-unipotent at \(\ell\neq p\), i.e. if there is a fintie extension \(K/\QQ\) such that the inertia group at a place above \(\ell\) in \(\text{Gal}(\bar\QQ/K)\) maps into a Borel subgroup.

    For a Galois representation attached to an elliptic curve \(E\), this returns always True.

    INPUT:

    - `p` a prime
    - `ell` a different prime

    OUTPUT:

    - Boolean

    EXAMPLES:

        sage: rho = EllipticCurve('11a3').galois_representation()
        sage: rho.is_quasi_unipotent(11,13)
        True

  `is_reducible`(p)

    Return True if the mod-p representation is reducible. This is equivalent to the existence of an isogeny defined over \(\QQ\) of degree \(p\) from the elliptic curve.

    INPUT:

    - `p` - a prime number

    OUTPUT:

    - a boolean

    The answer is cached.

    EXAMPLES:

        sage: rho = EllipticCurve('121a').galois_representation()
        sage: rho.is_reducible(7)
        False
        sage: rho.is_reducible(11)
        True
        sage: EllipticCurve('11a').galois_representation().is_reducible(5)
        True
        sage: rho = EllipticCurve('11a2').galois_representation()
        sage: rho.is_reducible(5)
        True
        sage: EllipticCurve('11a2').torsion_order()
        1

  `is_semistable`(p)

    Returns true if the \(p\)-adic Galois representation to \(GL_2(\ZZ_p)\) is semistable.

    For an elliptic curve \(E\), this is to ask whether \(E\) has semistable reduction at \(p\).

    INPUT:

    - `p` a prime

    OUTPUT:

    - a Boolean

    EXAMPLES:

        sage: rho = EllipticCurve('20a3').galois_representation()
        sage: rho.is_semistable(2)
        False
        sage: rho.is_semistable(3)
        True
        sage: rho.is_semistable(5)
        True

  `is_surjective`(p, A=1000)

    Return True if the mod-p representation is surjective onto \(Aut(E[p]) = GL_2(\mathbb{F}_p)\).

    False if it is not, or None if we were unable to determine whether it is or not.

    INPUT:

    - `p` - int (a prime number)
    - `A` - int (a bound on the number of a_p to use)

    OUTPUT:

    - boolean. True if the mod-p representation is surjective and False if not.

    The answer is cached.

    EXAMPLES:

        sage: rho = EllipticCurve('37b').galois_representation()
        sage: rho.is_surjective(2)
        True
        sage: rho.is_surjective(3)
        False

        sage: rho = EllipticCurve('121a1').galois_representation()
        sage: rho.non_surjective()
        [11]
        sage: rho.is_surjective(5)
        True
        sage: rho.is_surjective(11)
        False

        sage: rho = EllipticCurve('121d1').galois_representation()
        sage: rho.is_surjective(5)
        False
        sage: rho.is_surjective(11)
        True

    Here is a case, in which the algorithm does not return an answer:

        sage: rho = EllipticCurve([0,0,1,2580,549326]).galois_representation()
        sage: rho.is_surjective(7)

    In these cases, one can use image_type to get more information about the image:

        sage: rho.image_type(7)
        'The image is contained in the normalizer of a split Cartan group.'

    REMARKS:

    1. If \(p \geq 5\) then the mod-p representation is surjective if and only if the p-adic representation is surjective. When \(p = 2, 3\) there are counterexamples. See papers of Dokchitsers and Elkies for more details.
    2. For the primes \(p=2\) and 3, this will always answer either True or False. For larger primes it might give None.
  `is_unipotent`(p, ell)

    Returns true if the Galois representation to \(GL_2(\ZZ_p)\) is unipotent at \(\ell\neq p\), i.e. if the inertia group at a place above \(\ell\) in \(\text{Gal}(\bar\QQ/\QQ)\) maps into a Borel subgroup.

    For a Galois representation attached to an elliptic curve \(E\), this returns True if \(E\) has semi-stable reduction at \(\ell\).

    INPUT:

    - `p` a prime
    - `ell` a different prime

    OUTPUT:

    - Boolean

    EXAMPLES:

        sage: rho = EllipticCurve('120a1').galois_representation()
        sage: rho.is_unipotent(2,5)
        True
        sage: rho.is_unipotent(5,2)
        False
        sage: rho.is_unipotent(5,7)
        True
        sage: rho.is_unipotent(5,3)
        True
        sage: rho.is_unipotent(5,5)
        Traceback (most recent call last):
        ...
        ValueError: unipotent is not defined for l = p, use semistable instead.

  `is_unramified`(p, ell)

    Returns true if the Galois representation to \(GL_2(\ZZ_p)\) is unramified at \(\ell\), i.e. if the inertia group at a place above \(\ell\) in \(\text{Gal}(\bar\QQ/\QQ)\) has trivial image in \(GL_2(\ZZ_p)\).

    For a Galois representation attached to an elliptic curve \(E\), this returns True if \(\ell\neq p\) and \(E\) has good reduction at \(\ell\).

    INPUT:

    - `p` a prime
    - `ell` another prime

    OUTPUT:

    - Boolean

    EXAMPLES:

        sage: rho = EllipticCurve('20a3').galois_representation()
        sage: rho.is_unramified(5,7)
        True
        sage: rho.is_unramified(5,5)
        False
        sage: rho.is_unramified(7,5)
        False

    This says that the 5-adic representation is unramified at 7, but the 7-adic representation is ramified at 5.

  `non_surjective`(A=1000)

    Returns a list of primes p such that the mod-p representation might not be surjective. If \(p\) is not in the returned list, then the mod-p representation is provably surjective.

    By a theorem of Serre, there are only finitely many primes in this list, except when the curve has complex multiplication.

    If the curve has CM, we simply return the sequence [0] and do no further computation.

    INPUT:

    - `A` - an integer (default 1000). By increasing this parameter the resulting set might get smaller.

    OUTPUT:

    - `list` - if the curve has CM, returns [0]. Otherwise, returns a list of primes where mod-p representation is very likely not surjective. At any prime not in this list, the representation is definitely surjective.

    EXAMPLES:

        sage: E = EllipticCurve([0, 0, 1, -38, 90])  # 361A
        sage: E.galois_representation().non_surjective()   # CM curve
        [0]

        sage: E = EllipticCurve([0, -1, 1, 0, 0]) # X_1(11)
        sage: E.galois_representation().non_surjective()
        [5]

        sage: E = EllipticCurve([0, 0, 1, -1, 0]) # 37A
        sage: E.galois_representation().non_surjective()
        []

        sage: E = EllipticCurve([0,-1,1,-2,-1])   # 141C
        sage: E.galois_representation().non_surjective()
        [13]

        sage: E = EllipticCurve([1,-1,1,-9965,385220]) # 9999a1
        sage: rho = E.galois_representation()
        sage: rho.non_surjective()
        [2]

        sage: E = EllipticCurve('324b1')
        sage: rho = E.galois_representation()
        sage: rho.non_surjective()
        [3, 5]

    ALGORITHM: We first find an upper bound \(B\) on the possible primes. If \(E\) is semi-stable, we can take \(B=11\) by a result of Mazur. There is a bound by Serre in the case that the \(j\)-invariant is not integral in terms of the smallest prime of good reduction. Finally there is an unconditional bound by Cojocaru, but which depends on the conductor of \(E\). For the prime below that bound we call `is_surjective`.

  `reducible_primes`()

    Returns a list of the primes \(p\) such that the mod-\(p\) representation is reducible. For all other primes the representation is irreducible.

    EXAMPLES:

        sage: rho = EllipticCurve('225a').galois_representation()
        sage: rho.reducible_primes()
        [3]

### Navigation

- index
- modules |
- next |
- previous |
- Plane curves »