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 P1 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) Starting isBirationalMap 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. o12 = false |
Also see the very fast probabilisitc birationality checking of the Cremona package: isBirational