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

Plane Curves

A plane curve C is defined by the vanishing of a single polynomial f in one of the available ambient planes:

C: (f = 0) subset A.

The polynomial f must be an element of the coordinate ring of A. The notation C for a curve and f for its defining equation will be maintained. The coefficient ring of the parent of f will be denoted k. Irrespective of type, the ambient space will be denoted A.

Subsections

Creation

These are the most basic methods of creating a curve. For specialised types --- conics, elliptic curves, hyperelliptic curves --- there are additional functions documented in the corresponding chapters. Curves may also be created implicitly, such as when they arise as the images of maps.

Curve(A,f) : Sch, RngMPolElt -> Crv
Create the plane curve f=0 in the ambient plane A where f is a polynomial in the coordinate ring of A.

Curve(A,I) : Sch, RngMPol -> Crv
Create the plane curve in the ambient plane A determined by the ideal I of the coordinate ring of A.

Line(C,p,q) : Crv, Pt,Pt -> Crv
Line(P,S) : Sch, Pt -> Sch
The line through the distinct points p, q, or the points of S if they are collinear. If the points are points of a curve rather than the ambient space, the line will be interpreted as the tangent line in the case that the points are equal.
Conic(P,S) : Prj, Pt -> Crv
The conic in the projective space P through the points of the set S if such a conic exists and is unique. The traditional setup here is where S is a set of 5 points in general position, which means by just that no 3 of them are collinear. If the resulting conic curve is nonsingular, then it will be returned as a special type. See Chapter RATIONAL CURVES AND CONICS for details of the special functions that apply in that case.
Union(C,D) : Sch,Sch -> Sch
Create the union of the curves C and D. The result will usually be non-irreducible, so although it will be interpreted as a curve, most of the advanced functions below will not apply to it.

Base Change

Let A be some ambient space in Magma. For example, think of A as being the affine plane. Let k be its base ring and R_A its coordinate ring. If m: k -> L is a map of rings (a coercion map, for instance) then there is a new ambient space denoted A_L and called the base change of A to L which has coordinate ring R_A but with coefficients L instead of k. (Mathematically, one simply tensors R_A with L over k. In Magma the equivalent function at the level of polynomial rings is ChangeRing.) There is a base change function described below which takes A and L (or the map k -> L) as arguments and creates this new space A_L. Note that there is a map from the coordinate ring of A to that of A_L determined by the map m.

This operation is called base extension since one often thinks of the map m as being an extension of fields. Of course, the map m could be many other things. One key example where the name extension is a little unusual would be when m is the map from the integers to some finite field.

Now let X be a scheme in Magma. Thus X is defined by some polynomials f_1, ..., f_r on some ambient space A. Given a ring map k -> L there is a base change operation for X which returns the base change of X to L, denoted X_L. This is done by first making the base change of A to L and then using the map from the coordinate ring of A to that of A_L to translate the polynomials f_i into polynomials defined on A_L. These polynomials can then be used to define a scheme in A_L. It is this resulting scheme which is the base change of X to L.

If one has a number of curves in the same ambient space and wants to base change them all at the same time, a little care is required. The function which takes a curve and a map of rings as argument will create a new ambient space each time so is unsuitable. Better would be to base change the ambient space and then use the base change function which takes the curve and the desired new ambient space as argument. (This latter base change function appears to be different from the other ones. In fact it is not. We described base change above as a function of maps of rings. Of course, there is a natural extension to maps of schemes. With that extension, this final base change intrinsic really is base change with respect to map of ambient spaces.)

BaseChange(C,K) : Sch,Rng -> Sch
The base change of the curve C to the new base ring K. This is only possible if elements of the current base ring of C can be coerced automatically into K. The resulting curve will lie in a newly created plane (see the example below).

BaseChange(C,m) : Sch,Map -> Sch
The base change of the curve C by the map of base rings m. Again the resulting curve will lie in a newly created plane.
BaseChange(C,A) : Sch,Sch -> Sch
BaseChange(C,A,m) : Sch,Sch,Map -> Sch
The base change of the curve C to a curve in the new ambient space A. The space A must be of the same type as the ambient of C and its base ring must either admit coercion from the base ring of C or have the map m between the two explicitly given.
BaseChange(C, n) : Sch, RngIntElt -> Sch
The base change of C, where the base ring of C is a finite field to the finite field which is a degree n extension of the base field of C.

Example Crv_curve-base-change (H84E2)

This is an example of a singular curve, over the rationals, whose singular points are only defined over the field extension given by adjoining a square root of -1.

> A<x,y> := AffineSpace(Rationals(),2);
> C := Curve(A,y^2 - (x^2+1)^3);
> SingularPoints(C);
{}
> HasSingularPointsOverExtension(C);
true
Here we assume that the user knows which extension to move to. The first method of finding the points is to search in the particular point set as follows.

> Qi<i> := QuadraticField(-1);
> SingularPoints(C,Qi);             
{ (i, 0), (-i, 0) }
The second method is to create a new curve by base change and search in the base ring point set there. For a single calculation this method is rather clumsy, but if further computation was to take place at these points it might be preferable.

> B<u,v> := BaseChange(A,Qi);
> Ci := BaseChange(C,B);
> SingularPoints(Ci);
{ (i, 0), (-i, 0) }

Basic Attributes

The first few functions below recover data from the ambient space of the curve (and could equally well be applied to the ambient space). Any curves lying in the same ambient space will return identical results when evaluated in these functions. The remaining functions recover data about the equation defining the curve.

The coordinate ring of a curve is described here, but its function field is discussed much later in Section Function Fields.

AmbientSpace(C) : Sch -> Sch
The ambient space containing the curve C.

BaseRing(C) : Sch -> Rng
CoefficientRing(C) : Sch -> Rng
BaseField(C) : Sch -> Fld
The base ring of the curve C. This is recovered as the base ring of the ambient plane. The third function will report an error if the base ring is not a field.

DefiningPolynomial(C) : Sch -> RngMPolElt
The defining polynomial of the curve C.

DefiningIdeal(C) : Sch -> RngMPol
The defining ideal of the curve C, as an ideal in the coordinate ring of its ambient space.

CoordinateRing(C) : Sch -> Rng
The coordinate ring of the curve C. Even creating this requires the use of Gröbner basis techniques.
Curve(C) : Sch -> Crv
The smallest scheme in the inclusion chain above C which is a curve. If C is a curve this will return C. If some other scheme has been created as a subscheme of a curve then this curve will be returned.

Degree(C) : Sch -> RngIntElt
The degree of the defining polynomial of the curve C.

JacobianIdeal(C) : Sch -> RngMPol
The ideal of of partial derivatives of the defining polynomial of the curve C.

JacobianMatrix(C) : Sch -> ModMatRngElt
The matrix of partial derivatives of the defining polynomial of the curve C.

HessianMatrix(C) : Sch -> Mtrx
The symmetric matrix of second partial derivatives of the defining polynomial o

Example Crv_curve-hessian (H84E3)

In this example we start by creating a curve C and check that its ideal really is principal. We have chosen an example which is in Weierstrass form.

> A<x,y,z> := ProjectiveSpace(Rationals(),2);
> C := Curve(A,z*y^2 - x^3 - x*z^2 - z^3);   
> IsNonsingular(C);                          
true
> DefiningIdeal(C);
Ideal of Polynomial ring of rank 3 over Rational Field
Lexicographical Order
Variables: x, y, z
Basis:
[
    -x^3 - x*z^2 + y^2*z - z^3
]
> IsPrincipal($1);
true x^3 + x*z^2 - y^2*z + z^3
Next we compute the determinant of the Hessian matrix of C. That is a polynomial which we use to create another curve D. The intersection of C and D are the points of inflection, or flexes, of C. Over an algebraic closure there will be nine of these, but we only see one --- the family "flex at infinity" --- over the rationals.

> M := HessianMatrix(C);
> Determinant(M);
24*x^2*z + 24*x*y^2 + 72*x*z^2 - 8*z^3
> D := Curve(A,Determinant(M));
> IntersectionPoints(C,D);
{ (0 : 1 : 0) }

Basic Invariants

IsReduced(C) : Sch -> BoolElt
Returns true if and only if the equation defining the curve C has no multiple factor.

IsIrreducible(C) : Sch -> BoolElt
Returns true if and only if the defining polynomial of the curve C does not factor over the base field.

IsSingular(C) : Sch -> BoolElt
Returns true if and only if the curve C contains at least one singularity over an algebraic closure of its base field.

IsNonsingular(C) : Sch -> BoolElt
Returns true if and only if the curve C has no singularities over an algebraic closure of its base field.

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