# Singular          #### D.6.15.16 T_1

Procedure from library `sing.lib` (see sing_lib).

Usage:
T_1(id[,<any>]); id = ideal or poly

Return:
T_1(id): of type module/ideal if id is of type ideal/poly. We call T_1(id) the T_1-module of id. It is a std basis of the presentation of 1st order deformations of P/id, if P is the basering. If a second argument is present (of any type) return a list of 3 modules:
= T_1(id)
= generators of normal bundle of id, lifted to P
= module of relations of , lifted to P
(note: transpose*=0 mod id)
The list contains all non-easy objects which must be computed to get T_1(id).

Display:
k-dimension of T_1(id) if printlevel >= 0 (default)

Note:
T_1(id) itself is usually of minor importance. Nevertheless, from it all relevant information can be obtained. The most important are probably vdim(T_1(id)); (which computes the Tjurina number), hilb(T_1(id)); and kbase(T_1(id)).
If T_1 is called with two arguments, then matrix()*(kbase()) represents a basis of 1st order semiuniversal deformation of id (use proc 'deform', to get this in a direct way).
For a complete intersection the proc Tjurina is faster.

Example:
 ```LIB "sing.lib"; int p = printlevel; printlevel = 1; ring r = 32003,(x,y,z),(c,ds); ideal i = xy,xz,yz; module T = T_1(i); ==> // dim T_1 = 3 vdim(T); // Tjurina number = dim_K(T_1), should be 3 ==> 3 list L=T_1(i,""); ==> // dim T_1 = 3 module kB = kbase(L); print(matrix(L)*matrix(kB)); // basis of 1st order miniversal deformation ==> 0,0,0, ==> z,0,0, ==> 0,y,z show(L); // presentation of normal bundle ==> // module, 6 generator(s) ==> [x] ==> [y,z] ==> [0,x,y] ==> [0,z] ==> [0,0,y] ==> [0,0,z] print(L); // relations of i ==> z, 0, ==> -y,y, ==> 0, -x print(transpose(matrix(L))*matrix(L)); // should be 0 (mod i) ==> xz,0, -xy,-yz,0, 0, ==> 0, yz,0, yz, -xy,-xz printlevel = p; ```

### Misc 