[Next][Prev] [Right] [Left] [Up] [Index] [Root]

Global Geometry

In this section functions which determine global properties of curves such as their genus and whether their equation has a particular form are presented.

Subsections

Genus and Singularities

Genus(C) : Crv -> RngIntElt
GeometricGenus(C) : Crv -> RngIntElt
The topological genus of the curve C.
ArithmeticGenus(C) : Crv -> RngIntElt
The arithmetic genus of the curve C. Recall that for a plane projective curve of degree d this number is (d - 1)(d - 2)/2. If the curve C is affine, then 0 is returned.
NumberOfPunctures(C): Crv -> RngIntElt
The number of punctures of the affine plane curve C over an algebraic closure of its ground field, that is, the number of points supporting its reduced scheme at infinity. This is just the reduced degree of the polynomial of C at infinity.
SingularPoints(C) : Sch -> SetIndx
The singular points of the curve C which are defined over the base field of C.
HasSingularPointsOverExtension(C) : Sch -> BoolElt
Returns false if and only if the scheme of singularities of the curve C has support defined over the base field of C. This function requires that C be reduced.
Flexes(C) : Sch -> SeqEnum
InflectionPoints(C) : Sch -> SeqEnum
The nonsingular points of the curve C defined over its base ring whose tangent lines have intersection at least 3 with C.
C eq D : Sch,Sch -> BoolElt
Returns true if and only if the curves C and D are defined by identical ideals in the same ambient space. (In fact, this simply compares defining polynomials of the two curves up to a factor so no Gröbner basis calculations are needed.)

C subset D : Sch,Sch -> BoolElt
Returns true if and only if the curve C is contained in the curve D.

Projective Closure and Affine Patches

In Magma, any affine plane has a unique projective closure. This may be assigned different variable names just like any projective space. The projective closure functions applied to affine curves in the plane will return projective curves in the projective closure of the plane. Conversely, a projective plane has three standard affine patches. These will also appear as the ambient spaces of the standard affine patches of a projective curve.

ProjectiveClosure(A): Sch -> Sch
The projective plane that is the projective closure of A. Unless A is already expressed as a particular patch on some projective space, this is the standard closure defined by the homogenisation of the coordinate ring of A with a new coordinate and unit weights.
ProjectiveClosure(C) : Sch -> Sch
The closure of the curve C in the projective closure of its ambient affine space.

Example Crv_proj-cl-commutes (H84E7)

Since the closure of the ambient space is unique, the ambient space of the closure of curves lying in a common affine space is independent of how it is constructed. Here is an odd example but one that occurs in practice when curves and spaces are passed between functions: the functions ProjectiveClosure() and AmbientSpace() commute!

> A<a,b> := AffineSpace(GF(5),2);
> C := Curve(A,a^3 - b^4);
> AmbientSpace(ProjectiveClosure(C)) eq ProjectiveClosure(AmbientSpace(C));
true

LineAtInfinity(A) : Aff -> Crv
The line which is the complement of the affine space A embedded in the projective closure of A.
PointsAtInfinity(C) : Crv -> SetEnum
The set of points at infinity defined over the base field of the curve C. The number of these points can also be recovered by the NumberOfPunctures() function.
AffinePatch(C,i) : Crv,RngIntElt -> SeqEnum
The i-th affine patch of the projective curve C. The first patch is the one centred on the point (0:0:1), the second at the point (0:1:0) and so on.

Example Crv_second-affine-patch (H84E8)

Usually one looks at the first affine patch of a curve. If the curve is described, as below, using homogeneous coordinates x,y,z then this is often realised by "setting z=1". Note that we have to set the coordinates explicitly on the affine patches if we want them.

> P<x,y,z> := ProjectiveSpace(GF(11),2);
> C := Curve(P,x^3*z^2 - y^5);
> AffinePatch(C,1);
Curve over GF(11) defined by 10*.1^3 + .2^5
> C1<u,v> := AffinePatch(C,1);
> C1;
Curve over GF(11) defined by 10*u^3 + v^5
> SingularPoints(C);
{ (1 : 0 : 0), (0 : 0 : 1) }
One can also look at other patches. Indeed, sometimes it is necessary. In this example, the curve C has an interesting singularity "at infinity", the point (1 : 0 : 0). If we want to view it on an affine curve then we must take one of the other patches.

> C3<Y,Z> := AffinePatch(C,3);
> C3;
Curve over GF(11) defined by Y^5 + 10*Z^2
> IsSingular(C3 ! [0,0]);
true
Both affine curves C1 and C3 have the projective curve C as their projective closure.

> ProjectiveClosure(C1) eq ProjectiveClosure(C3);                              
true

Maps and Curves

The first of these functions create selfmaps of the affine plane. Such a map f can be used to move a curve around the plane simply by applying it to the curve. See Chapter SCHEMES on schemes for more details about maps.

IdentityAutomorphism(A) : Sch -> AutSch
Translation(A,p) : Sch,Pt -> AutSch
FlipCoordinates(A) : Sch -> AutSch
Automorphism(A,q) : Sch,RngMPolElt -> AutSch
These are the basic automorphisms of the affine plane A taking (x, y) to (x, y), (x - a, y - b), (y, x) and (x + q(y), y) respectively, where p is the point (a, b) and q is a polynomial on A involving y only.
TranslationToInfinity(C,p) : Crv,Pt -> Crv,AutSch
The image of C under the change of coordinates which translates p to the point (0:1:0) in the projective plane and makes the tangent line there equal to the line at infinity. An error is reported if p is a singular point of C. The change of coordinates map is given so that other curves can be mapped by the same change of coordinates.

Example Crv_translation-to-infinity (H84E9)

In this example we show how one could begin to work out a Weierstrass equation of a Fermat cubic. First we define that cubic curve C in the projective plane and choose a point p on C.

> P<x,y,z> := ProjectiveSpace(Rationals(),2);
> C := Curve(P,x^3 + y^3 + z^3);
> p := C ! [1,-1,0];
> IsFlex(C,p);
true 3
The point we have chosen is a flex --- the second return value of 3 is the local intersection number of the curve C with its tangent line at p. We use the intrinsic TranslationToInfinity to make an automorphism of P which takes the point p to the point (0:1:0) and takes the curve C to a curve which has tangent line z=0 at the image of p.

> C1,phi := TranslationToInfinity(C,p);
> phi(p);
(0 : 1 : 0)
> C1;
Curve over Rational Field defined by
x^3 + 3*y^2*z - 3*y*z^2 + z^3
This is almost a Weierstrass form already. It is a pleasant exercise to make coordinate changes which `absorb' some of the coefficients. Or one can use the intrinsic EllipticCurve to make the entire transformation in one go.

Special forms of Curves

The functions in this section check whether a curve is written in a particular normal form, and also whether it belongs to one of the more specialised families of curve.

IsEllipticWeierstrass(C) : Crv -> BoolElt
Returns true if the curve C is nonsingular curve of genus 1 in Weierstrass form. This tests the coefficients of the polynomial of C. The conditions guarantee a flex at the point (0:1:0) either on C or on its projective closure. These are precisely the conditions required by the linear equivalence algorithms for divisors in a later section.

IsHyperellipticWeierstrass(C) : Crv -> BoolElt
Returns true if the curve C is a hyperelliptic curve in Weierstrass form. The conditions chosen are that the (a) first affine patch be nonsingular, (b) the point (0:1:0) is the only point at infinity and has tangent cone supported at the line at infinity and (c) the projection of C away from that point has degree 2.

EllipticCurve(C,p) : Crv, Pt -> CrvEll, Map, Map
Return an elliptic curve in Weierstra ss form on which the point p is the flex at infinity. The second return value is a map taking a point of C (or a sequence of coordinates corresponding to a point of C) to the corresponding point of the elliptic curve. The third return value is the inverse map.

WeierstrassForm(C,p) : Crv, Pt -> CrvEll, MapSch
    Model: MonStgElt                    Default: "Simple"
The arguments are a nonsingular cubic affine or projective curve together with a point p lying on it. The return values are The parameter Model is used to decide which particular Weierstra ss form should be used. It can be one of the following strings : "Simple", "Natural", "Minimal", "Integral" or "Simplified". The first two are naive: "Simple" means that the algorithm stops after making p in C a flex at the point (0:1:0) while "Natural" means that it continues to complete a square and cube to simplify the equation a little if C is not defined over a field of characteristic 2 or 3. The other three are described in Section Alternative Models. They provide good models defined over the rationals or finite fields.

Notice that if p is not a flex of C, then the resulting ambient map will not be defined at the point (0:1:0). (Of course, on restriction to W this map extends to a regular map, but that is not enabled.) If what is desired is an elliptic curve E together with a pair of maps which transfer points between C and E, then the intrinsic EllipticCurve(C,p) should be used.

 [Next][Prev] [Right] [Left] [Up] [Index] [Root]