This checks if a map between projective varieties is birational. There are a number of ways to call this. A simple one is to pass the function a map between two graded rings. In this case, the variables should be sent to elements of a single fixed degree. The option AssumeDominant being true will cause the function to assume that the kernel of the associated ring map is zero (default value is false). The target and source must be varieties, in particular their defining ideals must be prime. Let's check that the plane quadratic cremona transformation is birational.
i1 : R=QQ[x,y,z]; |
i2 : S=QQ[a,b,c]; |
i3 : Pi = map(R, S, {x*y, x*z, y*z}); o3 : RingMap R <--- S |
i4 : isBirationalMap(Pi, Verbose=>false, Strategy=>SimisStrategy ) o4 = true |
We can also verify that a cover of $P^1$ by an elliptic curve is not birational.
i5 : R=QQ[x,y,z]/(x^3+y^3-z^3); |
i6 : S=QQ[s,t]; |
i7 : Pi = map(R, S, {x, y-z}); o7 : RingMap R <--- S |
i8 : isBirationalMap(Pi, Verbose=>false) o8 = false |
Note the Frobenius map is not birational.
i9 : R = ZZ/5[x,y,z]/(x^3+y^3-z^3); |
i10 : S = ZZ/5[a,b,c]/(a^3+b^3-b^3); |
i11 : h = map(R, S, {x^5, y^5, z^5}); o11 : RingMap R <--- S |
i12 : isBirationalMap(h, Strategy=>SaturationStrategy) isBirationalMap: About to find the image of the map. If you know the image, you may want to use the AssumeDominant option if this is slow. isBirationalMap: Found the image of the map. Starting isBirationalOntoImage isBirationalOntoImageRees: About to compute the Jacobian Dual Matrix, if it is slow, run again and set Strategy=>HybridStrategy or SimisStrategy. isBirationalOntoImageRees: computed Jacobian Dual Matrix- barJD Jacobain dual matrix has 3 columns and 0 rows. isBirationalOntoImageRees: is computing the rank of the Jacobian Dual Matrix- barJD o12 = false |
Also see the very fast probabilisitc birationality checking of the Cremona package: isBirational
The object isBirationalMap is a method function with options.