# isEmbedding -- Checks whether a map of projective varieties is a closed embedding.

## Synopsis

• Usage:
val = isEmbedding(f)
val = isEmbedding(a,b,l)
val = isEmbedding(R,S,l)
• Inputs:
• a, an ideal, defining equations for X
• b, an ideal, defining equations for Y
• l, , projective rational map given by polynomial represenatives of the same degree
• f, , the ring map corresponding to $f : X \to Y$
• R, a ring, coordinate ring for X
• S, a ring, coordinate ring for Y
• Optional inputs:
• AssumeDominant => ..., default value false, If true, certain functions assume that the map from X to Y is dominant.
• CheckBirational => ..., default value true, If true, functions will check birationality.
• HybridLimit => ..., default value 15, An option to control HybridStrategy
• MinorsCount => ..., default value 0, 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 an embedding, otherwise false.

## Description

Given a map of rings, correspoing to $f : X \to Y$, this determines if this map embeds $X$ as a closed subscheme into $Y$. The target and source must be varieties, in particular their defining ideals must be prime. Consider the Veronese embedding.

 i1 : R = ZZ/7[x,y]; i2 : S = ZZ/7[a,b,c]; i3 : f = map(R, S, {x^2, x*y, y^2}); o3 : RingMap R <--- S i4 : isEmbedding(f, Verbose=>false) o4 = true

Now consider the projection from a point on the plane to the line at infinity.

 i5 : R=QQ[x,y,z]; i6 : S=QQ[a,b]; i7 : f=map(R, S, {y,z}); o7 : RingMap R <--- S i8 : isEmbedding(f, Verbose=>false) o8 = false

That is obviously not an embedding. It is even not an embedding when we restrict to a quadratic curve, even though it is a regular map.

 i9 : R=QQ[x,y,z]/(x^2+y^2-z^2); i10 : S=QQ[a,b]; i11 : f=map(R,S, {y,z}); o11 : RingMap R <--- S i12 : isRegularMap(f) o12 = true i13 : isEmbedding(f) isEmbedding: 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. isEmbedding: Checking to see if the map is a regular map isEmbedding: computing the inverse map Starting inverseOfMapSimis(SimisStrategy or HybridStrategy) inverseOfMapSimis: About to compute partial Groebner basis of rees ideal up to degree {1, 1}. inverseOfMapSimis: About to check rank, if this is very slow, you may try turning QuickRank=>false. inverseOfMapSimis: About to compute partial Groebner basis of rees ideal up to degree {1, 2}. inverseOfMapSimis: About to check rank, if this is very slow, you may try turning QuickRank=>false. inverseOfMapSimis: About to compute partial Groebner basis of rees ideal up to degree {1, 4}. inverseOfMapSimis: About to check rank, if this is very slow, you may try turning QuickRank=>false. inverseOfMapSimis: About to compute partial Groebner basis of rees ideal up to degree {1, 7}. inverseOfMapSimis: About to check rank, if this is very slow, you may try turning QuickRank=>false. inverseOfMapSimis: About to compute partial Groebner basis of rees ideal up to degree {1, 11}. inverseOfMapSimis: About to check rank, if this is very slow, you may try turning QuickRank=>false. inverseOfMapSimis: About to compute partial Groebner basis of rees ideal up to degree {1, 16}. inverseOfMapSimis: We give up. Using the previous computations, we compute the whole Groebner basis of the rees ideal. Increase HybridLimit and rerun to avoid this. isRankAtLeast: Going to single threaded version. o13 = false

If the option Verbose is set to true, the function will describe what it is doing at each step.

If the option AssumeDominant is set to true, the function won't compute the kernel of the ring map. Otherwise it will.

The remaining options, Strategy, HybridLimit, MinorsCount, and CheckBirational are simply passed when this function calls inverseOfMap. Note, this function, isEmbedding, will only behave properly if CheckBirational is set to true.

## Ways to use isEmbedding :

• "isEmbedding(Ideal,Ideal,BasicList)"
• "isEmbedding(Ring,Ring,BasicList)"
• "isEmbedding(RingMap)"

## For the programmer

The object isEmbedding is .