Given an elliptic curve over
and a rational prime number
, the
-torsion
points of
is a representation of the
absolute Galois group
of
. As
varies
we obtain the Tate module
which is a
a representation of
on a free
-module
of rank
. As
varies the representations
are compatible.
Currently sage can decide whether the Galois module
is reducible, i.e., if
admits an isogeny
of degree
, and whether the image of
the representation on
is surjective onto
.
The following are the most useful functions for the class GaloisRepresentation.
For the reducibility:
For the image:
For the classification of the representation
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 :
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 ![]() |
[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:
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 over
and a rational
prime number
, the
-torsion
points of
is a representation of the absolute Galois group.
As
varies we obtain the Tate module
which is
a representation of the absolute Galois group on a free
-module of rank
. As
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
The elliptic curve associated to this representation.
EXAMPLES:
sage: E = EllipticCurve('11a1')
sage: rho = E.galois_representation()
sage: rho.elliptic_curve() == E
True
This function returns, given the representation
a list of
values that add up to 1, representing the
frequency of the conjugacy classes of the projective image
of
in
.
Let be a matrix in
, then define
, which only depends on the
conjugacy class of
in
. Hence this defines
a map
, which is almost
a bijection between conjugacy classes of the source
and
(the elements of order
and the identity
map to
and both classes of elements of order 2 map to 0).
This function returns the frequency with which the values of
appeared among the images of the Frobenius elements
for good primes
below a
given bound.
INPUT:
OUTPUT:
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
For the case , the order of an element determines almost the value of
:
![]() |
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 ). Comparing with the output
of the above examples, it is now easy to guess what the image is.
subgroup | order | frequencies of values of ![]() |
---|---|---|
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] |
![]() |
6 | [0.5000, 0.3333, 0.0000, 0.0000, 0.1667] |
![]() |
6 | [0.5000, 0.3333, 0.0000, 0.0000, 0.1667] |
![]() |
8 | [0.6250, 0.0000, 0.2500, 0.0000, 0.1250] |
![]() |
10 | [0.5000, 0.0000, 0.0000, 0.0000, 0.5000] |
![]() |
12 | [0.2500, 0.6667, 0.0000, 0.0000, 0.08333] |
![]() |
12 | [0.5833, 0.1667, 0.0000, 0.1667, 0.08333] |
Borel | 20 | [0.2500, 0.0000, 0.5000, 0.0000, 0.2500] |
![]() |
24 | [0.3750, 0.3333, 0.2500, 0.0000, 0.04167] |
![]() |
60 | [0.2500, 0.3333, 0.0000, 0.0000, 0.4167] |
![]() |
120 | [0.2083, 0.1667, 0.2500, 0.1667, 0.2083] |
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:
OUTPUT:
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 :
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.'
:
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.
Returns true is the -adic Galois representation to
is crystalline.
For an elliptic curve , this is to ask whether
has good reduction at
.
INPUT:
OUTPUT:
EXAMPLES:
sage: rho = EllipticCurve('64a1').galois_representation()
sage: rho.is_crystalline(5)
True
sage: rho.is_crystalline(2)
False
Return True if the mod p representation is irreducible.
INPUT:
OUTPUT:
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
Returns true if the -adic Galois representation to
is ordinary, i.e.
if the image of the decomposition group in
above he prime
maps into
a Borel subgroup.
For an elliptic curve , this is to ask whether
is ordinary at
, i.e. good ordinary or multiplicative.
INPUT:
OUTPUT:
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
Returns true is the -adic Galois representation to
is potentially crystalline, i.e.
if there is a finite extension
such that the
-adic representation becomes crystalline.
For an elliptic curve , this is to ask whether
has potentially good reduction at
.
INPUT:
OUTPUT:
EXAMPLES:
sage: rho = EllipticCurve('37b1').galois_representation()
sage: rho.is_potentially_crystalline(37)
False
sage: rho.is_potentially_crystalline(7)
True
Returns true if the -adic Galois representation to
is potentially semistable.
For an elliptic curve , this returns True always
INPUT:
OUTPUT:
EXAMPLES:
sage: rho = EllipticCurve('27a2').galois_representation()
sage: rho.is_potentially_semistable(3)
True
Returns true if the Galois representation to is quasi-unipotent at
, i.e. if there is a fintie extension
such that the inertia group at a place above
in
maps into a Borel subgroup.
For a Galois representation attached to an elliptic curve , this returns always True.
INPUT:
OUTPUT:
EXAMPLES:
sage: rho = EllipticCurve('11a3').galois_representation()
sage: rho.is_quasi_unipotent(11,13)
True
Return True if the mod-p representation is
reducible. This is equivalent to the existence of an
isogeny defined over of degree
from the
elliptic curve.
INPUT:
OUTPUT:
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
Returns true if the -adic Galois representation to
is semistable.
For an elliptic curve , this is to ask whether
has semistable reduction at
.
INPUT:
OUTPUT:
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
Return True if the mod-p representation is
surjective onto .
False if it is not, or None if we were unable to determine whether it is or not.
INPUT:
OUTPUT:
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:
Returns true if the Galois representation to is unipotent at
, i.e.
if the inertia group at a place above
in
maps into a Borel subgroup.
For a Galois representation attached to an elliptic curve , this returns True if
has semi-stable reduction at
.
INPUT:
OUTPUT:
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.
Returns true if the Galois representation to is unramified at
, i.e.
if the inertia group at a place above
in
has trivial image in
.
For a Galois representation attached to an elliptic curve , this returns True if
and
has good reduction at
.
INPUT:
OUTPUT:
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.
Returns a list of primes p such that the mod-p representation
might not be surjective. If 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:
OUTPUT:
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 on the possible primes. If
is semi-stable, we can take
by a result of Mazur. There is
a bound by Serre in the case that the
-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
.
For the prime below that bound we call is_surjective.
Returns a list of the primes such that the mod-
representation is reducible. For all other primes the
representation is irreducible.
EXAMPLES:
sage: rho = EllipticCurve('225a').galois_representation()
sage: rho.reducible_primes()
[3]