The general tools for constructing and analysing curves are described in Chapter PLANE ALGEBRAIC CURVES. We do not repeat them here, but rather give some examples to demonstrate those basics that the user will need in Section Examples of Curves. In Section Parametrisation of Rational Curves we describe the main parametrisation function for rational curves and functions which enable type change from a curve of genus zero to a rational curve.
We start with an example which illustrates the creation of a curve and the possible problems of finding a point on that curve.
In the second example, we construct another rational curve. However in this case, the curve is a nonsingular curve defined by a quadratic equation over the rationals. If we want to parametrise this curve, it is better to realise it as a conic of type CrvCon rather than a rational curve of type CrvRat.
If you know the equation of a curve in the affine or projective plane, then creating it as an object in Magma is easy.
> A<x,y> := AffinePlane(FiniteField(27)); > C := Curve(A,(y^2 - x^3)^2 - y*x^5); > C; Curve over GF(3^3) defined by x^6 + 2*x^5*y + x^3*y^2 + y^4 > Genus(C); 0 > bool,C := IsRationalCurve(C); > bool; true > C; Rational Curve over GF(3^3) defined by x^6 + 2*x^5*y + x^3*y^2 + y^4This curve has genus zero so is rational. We have used the intrinsic IsRationalCurve to make a type change for C from being of type Crv to being of type CrvRat. Moreover C has an obvious rational point, the origin. In fact, the curve C is singular at the origin. Usually this would mean that the geometric point (0, 0) would not identify a unique prime divisor on C, but in this case it does. (One doesn't need to know or use the machinery of places used below when computing parametrisations; this is done behind the scenes by other functions. It is included here only for the benefit of those users who know the material of Chapter PLANE ALGEBRAIC CURVES, Section Divisors.)
> p := C ! [0,0]; > p; (0, 0) > #Places(p); 1 > Degree(Places(p)[1]) eq 1; trueThe functions described in Section Rational Curves can compute a parametrisation of the curve C, that is a map defined by polynomials or rational functions from a line to C which is generically bijective.
> P<u,v,w> := ProjectiveSpace(Rationals(),2); > D := Curve(P,u^2 - 54321*u*v + v^2 - 97531*w^2); > Genus(D); 0The curve D is defined as a conic over the rationals. Although the parametrisation functions for rational curves could be used here after a preliminary type change as in Example H84E1, it would be better to convert this to the recognised conic curve type CrvCon and use the functions described in Section Construction of a Conic. Those functions will be far more efficient than any functions operating on rational curves, especially as the size of the coefficients increases (and they could be hundreds of digits long). The point is that parametrisation is equivalent to finding a point of the curve (given that it has genus zero) and the conic type has a fast algorithm for finding points. In fact the point-finding algorithm for conics does much more: it finds a point with relatively small coordinates. Of course, given a point of a conic one can then simply write down a parametrisation.
> bool,E := IsConic(D); > bool; true > E; Conic over Rational Field defined by u^2 - 54321*u*v + v^2 - 97531*w^2 > ReducedProjectiveSolution(E); (-17847061/14971 : -306/14971 : 1)The parametrisation intrinsic requires a one-dimensional ambient space as one of the arguments. This space will be used as the domain of the parametrisation map.
> L<x,y> := ProjectiveSpace(Rationals(),1); > Parametrization(L,E); Mapping from: Prj: L to CrvCon: E with equations : -10811015/29243*x^2 - 7277832/29243*x*y - 1224835/29243*y^2 -57/29243*x^2 - 566/29243*x*y + 306/29243*y^2 x^2 - 34635/29243*x*y - 14971/29243*y^2In practice for this example you would probably have created the curve as a conic in the first place. Nonetheless, when working with curves in general there could well be occasions when this kind of deliberate type change will be necessary.
The rational curve in the affine or projective space X determined by the polynomial f (which must be defined on X). If the polynomial f determines a curve of non-zero genus, then an error is reported.
Returns true if and only if the scheme X is a rational curve. In Magma Version EXPVERS, schemes can only be considered as curves if they are defined by a single equation in affine or projective space. In addition, a curve must have genus zero to be rational. If this returns true, then it returns a rational curve defined by the same equation as X.
A map of schemes from the one-dimensional ambient space X to the rational curve C. The argument p is a nonsingular point of C or a point which determines a unique place of C of degree 1. If C is a projective curve, then X must be a one-dimensional projective space over the base field of C. If C is an affine curve, then L must be a one-dimensional affine space over the base field of C.
> k := FiniteField(101); > P2<x,y,z> := ProjectiveSpace(k,2); > f := x^7 + 3*x^3*y^2*z^2 + 5*y^4*z^3; > C := RationalCurve(P2,f); > Genus(C); 0Now comes the hard part. We need to find a nonsingular point on the curve C (or at least a point of C which determines a unique place --- geometrically such a point is one at which C has injective normalisation). Here we pluck a nonsingular point out of the blue. (In fact we found it using the intrinsic call Points(C) which, over a finite field, returns a sequence containing all points of C defined over the base field. Then we searched that sequence for a nonsingular point.)
> p := C ! [2,33,1]; > p; (2 : 33 : 1) > IsNonsingular(C,p); trueThe parametrisation function requires a one-dimensional ambient space as argument which will be used as the domain of the parametrisation map. Since we want to parametrise a projective curve, we must make a projective ambient space rather than an affine one. We name the coordinates of this space which will be used when the equations defining the map are displayed.
> L<u,v> := ProjectiveSpace(k,1);
> phi := Parametrization(L,C,p);
> phi;
Mapping from: Prj: L to Prj: P2
with equations : 2*u^7 + 5*u^6*v + 81*u^5*v^2 + 80*u^4*v^3 + 13*u^3*v^4
33*u^7 + 88*u^6*v + 90*u^5*v^2 + 73*u^4*v^3 + 25*u^3*v^4 +
83*u^2*v^5 + 72*u*v^6 + 24*v^7
u^7
Finally we confirm that the map really does parametrise the curve C.
Notice that the raw equality test X eq Y between schemes X and Y
is unsuitable here since the image of phi and the curve C were created
as different objects (albeit mathematically equal objects).
The test for equality of ideals is better in this circumstance.
Note finally that the point at infinity on the projective line L maps
to our prescribed point p.
> Image(phi); Scheme over GF(101) defined by x^7 + 3*x^3*y^2*z^2 + 5*y^4*z^3 > Image(phi) eq C; false > Ideal(Image(phi)) eq Ideal(C); true > phi(L![1,0]); (2 : 33 : 1)
> A<x,y> := AffinePlane(FiniteField(27)); > C := Curve(A,(y^2 - x^3)^2 - y*x^5); > p := C ! [0,0];As usual, we must create a one-dimensional ambient space over the base field of C. In this case, C is an affine curve so we create an affine ambient space. In the projective case, one would normally name the coordinate functions of the line L since the equations determining the map would be defined in terms of these coordinate functions. In this case, however, the equations of the map will be rational polynomials, that is, quotients of polynomials defined on L. It is convenient to name these implicitly as we have done below, bypassing the question of exactly which structure is the parent of the equations.
> L := AffineSpace(BaseRing(C),1); > phi := Parametrization(L,C,p); > _<t> := Universe(DefiningEquations(phi)); > phi; Mapping from: Aff: L to Aff: A with equations : 1/(t^4 + 2*t) 1/(t^6 + t^5 + t^4 + 2*t^3 + 2*t^2 + 2*t) > Image(phi); Scheme over GF(3^3) defined by x^6 + 2*x^5*y + x^3*y^2 + y^4 > Ideal(Image(phi)) eq Ideal(C); trueThe penultimate command line reveals that this parametrisation does appear to parametrise the curve C as required. The final line confirms this by comparing the ideal of C with that of the image of phi.