Here we discuss some basic functions providing analysis of a point p lying on a curve C. Firstly we describe how to create points on curves and their basic access functions. One should also refer to the comments in Section Points and Point Sets of the general schemes chapter about the point sets of point arguments of these functions where there is a fuller discussion of point sets.
Most functions usually have two arguments, a curve and a point on that curve. In fact, the point need not actually be in a point set of the curve since coercion will be attempted if not. Moreover, the curve argument is not strictly necessary either, since if the point does lie in a point set of the curve, that can be recovered automatically. So these functions also work with the curve argument omitted. However, omitting the curve argument should be thought of merely as a convenient shorthand and should be used with care --- it is very easy to use a point from some other space for which the function still makes sense but returns a misleading answer.
Points of a curve C, and indeed points of any scheme in Magma, lie in point sets associated to C rather than C itself. Each point set is the parent of points whose coordinates lie in a particular extension ring of the base ring of the curve. Thus, if k is the base ring of the curve C, points whose coordinates lie in k are elements of the "base ring point set" denoted C(k). If L is an extension ring of k (in the sense of admitting coercion from k or being the codomain of a ring homomorphism from k) then points with coordinates in L lie in the point set C(L).
Here we give the basic point creation methods and access functions. For more information, consult the discussion of points and point sets in Section Points and Point Sets of Chapter SCHEMES on schemes.
For a sequence of elements a, ... of the base ring of C, this creates the point of C with coordinates (a, ... ). The parent of the resulting point is the base point set of the curve C rather than C itself.
For a sequence of elements a, ... of the extension ring L of the base ring of C, this creates the point of C with coordinates (a, ... ). The parent of the resulting point is the point set C(L) of the curve C rather than C itself. The phrase `extension ring' here means that either L admits automatic coercion from the base ring of C, or that L is the codomain of a ring homomorphism from that base ring.
The smallest scheme in the inclusion chain above the scheme on which the point p lies which is a curve. If p lies on a curve then the curve will be returned.
The smallest scheme in the inclusion chain above the scheme P is a point set of which is a curve. If P is a point set of a curve then this curve will be returned.
The sequence of ring elements corresponding to the coordinates of the point p.
The ith coordinate of the point p.
Returns true if and only if the two points p and q lie in schemes contained in a common ambient space, have coordinates that can be compared (either by lying in the same ring, or by an automatic coercion) and these coordinates are equal.
Most of the functions in this section report an error if p does not lie on C. Functions having arguments C, p allow the omission of C as long as the parent of p is a point set of C.
Returns true if and only if the point p or the sequence of coordinates S lies on the curve C. That is, return true if and only if the coordinates of p satisfy the equation of C.
Returns true if and only if p is a nonsingular point of the curve C.
Returns true if and only if the point p is a singular point on the curve C.
Returns true if and only if the point p is a flex of the curve C. An error is reported if p is a singular point of C. The second return value is the order of the flex, that is, the local intersection number at p of C with its tangent line at p.
The tangent line to the curve C at the point p embedded as an plane curve in the same space; an error if p is a singular point of C.
The tangent cone to the curve C at the point p embedded as an plane curve in the same space.
Returns true if and only if the curves C and D are nonsingular and tangent at the point p.
These functions report an error if p is not a singular point of C. Again, the arguments can be abbreviated to just the point if care is taken about its parent.
The multiplicity of the curve C at the point p.
Returns true if and only if the point p is a double point of the curve C.
Returns true if and only if the point p is a singular point of the curve C with reduced tangent cone.
Returns true if and only if the point p is an ordinary double point of the curve C.
Returns true if and only if the point p is a nonordinary double point of the curve C.
Returns true if and only if the curve C has exactly one place at the point p, or equivalently if the resolution of singularities is injective above p.
> A<x,y> := AffineSpace(Rationals(),2); > C := Curve(A,x^2-y^3); > p := Origin(A); > IsCusp(C,p); true > IsDoublePoint(C,p); true > IsReduced(TangentCone(C,p)); false > D := Curve(A,x^2 - y^3 - y^2); > IsAnalyticallyIrreducible(D,p); false > IsNode(D,p); true
Given the affine curve C, return the two affine plane curves lying on the standard patches of the blowup of the affine plane at the origin. Note that the two curves returned are the birational transforms of C on the blowup patches. The patches are contained in the same affine space as the curve itself. If C does not contain the origin this returns an error message.
This returns the weighted blowup of the curve C at the origin defined by the 2 x 2 matrix of integers M. Again, the birational transform of C is returned inside the ambient plane of C. An error is reported if M does not have determinant +- 1.
> A<x,y> := AffineSpace(Rationals(),2); > C := Curve(A,y^2 - x^7); > f := map< A -> A | [x^2*y,x^7*y^3] >; > C @@ f; Curve over Rational Field defined by x^14*y^7 - x^14*y^6 > M := Matrix(2,[2,1,7,3]); > Blowup(C,M); Curve over Rational Field defined by -y + 1 14 6The blowup function makes the total pullback as the underlying map and then removes all copies of the x and y axes. The pair of numbers displayed in the final line is the multiplicity of these factors in the total pullback. The curve returned is the birational pullback of C on some patch of a rational surface arising by a number of blowups above the origin of A. It is clearly nonsingular --- it's linear! --- so this map resolves the singularity at the origin of C.
In fact, Magma has machinery for interpreting strings of blowups in terms of a graph, the resolution graph.
> ResolutionGraph(C); The resolution graph on the Digraph Vertex Neighbours 1 ([ -2, 7, 4, 0 ]) 2 ; 2 ([ -1, 14, 8, 1 ]) 3 ; 3 ([ -3, 6, 3, 0 ]) 4 ; 4 ([ -2, 4, 2, 0 ]) 5 ; 5 ([ -2, 2, 1, 0 ]) ;Consult Chapter RESOLUTION GRAPHS AND SPLICE DIAGRAMS for the full interpretation of this graph. Briefly, one should see this as representing a chain of five blowups which resolve the curve. Each vertex of the graph corresponds to one of the exceptional curves coming from these blowups. The curve extracted by the weighted blowup we saw above corresponds to vertex number 2. Indeed, we can see the multiplicity 14 in the total pullback as the second entry of the labelling sequence. (The multiplicity 6 which we saw above is the corresponding entry in exceptional curve 3.) The fourth entry of that sequence, 1, reports that the birational transform of C to the blownup surface intersects the exceptional curve with multiplicity 1. This is the only nonzero fourth entry of any vertex label, so we conclude that there is exactly one place above the singularity at the origin. This can be confirmed (more quickly!) by the divisor machinery which will be discussed in Section Divisors.
> Places(C ! Origin(A));
[
Place at (0 : 0 : 1)
]
> Degree($1[1]);
1
The main function here uses a standard Euclidean algorithm to calculate local intersection numbers at points where two curves meet. It was taken from unpublished lecture notes of Franz Winkler, "Introduction to Commutative Algebra and Algebraic Geometry"; the same algorithm is in Fulton's book [Ful69]. These numbers are also called intersection multiplicities in the literature. In the following sections there are functions for finding the intersection points of two curves.
Returns true if and only if the point p lies on both curves C and D.
Returns true if and only if the point p is a nonsingular point of both curves C and D and the curves have distinct tangents there.
The local intersection number I_p(C, D) of the curves C and D at the point p. This reports an error if C or D have a common component at p.
> A<x,y> := AffineSpace(Rationals(),2); > C := Curve(A, y^2 - x^5); > D := Curve(A, y - x^2); > p := Origin(A); > IntersectionNumber(C,D,p); 4 > Multiplicity(C,p) * Multiplicity(D,p); 2These intersection numbers are often defined to be the length of a particular affine algebra. (See [Har77] Chapter I, Exercise 5.4.) Below it is checked that this definition produces the same result in this case. Note that the algebra is not localised at p so the length calculated is the sum of intersection numbers at all intersection points. At the end one sees that the discrepancy of 1 is accounted for by a single transverse intersection away from the origin.
> RA := CoordinateRing(A);
> I := ideal< RA | Polynomial(C),Polynomial(D) >;
> Dimension(RA/I);
5
> IntersectionPoints(C,D);
{ (1, 1), (0, 0) }
> IP := SetToSequence($1);
> IP;
[ (1, 1), (0, 0) ]
> IsTransverse(C,D,IP[1]);
true