abstractRationalMap -- make an abstract rational map

Synopsis

• Usage:
abstractRationalMap(R,S,f,d)
abstractRationalMap(R,S,f)
• Inputs:
• R, , the coordinate ring of the source of the map
• S, , the coordinate ring of the target of the map
• f, , the abstract definition of the map
• d, an integer, (optional) an integer close to the degree of the forms defining the map
• Outputs:
• , the abstract rational map from Proj(R) to Proj(S) defined by f

Description

The main ingredient behind this method is the interpolation of multivariate polynomials. We illustrate this feature with some examples.

 i1 : f = a -> {-a_1^3*max(sin(a_2),1)+a_0*a_1*a_2*ceiling((log(1 + abs a_0))^0),-a_1^2*a_2+a_0*a_1*a_3,-a_1*a_2^2+a_1^2*a_3,-a_1^2*a_3+a_0*a_1*a_4,-a_1*a_2*a_3+a_1^2*a_4,-a_1*a_3^2+a_1*a_2*a_4} o1 = f o1 : FunctionClosure i2 : P4 := QQ[t_0..t_4] o2 = QQ[t ..t ] 0 4 o2 : PolynomialRing i3 : P5 := QQ[u_0..u_5] o3 = QQ[u ..u ] 0 5 o3 : PolynomialRing i4 : time psi = abstractRationalMap(P4,P5,f) -- used 0.000331038 seconds o4 = -- rational map -- source: Proj(QQ[t , t , t , t , t ]) 0 1 2 3 4 target: Proj(QQ[u , u , u , u , u , u ]) 0 1 2 3 4 5 defining forms: given by a function o4 : AbstractRationalMap (rational map from PP^4 to PP^5)

Now we compute first the degree of the forms defining the abstract map psi and then the corresponding concrete rational map.

 i5 : time projectiveDegrees(psi,3) -- used 0.379584 seconds o5 = 2 i6 : time rationalMap psi -- used 1.71306 seconds o6 = -- rational map -- source: Proj(QQ[t , t , t , t , t ]) 0 1 2 3 4 target: Proj(QQ[u , u , u , u , u , u ]) 0 1 2 3 4 5 defining forms: { 2 t - t t , 1 0 2 t t - t t , 1 2 0 3 2 t - t t , 2 1 3 t t - t t , 1 3 0 4 t t - t t , 2 3 1 4 2 t - t t 3 2 4 } o6 : RationalMap (quadratic rational map from PP^4 to PP^5)

As a second example, we apply the method to compute the inverse of a Cremona transformation.

 i7 : phi = rationalMap map specialCremonaTransformation(3,ZZ/10000019); o7 : RationalMap (cubic rational map from PP^4 to PP^4) i8 : phi' = abstractRationalMap phi o8 = -- rational map -- ZZ source: Proj(--------[x , x , x , x , x ]) 10000019 0 1 2 3 4 ZZ target: Proj(--------[x , x , x , x , x ]) 10000019 0 1 2 3 4 defining forms: given by a function (degree = 3) o8 : AbstractRationalMap (rational map from PP^4 to PP^4) i9 : psi' = inverseMap phi' o9 = -- rational map -- ZZ source: Proj(--------[x , x , x , x , x ]) 10000019 0 1 2 3 4 ZZ target: Proj(--------[x , x , x , x , x ]) 10000019 0 1 2 3 4 defining forms: given by a function o9 : AbstractRationalMap (rational map from PP^4 to PP^4) i10 : psi = rationalMap psi'; o10 : RationalMap (quadratic rational map from PP^4 to PP^4) i11 : assert(isInverseMap(phi,psi))

We now consider a more interesting application. Recall that a closed subvariety $X\subset\mathbb{P}^n$ is called a subvariety with one apparent double point if a general point in $\mathbb{P}^n$ lies on a unique secant of $X$. A subvariety $X\subset\mathbb{P}^n$ with an apparent double point defines a Cremona involution of $\mathbb{P}^n$: for a general point $x\in\mathbb{P}^n$ we find a unique secant of $X$ intersecting $X$ at two points $(a,b)$, and then define the unique $T(x)$ such that the pair $\{x,T(x)\}$ is harmonically conjugate to $\{a,b\}$. For more details, see Lecture 4 in Lectures on Cremona transformations, by I. Dolgachev. This abstract construction is implemented in the package: if I is the ideal of one apparent double point variety $X\subset\mathbb{P}^n$, then the command abstractRationalMap(I,"OADP") returns the abstract rational map above defined. For instance, we can take $X$ to be the twisted cubic curve in $\mathbb{P}^3$.

 i12 : ZZ/65521[x_0..x_3]; I = minors(2,matrix{{x_0,x_1,x_2},{x_1,x_2,x_3}}) 2 2 o13 = ideal (- x + x x , - x x + x x , - x + x x ) 1 0 2 1 2 0 3 2 1 3 ZZ o13 : Ideal of -----[x ..x ] 65521 0 3 i14 : time T = abstractRationalMap(I,"OADP") -- used 0.0817702 seconds o14 = -- rational map -- ZZ source: Proj(-----[x , x , x , x ]) 65521 0 1 2 3 ZZ target: Proj(-----[x , x , x , x ]) 65521 0 1 2 3 defining forms: given by a function o14 : AbstractRationalMap (rational map from PP^3 to PP^3)

The degree of the forms defining the abstract map T can be obtained by the following command:

 i15 : time projectiveDegrees(T,2) -- used 3.22836 seconds o15 = 3

We verify that the composition of T with itself is defined by linear forms:

 i16 : time T2 = T * T -- used 0.000034033 seconds o16 = -- rational map -- ZZ source: Proj(-----[x , x , x , x ]) 65521 0 1 2 3 ZZ target: Proj(-----[x , x , x , x ]) 65521 0 1 2 3 defining forms: given by a function o16 : AbstractRationalMap (rational map from PP^3 to PP^3) i17 : time projectiveDegrees(T2,2) -- used 5.30085 seconds o17 = 1

We verify that the composition of T with itself leaves a random point fixed:

 i18 : p = apply(3,i->random(ZZ/65521))|{1} o18 = {-22864, 24353, -19331, 1} o18 : List i19 : q = T p o19 = {9593, 20475, 5910, 1} o19 : List i20 : T q o20 = {-22864, 24353, -19331, 1} o20 : List

We now compute the concrete rational map corresponding to T:

 i21 : time f = rationalMap T -- used 3.68487 seconds o21 = -- rational map -- ZZ source: Proj(-----[x , x , x , x ]) 65521 0 1 2 3 ZZ target: Proj(-----[x , x , x , x ]) 65521 0 1 2 3 defining forms: { 3 2 - x - 32759x x x + 32760x x , 1 0 1 2 0 3 2 2 32760x x + x x + 32760x x x , 1 2 0 2 0 1 3 2 2 - 32760x x - x x - 32760x x x , 1 2 1 3 0 2 3 3 2 x + 32759x x x - 32760x x 2 1 2 3 0 3 } o21 : RationalMap (cubic rational map from PP^3 to PP^3) i22 : describe f! o22 = rational map defined by forms of degree 3 source variety: PP^3 target variety: PP^3 dominance: true birationality: true (the inverse map is already calculated) projective degrees: {1, 3, 3, 1} number of minimal representatives: 1 dimension base locus: 1 degree base locus: 6 coefficient ring: ZZ/65521

Caveat

This is under development yet.

Ways to use abstractRationalMap :

• "abstractRationalMap(PolynomialRing,PolynomialRing,FunctionClosure)"
• "abstractRationalMap(PolynomialRing,PolynomialRing,FunctionClosure,ZZ)"
• "abstractRationalMap(RationalMap)"

For the programmer

The object abstractRationalMap is .