This section and the corresponding SINGULAR procedure is
a joint work of G.M. Greuel and B.Martin.

Let
be given by the ideal
and *R*=*P*/*I*.

Consider the canonical exact sequence

where denotes the module of Kähler differentials and

is free with generators
(isomorph to *P*^{n})
and
(isomorph to *R*^{n}) is by definition the cokernel of the map

Let *M* be any finitely generated *R*-module . The *M*-dual of (1)
is

where is the module of the

The module
*T*^{1}_{X/Kn}(*M*) := *Hom*_{R}(*I*/*I*^{2},*M*) is called the **module of
first order embedded deformations**
of *R* with values in *M*.
If *M* is ommitted, we define
*T*^{1}_{X}:=*T*^{1}_{X}(*R*)
as the **module of first order deformations of ***X*.

Remark: .

We note that for any

Hence, choosing as a basis of and the canonical basis of

where is given by the Jacobian matrix (

as defining sequence of

Applying
*Hom*_{P}(-,*R*) to (2), we get

where

together with the (induced by the Jacobian

Finally we get (keeping notations for *B*_{3} and *L* when lifted to *P*)

SINGULAR example:
a complete version can be found in the SINGULAR library `sing.lib`.

ideal I=f1,...,fk; list A=res(I,2); //compute the presentation (4) of I module A'=transpose(A[2]); //A*=transposed 1st syzygy module of I module jac=jacob(I); //jacobian matrix of I (as module) // So far we are in the polynomial ring P, now we pass to the qring R=P/I: qring R=std(I); //defines the quotient ring R=P/I module A'=fetch(P,A'); //map A* to R module J=fetch(P,jac); //map jac to R list B=res(A',3); //compute the exact sequence (7) module t1=lift(B[2],jac)+B[3]; //im(L)+im(B3) int r=rank(t1); //compute the rank r // Hence T1_X = R^r/t1 as R-module. (see (9)) // Now we pass back to the original basering P: setring P; //makes P the basering module t1 = fetch(R,t1)+J*freemodule(r); //im(L)+im(B3)+J*P^r=:T1 fetch(R,B(2)); // (generators of) normal bundle fetch(R,B(3)); // presentation of normal bundle