The functions in this section relate to the isomorphic projection of schemes in higher-dimensional projective spaces down to lower-dimensional ones. This is achieved through finding points in the ambient projective space which don't lie on either the tangent or secant varieties of the scheme. These varieties are interesting in their own right and we provide functions to compute them as subschemes of the ambient space or to test if a given point lies on them.
For a scheme X in affine or ordinary projective space over a field, the tangent variety TX is a subscheme of the ambient space whose set of closed points is the closure of the union of all tangent spaces of closed points of X. We do not worry if the TX that we construct is necessarily a reduced scheme or not. If X is non-reduced, TX probably won't be and will usually be of larger dimension than expected. If X is projective, the union of tangent spaces is already closed in the ambient space.
PatchIndex: RngIntElt Default: 0
The scheme X must be affine or ordinary projective. If X is projective, the tangent variety can be computed projectively but it is usually quicker to compute the result for an affine patch and then take the projective closure. If the parameter PatchIndex is set to i > 0 then in the projective case the function will do this, using the ith standard affine patch (see AffinePatch). This will give the correct result as long as no component of X lies in the hyperplane complement of the patch.
The computation of the full tangent variety can be quite time consuming except in small dimensional ambient spaces. If the dimension of the ambient space is n, it is effectively calculated as the image of a subscheme in a 2n-dimensional ambient under projection down to X's ambient space. However, this call gives a much faster way of testing if a particular point P in the ambient space lies in the tangent variety of the scheme X when X is projective.
> P<x,y,z,t> := ProjectiveSpace(RationalField(),3); > X := Scheme(P,[x*y+z*t,x^2-y^2+2*z^2-4*t^2]); > Dimension(X); 1 > time TangentVariety(X); Scheme over Rational Field defined by x^8 + 4*x^6*y^2 + 25/4*x^6*z^2 - 25/2*x^6*t^2 + 44*x^5*y*z*t + 6*x^4*y^4 + 25/4*x^4*y^2*z^2 - 25/2*x^4*y^2*t^2 + 27/2*x^4*z^4 - 193/8*x^4*z^2*t^2 + 54*x^4*t^4 + 88*x^3*y^3*z*t + 275/2*x^3*y*z^3*t - 275*x^3*y*z*t^3 + 4*x^2*y^6 - 25/4*x^2*y^4*z^2 + 25/2*x^2*y^4*t^2 - 67/2*x^2*y^2*z^4 + 2025/4*x^2*y^2*z^2*t^2 - 134*x^2*y^2*t^4 + 11*x^2*z^6 + 22*x^2*z^4*t^2 - 44*x^2*z^2*t^4 - 88*x^2*t^6 + 44*x*y^5*z*t - 275/2*x*y^3*z^3*t + 275*x*y^3*z*t^3 + 50*x*y*z^5*t + 200*x*y*z^3*t^3 + 200*x*y*z*t^5 + y^8 - 25/4*y^6*z^2 + 25/2*y^6*t^2 + 27/2*y^4*z^4 - 193/8*y^4*z^2*t^2 + 54*y^4*t^4 - 11*y^2*z^6 - 22*y^2*z^4*t^2 + 44*y^2*z^2*t^4 + 88*y^2*t^6 + 2*z^8 + 16*z^6*t^2 + 48*z^4*t^4 + 64*z^2*t^6 + 32*t^8 Time: 0.440 > time TangentVariety(X: PatchIndex := 4); Scheme over Rational Field defined by x^8 + 4*x^6*y^2 + 25/4*x^6*z^2 - 25/2*x^6*t^2 + 44*x^5*y*z*t + 6*x^4*y^4 + 25/4*x^4*y^2*z^2 - 25/2*x^4*y^2*t^2 + 27/2*x^4*z^4 - 193/8*x^4*z^2*t^2 + 54*x^4*t^4 + 88*x^3*y^3*z*t + 275/2*x^3*y*z^3*t - 275*x^3*y*z*t^3 + 4*x^2*y^6 - 25/4*x^2*y^4*z^2 + 25/2*x^2*y^4*t^2 - 67/2*x^2*y^2*z^4 + 2025/4*x^2*y^2*z^2*t^2 - 134*x^2*y^2*t^4 + 11*x^2*z^6 + 22*x^2*z^4*t^2 - 44*x^2*z^2*t^4 - 88*x^2*t^6 + 44*x*y^5*z*t - 275/2*x*y^3*z^3*t + 275*x*y^3*z*t^3 + 50*x*y*z^5*t + 200*x*y*z^3*t^3 + 200*x*y*z*t^5 + y^8 - 25/4*y^6*z^2 + 25/2*y^6*t^2 + 27/2*y^4*z^4 - 193/8*y^4*z^2*t^2 + 54*y^4*t^4 - 11*y^2*z^6 - 22*y^2*z^4*t^2 + 44*y^2*z^2*t^4 + 88*y^2*t^6 + 2*z^8 + 16*z^6*t^2 + 48*z^4*t^4 + 64*z^2*t^6 + 32*t^8 Time: 0.040 > time IsInTangentVariety(X,P![1,2,3,4]); false Time: 0.000
For a scheme X in affine or ordinary projective space over a field, the secant variety SX is a subscheme of the ambient space whose set of closed points is the closure of the union of all lines joining distinct pairs of closed points of X (secants). Again, we do not worry if the SX that we construct is necessarily a reduced scheme or not. Note that the union of all secants is not necessarily a closed subset of the ambient space even when X is projective.
PatchIndex: RngIntElt Default: 0
The scheme X must be affine or ordinary projective. In the projective case we construct SX by taking the projective closure of the result for an appropriate affine patch (intersecting every component of X). For simplicity, we currently only consider standard affine patchs so the function will fail for X projective if it has components lying in every standard hyperplane. As for TangentVariety, if the parameter PatchIndex is set to i > 0 then the ith standard affine patch will be the one used and this saves a little time, avoiding a search. Effectively, the computation consists of finding the image of a subscheme in a projection from a 2n + 1 dimensional ambient space down to the (n dimensional) ambient space of X and can be quite lengthy.
Again as in the tangent variety case, if the scheme X is projective, this call gives a much faster way of testing if a given ambient point P lies in SX than computing the whole of SX with SecantVariety. To be precise, this call actually tells you whether or not P lies in the union of secants rather than its closure SX. Additionally, affine patchs are not used, so the above restriction on validity doesn't apply.
> P<a,b,c,d,e> := ProjectiveSpace(RationalField(),4); > X := Scheme(P,[a*d + c*e, a*c + d*e, > a^2 - e^2, c^2*e - d^2*e, > b^2 + c*d + e^2]); // union of 3 irreducible curves > Dimension(X); 1 > time SecantVariety(X : PatchIndex := 2); Scheme over Rational Field defined by a^4*b^2 + a^4*e^2 - a^3*c^2*e - a^3*d^2*e + a^2*b^4 + 2*a^2*b^2*c*d + 1/4*a^2*c^4 + 1/2*a^2*c^2*d^2 + 1/4*a^2*d^4 - a^2*e^4 + a*c^2*e^3 + a*d^2*e^3 - b^4*e^2 - 2*b^2*c*d*e^2 - b^2*e^4 - 1/4*c^4*e^2 - 1/2*c^2*d^2*e^2 - 1/4*d^4*e^2 Time: 26.890 > Dimension($1); 3 > time IsInSecantVariety(X,P![0,1,0,-3,0]); true Time: 0.000
The aim of the functions here is to try to find embeddings of projective schemes which lie in high-dimensional ambient spaces into lower dimensional spaces via projection.
Let X be a scheme in ordinary projective space that is assumed to be reduced but not necessarily irreducible or non-singular, d the dimension of X and n the dimension of its ambient space P. The conditions imply that the tangent variety and secant variety of X are finite unions of subschemes of dimension at most 2d + 1 (cf [Har77] IV.3), so while n > 2d + 1, we can find points in P lying in neither of these, unless possibly the base field is a finite field. For such a point, projection down to a hyperplane gives an isomorphism of X to its image (cf. op. cit.) and we can continue projecting down one dimension at a time until n = 2d + 1.
In fact, the tangent and secant varieties of the image of X will be their images under the projection also, which induces a finite map on them (it's quasi-finite since the inverse image of a point in the image hyperplane is a line through the projecting point pt, which any (closed) subscheme not containing pt must intersect finitely). Hence their images have the same dimensions. If the maximum of these dimensions is tsd ≤2d + 1 we can actually project down to a subspace of dimension tsd. Further, the fact that the tangent and secant images correspond under projection shows that if we find a linear change of variables for the coordinates of P, (x1, ..., xn) -> (y1, ..., yn), such that y1, ..., ytsd are a set of Noether normalising variables for the defining ideal of the union of the tangent and secant varieties in the coordinate ring of P, then we can project X isomorphically down to the tsd dimensional linear subspace ytsd + 1=0, ..., yn=0 directly.
This would be the most elegant solution. However, in practice it involves computing the full tangent and secant varieties which can be extremely time-consuming once we are in dimensions above around 3 or 4. By contrast, checking if a random point of P lies in the secant or tangent variety is reasonably fast. Therefore, we choose to follow the method of picking random points to project down one dimension at a time and finish when we reach dimension 2d + 1 (when the secant variety generally fills the ambient space anyway).
SetVerbose("IsoToSub", n): Maximum: 1
As described above, this function projects the scheme X isomorphically down to a linear subspace of its ambient space P of dimension 2d + 1, if 2d + 1 < n. In the case of finite base fields or infinite ones of small characteristic, the process may stop before reaching this dimension but this should be very rare (difficulties finding random points outside the secant/tangent varieties). The return values consist of the image scheme, with the subspace as its ambient space, and the explicit map taking X to this image.
SetVerbose("EmbCrv", n): Maximum: 1
This function embeds a plane curve C as a non-singular projective curve in ordinary 2- or 3-dimensional projective space over the base field. This is effected by first using the function field machinery to give a non-singular projective embedding and then projecting down to a 3-dimensional subspace if necessary. In rare cases with small finite base fields or in small characteristic, the final embedding may still be into a higher-dimensional ambient space. The image scheme is returned along with the mapping of C to it.
> P<x,y,z> := ProjectiveSpace(RationalField(),2); > f := x^5+x^2*y^3+y^2*z^3+x^2*z^3-y*z^4-z^5; > C := Curve(P,f); > Genus(C); 5 > SetVerbose("IsoToSub",1); > SetVerbose("EmbCrv",1); > C1, mp := EmbedPlaneCurveInP3(C); Curve of genus 5. Mapping to 4-space by canonical divisor map Map was an embedding (non-hyperelliptic curve). Beginning projection to 3-space. Projection from dimension 4 to dimension 3: Finding good projection point... Performing projection... Time: 0.002 > P1 := AmbientSpace(C1); > AssignNames(~P1,["a","b","c","d"]); > C1; Scheme over Rational Field defined by a^2*d^3 + a*b^2*c*d - a*b*c^2*d + a*b*d^3 + a*c^2*d^2 - a*d^4 + b^5 + b^2*c^3 - b^2*c*d^2 - b^2*d^3 + 2*b*d^4 - c^2*d^3 - d^5, a^2*c*d + a*b^3 + a*c^3 - a*c*d^2 + b*c*d^2 - c*d^3, a*b^2*d - a*b*d^2 + a*c^2*d + b^3*c + c^4 - c^2*d^2, a^3*d + a^2*c^2 - a^2*d^2 + a*b*d^2 - a*d^3 + b^2*c*d, a^2*b - c^2*d > Dimension(C1); 1 > ArithmeticGenus(C1); 5 > IsNonsingular(C1); true