# Singular          #### D.4.2.6 is_injective

Procedure from library `algebra.lib` (see algebra_lib).

Usage:
is_injective(phi,pr[,c,s]); phi map, pr preimage ring, c int, s string

Return:
 ``` - 1 (type int) if phi is injective, 0 if not (if s is not given). - If s is given, return a list l of size 2, l int, l ring: l is 1 if phi is injective, 0 if not l is a ring with variables x(1),...,x(n),y(1),...,y(m) if the basering has n variables and the map m components, it contains the ideal 'ker', depending only on the y(i), the kernel of the given map ```

Note:
Three differnt algorithms are used depending on c = 1,2,3. If c is not given or c=0, a heuristically best method is chosen. The basering may be a quotient ring. However, if the preimage ring is a quotient ring, say pr = P/I, consider phi as a map from P and then the algorithm returns 1 if the kernel of phi is 0 mod I. To access to the ring l and see ker you must give the ring a name, e.g. def S=l; setring S; ker;

Display:
The above comment is displayed if printlevel >= 0 (default).

Example:
 ```LIB "algebra.lib"; int p = printlevel; ring r = 0,(a,b,c),ds; ring s = 0,(x,y,z,u,v,w),dp; ideal I = x-w,u2w+1,yz-v; map phi = r,I; // a map from r to s: is_injective(phi,r); // a,b,c ---> x-w,u2w+1,yz-v ==> 1 ring R = 0,(x,y,z),dp; ideal i = x, y, x2-y3; map phi = R,i; // a map from R to itself, z --> x2-y3 list l = is_injective(phi,R,""); ==> ==> // The 2nd element of the list is a ring with variables x(1),...,x(n), ==> // y(1),...,y(m) if the basering has n variables and the map is ==> // F,...,F[m]. ==> // It contains the ideal ker, the kernel of the given map y(i) --> F[i]. ==> // To access to the ring and see ker you must give the ring a name, ==> // e.g.: ==> def S = l; setring S; ker; ==> l; ==> 0 def S = l; setring S; ker; ==> ker=y(2)^3-y(1)^2+y(3) ```

### Misc 