@c ---content LibInfo---
@comment This file was generated by doc2tex.pl from d2t_singular/sing_lib.doc
@comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/sing_lib.doc INSTEAD
@c library version: (1.24.2.5,2003/04/15)
@c library file: ../Singular/LIB/sing.lib
@cindex sing.lib
@cindex sing_lib
@table @asis
@item @strong{Library:}
sing.lib
@item @strong{Purpose:}
      Invariants of Singularities
@item @strong{Authors:}
Gert-Martin Greuel, email: greuel@@mathematik.uni-kl.de @*
Bernd Martin, email: martin@@math.tu-cottbus.de

@end table

@strong{Procedures:}
@menu
* deform:: infinitesimal deformations of ideal i
* dim_slocus:: dimension of singular locus of ideal i
* is_active:: is poly f an active element mod id? (id ideal/module)
* is_ci:: is ideal i a complete intersection?
* is_is:: is ideal i an isolated singularity?
* is_reg:: is poly f a regular element mod id? (id ideal/module)
* is_regs:: are gen's of ideal i regular sequence modulo id?
* locstd:: SB for local degree ordering without cancelling units
* milnor:: milnor number of ideal i; (assume i is ICIS in nf)
* nf_icis:: generic combinations of generators; get ICIS in nf
* slocus:: ideal of singular locus of ideal i
* qhspectrum:: spectrum numbers of w-homogeneous polynomial f
* Tjurina:: SB of Tjurina module of ideal i (assume i is ICIS)
* tjurina:: Tjurina number of ideal i (assume i is ICIS)
* T_1:: T^1-module of ideal i
* T_2:: T^2-module of ideal i
* T_12:: T^1- and T^2-module of ideal i
* tangentcone:: compute tangent cone of id
@end menu
@c ---end content LibInfo---

@c ------------------- deform -------------
@node deform, dim_slocus,, sing_lib
@subsubsection deform
@cindex deform
@c ---content deform---
Procedure from library @code{sing.lib} (@pxref{sing_lib}).

@table @asis
@item @strong{Usage:}
deform(id); id=ideal or poly

@item @strong{Return:}
matrix, columns are kbase of infinitesimal deformations

@end table
@strong{Example:}
@smallexample
@c computed example deform d2t_singular/sing_lib.doc:57 
LIB "sing.lib";
ring r   = 32003,(x,y,z),ds;
ideal i  = xy,xz,yz;
matrix T = deform(i);
print(T);
@expansion{} x,0,0,
@expansion{} 0,0,z,
@expansion{} 0,y,0 
print(deform(x3+y5+z2));
@expansion{} xy3,y3,xy2,y2,xy,y,x,1
@c end example deform d2t_singular/sing_lib.doc:57
@end smallexample
@c ---end content deform---

@c ------------------- dim_slocus -------------
@node dim_slocus, is_active, deform, sing_lib
@subsubsection dim_slocus
@cindex dim_slocus
@c ---content dim_slocus---
Procedure from library @code{sing.lib} (@pxref{sing_lib}).

@table @asis
@item @strong{Usage:}
dim_slocus(i); i ideal or poly

@item @strong{Return:}
dimension of singular locus of i

@end table
@strong{Example:}
@smallexample
@c computed example dim_slocus d2t_singular/sing_lib.doc:85 
LIB "sing.lib";
ring r  = 32003,(x,y,z),ds;
ideal i = x5+y6+z6,x2+2y2+3z2;
dim_slocus(i);
@expansion{} 0
@c end example dim_slocus d2t_singular/sing_lib.doc:85
@end smallexample
@c ---end content dim_slocus---

@c ------------------- is_active -------------
@node is_active, is_ci, dim_slocus, sing_lib
@subsubsection is_active
@cindex is_active
@c ---content is_active---
Procedure from library @code{sing.lib} (@pxref{sing_lib}).

@table @asis
@item @strong{Usage:}
is_active(f,id); f poly, id ideal or module

@item @strong{Return:}
1 if f is an active element modulo id (i.e. dim(id)=dim(id+f*R^n)+1,
if id is a submodule of R^n) resp. 0 if f is not active.
The basering may be a quotient ring

@item @strong{Note:}
regular parameters are active but not vice versa (id may have embedded
components). proc is_reg tests whether f is a regular parameter

@end table
@strong{Example:}
@smallexample
@c computed example is_active d2t_singular/sing_lib.doc:117 
LIB "sing.lib";
ring r   =32003,(x,y,z),ds;
ideal i  = yx3+y,yz3+y3z;
poly f   = x;
is_active(f,i);
@expansion{} 1
qring q  = std(x4y5);
poly f   = x;
module m = [yx3+x,yx3+y3x];
is_active(f,m);
@expansion{} 0
@c end example is_active d2t_singular/sing_lib.doc:117
@end smallexample
@c ---end content is_active---

@c ------------------- is_ci -------------
@node is_ci, is_is, is_active, sing_lib
@subsubsection is_ci
@cindex is_ci
@c ---content is_ci---
Procedure from library @code{sing.lib} (@pxref{sing_lib}).

@table @asis
@item @strong{Usage:}
is_ci(i); i ideal

@item @strong{Return:}
intvec = sequence of dimensions of ideals (j[1],...,j[k]), for
k=1,...,size(j), where j is minimal base of i. i is a complete
intersection if last number equals nvars-size(i)

@item @strong{Note:}
dim(0-ideal) = -1. You may first apply simplify(i,10); in order to
delete zeroes and multiples from set of generators
@*printlevel >=0: display comments (default)

@end table
@strong{Example:}
@smallexample
@c computed example is_ci d2t_singular/sing_lib.doc:155 
LIB "sing.lib";
int p      = printlevel;
printlevel = 1;                // display comments
ring r     = 32003,(x,y,z),ds;
ideal i    = x4+y5+z6,xyz,yx2+xz2+zy7;
is_ci(i);
@expansion{} // complete intersection of dim 0
@expansion{} // dim-sequence:
@expansion{} 2,1,0
i          = xy,yz;
is_ci(i);
@expansion{} // no complete intersection
@expansion{} // dim-sequence:
@expansion{} 2,2
printlevel = p;
@c end example is_ci d2t_singular/sing_lib.doc:155
@end smallexample
@c ---end content is_ci---

@c ------------------- is_is -------------
@node is_is, is_reg, is_ci, sing_lib
@subsubsection is_is
@cindex is_is
@c ---content is_is---
Procedure from library @code{sing.lib} (@pxref{sing_lib}).

@table @asis
@item @strong{Usage:}
is_is(id); id ideal or poly

@item @strong{Return:}
intvec = sequence of dimensions of singular loci of ideals
generated by id[1]..id[i], k = 1..size(id); @*
dim(0-ideal) = -1;
@*id defines an isolated singularity if last number is 0

@item @strong{Note:}
printlevel >=0: display comments (default)

@end table
@strong{Example:}
@smallexample
@c computed example is_is d2t_singular/sing_lib.doc:192 
LIB "sing.lib";
int p      = printlevel;
printlevel = 1;
ring r     = 32003,(x,y,z),ds;
ideal i    = x2y,x4+y5+z6,yx2+xz2+zy7;
is_is(i);
@expansion{} // dim of singular locus = 0
@expansion{} // isolated singularity if last number is 0 in dim-sequence:
@expansion{} 2,1,0
poly f     = xy+yz;
is_is(f);
@expansion{} // dim of singular locus = 1
@expansion{} // isolated singularity if last number is 0 in dim-sequence:
@expansion{} 1
printlevel = p;
@c end example is_is d2t_singular/sing_lib.doc:192
@end smallexample
@c ---end content is_is---

@c ------------------- is_reg -------------
@node is_reg, is_regs, is_is, sing_lib
@subsubsection is_reg
@cindex is_reg
@c ---content is_reg---
Procedure from library @code{sing.lib} (@pxref{sing_lib}).

@table @asis
@item @strong{Usage:}
is_reg(f,id); f poly, id ideal or module

@item @strong{Return:}
1 if multiplication with f is injective modulo id, 0 otherwise

@item @strong{Note:}
let R be the basering and id a submodule of R^n. The procedure checks
injectivity of multiplication with f on R^n/id. The basering may be a
quotient ring

@end table
@strong{Example:}
@smallexample
@c computed example is_reg d2t_singular/sing_lib.doc:228 
LIB "sing.lib";
ring r  = 32003,(x,y),ds;
ideal i = x8,y8;
ideal j = (x+y)^4;
i       = intersect(i,j);
poly f  = xy;
is_reg(f,i);
@expansion{} 0
@c end example is_reg d2t_singular/sing_lib.doc:228
@end smallexample
@c ---end content is_reg---

@c ------------------- is_regs -------------
@node is_regs, locstd, is_reg, sing_lib
@subsubsection is_regs
@cindex is_regs
@c ---content is_regs---
Procedure from library @code{sing.lib} (@pxref{sing_lib}).

@table @asis
@item @strong{Usage:}
is_regs(i[,id]); i poly, id ideal or module (default: id=0)

@item @strong{Return:}
1 if generators of i are a regular sequence modulo id, 0 otherwise

@item @strong{Note:}
let R be the basering and id a submodule of R^n. The procedure checks
injectivity of multiplication with i[k] on R^n/id+i[1..k-1].
The basering may be a quotient ring
@*printlevel >=0: display comments (default)
@*printlevel >=1: display comments during computation

@end table
@strong{Example:}
@smallexample
@c computed example is_regs d2t_singular/sing_lib.doc:264 
LIB "sing.lib";
int p      = printlevel;
printlevel = 1;
ring r1    = 32003,(x,y,z),ds;
ideal i    = x8,y8,(x+y)^4;
is_regs(i);
@expansion{} // checking whether element 1 is regular mod 1 .. 0
@expansion{} // checking whether element 2 is regular mod 1 .. 1
@expansion{} // checking whether element 3 is regular mod 1 .. 2
@expansion{} // elements 1..2 are regular, 3 is not regular mod 1..2
@expansion{} 0
module m   = [x,0,y];
i          = x8,(x+z)^4;;
is_regs(i,m);
@expansion{} // checking whether element 1 is regular mod 1 .. 0
@expansion{} // checking whether element 2 is regular mod 1 .. 1
@expansion{} // elements are a regular sequence of length 2
@expansion{} 1
printlevel = p;
@c end example is_regs d2t_singular/sing_lib.doc:264
@end smallexample
@c ---end content is_regs---

@c ------------------- locstd -------------
@node locstd, milnor, is_regs, sing_lib
@subsubsection locstd
@cindex locstd
@c ---content locstd---
Procedure from library @code{sing.lib} (@pxref{sing_lib}).

@table @asis
@item @strong{Usage:}
locstd (id); id = ideal

@item @strong{Return:}
a standard basis for a local degree ordering

@item @strong{Note:}
the procedure homogenizes id w.r.t. a new 1st variable @@t@@, computes
a SB wrt (dp(1),dp) and substitutes @@t@@ by 1.
@*Hence the result is a SB with respect to an ordering which sorts
first w.r.t. the order and then refines it with dp. This is a
local degree ordering.
@*This is done in order to avoid cancellation of units and thus
be able to use option(contentSB);

@end table
@strong{Example:}
@smallexample
@c computed example locstd d2t_singular/sing_lib.doc:305 
LIB "sing.lib";
ring R = 0,(x,y,z),ds;
ideal i  = xyz+z5,2x2+y3+z7,3z5+y5;
locstd(i);
@expansion{} _[1]=y5+3z5
@expansion{} _[2]=3x4y3z8-4x3y3z9+6x2y4z9+3y5z10
@expansion{} _[3]=3x4z13-4x3z14+6x2yz14+3y2z15
@expansion{} _[4]=3x4yz12-4x3yz13+6x2y2z13+3y3z14
@expansion{} _[5]=2x2z9+x2y2z8+y3z9
@expansion{} _[6]=2x2y4z5+y7z5-3x2yz9
@expansion{} _[7]=6y2z10-3x2y3z8+4xy3z9-3y4z9
@expansion{} _[8]=3x2y2z8+3y3z9+2xy4z8
@expansion{} _[9]=18z14-4xy6z8+3y7z8-9x2yz12
@expansion{} _[10]=xyz+z5
@expansion{} _[11]=3xz6-y4z5
@expansion{} _[12]=3y3z6+2xy4z5-3xyz9
@expansion{} _[13]=y4z5-2xz9-xy2z8
@expansion{} _[14]=3z10+2xyz9+xy3z8
@expansion{} _[15]=2x2z5+y3z5-xyz8
@expansion{} _[16]=y4z-2xz5+yz8
@expansion{} _[17]=3z6+2xyz5-y2z8
@expansion{} _[18]=2x2+y3+z7
@c end example locstd d2t_singular/sing_lib.doc:305
@end smallexample
@c ---end content locstd---

@c ------------------- milnor -------------
@node milnor, nf_icis, locstd, sing_lib
@subsubsection milnor
@cindex milnor
@c ---content milnor---
Procedure from library @code{sing.lib} (@pxref{sing_lib}).

@table @asis
@item @strong{Usage:}
milnor(i); i ideal or poly

@item @strong{Return:}
Milnor number of i, if i is ICIS (isolated complete intersection
singularity) in generic form, resp. -1 if not

@item @strong{Note:}
use proc nf_icis to put generators in generic form
@*printlevel >=0: display comments (default)

@end table
@strong{Example:}
@smallexample
@c computed example milnor d2t_singular/sing_lib.doc:336 
LIB "sing.lib";
int p      = printlevel;
printlevel = 1;
ring r     = 32003,(x,y,z),ds;
ideal j    = x5+y6+z6,x2+2y2+3z2,xyz+yx;
milnor(j);
@expansion{} //sequence of discriminant numbers: 100,149,70
@expansion{} 21
poly f     = x7+y7+(x-y)^2*x2y2+z2;
milnor(f);
@expansion{} 28
printlevel = p;
@c end example milnor d2t_singular/sing_lib.doc:336
@end smallexample
@c ---end content milnor---

@c ------------------- nf_icis -------------
@node nf_icis, slocus, milnor, sing_lib
@subsubsection nf_icis
@cindex nf_icis
@c ---content nf_icis---
Procedure from library @code{sing.lib} (@pxref{sing_lib}).

@table @asis
@item @strong{Usage:}
nf_icis(i); i ideal

@item @strong{Return:}
ideal = generic linear combination of generators of i if i is an ICIS
(isolated complete intersection singularity), return i if not

@item @strong{Note:}
this proc is useful in connection with proc milnor
@*printlevel >=0: display comments (default)

@end table
@strong{Example:}
@smallexample
@c computed example nf_icis d2t_singular/sing_lib.doc:372 
LIB "sing.lib";
int p      = printlevel;
printlevel = 1;
ring r     = 32003,(x,y,z),ds;
ideal i    = x3+y4,z4+yx;
nf_icis(i);
@expansion{} // complete intersection of dim 1
@expansion{} // dim-sequence:
@expansion{} // dim of singular locus = 0
@expansion{} // isolated singularity if last number is 0 in dim-sequence:
@expansion{} // dim of singular locus = 0
@expansion{} // isolated singularity if last number is 0 in dim-sequence:
@expansion{} // ICIS in generic form after 1 genericity loop(s)
@expansion{} _[1]=2xy+x3+y4+2z4
@expansion{} _[2]=xy+z4
ideal j    = x3+y4,xy,yz;
nf_icis(j);
@expansion{} // no complete intersection
@expansion{} // dim-sequence:
@expansion{} // no complete intersection
@expansion{} _[1]=x3+y4
@expansion{} _[2]=xy
@expansion{} _[3]=yz
printlevel = p;
@c end example nf_icis d2t_singular/sing_lib.doc:372
@end smallexample
@c ---end content nf_icis---

@c ------------------- slocus -------------
@node slocus, qhspectrum, nf_icis, sing_lib
@subsubsection slocus
@cindex slocus
@c ---content slocus---
Procedure from library @code{sing.lib} (@pxref{sing_lib}).

@table @asis
@item @strong{Usage:}
slocus(i); i ideal

@item @strong{Return:}
ideal of singular locus of i

@end table
@strong{Example:}
@smallexample
@c computed example slocus d2t_singular/sing_lib.doc:403 
LIB "sing.lib";
ring r  = 0,(u,v,w,x,y,z),dp;
ideal i = wx,wy,wz,vx,vy,vz,ux,uy,uz,y3-x2;;
slocus(i);
@expansion{} _[1]=x
@expansion{} _[2]=w
@expansion{} _[3]=v
@expansion{} _[4]=u
@expansion{} _[5]=y2
@c end example slocus d2t_singular/sing_lib.doc:403
@end smallexample
@c ---end content slocus---

@c ------------------- qhspectrum -------------
@node qhspectrum, Tjurina, slocus, sing_lib
@subsubsection qhspectrum
@cindex qhspectrum
@c ---content qhspectrum---
Procedure from library @code{sing.lib} (@pxref{sing_lib}).

@table @asis
@item @strong{Usage:}
qhspectrum(f,w); f=poly, w=intvec;

@item @strong{Assume:}
f is a weighted homogeneous isolated singularity w.r.t. the weights
given by w; w must consist of as many positive integers as there
are variables of the basering

@item @strong{Compute:}
the spectral numbers of the w-homogeneous polynomial f, computed in a
ring of characteristic 0

@item @strong{Return:}
intvec d,s1,...,su where:
@*d = w-degree(f) and si/d = i-th spectral-number(f)
@*No return value if basering has parameters or if f is no isolated
singularity, displays a warning in this case

@end table
@strong{Example:}
@smallexample
@c computed example qhspectrum d2t_singular/sing_lib.doc:441 
LIB "sing.lib";
ring r;
poly f=x3+y5+z2;
intvec w=10,6,15;
qhspectrum(f,w);
@expansion{} 30,1,7,11,13,17,19,23,29
// the spectrum numbers are:
// 1/30,7/30,11/30,13/30,17/30,19/30,23/30,29/30
@c end example qhspectrum d2t_singular/sing_lib.doc:441
@end smallexample
@c ---end content qhspectrum---

@c ------------------- Tjurina -------------
@node Tjurina, tjurina, qhspectrum, sing_lib
@subsubsection Tjurina
@cindex Tjurina
@c ---content Tjurina---
Procedure from library @code{sing.lib} (@pxref{sing_lib}).

@table @asis
@item @strong{Usage:}
Tjurina(id[,<any>]); id=ideal or poly

@item @strong{Assume:}
id=ICIS (isolated complete intersection singularity)

@item @strong{Return:}
standard basis of Tjurina-module of id,
@*of type module if id=ideal, resp. of type ideal if id=poly.
If a second argument is present (of any type) return a list: @*
[1] = Tjurina number,
@*[2] = k-basis of miniversal deformation,
@*[3] = SB of Tjurina module,
@*[4] = Tjurina module

@item @strong{Display:}
Tjurina number if printlevel >= 0 (default)

@item @strong{Note:}
Tjurina number = -1 implies that id is not an ICIS

@end table
@strong{Example:}
@smallexample
@c computed example Tjurina d2t_singular/sing_lib.doc:485 
LIB "sing.lib";
int p      = printlevel;
printlevel = 1;
ring r     = 0,(x,y,z),ds;
poly f     = x5+y6+z7+xyz;        // singularity T[5,6,7]
list T     = Tjurina(f,"");
@expansion{} // Tjurina number = 16
show(T[1]);                       // Tjurina number, should be 16
@expansion{} // int, size 1
@expansion{} 16
show(T[2]);                       // basis of miniversal deformation
@expansion{} // ideal, 16 generator(s)
@expansion{} z6,
@expansion{} z5,
@expansion{} z4,
@expansion{} z3,
@expansion{} z2,
@expansion{} z,
@expansion{} y5,
@expansion{} y4,
@expansion{} y3,
@expansion{} y2,
@expansion{} y,
@expansion{} x4,
@expansion{} x3,
@expansion{} x2,
@expansion{} x,
@expansion{} 1
show(T[3]);                       // SB of Tjurina ideal
@expansion{} // ideal, 6 generator(s)
@expansion{} xy+7z6,
@expansion{} xz+6y5,
@expansion{} yz+5x4,
@expansion{} 5x5-6y6,
@expansion{} 6y6,
@expansion{} z7
show(T[4]); "";                   // Tjurina ideal
@expansion{} // ideal, 4 generator(s)
@expansion{} yz+5x4,
@expansion{} xz+6y5,
@expansion{} xy+7z6,
@expansion{} xyz+x5+y6+z7
@expansion{} 
ideal j    = x2+y2+z2,x2+2y2+3z2;
show(kbase(Tjurina(j)));          // basis of miniversal deformation
@expansion{} // Tjurina number = 5
@expansion{} // module, 5 generator(s)
@expansion{} [z]
@expansion{} [y]
@expansion{} [x]
@expansion{} [1]
@expansion{} [0,1]
hilb(Tjurina(j));                 // Hilbert series of Tjurina module
@expansion{} // Tjurina number = 5
@expansion{} //         2 t^0
@expansion{} //        -3 t^1
@expansion{} //        -3 t^2
@expansion{} //         7 t^3
@expansion{} //        -3 t^4
@expansion{} 
@expansion{} //         2 t^0
@expansion{} //         3 t^1
@expansion{} // dimension (local)   = 0
@expansion{} // multiplicity = 5
printlevel = p;
@c end example Tjurina d2t_singular/sing_lib.doc:485
@end smallexample
@c ---end content Tjurina---

@c ------------------- tjurina -------------
@node tjurina, T_1, Tjurina, sing_lib
@subsubsection tjurina
@cindex tjurina
@c ---content tjurina---
Procedure from library @code{sing.lib} (@pxref{sing_lib}).

@table @asis
@item @strong{Usage:}
tjurina(id); id=ideal or poly

@item @strong{Assume:}
id=ICIS (isolated complete intersection singularity)

@item @strong{Return:}
int = Tjurina number of id

@item @strong{Note:}
Tjurina number = -1 implies that id is not an ICIS

@end table
@strong{Example:}
@smallexample
@c computed example tjurina d2t_singular/sing_lib.doc:527 
LIB "sing.lib";
ring r=32003,(x,y,z),(c,ds);
ideal j=x2+y2+z2,x2+2y2+3z2;
tjurina(j);
@expansion{} 5
@c end example tjurina d2t_singular/sing_lib.doc:527
@end smallexample
@c ---end content tjurina---

@c ------------------- T_1 -------------
@node T_1, T_2, tjurina, sing_lib
@subsubsection T_1
@cindex T_1
@c ---content T_1---
Procedure from library @code{sing.lib} (@pxref{sing_lib}).

@table @asis
@item @strong{Usage:}
T_1(id[,<any>]); id = ideal or poly

@item @strong{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:
@*[1]= T_1(id)
@*[2]= generators of normal bundle of id, lifted to P
@*[3]= module of relations of [2], lifted to P
@*(note: transpose[3]*[2]=0 mod id)
@*The list contains all non-easy objects which must be computed
to get T_1(id).

@item @strong{Display:}
k-dimension of T_1(id) if printlevel >= 0 (default)

@item @strong{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 argument, then matrix([2])*(kbase([1]))
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

@end table
@strong{Example:}
@smallexample
@c computed example T_1 d2t_singular/sing_lib.doc:576 
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);
@expansion{} // dim T_1 = 3
vdim(T);                      // Tjurina number = dim_K(T_1), should be 3
@expansion{} 3
list L=T_1(i,"");
@expansion{} // dim T_1 = 3
module kB  = kbase(L[1]);
print(L[2]*kB);               // basis of 1st order miniversal deformation
@expansion{} 0,0,0,
@expansion{} z,0,0,
@expansion{} 0,y,z 
show(L[2]);                   // presentation of normal bundle
@expansion{} // module, 6 generator(s)
@expansion{} [x]
@expansion{} [y,z]
@expansion{} [0,x,y]
@expansion{} [0,z]
@expansion{} [0,0,y]
@expansion{} [0,0,z]
print(L[3]);                  // relations of i
@expansion{} z, 0,
@expansion{} -y,y,
@expansion{} 0, -x
print(transpose(L[3])*L[2]);  // should be 0 (mod i)
@expansion{} xz,0, -xy,-yz,0,  0, 
@expansion{} 0, yz,0,  yz, -xy,-xz
printlevel = p;
@c end example T_1 d2t_singular/sing_lib.doc:576
@end smallexample
@c ---end content T_1---

@c ------------------- T_2 -------------
@node T_2, T_12, T_1, sing_lib
@subsubsection T_2
@cindex T_2
@c ---content T_2---
Procedure from library @code{sing.lib} (@pxref{sing_lib}).

@table @asis
@item @strong{Usage:}
T_2(id[,<any>]); id = ideal

@item @strong{Return:}
T_2(id): T_2-module of id . This is a std basis of a presentation of
the module of obstructions of R=P/id, if P is the basering.
If a second argument is present (of any type) return a list of
4 modules and 1 ideal:
@*[1]= T_2(id)
@*[2]= standard basis of id (ideal)
@*[3]= module of relations of id (=1st syzygy module of id) @*
[4]= presentation of syz/kos
@*[5]= relations of Hom_P([3]/kos,R), lifted to P
@*The list contains all non-easy objects which must be computed
to get T_2(id).

@item @strong{Display:}
k-dimension of T_2(id) if printlevel >= 0 (default)

@item @strong{Note:}
The most important information is probably vdim(T_2(id)).
Use proc miniversal to get equations of miniversal deformation.

@end table
@strong{Example:}
@smallexample
@c computed example T_2 d2t_singular/sing_lib.doc:629 
LIB "sing.lib";
int p      = printlevel;
printlevel = 1;
ring  r    = 32003,(x,y),(c,dp);
ideal j    = x6-y4,x6y6,x2y4-x5y2;
module T   = T_2(j);
@expansion{} // dim T_2 = 6
vdim(T);
@expansion{} 6
hilb(T);"";
@expansion{} //         1 t^0
@expansion{} //        -1 t^2
@expansion{} //        -1 t^3
@expansion{} //         1 t^5
@expansion{} 
@expansion{} //         1 t^0
@expansion{} //         2 t^1
@expansion{} //         2 t^2
@expansion{} //         1 t^3
@expansion{} // dimension (affine)  = 0
@expansion{} // degree      = 6
@expansion{} 
ring r1    = 0,(x,y,z),dp;
ideal id   = xy,xz,yz;
list L     = T_2(id,"");
@expansion{} // dim T_2 = 0
vdim(L[1]);                           // vdim of T_2
@expansion{} 0
print(L[3]);                          // syzygy module of id
@expansion{} -z,-z,
@expansion{} y, 0, 
@expansion{} 0, x  
printlevel = p;
@c end example T_2 d2t_singular/sing_lib.doc:629
@end smallexample
@c ---end content T_2---

@c ------------------- T_12 -------------
@node T_12, tangentcone, T_2, sing_lib
@subsubsection T_12
@cindex T_12
@c ---content T_12---
Procedure from library @code{sing.lib} (@pxref{sing_lib}).

@table @asis
@item @strong{Usage:}
T_12(i[,any]); i = ideal

@item @strong{Return:}
T_12(i): list of 2 modules: @*
* standard basis of T_1-module =T_1(i), 1st order deformations @*
* standard basis of T_2-module =T_2(i), obstructions of R=P/i @*
If a second argument is present (of any type) return a list of
9 modules, matrices, integers: @*
[1]= standard basis of T_1-module
@*[2]= standard basis of T_2-module
@*[3]= vdim of T_1
@*[4]= vdim of T_2
@*[5]= matrix, whose cols present infinitesimal deformations @*
[6]= matrix, whose cols are generators of relations of i(=syz(i)) @*
[7]= matrix, presenting Hom_P(syz/kos,R), lifted to P @*
[8]= presentation of T_1-module, no std basis
@*[9]= presentation of T_2-module, no std basis

@item @strong{Display:}
k-dimension of T_1 and T_2 if printlevel >= 0 (default)

@item @strong{Note:}
Use proc miniversal from deform.lib to get miniversal deformation of i,
the list contains all objects used by proc miniversal

@end table
@strong{Example:}
@smallexample
@c computed example T_12 d2t_singular/sing_lib.doc:685 
LIB "sing.lib";
int p      = printlevel;
printlevel = 1;
ring r     = 200,(x,y,z,u,v),(c,ws(4,3,2,3,4));
ideal i    = xz-y2,yz2-xu,xv-yzu,yu-z3,z2u-yv,zv-u2;
//a cyclic quotient singularity
list L     = T_12(i,1);
@expansion{} // dim T_1 = 5
@expansion{} // dim T_2 = 3
print(L[5]);             //matrix of infin. deformations
@expansion{} 0,  0,  0,  0,  0,  
@expansion{} yz, y,  z2, 0,  0,  
@expansion{} -z3,-z2,-zu,yz, yu, 
@expansion{} -z2,-z, -u, 0,  0,  
@expansion{} zu, u,  v,  -z2,-zu,
@expansion{} 0,  0,  0,  u,  v   
printlevel = p;
@c end example T_12 d2t_singular/sing_lib.doc:685
@end smallexample
@c ---end content T_12---

@c ------------------- tangentcone -------------
@node tangentcone,, T_12, sing_lib
@subsubsection tangentcone
@cindex tangentcone
@c ---content tangentcone---
Procedure from library @code{sing.lib} (@pxref{sing_lib}).

@table @asis
@item @strong{Usage:}
tangentcone(id [,n]); id = ideal, n = int

@item @strong{Return:}
the tangent cone of id

@item @strong{Note:}
the procedure works for any monomial ordering.
@*If n=0 use std w.r.t. local ordering ds, if n=1 use locstd

@end table
@strong{Example:}
@smallexample
@c computed example tangentcone d2t_singular/sing_lib.doc:720 
LIB "sing.lib";
ring R = 0,(x,y,z),ds;
ideal i  = 7xyz+z5,x2+y3+z7,5z5+y5;
tangentcone(i);
@expansion{} _[1]=x2
@expansion{} _[2]=7xyz
@expansion{} _[3]=y5+5z5
@expansion{} _[4]=7y4z
@expansion{} _[5]=35z6
@c end example tangentcone d2t_singular/sing_lib.doc:720
@end smallexample
@c ---end content tangentcone---
