Local Geometry of Schemes

We now discuss intrinsics which apply to a scheme at a single point. At the expense of increasing the number of intrinsics, we try to follow the convention that an intrinsic may simply take a point as its argument or it may take both a point and a scheme as its arguments. In the former case, the implicit scheme argument is taken to be the scheme associated to the point set of the point. In the latter case, it is first checked that the point can be coerced into some point set of the given scheme argument. There are reasons for allowing both methods. Of course, if one is confident about which scheme, X say, a point p lies on then there is no ambiguity about writing, say, IsNonsingular(p) rather than IsNonsingular(X,p). On the other hand, the second expression is easier to read, and also guards against the possibility of accidentally referring to the wrong scheme; that is a particular risk here since the answer makes sense even if p lies on some other scheme---imagine the confusion that could arise given a point of a nonsingular curve lying on a singular surface inside a nonsingular ambient space, for instance. But also there are trivial cases when scheme arguments are necessary, IntersectionNumber(C,D,p) for example. In fact, that particular example exemplifies the value of points being highly coercible---it is very convenient that the point p could lie in a point set of either C or D or indeed neither of these as long as it could be coerced to them if necessary.

Sometimes a function will require that the point argument is rational, that is, has coordinates in the base ring.

Contents

Point Conditions

IsSingular(p) : Pt -> BoolElt
IsSingular(X,p) : Sch,Pt -> BoolElt
Returns true if and only if the point p is a singular point of the scheme X.
IsNonsingular(p) : Pt -> BoolElt
IsNonsingular(X,p) : Sch,Pt -> BoolElt
Returns true if and only if the point p is a nonsingular point of the scheme X.
IsOrdinarySingularity(p) : Pt -> BoolElt
IsOrdinarySingularity(X,p) : Sch,Pt -> BoolElt
Returns true if and only if the tangent cone to the scheme X at the point p is reduced and X is singular at p. Currently, the scheme X must be a hypersurface.

Point Computations

Multiplicity(p) : Pt -> RngIntElt
Multiplicity(X,p) : Sch,Pt -> RngIntElt
The multiplicity of the point p as a point of the scheme X. If X is not a hypersurface, computed using local Groebner bases.
TangentSpace(p) : Pt -> Sch
TangentSpace(X,p) : Sch,Pt -> Sch
The tangent space to the scheme X at the point p. This linear space is embedded as a scheme in the same ambient space as X. An error will be signalled if p is a singular point of X or is not a rational point of X.
TangentCone(p) : Pt -> Sch
TangentCone(X,p) : Sch,Pt -> Sch
The tangent cone to X at the point p embedded as a scheme in the same ambient space. If the scheme X is not a hypersurface, the computation uses local Groebner bases.

Analytically Hypersurface Singularities

We will say that an isolated singular point p in a pointset X(k) over a field k is a hypersurface singularity if the completion of its local ring is isomorphic to the quotient of a power series ring k[[x1, ..., xd]] by a single power series F(x1, ..., xd). That is, it is analytically equivalent to the singularity of an analytic hypersurface defined by F at the origin. Clearly d is equal to the dimension of the tangent space at p here. This type of singularity occurs quite commonly (e.g., singular points on actual hypersurfaces, A-D-E singularities on surfaces).

This section contains intrinsics to test whether such a p is a hypersurface singularity and compute the equivalent analytic equation F to given precision, to increase the precision of F at a later stage and to expand a rational function on X to the corresponding element in the field of fractions of k[[x1, ..., xd]] to any required precision.

IsHypersurfaceSingularity(p,prec) : Pt, RngIntElt -> BoolElt, RngMPolElt, SeqEnum, Rec
The point p is a singular point in X(k) for a field k. It should be an isolated singularity on X and should only lie on irreducible components of X whose dimension d is maximal, i.e. the dimension of X (these conditions are not checked). The integer prec should be positive.

The function returns whether p is a hypersurface singularity on X as defined above. This is also equivalent to the conditions that the tangent space of p has dimension d + 1 and that the local ring at p is a local complete intersection ring (if X is reduced at p - for example, if X is a variety - the second condition follows automatically from the first).

If this is true, the function also returns extra values. The second return value is a multivariate polynomial F1 in a polynomial ring k[x1, ..., xd + 1] such that the singularity p is analytically equivalent to that of the analytic hypersurface F ∈k[[x1, ..., xd + 1]] at the origin and F1 is equal to F for terms of degree less than or equal to prec.

The third is a sequence of simple rational functions on X/k (i.e., quotients of polynomials in the coordinate ring of the ambient of X that, if X is projective, have the same degree for all gradings) such that xi corresponds to the ith rational function of the sequence. If X is affine, these rational functions will all be k-linear forms in the coordinate variables and if X is ordinary projective, linear forms in the coordinate variables divided by a particular variable that is non-zero at p.

The fourth return value is a data record that is needed if the user wants to later expand F to higher precision or to expand arbitrary rational functions on X/k at p.

The implementation makes use of Magma's local Groebner bases, after localising p to an affine patch and translating it to the origin.

HypersurfaceSingularityExpandFurther(dat,prec,R): Rec, RngIntElt, RngMPol -> RngMPolElt
The record dat should be the data record returned for a hypersurface singularity p in X(k) by the intrinsic above, prec a positive integer and R a polynomial ring over k of rank d + 1 (d is the dimension of X).

Returns a polynomial that expands the equation of the analytic hypersurface F to include all terms of degree less than or equal to prec. The result will be returned as an element of R (with the ith variable of R corresponding to the analytic variable denoted xi in the exposition of the previous intrinsic).

This intrinsic is very useful to expand F to higher precision after the original call that determined that p was a hypersurface singularity.

HypersurfaceSingularityExpandFunction(dat,f,prec,R): Rec, FldFunRatMElt, RngIntElt, RngMPol -> RngMPolElt, RngMPolElt
The record dat should be the data record returned for a hypersurface singularity p in X(k) by the first intrinsic of this subsection, prec a positive integer and R a polynomial ring over k of rank d + 1 (d is the dimension of X). The argument f should be a rational function on X/k given as an element of the field of fractions of the coordinate ring of the ambient of X or the base change of X to k, if k is not the base ring of X. The argument f can in fact be given as an element of any rational function field over k whose rank is equal to the rank of the coordinate ring of X. In any case, when X is projective, the numerator and denominator of f have to be homogeneous and have the same degree with respect to all gradings of X.

Returns f pulled back to the analytic coordinate ring at p (identified with k[[x1, ..., xd + 1]]/(F) in the notation introduced above) and expanded to required precision. In fact, the return value is given as two polynomials a and b in R, whose variables are identified with the xi, such that a/b is the finite approximation to the value of the pullback. a and b are actually just the pullbacks of the numerator and denominator of f expanded to include all terms of degree less than or equal to prec. The value is returned as two polynomials rather than a quotient as b may be zero if prec is sufficiently small even when the denominator of f does not vanish on X.

MilnorNumberAnalyticHypersurface(dat) : Rec -> RngIntElt
TjurinaNumberAnalyticHypersurface(dat) : Rec -> RngIntElt
The record dat should be the data record returned for a hypersurface singularity p in X(k) by the first intrinsic of this subsection. It represents a specific power series F(x1, ..., xd + 1) ∈k[[x1, ..., xd + 1]] as described above.

Returns the Milnor (resp. Tjurina) number of this power series F. That is, the k-dimension of the quotient of k[[x1, ..., xd + 1]] by the ideal generated by the formal derivatives of F (resp. the formal derivatives of F and F). This may be infinite, in which case Infinity is returned. The Tjurina number is infinite if an only if p is not an isolated singularity. The same is true for the Milnor number if the characteristic of k is 0. Note that the Milnor number can depend on the choice of F (F multiplied by any power series with non-zero constant term defines the same analytic hypersurface singularity) whereas the Tjurina number does not - it only depends on the ideal generated by F.

Example Scheme_an-hyp-sing-ex (H119E18)

We consider a singular degree 4 Del Pezzo surface in P4 over (Q) with two conjugate singular points defined over a quadratic extension.
> P4<x,y,z,t,u> := ProjectiveSpace(Rationals(),4);
> X := Scheme(P4,[x^2+y^2-2*z^2, x*t+t^2-y*u+2*u^2]);
> IsIrreducible(X);
true
> sngs := SingularSubscheme(X);
> Support(sngs);
> pts := PointsOverSplittingField(sngs);
> pts;
{@ (0 : 0 : 0 : r1 : 1), (0 : 0 : 0 : r2 : 1) @}
> pt := pts[1];
> k := Ring(Parent(pt));
> k;
Algebraically closed field with 2 variables over Rational Field
Defining relations:
[
    r2^2 + 2,
    r1^2 + 2
]
> p := X(k)!Eltseq(pt);
> boo,F,seq,dat := IsHypersurfaceSingularity(p,3);
> boo;
true
> R<a,b,c> := Parent(F);
> F;
2*r1*a*b^2 - 2*a^2*c - 3/2*r1*a*c^2 + 8*a^2 - 4*b^2 + 4*r1*a*c + c^2
> HypersurfaceSingularityExpandFurther(dat,4,R);
-a^4 - r1*a^3*c + 1/2*a^2*c^2 + 2*r1*a*b^2 - 2*a^2*c - 3/2*r1*a*c^2 +
	8*a^2 - 4*b^2 + 4*r1*a*c + c^2
> Rk<p,q,r,s,w> := PolynomialRing(k,5);
>  //can use Rk as base-changed coordinate ring here
> HypersurfaceSingularityExpandFunction(dat,(p^2+q*s)/w^2,3,R);
2*r1*a^3 - 3*a^2*c - 1/2*r1*a*c^2 + 4*a^2 + (2*r1 + 1)*a*c - 1/2*c^2 + r1*c
1
> // Both singularities are simple $A_1$ singularities which are
> // characterised by having Milnor number 1.
> MilnorNumberAnalyticHypersurface(dat);
1
V2.28, 13 July 2023