Macaulay2 » Documentation
Packages » Cremona :: abstractRationalMap
next | previous | forward | backward | up | index | toc

abstractRationalMap -- make an abstract rational map

Synopsis

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.000239305 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.138637 seconds

o5 = 2
i6 : time rationalMap psi
     -- used 0.381293 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 (Cremona transformation of PP^4 of type (3,2))
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.031473 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 1.11189 seconds

o15 = 3

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

i16 : time T2 = T * T
     -- used 0.000014844 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 1.79217 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 = {28963, 31975, -30172, 1}

o18 : List
i19 : q = T p

o19 = {31943, 16346, -1598, 1}

o19 : List
i20 : T q

o20 = {28963, 31975, -30172, 1}

o20 : List

We now compute the concrete rational map corresponding to T:

i21 : time f = rationalMap T
     -- used 1.63591 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 :

For the programmer

The object abstractRationalMap is a method function.