# isBirationalMap -- Checks if a map between projective varieties is birational.

## Synopsis

• Usage:
val = isBirationalMap(a,b,f)
val = isBirationalMap(R,S,f)
val = isBirationalMap(Pi)
• Inputs:
• a, an ideal, defining equations for X
• b, an ideal, defining equations for Y
• f, , A list of where to send the variables in the ring of b, to in the ring of a.
• R, a ring, the homogeneous coordinate ring of X
• S, a ring, the homogeneous coordinate ring of Y
• Pi, , A ring map S to R corresponding to X mapping to Y
• Optional inputs:
• AssumeDominant => ..., default value false, If true, certain functions assume that the map from X to Y is dominant.
• HybridLimit => ..., default value 15, An option to control HybridStrategy
• MinorsCount => ..., default value null, An option controlling the behavior of isBirational and inverseOfMap (and other functions which call those).
• QuickRank => ..., default value true, An option for computing how rank is computed
• Strategy => ..., default value HybridStrategy, Determines the desired Strategy in each function.
• Verbose => ..., default value true, generate informative output
• Outputs:
• val, , true if the map is birational, false if otherwise

## Description

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

## Caveat

Also see the very fast probabilisitc birationality checking of the Cremona package: isBirational