In the theory of elliptic curves, **Tate's algorithm** takes as input an integral model of an elliptic curve *E* over
Q
, or more generally an algebraic number field, and a prime or prime ideal *p*. It returns the exponent *f*_{p} of *p* in the conductor of *E*, the type of reduction at *p*, the local index

c
p
=
[
E
(
Q
p
)
:
E
0
(
Q
p
)
]
,
where
E
0
(
Q
p
)
is the group of
Q
p
-points whose reduction mod *p* is a non-singular point. Also, the algorithm determines whether or not the given integral model is minimal at *p*, and, if not, returns an integral model with integral coefficients for which the valuation at *p* of the discriminant is minimal.

Tate's algorithm also gives the structure of the singular fibers given by the Kodaira symbol or Néron symbol, for which, see elliptic surfaces: in turn this determines the exponent *f*_{p} of the conductor *E*.

Tate's algorithm can be greatly simplified if the characteristic of the residue class field is not 2 or 3; in this case the type and *c* and *f* can be read off from the valuations of *j* and Δ (defined below).

Tate's algorithm was introduced by John Tate (1975) as an improvement of the description of the Néron model of an elliptic curve by Néron (1964).

Assume that all the coefficients of the equation of the curve lie in a complete discrete valuation ring *R* with perfect residue field and maximal ideal generated by a prime π. The elliptic curve is given by the equation

y
2
+
a
1
x
y
+
a
3
y
=
x
3
+
a
2
x
2
+
a
4
x
+
a
6
.
Define:

a
i
,
m
=
a
i
/
π
m
b
2
=
a
1
2
+
4
a
2
b
4
=
a
1
a
3
+
2
a
4
b
6
=
a
3
2
+
4
a
6
b
8
=
a
1
2
a
6
−
a
1
a
3
a
4
+
4
a
2
a
6
+
a
2
a
3
2
−
a
4
2
c
4
=
b
2
2
−
24
b
4
c
6
=
−
b
2
3
+
36
b
2
b
4
−
216
b
6
Δ
=
−
b
2
2
b
8
−
8
b
4
3
−
27
b
6
2
+
9
b
2
b
4
b
6
j
=
c
4
3
/
Δ
.
Step 1: If π does not divide Δ then the type is I_{0}, *f*=0, *c*=1.
Step 2. Otherwise, change coordinates so that π divides *a*_{3},*a*_{4},*a*_{6}. If π does not divide *b*_{2} then the type is I_{ν}, with ν =v(Δ), and *f*=1.
Step 3. Otherwise, if π^{2} does not divide *a*_{6} then the type is II, *c*=1, and *f*=v(Δ);
Step 4. Otherwise, if π^{3} does not divide *b*_{8} then the type is III, *c*=2, and *f*=v(Δ)−1;
Step 5. Otherwise, if π^{3} does not divide *b*_{6} then the type is IV, *c*=3 or 1, and *f*=v(Δ)−2.
Step 6. Otherwise, change coordinates so that π divides *a*_{1} and *a*_{2}, π^{2} divides *a*_{3} and *a*_{4}, and π^{3} divides *a*_{6}. Let *P* be the polynomial
If the congruence P(T)≡0 has 3 distinct roots then the type is I

_{0}^{*},

*f*=v(Δ)−4, and

*c* is 1+(number of roots of

*P* in

*k*).

Step 7. If *P* has one single and one double root, then the type is I_{ν}^{*} for some ν>0, *f*=v(Δ)−4−ν, *c*=2 or 4: there is a "sub-algorithm" for dealing with this case.
Step 8. If *P* has a triple root, change variables so the triple root is 0, so that π^{2} divides *a*_{2} and π^{3} divides *a*_{4}, and π^{4} divides *a*_{6}. If
has distinct roots, the type is IV

^{*},

*f*=v(Δ)−6, and

*c* is 3 if the roots are in

*k*, 1 otherwise.

Step 9. The equation above has a double root. Change variables so the double root is 0. Then π^{3} divides *a*_{3} and π^{5} divides *a*_{6}. If π^{4} does not divide *a*_{4} then the type is III^{*} and *f*=v(Δ)−7 and *c* = 2.
Step 10. Otherwise if π^{6} does not divide *a*_{6} then the type is II^{*} and *f*=v(Δ)−8 and *c* = 1.
Step 11. Otherwise the equation is not minimal. Divide each *a*_{n} by π^{n} and go back to step 1.