Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download
Project: Triest
Views: 58

Here I record some computations with the modular curve Xns(13)X_{ns}(13) I did a few years ago. Here's the (affine) equation of the curve:

R.<x,y>=PolynomialRing(ZZ, 2) F=(-y-1)*x^3+(2*y^2+y)*x^2+(-y^3+y^2-2*y+1)*x+(2*y^2-3*y) F_Q = F.change_ring(QQ) X = Curve(F_Q) X X.genus()
Affine Plane Curve over Rational Field defined by -x^3*y + 2*x^2*y^2 - x*y^3 - x^3 + x^2*y + x*y^2 - 2*x*y + 2*y^2 + x - 3*y 3

We check that the (affine) curve has good reduction outside p=13p=13:

Fy = F.derivative(y) Delta_y = F.resultant(Fy) Delta_y
-8*y^9 + 72*y^7 + 22*y^6 - 220*y^5 - 151*y^4 + 114*y^3 + 51*y^2 - 40*y - 15
S.<z> = QQ['y'] Delta = S(Delta_y) # we want Delta to be an element of an univariate polynomial ring Delta
-8*y^9 + 72*y^7 + 22*y^6 - 220*y^5 - 151*y^4 + 114*y^3 + 51*y^2 - 40*y - 15
Delta.discriminant().factor()
-1 * 2^16 * 5 * 13^6 * 43^2 * 15199 * 18959^2

These (and also p=3p=3) are the primes where we may have bad reduction. We check this in each case separately:

bad_primes = [2, 3, 5, 13, 43, 15199, 18959] for p in bad_primes: Fb = F.change_ring(GF(p)) Xb = Curve(Fb) print "X is smooth at %s: %s "%(p, Xb.is_smooth())
X is smooth at 2: True X is smooth at 3: True X is smooth at 5: True X is smooth at 13: False X is smooth at 43: True X is smooth at 15199: True X is smooth at 18959: True

Now we know that we have good reduction outside p=13p=13. To understand the reduction at p=13p=13 we first move the singularity to the origin.

Fb = F.change_ring(GF(13)) Xb = Curve(Fb) Xb.singular_points()
[(7, 5)]
F = F(x+7, y+5) Fy = F.derivative(y) Delta = S(F.resultant(Fy)) Deltab = Delta.change_ring(GF(13)) Deltab
5*y^9 + 4*y^8 + 9*y^7

We see that 77 of the 1010 branch points specialized to y=0y=0. In order to see how to separate them by a change of coordinates we look at the Newton polygon of Δ\Delta with respect to the 1313-adic valuation. Recall that Δ=0\Delta=0 is the branch locus of the cover XPQ1X\to\mathbb{P}^1_{\mathbb{Q}} given by the yy-coordinate.

from mac_lane import * from sage.geometry.newton_polygon import NewtonPolygon v_13 = pAdicValuation(QQ, 13) NP = NewtonPolygon([(i, v_13(Delta[i])) for i in range(Delta.degree()+1)]) NP NP.slopes()
Finite Newton polygon with 2 vertices: (0, 0), (9, 0) [0, 0, 0, 0, 0, 0, 0, 0, 0]

We see that we can separate the branch point by a substitution y=131/7y1y = 13^{1/7}y_1.

K.<pi> = QQ.extension(z^7-13) vK = v_13.extension(K) F1 = F(x, pi*y) F1 F1b = F1.map_coefficients(lambda c: vK.reduce(c), vK.residue_field()) F1b
(-pi)*x^3*y + (2*pi^2)*x^2*y^2 + (-pi^3)*x*y^3 - x^3 + (pi)*x^2*y + (pi^2)*x*y^2 + (-2*pi)*x*y + (2*pi^2)*y^2 + x + (-3*pi)*y -x^3 + x

This calculation shows that there are two irreducible components on the special fiber of the model obtained by the substitution y=πy1y = \pi\cdot y_1, followed by a normalization step. To make the normalization step more explicit, we use valuation on the function field of XKX_K which extend the base valuation vKv_K and whose residue field has dimension one.

F1 F1.parent()
(-pi)*x^3*y + (2*pi^2)*x^2*y^2 + (-pi^3)*x*y^3 - 6*x^3 + (14*pi^2)*x*y^2 + (-7*pi^3)*y^3 - 71*x^2 + (80*pi)*x*y + (2*pi^2)*y^2 - 221*x + (234*pi)*y - 91 Multivariate Polynomial Ring in x, y over Number Field in pi with defining polynomial y^7 - 13
F = F(x+7, y+5) F
-x^3*y + 2*x^2*y^2 - x*y^3 - 6*x^3 + 14*x*y^2 - 7*y^3 - 71*x^2 + 80*x*y + 2*y^2 - 221*x + 234*y - 91