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
is free with generators
(isomorph to Pn)
and
(isomorph to Rn) is by definition the cokernel of the map
Let M be any finitely generated R-module . The M-dual of (1)
is
The module T1X/Kn(M) := HomR(I/I2,M) is called the module of first order embedded deformations of R with values in M. If M is ommitted, we define T1X:=T1X(R) as the module of first order deformations of X.
Remark: .
Applying
HomP(-,R) to (2), we get
Finally we get (keeping notations for B3 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