# 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)

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

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.

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)

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]

#### Previous topic

Torsion subgroups of elliptic curves over number fields (including $$\QQ$$)

#### Next topic

Galois representations for elliptic curves over number fields.