Morphisms of smooth projective curves

This module defines a class MorphismOfSmoothProjectiveCurves which realizes finite and nonconstant morphism between smooth projective curves.

Let \(Y\) and \(X\) be smooth projective curves, with function fields \(F_Y\) and \(F_X\), respectively. Then a nonconstant morphism

\[f:Y\to X\]

is completely determined by the induced pullback map on the function fields,

\[\phi = f^*:F_X \to F_Y.\]

It is automatic that \(F_Y\) is a finite extension of \(\phi(F_X)\) and that the morphism \(\phi:Y\to X\) is finite.

Note

For the time being, this module is in a very preliminary state. A morphism \(\phi:Y\to X\) as above can be constructed only in the following two special cases:

  • \(X\) and \(Y\) are two projective lines; then \(F_X\) and \(F_Y\) are rational function fields in one variable.
  • the map \(f:Y\to X\) is the structure map of the curve \(Y\); by this we mean that \(X\) is the projective line \(f\) the canonical morphism realizing \(Y\) as a cover of \(X\).

Moreover, the role of the constant base fields of the two curves still needs to be clarified.

AUTHORS:

  • Stefan Wewers (2018-1-1): initial version

EXAMPLES:

sage: from mclf import *
sage: FX.<x> = FunctionField(QQ)
sage: R.<y> = FX[]
sage: FY.<y> = FX.extension(y^2-x^3-1)
sage: X = SmoothProjectiveCurve(FX)
sage: Y = SmoothProjectiveCurve(FY)
sage: phi = MorphismOfSmoothProjectiveCurves(Y, X)
sage: phi
morphism from the smooth projective curve with Function field in y defined by y^2 - x^3 - 1
to the smooth projective curve with Rational function field in x over Rational Field,
determined by Coercion map:
  From: Rational function field in x over Rational Field
  To:   Function field in y defined by y^2 - x^3 - 1

sage: x0 = PointOnSmoothProjectiveCurve(X, FX.valuation(x-1))
sage: phi.fiber(x0)
[Point on the smooth projective curve with Function field in y defined by y^2 - x^3 - 1 with coordinates (1, u1).]
class mclf.curves.morphisms_of_smooth_projective_curves.MorphismOfSmoothProjectiveCurves(Y, X, phi=None)

Bases: SageObject

Return the morphism between two smooth projective curves corresponding to a given morphism of function fields.

INPUT:

  • Y, X – two smooth projective curves
  • phi – a morphism from the function field of \(X\) into the function field of \(Y\), or None (default: None)

OUTPUT: the morphism \(f:Y\to X\) corresponding to the given morphism of function fields.

If no morphism of function fields is given then it is assumed that the function field of \(X\) is the canonical rational subfield of the function field of \(Y\). This means that map \(f:Y\to X\) is the structure map of \(Y\) as a cover of the projective line. If this is not the case then an error is raised.

Note

At the moment only the following two special cases are implemented:

  • the map \(Y\to X\) is equal to the structural morphism of \(Y\) as a cover of the projective line; in particular, \(X\) is a projective line
  • \(X\) and \(Y\) are both projective lines

EXAMPLES:

We define a rational map between two projective lines and compute the fiber of a point on the target:

sage: from mclf import *
sage: FX.<x> = FunctionField(QQ)
sage: FY.<y> = FunctionField(QQ)
sage: X = SmoothProjectiveCurve(FX)
sage: Y = SmoothProjectiveCurve(FY)
sage: phi = FY.hom(x^2+1)
sage: psi = MorphismOfSmoothProjectiveCurves(X, Y, phi)
sage: psi
morphism from the smooth projective curve with Rational function field in x over Rational Field
to the smooth projective curve with Rational function field in y over Rational Field,
determined by Function Field morphism:
From: Rational function field in y over Rational Field
To:   Rational function field in x over Rational Field
Defn: y |--> x^2 + 1

sage: P = PointOnSmoothProjectiveCurve(Y, FY.valuation(y-2))
sage: psi.fiber(P)
[Point on the smooth projective curve with Rational function field in x over Rational Field with coordinates (1,).,
 Point on the smooth projective curve with Rational function field in x over Rational Field with coordinates (-1,).]

The only other map that is allowed is the structure morphism of a curve as a cover of the projective line:

sage: R.<x> = GF(2)[]
sage: Y = SuperellipticCurve(x^4+x+1, 3)
sage: phi = Y.structure_map()
sage: X = phi.codomain()
sage: X
the smooth projective curve with Rational function field in x over Finite Field of size 2
sage: P = X.random_point()
sage: phi.fiber(P)  # random
[Point on superelliptic curve y^3 = x^4 + x + 1 over Finite Field of size 2 with coordinates (0, 1).,
 Point on superelliptic curve y^3 = x^4 + x + 1 over Finite Field of size 2 with coordinates (0, u1).]
codomain()

Return the codomain of this morphism.

domain()

Return the domain of this morphism.

fiber(P)

Return the fiber of this map over the point \(P\) (without multiplicities).

INPUT:

  • P – a point on the curve \(X\), the codomain of this morphism

OUTPUT: the fiber over \(P\), as a list of points of \(Y\) (the domain of this map)

fiber_degree(P)

Return the (absolute) degree of the fiber of this map over the point P.

INPUT:

  • P – a point on the curve \(X\) (the codomain of this morphism)

OUTPUT: the fiber degree over \(P\), the sum of the degrees of the points on \(Y\) (the domain of this morphism) lying above \(P\). Here degree means absolute degree, i.e. with respect to the constant base field of \(Y\) (which may differ from the field of constants).

is_structure_map()

Return True if this map is the structure map of the curve \(Y\).

EXAMPLES:

sage: from mclf import *
sage: F.<x> = FunctionField(QQ)
sage: X = SmoothProjectiveCurve(F)
sage: phi = F.hom(x^2+1)
sage: f = MorphismOfSmoothProjectiveCurves(X, X, phi)
sage: f.is_structure_map()
False
sage: phi = F.hom(x)
sage: f = MorphismOfSmoothProjectiveCurves(X, X, phi)
sage: f.is_structure_map()
True
pullback(f)

Return the pullback of a function under this morphism.

pullback_map()

Return the induced inclusion of function fields.