code:
@c ---content LibInfo---
@comment This file was generated by doc2tex.pl from d2t_singular/rinvar_lib.doc
@comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/rinvar_lib.doc INSTEAD
@c library version: (1.7.2.3,2002/02/20)
@c library file: ../Singular/LIB/rinvar.lib
@cindex rinvar.lib
@cindex rinvar_lib
@table @asis
@item @strong{Library:}
rinvar.lib
@item @strong{Purpose:}
      Invariant Rings of Reductive Groups
@item @strong{Author:}
Thomas Bayer, tbayer@@in.tum.de
@*http://wwwmayr.informatik.tu-muenchen.de/personen/bayert/
Current Adress: Institut fuer Informatik, TU Muenchen

@item @strong{Overview:}
Implementation based on Derksen's algorithm. Written in the frame of the
diploma thesis (advisor: Prof. Gert-Martin Greuel) 'Computations of moduli
spaces of semiquasihomogeneous singularities and an implementation in Singular'

@end table

@strong{Procedures:}
@menu
* HilbertSeries:: Hilbert series of the ideal I w.r.t. weight w
* HilbertWeights:: weighted degrees of the generators of I
* ImageVariety:: ideal of the image variety F(variety(I))
* ImageGroup:: ideal of G w.r.t. the induced representation
* InvariantRing:: generators of the invariant ring of G
* InvariantQ:: decide if f is invariant w.r.t. G
* LinearizeAction:: linearization of the action 'Gaction' of G
* LinearActionQ:: decide if action is linear in var(s..nvars)
* LinearCombinationQ:: decide if f is in the linear hull of 'base'
* MinimalDecomposition:: minimal decomposition of f (like coef)
* NullCone:: ideal of the null cone of the action 'act' of G
* ReynoldsImage:: image of f under the Reynolds operator 'RO'
* ReynoldsOperator:: Reynolds operator of the group G
* SimplifyIdeal:: simplify the ideal I (try to reduce variables)
* TransferIdeal:: transfer the ideal 'name' from R to basering
@end menu
@c inserted refs from d2t_singular/rinvar_lib.doc:41
@ifinfo
@menu
See also:
* qhmoduli_lib::
* zeroset_lib::
@end menu
@end ifinfo
@iftex
@strong{See also:}
@ref{qhmoduli_lib};
@ref{zeroset_lib}.
@end iftex
@c end inserted refs from d2t_singular/rinvar_lib.doc:41

@c ---end content LibInfo---

@c ------------------- HilbertSeries -------------
@node HilbertSeries, HilbertWeights,, rinvar_lib
@subsubsection HilbertSeries
@cindex HilbertSeries
@c ---content HilbertSeries---
Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}).

@table @asis
@item @strong{Usage:}
HilbertSeries(I, w); ideal I, intvec wt

@item @strong{Purpose:}
compute the polynomial p of the Hilbert Series,represented by p/q, of
the ring K[t_1,...,t_m,y_1,...,y_r]/I1 where 'w' are the weights of
the variables, computed, e.g., by 'HilbertWeights', 'I1' is of the
form I[1] - y_1,...,I[r] - y_r and is quasihomogeneous w.r.t. 'w'

@item @strong{Return:}
intvec

@item @strong{Note:}
the leading 0 of the result does not belong to p, but is needed in
the hilbert-driven 'std'.

@end table
@c ---end content HilbertSeries---

@c ------------------- HilbertWeights -------------
@node HilbertWeights, ImageVariety, HilbertSeries, rinvar_lib
@subsubsection HilbertWeights
@cindex HilbertWeights
@c ---content HilbertWeights---
Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}).

@table @asis
@item @strong{Purpose:}
compute the weights of the "slack" variables needed for the
computation of the algebraic relations of the generators of 'I' s.t.
the Hilbert driven 'std' can be used.

@item @strong{Return:}
intvec

@item @strong{Assume:}
basering = K[t_1,...,t_m,...], 'I' is quasihomogeneous w.r.t. 'w' and
contains only polynomials in t_1,...,t_m

@end table
@c ---end content HilbertWeights---

@c ------------------- ImageVariety -------------
@node ImageVariety, ImageGroup, HilbertWeights, rinvar_lib
@subsubsection ImageVariety
@cindex ImageVariety
@c ---content ImageVariety---
Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}).

@table @asis
@item @strong{Usage:}
ImageVariety(ideal I, F [, w]);ideal I; F is a list/ideal, intvec w.

@item @strong{Purpose:}
compute the Zariski closure of the image of the variety of I under
the morphism F.

@item @strong{Note:}
if 'I' and 'F' are quasihomogeneous w.r.t. 'w' then the Hilbert-driven
'std' is used.

@item @strong{Return:}
polynomial ring over the same ground field, containing the ideal
'imageid'. The variables are Y(1),...,Y(k) where k = size(F)
- 'imageid' is the ideal of the Zariski closure of F(X) where
X is the variety of I.

@end table
@strong{Example:}
@smallexample
@c computed example ImageVariety d2t_singular/rinvar_lib.doc:125
LIB "rinvar.lib";
ring B   = 0,(x,y),dp;
ideal I  = x4 - y4;
ideal F  = x2, y2, x*y;
def R = ImageVariety(I, F);
setring R;
imageid;
@expansion{} imageid[1]=Y(1)*Y(2)-Y(3)^2
@expansion{} imageid[2]=Y(1)^2-Y(2)^2
@expansion{} imageid[3]=Y(2)^3-Y(1)*Y(3)^2
@c end example ImageVariety d2t_singular/rinvar_lib.doc:125
@end smallexample
@c ---end content ImageVariety---

@c ------------------- ImageGroup -------------
@node ImageGroup, InvariantRing, ImageVariety, rinvar_lib
@subsubsection ImageGroup
@cindex ImageGroup
@c ---content ImageGroup---
Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}).

@table @asis
@item @strong{Usage:}
ImageGroup(G, action); ideal G, action;

@item @strong{Purpose:}
compute the ideal of the image of G in GL(m,K) induced by the linear
action 'action', where G is an algebraic group and 'action' defines
an action of G on K^m (size(action) = m).

@item @strong{Return:}
ring, a polynomial ring over the same ground field as the basering,
containing the ideals 'groupid' and 'actionid'.
@*- 'groupid' is the ideal of the image of G (order <= order of G)
- 'actionid' defines the linear action of 'groupid' on K^m.

@item @strong{Note:}
'action' and 'actionid' have the same orbits
@*all variables which give only rise to 0's in the m x m matrices of G
have been omitted.

@item @strong{Assume:}
basering K[s(1..r),t(1..m)] has r + m variables, G is the ideal of an
algebraic group and F is an action of G on K^m. G contains only the
variables s(1)...s(r). The action 'action' is given by polynomials
f_1,...,f_m in basering, s.t. on the ring level we have
K[t_1,...,t_m] --> K[s_1,...,s_r,t_1,...,t_m]/G
@*t_i --> f_i(s_1,...,s_r,t_1,...,t_m)

@end table
@strong{Example:}
@smallexample
@c computed example ImageGroup d2t_singular/rinvar_lib.doc:175
LIB "rinvar.lib";
ring B   = 0,(s(1..2), t(1..2)),dp;
ideal G = s(1)^3-1, s(2)^10-1;
ideal action = s(1)*s(2)^8*t(1), s(1)*s(2)^7*t(2);
def R = ImageGroup(G, action);
setring R;
groupid;
@expansion{} groupid[1]=-s(1)+s(2)^4
@expansion{} groupid[2]=s(1)^8-s(2)^2
@expansion{} groupid[3]=s(1)^7*s(2)^2-1
actionid;
@expansion{} actionid[1]=s(1)*t(1)
@expansion{} actionid[2]=s(2)*t(2)
@c end example ImageGroup d2t_singular/rinvar_lib.doc:175
@end smallexample
@c ---end content ImageGroup---

@c ------------------- InvariantRing -------------
@node InvariantRing, InvariantQ, ImageGroup, rinvar_lib
@subsubsection InvariantRing
@cindex InvariantRing
@c ---content InvariantRing---
Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}).

@table @asis
@item @strong{Usage:}
InvariantRing(G, Gact [, opt]); ideal G, Gact; int opt

@item @strong{Purpose:}
compute generators of the invariant ring of G w.r.t. the action 'Gact'

@item @strong{Assume:}
G is a finite group and 'Gact' is a linear action.

@item @strong{Return:}
polynomial ring over a simple extension of the ground field of the
basering (the extension might be trivial), containing the ideals
'invars' and 'groupid' and the poly 'newA'
@*- 'invars' contains the algebra-generators of the invariant ring
- 'groupid' is the ideal of G in the new ring
@*- 'newA' if the minpoly changes this is the new representation of the
algebraic number, otherwise it is set to 'a'.

@item @strong{Note:}
the delivered ring might have a different minimal polynomial

@end table
@strong{Example:}
@smallexample
@c computed example InvariantRing d2t_singular/rinvar_lib.doc:220
LIB "rinvar.lib";
ring B = 0, (s(1..2), t(1..2)), dp;
ideal G = -s(1)+s(2)^3, s(1)^4-1;
ideal action = s(1)*t(1), s(2)*t(2);
def R = InvariantRing(std(G), action);
setring R;
invars;
@expansion{} invars[1]=t(1)^4
@expansion{} invars[2]=t(1)^3*t(2)^3
@expansion{} invars[3]=t(1)^2*t(2)^6
@expansion{} invars[4]=t(1)*t(2)^9
@expansion{} invars[5]=t(2)^12
@c end example InvariantRing d2t_singular/rinvar_lib.doc:220
@end smallexample
@c ---end content InvariantRing---

@c ------------------- InvariantQ -------------
@node InvariantQ, LinearizeAction, InvariantRing, rinvar_lib
@subsubsection InvariantQ
@cindex InvariantQ
@c ---content InvariantQ---
Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}).

@table @asis
@item @strong{Usage:}
InvariantQ(f, G, action); poly f; ideal G, action

@item @strong{Purpose:}
check if the polynomial f is invariant w.r.t. G where G acts via
'action' on K^m.

@item @strong{Assume:}
basering = K[s_1,...,s_m,t_1,...,t_m] where K = Q of K = Q(a) and
minpoly != 0, f contains only t_1,...,t_m, G is the ideal of an
algebraic group and a standard basis.

@item @strong{Return:}
int;
@*0 if f is not invariant,
@*1 if f is invariant

@item @strong{Note:}
G need not be finite

@end table
@c ---end content InvariantQ---

@c ------------------- LinearizeAction -------------
@node LinearizeAction, LinearActionQ, InvariantQ, rinvar_lib
@subsubsection LinearizeAction
@cindex LinearizeAction
@c ---content LinearizeAction---
Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}).

@table @asis
@item @strong{Usage:}
LinearizeAction(G,action,r); ideal G, action; int r

@item @strong{Purpose:}
linearize the group action 'action' and find an equivariant embedding
of K^m where m = size(action).

@item @strong{Assume:}
G contains only variables var(1..r) (r = nrs)
@*basering = K[s(1..r),t(1..m)], K = Q or K = Q(a) and minpoly != 0.

@item @strong{Return:}
polynomial ring containing the ideals 'actionid', 'embedid', 'groupid'
- 'actionid' is the ideal defining the linearized action of G
- 'embedid' is a parameterization of an equivariant embedding (closed)
- 'groupid' is the ideal of G in the new ring

@item @strong{Note:}
set printlevel > 0 to see a trace

@end table
@strong{Example:}
@smallexample
@c computed example LinearizeAction d2t_singular/rinvar_lib.doc:294
LIB "rinvar.lib";
ring B   = 0,(s(1..5), t(1..3)),dp;
ideal G =  s(3)-s(4), s(2)-s(5), s(4)*s(5), s(1)^2*s(4)+s(1)^2*s(5)-1, s(1)^2*s(5)^2-s(5), s(4)^4-s(5)^4+s(1)^2, s(1)^4+s(4)^3-s(5)^3, s(5)^5-s(1)^2*s(5);
ideal action = -s(4)*t(1)+s(5)*t(1), -s(4)^2*t(2)+2*s(4)^2*t(3)^2+s(5)^2*t(2), s(4)*t(3)+s(5)*t(3);
LinearActionQ(action, 5);
@expansion{} 0
def R = LinearizeAction(G, action, 5);
setring R;
R;
@expansion{} //   characteristic : 0
@expansion{} //   number of vars : 9
@expansion{} //        block   1 : ordering dp
@expansion{} //                  : names    s(1) s(2) s(3) s(4) s(5) t(1) t(2) t(3) t(\
   4)
@expansion{} //        block   2 : ordering C
actionid;
@expansion{} actionid[1]=-s(4)*t(1)+s(5)*t(1)
@expansion{} actionid[2]=-s(4)^2*t(2)+s(5)^2*t(2)+2*s(4)^2*t(4)
@expansion{} actionid[3]=s(4)*t(3)+s(5)*t(3)
@expansion{} actionid[4]=s(4)^2*t(4)+s(5)^2*t(4)
embedid;
@expansion{} embedid[1]=t(1)
@expansion{} embedid[2]=t(2)
@expansion{} embedid[3]=t(3)
@expansion{} embedid[4]=t(3)^2
groupid;
@expansion{} groupid[1]=s(3)-s(4)
@expansion{} groupid[2]=s(2)-s(5)
@expansion{} groupid[3]=s(4)*s(5)
@expansion{} groupid[4]=s(1)^2*s(4)+s(1)^2*s(5)-1
@expansion{} groupid[5]=s(1)^2*s(5)^2-s(5)
@expansion{} groupid[6]=s(4)^4-s(5)^4+s(1)^2
@expansion{} groupid[7]=s(1)^4+s(4)^3-s(5)^3
@expansion{} groupid[8]=s(5)^5-s(1)^2*s(5)
LinearActionQ(actionid, 5);
@expansion{} 1
@c end example LinearizeAction d2t_singular/rinvar_lib.doc:294
@end smallexample
@c ---end content LinearizeAction---

@c ------------------- LinearActionQ -------------
@node LinearActionQ, LinearCombinationQ, LinearizeAction, rinvar_lib
@subsubsection LinearActionQ
@cindex LinearActionQ
@c ---content LinearActionQ---
Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}).

@table @asis
@item @strong{Usage:}
LinearActionQ(action,nrs,nrt); ideal action, int nrs

@item @strong{Purpose:}
check if the action defined by 'action' is linear w.r.t. the variables
var(nrs + 1...nvars(basering)).

@item @strong{Return:}
0 action not linear
@*1 action is linear

@end table
@strong{Example:}
@smallexample
@c computed example LinearActionQ d2t_singular/rinvar_lib.doc:333
LIB "rinvar.lib";
ring R   = 0,(s(1..5), t(1..3)),dp;
ideal G =  s(3)-s(4), s(2)-s(5), s(4)*s(5), s(1)^2*s(4)+s(1)^2*s(5)-1, s(1)^2*s(5)^2-s(5), s(4)^4-s(5)^4+s(1)^2, s(1)^4+s(4)^3-s(5)^3, s(5)^5-s(1)^2*s(5);
ideal Gaction = -s(4)*t(1)+s(5)*t(1), -s(4)^2*t(2)+2*s(4)^2*t(3)^2+s(5)^2*t(2), s(4)*t(3)+s(5)*t(3);
LinearActionQ(Gaction, 5, 3);
@expansion{} // ** too many arguments for LinearActionQ
@expansion{} 0
@c end example LinearActionQ d2t_singular/rinvar_lib.doc:333
@end smallexample
@c ---end content LinearActionQ---

@c ------------------- LinearCombinationQ -------------
@node LinearCombinationQ, MinimalDecomposition, LinearActionQ, rinvar_lib
@subsubsection LinearCombinationQ
@cindex LinearCombinationQ
@c ---content LinearCombinationQ---
Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}).

@table @asis
@item @strong{Usage:}
LinearCombination(I, f); ideal I, poly f

@item @strong{Purpose:}
test if f can be written as a linear combination of the generators of I.

@item @strong{Return:}
0 f is not a linear combination
@*1 f is a linear combination

@end table
@c ---end content LinearCombinationQ---

@c ------------------- MinimalDecomposition -------------
@node MinimalDecomposition, NullCone, LinearCombinationQ, rinvar_lib
@subsubsection MinimalDecomposition
@cindex MinimalDecomposition
@c ---content MinimalDecomposition---
Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}).

@table @asis
@item @strong{Usage:}
MinimalDecomposition(f,a,b); poly f; int a, b.

@item @strong{Purpose:}
decompose f as a sum M[1,1]*M[2,1] + ... + M[1,r]*M[2,r] where M[1,i]
contains only s(1..a), M[2,i] contains only t(1...b) s.t. r is minimal

@item @strong{Assume:}
f polynomial in K[s(1..a),t(1..b)], K = Q or K = Q(a) and minpoly != 0

@item @strong{Return:}
2 x r matrix M s.t. f = M[1,1]*M[2,1] + ... + M[1,r]*M[2,r]

@end table
@strong{Example:}
@smallexample
@c computed example MinimalDecomposition d2t_singular/rinvar_lib.doc:388
LIB "rinvar.lib";
ring R = 0, (s(1..2), t(1..2)), dp;
poly h = s(1)*(t(1) + t(1)^2) +  (t(2) + t(2)^2)*(s(1)^2 + s(2));
matrix M = MinimalDecomposition(h, 2, 2);
M;
@expansion{} M[1,1]=s(1)^2+s(2)
@expansion{} M[1,2]=s(1)
@expansion{} M[2,1]=t(2)^2+t(2)
@expansion{} M[2,2]=t(1)^2+t(1)
M[1,1]*M[2,1] + M[1,2]*M[2,2] - h;
@expansion{} 0
@c end example MinimalDecomposition d2t_singular/rinvar_lib.doc:388
@end smallexample
@c ---end content MinimalDecomposition---

@c ------------------- NullCone -------------
@node NullCone, ReynoldsImage, MinimalDecomposition, rinvar_lib
@subsubsection NullCone
@cindex NullCone
@c ---content NullCone---
Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}).

@table @asis
@item @strong{Usage:}
NullCone(G, action); ideal G, action

@item @strong{Purpose:}
compute the ideal of the null cone of the linear action of G on K^n,
given by 'action', by means of Derksen's algorithm

@item @strong{Assume:}
basering = K[s(1..r),t(1..n)], K = Q or K = Q(a) and minpoly != 0,
G is an ideal of a reductive algebraic group in K[s(1..r)],
'action' is a linear group action of G on K^n (n = ncols(action))

@item @strong{Return:}
ideal of the null cone of G.

@item @strong{Note:}
the generators of the null cone are homogeneous, but i.g. not invariant

@end table
@strong{Example:}
@smallexample
@c computed example NullCone d2t_singular/rinvar_lib.doc:428
LIB "rinvar.lib";
ring R = 0, (s(1..2), x, y), dp;
ideal G = -s(1)+s(2)^3, s(1)^4-1;
ideal action = s(1)*x, s(2)*y;
ideal inv = NullCone(G, action);
inv;
@expansion{} inv[1]=x^4
@expansion{} inv[2]=x^3*y^3
@expansion{} inv[3]=x^2*y^6
@expansion{} inv[4]=x*y^9
@expansion{} inv[5]=y^12
@c end example NullCone d2t_singular/rinvar_lib.doc:428
@end smallexample
@c ---end content NullCone---

@c ------------------- ReynoldsImage -------------
@node ReynoldsImage, ReynoldsOperator, NullCone, rinvar_lib
@subsubsection ReynoldsImage
@cindex ReynoldsImage
@c ---content ReynoldsImage---
Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}).

@table @asis
@item @strong{Usage:}
ReynoldsImage(RO, f); list RO, poly f

@item @strong{Purpose:}
compute the Reynolds image of the polynomial f where RO represents
the Reynolds operator

@item @strong{Return:}
poly

@end table
@c ---end content ReynoldsImage---

@c ------------------- ReynoldsOperator -------------
@node ReynoldsOperator, SimplifyIdeal, ReynoldsImage, rinvar_lib
@subsubsection ReynoldsOperator
@cindex ReynoldsOperator
@c ---content ReynoldsOperator---
Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}).

@table @asis
@item @strong{Usage:}
ReynoldsOperator(G, action [, opt); ideal G, action; int opt

@item @strong{Purpose:}
compute the Reynolds operator of the group G which act via 'action'

@item @strong{Return:}
polynomial ring R over a simple extension of the ground field of the
basering (the extension might be trivial), containing a list
'ROelements', the ideals 'id', 'actionid' and the polynomial 'newA'.
R = K(a)[s(1..r),t(1..n)].
@*- 'ROelements' is a list of ideal, each ideal represents a
substitution map F : R -> R according to the zero-set of G
- 'id' is the ideal of G in the new ring
@*- 'newA' is the new representation of a' in terms of a. If the
basering does not contain a parameter then 'newA' = 'a'.

@item @strong{Assume:}
basering = K[s(1..r),t(1..n)], K = Q or K = Q(a') and minpoly != 0,
G is the ideal of a finite group in K[s(1..r)], 'action' is a linear
group action of G

@end table
@c ---end content ReynoldsOperator---

@c ------------------- SimplifyIdeal -------------
@node SimplifyIdeal, TransferIdeal, ReynoldsOperator, rinvar_lib
@subsubsection SimplifyIdeal
@cindex SimplifyIdeal
@c ---content SimplifyIdeal---
Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}).

@table @asis
@item @strong{Purpose:}
simplify ideal I to the ideal I', do not change the names of the
first m variables, new ideal I' might contain less variables.
I' contains variables var(1..m)

@item @strong{Return:}
list
@*_[1] ideal I'
@*_[2] ideal representing a map phi to a ring with probably less vars. s.t.
phi(I) = I'
@*_[3] list of variables
@*_[4] list from 'elimpart'

@end table
@c ---end content SimplifyIdeal---

@c ------------------- TransferIdeal -------------
@node TransferIdeal,, SimplifyIdeal, rinvar_lib
@subsubsection TransferIdeal
@cindex TransferIdeal
@c ---content TransferIdeal---
Procedure from library @code{rinvar.lib} (@pxref{rinvar_lib}).

@table @asis
@end table
@c ---end content TransferIdeal---


code:
@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---

repo_name: mthl/texinfo

license: mit


code:
@c ---content LibInfo---
@comment This file was generated by doc2tex.pl from d2t_singular/solve_lib.doc
@comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/solve_lib.doc INSTEAD
@c library version: (1.21.2.14,2003/05/16)
@c library file: ../Singular/LIB/solve.lib
@cindex solve.lib
@cindex solve_lib
@table @asis
@item @strong{Library:}
solve.lib
@item @strong{Purpose:}
     Complex Solving of Polynomial Systems
@item @strong{Author:}
Moritz Wenk, email: wenk@@mathematik.uni-kl.de
@*Wilfred Pohl, email: pohl@@mathematik.uni-kl.de

@end table

@strong{Procedures:}
@menu
* laguerre_solve:: find all roots of univariate polynomial p
* solve:: all roots of 0-dim. ideal i using triangular sets
* ures_solve:: find all roots of 0-dimensional ideal i with resultants
* mp_res_mat:: multipolynomial resultant matrix of ideal i
* interpolate:: interpolate poly from evaluation points i and results j
* fglm_solve:: find roots of 0-dim. ideal using FGLM and lex_solve
* lex_solve:: find roots of reduced lexicographic standard basis
* simplexOut:: prints solution of simplex in nice format
* triangLf_solve:: find roots using triangular sys. (factorizing Lazard)
* triangM_solve:: find roots of given triangular system (Moeller)
* triangL_solve:: find roots using triangular system (Lazard)
* triang_solve:: find roots of given triangular system
@end menu
@c ---end content LibInfo---

@c ------------------- laguerre_solve -------------
@node laguerre_solve, solve,, solve_lib
@subsubsection laguerre_solve
@cindex laguerre_solve
@c ---content laguerre_solve---
Procedure from library @code{solve.lib} (@pxref{solve_lib}).

@table @asis
@item @strong{Usage:}
laguerre_solve(f [, m, l, n, s] ); f = polynomial,@*
m, l, n, s = integers (control parameters of the method)
@format
 m: precision of output in digits ( 4 <= m), if basering is not ring of
      complex numbers;
 l: precision of internal computation in decimal digits ( l >=8 )
      only if the basering is not complex or complex with smaller precision;
 n: control of multiplicity of roots or of splitting of f into
      squarefree factors
      n < 0, no split of f (good, if all roots are simple)
      n >= 0, try to split
      n = 0, return only different roots
      n > 0, find all roots (with multiplicity)
 s: s != 0, returns ERROR if  | f(root) | > 0.1^m (when computing in the
      current ring)
 ( default: m, l, n, s = 8, 30, 1, 0 )
@end format

@item @strong{Assume:}
f is a univariate polynomial;@*
basering has characteristic 0 and is either complex or without
parameters.

@item @strong{Return:}
list of (complex) roots of the polynomial f, depending on n. The
result is of type
@format
 string: if the basering is not complex,
 number: otherwise.
@end format

@item @strong{Note:}
If printlevel >0: displays comments ( default = 0 ).
@*If s != 0 and if the procedure stops with ERROR, try a higher
internal precision m.

@end table
@strong{Example:}
@smallexample
@c reused example laguerre_solve d2t_singular/solve_lib.doc:82
LIB "solve.lib";
// Find all roots of an univariate polynomial using Laguerre's method:
ring rs1= 0,(x,y),lp;
poly f = 15x5 + x3 + x2 - 10;
// 10 digits precision
laguerre_solve(f,10);
@expansion{} [1]:
@expansion{}    (0.2930464644-i*0.9003002396)
@expansion{} [2]:
@expansion{}    (0.2930464644+i*0.9003002396)
@expansion{} [3]:
@expansion{}    (-0.7392783383-i*0.5355190078)
@expansion{} [4]:
@expansion{}    (-0.7392783383+i*0.5355190078)
@expansion{} [5]:
@expansion{}    0.8924637479
// Now with complex coefficients,
// internal precision is 30 digits (default)
printlevel=2;
ring rsc= (real,10,i),x,lp;
poly f = (15.4+i*5)*x^5 + (25.0e-2+i*2)*x^3 + x2 - 10*i;
list l = laguerre_solve(f);
@expansion{} //BEGIN laguerre_solve
@expansion{} //control: complex ring with precision 30
@expansion{} //working in:  ring lagc=(complex,30,30),x,lp;
@expansion{} //         polynomial has complex coefficients
@expansion{} //split in working ring:
@expansion{} // split without result
@expansion{} //END laguerre_solve
l;
@expansion{} [1]:
@expansion{}    (0.04588498039+i*0.9133296179)
@expansion{} [2]:
@expansion{}    (0.5037408279-i*0.8058051828)
@expansion{} [3]:
@expansion{}    (-0.5462895588-i*0.6796668873)
@expansion{} [4]:
@expansion{}    (0.8524014357+i*0.2163760334)
@expansion{} [5]:
@expansion{}    (-0.8557376852+i*0.3557664188)
// check result, value of substituted poly should be near to zero
// remember that l contains a list of strings
// in the case of a different ring
subst(f,x,l[1]);
@expansion{} 0
subst(f,x,l[2]);
@expansion{} 0
@c end example laguerre_solve d2t_singular/solve_lib.doc:82
@end smallexample
@c ---end content laguerre_solve---

@c ------------------- solve -------------
@node solve, ures_solve, laguerre_solve, solve_lib
@subsubsection solve
@cindex solve
@c ---content solve---
Procedure from library @code{solve.lib} (@pxref{solve_lib}).

@table @asis
@item @strong{Assume:}
the ideal is 0-dimensional;@*
basering has characteristic 0 and is either complex or
without parameters;

@item @strong{Return:}
list of solutions of the ideal G, depending on n; one solution is a
list of complex numbers in the generated output ring (the new
basering).
@format
 The result is a list L
    n  = 0: a list of all different solutions (L[i]),
    n != 0: a list of two elements,
            L[i][1] contains all different solutions with the same multiplicity
            L[i][2] the multiplicity
 L is ordered w.r.t. multiplicity (the smallest first).
@end format

@item @strong{Note:}
If the problem is not 0-dim. the procedure stops with ERROR, if the
ideal G is not a lex. standard basis, it is generated with internal
computation (Hilbert driven), if the input-ring (with char 0) has
the name "<A>", the lexicographical and complex output-ring has the
name "<A>C".

@end table
@strong{Example:}
@smallexample
@c reused example solve d2t_singular/solve_lib.doc:141
LIB "solve.lib";
// Find all roots of a multivariate ideal using triangular sets:
int d=4;// with these 3 parameters you may construct
int t=3;// very hard problems for 'solve'
int s=2;
int i;
ring A=0,(x(1..d)),dp;
poly p=-1;
for(i=d;i>0;i--)@{p=p+x(i)^s;@}
ideal I=x(d)^t-x(d)^s+p;
for(i=d-1;i>0;i--)@{I=x(i)^t-x(i)^s+p,I;@}
I;
@expansion{} I[1]=x(1)^3+x(2)^2+x(3)^2+x(4)^2-1
@expansion{} I[2]=x(2)^3+x(1)^2+x(3)^2+x(4)^2-1
@expansion{} I[3]=x(3)^3+x(1)^2+x(2)^2+x(4)^2-1
@expansion{} I[4]=x(4)^3+x(1)^2+x(2)^2+x(3)^2-1
// the mutiplicity is
vdim(std(I));
@expansion{} 81
list l1=solve(I,6,0);
@expansion{} // name of new current ring: AC
// the current ring is
AC;
@expansion{} //   characteristic : 0 (complex:6 digits, additional 6 digits)
@expansion{} //   1 parameter    : i
@expansion{} //   minpoly        : (i^2+1)
@expansion{} //   number of vars : 4
@expansion{} //        block   1 : ordering lp
@expansion{} //                  : names    x(1) x(2) x(3) x(4)
@expansion{} //        block   2 : ordering C
// you must start with char. 0
setring A;
list l2=solve(I,6,1);
@expansion{} // name of current ring: AC
// the number of different solutions is
size(l1);
@expansion{} 37
// this is equal to
size(l2[1][1])+size(l2[2][1]);
@expansion{} 37
// the number of solutions with multiplicity is
size(l2[1][1])*l2[1][2]+size(l2[2][1])*l2[2][2];
@expansion{} 81
// the solutions with multiplicity
l2[2][2];
@expansion{} 12
// are
l2[2][1];
@expansion{} [1]:
@expansion{}    [1]:
@expansion{}       0
@expansion{}    [2]:
@expansion{}       0
@expansion{}    [3]:
@expansion{}       1
@expansion{}    [4]:
@expansion{}       0
@expansion{} [2]:
@expansion{}    [1]:
@expansion{}       0
@expansion{}    [2]:
@expansion{}       1
@expansion{}    [3]:
@expansion{}       0
@expansion{}    [4]:
@expansion{}       0
@expansion{} [3]:
@expansion{}    [1]:
@expansion{}       1
@expansion{}    [2]:
@expansion{}       0
@expansion{}    [3]:
@expansion{}       0
@expansion{}    [4]:
@expansion{}       0
@expansion{} [4]:
@expansion{}    [1]:
@expansion{}       0
@expansion{}    [2]:
@expansion{}       0
@expansion{}    [3]:
@expansion{}       0
@expansion{}    [4]:
@expansion{}       1
@c end example solve d2t_singular/solve_lib.doc:141
@end smallexample
@c ---end content solve---

@c ------------------- ures_solve -------------
@node ures_solve, mp_res_mat, solve, solve_lib
@subsubsection ures_solve
@cindex ures_solve
@c ---content ures_solve---
Procedure from library @code{solve.lib} (@pxref{solve_lib}).

@table @asis
@item @strong{Usage:}
ures_solve(i [, k, p] ); i = ideal, k, p = integers
@format
   k=0: use sparse resultant matrix of Gelfand, Kapranov and Zelevinsky,
   k=1: use resultant matrix of Macaulay which works only for
          homogeneous ideals,
   p>0: defines precision of the long floats for internal computation
          if the basering is not complex (in decimal digits),
   (default: k=0, p=30)
@end format

@item @strong{Assume:}
i is a zerodimensional ideal with
@*nvars(basering) = ncols(i) = number of vars
@*actually occurring in i,

@item @strong{Return:}
list of all (complex) roots of the polynomial system i = 0; the
result is of type
@format
   string: if the basering is not complex,
   number: otherwise.
@end format

@end table
@strong{Example:}
@smallexample
@c reused example ures_solve d2t_singular/solve_lib.doc:211
LIB "solve.lib";
// compute the intersection points of two curves
ring rsq = 0,(x,y),lp;
ideal gls=  x2 + y2 - 10, x2 + xy + 2y2 - 16;
ures_solve(gls,0,16);
@expansion{} [1]:
@expansion{}    [1]:
@expansion{}       1
@expansion{}    [2]:
@expansion{}       -3
@expansion{} [2]:
@expansion{}    [1]:
@expansion{}       -1
@expansion{}    [2]:
@expansion{}       3
@expansion{} [3]:
@expansion{}    [1]:
@expansion{}       2.82842712474619
@expansion{}    [2]:
@expansion{}       1.414213562373095
@expansion{} [4]:
@expansion{}    [1]:
@expansion{}       -2.82842712474619
@expansion{}    [2]:
@expansion{}       -1.414213562373095
// result is a list (x,y)-coordinates as strings
// now with complex coefficient field, precision is 20 digits
ring rsc= (real,20,I),(x,y),lp;
ideal i = (2+3*I)*x2 + (0.35+I*45.0e-2)*y2 - 8, x2 + xy + (42.7)*y2;
list l= ures_solve(i,0,10);
// result is a list of (x,y)-coordinates of complex numbers
l;
@expansion{} [1]:
@expansion{}    [1]:
@expansion{}       (-1.315392899374542198+I*0.70468233142752928117)
@expansion{}    [2]:
@expansion{}       (0.12292646536251281054+I*0.19245727404407015049)
@expansion{} [2]:
@expansion{}    [1]:
@expansion{}       (1.315392899374542198-I*0.70468233142752928117)
@expansion{}    [2]:
@expansion{}       (-0.12292646536251281054-I*0.19245727404407015049)
@expansion{} [3]:
@expansion{}    [1]:
@expansion{}       (1.31584587549391830705-I*0.70396753310002259573)
@expansion{}    [2]:
@expansion{}       (0.092006639590217681983+I*0.20902112035965287775)
@expansion{} [4]:
@expansion{}    [1]:
@expansion{}       (-1.31584587549391830705+I*0.70396753310002259573)
@expansion{}    [2]:
@expansion{}       (-0.092006639590217681983-I*0.20902112035965287775)
// check the result
subst(subst(i[1],x,l[1][1]),y,l[1][2]);
@expansion{} 0
@c end example ures_solve d2t_singular/solve_lib.doc:211
@end smallexample
@c ---end content ures_solve---

@c ------------------- mp_res_mat -------------
@node mp_res_mat, interpolate, ures_solve, solve_lib
@subsubsection mp_res_mat
@cindex mp_res_mat
@c ---content mp_res_mat---
Procedure from library @code{solve.lib} (@pxref{solve_lib}).

@table @asis
@item @strong{Usage:}
mp_res_mat(i [, k] ); i ideal, k integer,
@format
    k=0: sparse resultant matrix of Gelfand, Kapranov and Zelevinsky,
    k=1: resultant matrix of Macaulay (k=0 is default)
@end format

@item @strong{Assume:}
The number of elements in the input system must be the number of
variables in the basering plus one;
@*if k=1 then i must be homogeneous.

@item @strong{Return:}
module representing the multipolynomial resultant matrix

@end table
@strong{Example:}
@smallexample
@c reused example mp_res_mat d2t_singular/solve_lib.doc:256
LIB "solve.lib";
// compute resultant matrix in ring with parameters (sparse resultant matrix)
ring rsq= (0,u0,u1,u2),(x1,x2),lp;
ideal i= u0+u1*x1+u2*x2,x1^2 + x2^2 - 10,x1^2 + x1*x2 + 2*x2^2 - 16;
module m = mp_res_mat(i);
print(m);
@expansion{} -16,0,  -10,0,  (u0),0,   0,  0,   0,   0,
@expansion{} 0,  -16,0,  -10,(u2),(u0),0,  0,   0,   0,
@expansion{} 2,  0,  1,  0,  0,   (u2),0,  0,   0,   0,
@expansion{} 0,  2,  0,  1,  0,   0,   0,  0,   0,   0,
@expansion{} 0,  0,  0,  0,  (u1),0,   -10,(u0),0,   -16,
@expansion{} 1,  0,  0,  0,  0,   (u1),0,  (u2),(u0),0,
@expansion{} 0,  1,  0,  0,  0,   0,   1,  0,   (u2),2,
@expansion{} 1,  0,  1,  0,  0,   0,   0,  (u1),0,   0,
@expansion{} 0,  1,  0,  1,  0,   0,   0,  0,   (u1),1,
@expansion{} 0,  0,  0,  0,  0,   0,   1,  0,   0,   1
// computing sparse resultant
det(m);
@expansion{} (-2*u0^4+18*u0^2*u1^2+4*u0^2*u1*u2+22*u0^2*u2^2-16*u1^4+80*u1^3*u2-52*u1^\
   2*u2^2-120*u1*u2^3-36*u2^4)
// compute resultant matrix (Macaulay resultant matrix)
ring rdq= (0,u0,u1,u2),(x0,x1,x2),lp;
ideal h=  homog(imap(rsq,i),x0);
h;
@expansion{} h[1]=(u0)*x0+(u1)*x1+(u2)*x2
@expansion{} h[2]=-10*x0^2+x1^2+x2^2
@expansion{} h[3]=-16*x0^2+x1^2+x1*x2+2*x2^2
module m = mp_res_mat(h,1);
print(m);
@expansion{} x0, x1, x2, 0, 0, 0, 0,0, 0, 0,
@expansion{} 0,  x0, 0,  x1,x2,0, 0,0, 0, 0,
@expansion{} 0,  0,  x0, 0, x1,x2,0,0, 0, 0,
@expansion{} -10,0,  0,  1, 0, 1, 0,0, 0, 0,
@expansion{} 0,  0,  0,  0, x0,0, 0,x1,x2,0,
@expansion{} -16,0,  0,  1, 1, 2, 0,0, 0, 0,
@expansion{} 0,  -10,0,  0, 0, 0, 1,0, 1, 0,
@expansion{} 0,  0,  -10,0, 0, 0, 0,1, 0, 1,
@expansion{} 0,  -16,0,  0, 0, 0, 1,1, 2, 0,
@expansion{} 0,  0,  -16,0, 0, 0, 0,1, 1, 2
// computing Macaulay resultant (should be the same as above!)
det(m);
@expansion{} 2*x0^4-18*x0^2*x1^2-4*x0^2*x1*x2-22*x0^2*x2^2+16*x1^4-80*x1^3*x2+52*x1^2*\
   x2^2+120*x1*x2^3+36*x2^4
// compute numerical sparse resultant matrix
setring rsq;
ideal ir= 15+2*x1+5*x2,x1^2 + x2^2 - 10,x1^2 + x1*x2 + 2*x2^2 - 16;
module mn = mp_res_mat(ir);
print(mn);
@expansion{} 15,0, -10,0,  0, 0, 0,  -16,0,  0,
@expansion{} 5, 15,0,  -10,0, 0, 0,  0,  -16,0,
@expansion{} 0, 5, 1,  0,  0, 0, 0,  2,  0,  0,
@expansion{} 0, 0, 0,  1,  0, 0, 0,  0,  2,  0,
@expansion{} 2, 0, 0,  0,  15,0, -10,0,  0,  -16,
@expansion{} 0, 2, 0,  0,  5, 15,0,  1,  0,  0,
@expansion{} 0, 0, 0,  0,  0, 5, 1,  0,  1,  2,
@expansion{} 0, 0, 1,  0,  2, 0, 0,  1,  0,  0,
@expansion{} 0, 0, 0,  1,  0, 2, 0,  0,  1,  1,
@expansion{} 0, 0, 0,  0,  0, 0, 1,  0,  0,  1
// computing sparse resultant
det(mn);
@expansion{} -7056
@c end example mp_res_mat d2t_singular/solve_lib.doc:256
@end smallexample
@c ---end content mp_res_mat---

@c ------------------- interpolate -------------
@node interpolate, fglm_solve, mp_res_mat, solve_lib
@subsubsection interpolate
@cindex interpolate
@c ---content interpolate---
Procedure from library @code{solve.lib} (@pxref{solve_lib}).

@table @asis
@item @strong{Usage:}
interpolate(p,v,d); p,v=ideals of numbers, d=integer

@item @strong{Assume:}
Ground field K is the field of rational numbers, p and v are lists
of elements of the ground field K with p[j] != -1,0,1, size(p) = n
(= number of vars) and size(v)=N=(d+1)^n.

@item @strong{Return:}
poly f, the unique polynomial f of degree n*d with prescribed values
v[i] at the points p(i)=(p[1]^(i-1),..,p[n]^(i-1)), i=1,..,N.

@item @strong{Note:}
mainly useful when n=1, i.e. f is satisfying f(p^(i-1)) = v[i],
i=1..d+1.

@end table
@strong{Example:}
@smallexample
@c reused example interpolate d2t_singular/solve_lib.doc:311
LIB "solve.lib";
ring r1 = 0,(x),lp;
// determine f with deg(f) = 4 and
// v = values of f at points 3^0, 3^1, 3^2, 3^3, 3^4
ideal v=16,0,11376,1046880,85949136;
interpolate( 3, v, 4 );
@expansion{} 2x4-22x2+36
@c end example interpolate d2t_singular/solve_lib.doc:311
@end smallexample
@c inserted refs from d2t_singular/solve_lib.doc:320
@ifinfo
@menu
See also:
* vandermonde::
@end menu
@end ifinfo
@iftex
@strong{See also:}
@ref{vandermonde}.
@end iftex
@c end inserted refs from d2t_singular/solve_lib.doc:320

@c ---end content interpolate---

@c ------------------- fglm_solve -------------
@node fglm_solve, lex_solve, interpolate, solve_lib
@subsubsection fglm_solve
@cindex fglm_solve
@c ---content fglm_solve---
Procedure from library @code{solve.lib} (@pxref{solve_lib}).

@table @asis
@item @strong{Usage:}
fglm_solve(i [, p] ); i ideal, p integer

@item @strong{Assume:}
the ground field has char 0.

@item @strong{Return:}
a list of numbers, the complex roots of i;
@*p>0: gives precision of complex numbers in decimal digits (default:
p=30).

@item @strong{Note:}
The procedure uses a standard basis of i to determine all complex
roots of i.
@*It creates a ring rC with the same number of variables but with
complex coefficients (and precision p).

@end table
@strong{Example:}
@smallexample
@c reused example fglm_solve d2t_singular/solve_lib.doc:354
LIB "solve.lib";
ring r = 0,(x,y),lp;
// compute the intersection points of two curves
ideal s=  x2 + y2 - 10, x2 + xy + 2y2 - 16;
fglm_solve(s,10);
@expansion{} // name of new ring: rC
@expansion{} // list of roots: rlist
rlist;
@expansion{} [1]:
@expansion{}    [1]:
@expansion{}       2.8284271247
@expansion{}    [2]:
@expansion{}       1.4142135624
@expansion{} [2]:
@expansion{}    [1]:
@expansion{}       -2.8284271247
@expansion{}    [2]:
@expansion{}       -1.4142135624
@expansion{} [3]:
@expansion{}    [1]:
@expansion{}       1
@expansion{}    [2]:
@expansion{}       -3
@expansion{} [4]:
@expansion{}    [1]:
@expansion{}       -1
@expansion{}    [2]:
@expansion{}       3
@c end example fglm_solve d2t_singular/solve_lib.doc:354
@end smallexample
@c ---end content fglm_solve---

@c ------------------- lex_solve -------------
@node lex_solve, simplexOut, fglm_solve, solve_lib
@subsubsection lex_solve
@cindex lex_solve
@c ---content lex_solve---
Procedure from library @code{solve.lib} (@pxref{solve_lib}).

@table @asis
@item @strong{Usage:}
lex_solve( i[,p] ); i=ideal, p=integer,
 @format
  p>0: gives precision of complex numbers in decimal digits (default: p=30).
 @end format

@item @strong{Assume:}
i is a reduced lexicographical Groebner bases of a zero-dimensional
ideal, sorted by increasing leading terms.

@item @strong{Return:}
nothing

@item @strong{Create:}
The procedure creates a complec ring with the same variables but
with complex coefficients (and precision p).
@*In this ring a list rlist of numbers is created, in which the complex
roots of i are stored.

@end table
@strong{Example:}
@smallexample
@c reused example lex_solve d2t_singular/solve_lib.doc:395
LIB "solve.lib";
ring r = 0,(x,y),lp;
// compute the intersection points of two curves
ideal s=  x2 + y2 - 10, x2 + xy + 2y2 - 16;
lex_solve(stdfglm(s),10);
@expansion{} // name of new ring: rC
@expansion{} // list of roots: rlist
rlist;
@expansion{} [1]:
@expansion{}    [1]:
@expansion{}       2.8284271247
@expansion{}    [2]:
@expansion{}       1.4142135624
@expansion{} [2]:
@expansion{}    [1]:
@expansion{}       -2.8284271247
@expansion{}    [2]:
@expansion{}       -1.4142135624
@expansion{} [3]:
@expansion{}    [1]:
@expansion{}       1
@expansion{}    [2]:
@expansion{}       -3
@expansion{} [4]:
@expansion{}    [1]:
@expansion{}       -1
@expansion{}    [2]:
@expansion{}       3
@c end example lex_solve d2t_singular/solve_lib.doc:395
@end smallexample
@c ---end content lex_solve---

@c ------------------- simplexOut -------------
@node simplexOut, triangLf_solve, lex_solve, solve_lib
@subsubsection simplexOut
@cindex simplexOut
@c ---content simplexOut---
Procedure from library @code{solve.lib} (@pxref{solve_lib}).

@table @asis
@item @strong{Usage:}
simplexOut(l); l list

@item @strong{Assume:}
l is the output of simplex.

@item @strong{Return:}
nothing. The procedure prints the computed solution of simplex
(as strings) in a nice format.

@end table
@strong{Example:}
@smallexample
@c reused example simplexOut d2t_singular/solve_lib.doc:427
LIB "solve.lib";
ring r = (real,10),(x),lp;
// consider the max. problem:
//
//    maximize  x(1) + x(2) + 3*x(3) - 0.5*x(4)
//
//  with constraints:   x(1) +          2*x(3)          <= 740
//                             2*x(2)          - 7*x(4) <=   0
//                               x(2) -   x(3) + 2*x(4) >=   0.5
//                      x(1) +   x(2) +   x(3) +   x(4)  =   9
//
matrix sm[5][5]=   0, 1, 1, 3,-0.5,
740,-1, 0,-2, 0,
0, 0,-2, 0, 7,
0.5, 0,-1, 1,-2,
9,-1,-1,-1,-1;
int n = 4;  // number of constraints
int m = 4;  // number of variables
int m1= 2;  // number of <= constraints
int m2= 1;  // number of >= constraints
int m3= 1;  // number of == constraints
list sol=simplex(sm, n, m, m1, m2, m3);
simplexOut(sol);
@expansion{} z = 17.025
@expansion{} x2 = 3.325
@expansion{} x4 = 0.95
@expansion{} x3 = 4.725
@c end example simplexOut d2t_singular/solve_lib.doc:427
@end smallexample
@c inserted refs from d2t_singular/solve_lib.doc:453
@ifinfo
@menu
See also:
* simplex::
@end menu
@end ifinfo
@iftex
@strong{See also:}
@ref{simplex}.
@end iftex
@c end inserted refs from d2t_singular/solve_lib.doc:453

@c ---end content simplexOut---

@c ------------------- triangLf_solve -------------
@node triangLf_solve, triangM_solve, simplexOut, solve_lib
@subsubsection triangLf_solve
@cindex triangLf_solve
@c ---content triangLf_solve---
Procedure from library @code{solve.lib} (@pxref{solve_lib}).

@table @asis
@item @strong{Usage:}
triangLf_solve(i [, p] ); i ideal, p integer,
@*p>0: gives precision of complex numbers in digits (default: p=30).

@item @strong{Assume:}
the ground field has char 0; i is a zero-dimensional ideal

@item @strong{Return:}
nothing

@item @strong{Create:}
The procedure creates a ring rC with the same number of variables but
with complex coefficients (and precision p).@*
In rC a list rlist of numbers is created, in which the complex
roots of i are stored.@*
The proc uses a triangular system (Lazard's Algorithm with
factorization) computed from a standard basis to determine recursively
all complex roots with Laguerre's algorithm of input ideal i.

@end table
@strong{Example:}
@smallexample
@c reused example triangLf_solve d2t_singular/solve_lib.doc:489
LIB "solve.lib";
ring r = 0,(x,y),lp;
// compute the intersection points of two curves
ideal s=  x2 + y2 - 10, x2 + xy + 2y2 - 16;
triangLf_solve(s,10);
@expansion{} // name of new ring: rC
@expansion{} // list of roots: rlist
rlist;
@expansion{} [1]:
@expansion{}    [1]:
@expansion{}       -1
@expansion{}    [2]:
@expansion{}       3
@expansion{} [2]:
@expansion{}    [1]:
@expansion{}       1
@expansion{}    [2]:
@expansion{}       -3
@expansion{} [3]:
@expansion{}    [1]:
@expansion{}       2.8284271247
@expansion{}    [2]:
@expansion{}       1.4142135624
@expansion{} [4]:
@expansion{}    [1]:
@expansion{}       -2.8284271247
@expansion{}    [2]:
@expansion{}       -1.4142135624
@c end example triangLf_solve d2t_singular/solve_lib.doc:489
@end smallexample
@c ---end content triangLf_solve---

@c ------------------- triangM_solve -------------
@node triangM_solve, triangL_solve, triangLf_solve, solve_lib
@subsubsection triangM_solve
@cindex triangM_solve
@c ---content triangM_solve---
Procedure from library @code{solve.lib} (@pxref{solve_lib}).

@table @asis
@item @strong{Usage:}
triangM_solve(i [, p ] ); i=ideal, p=integer,
@*p>0: gives precision of complex numbers in digits (default: p=30).

@item @strong{Assume:}
the ground field has char 0;@*
i zero-dimensional ideal

@item @strong{Return:}
nothing

@item @strong{Create:}
The procedure creates a ring rC with the same number of variables but
with complex coefficients (and precision p).@*
In rC a list rlist of numbers is created, in which the complex
roots of i are stored.@*
The proc uses a triangular system (Moellers Algorithm) computed from a
standard basis to determine recursively all complex roots with
Laguerre's algorithm of input ideal i.

@end table
@strong{Example:}
@smallexample
@c reused example triangM_solve d2t_singular/solve_lib.doc:531
LIB "solve.lib";
ring r = 0,(x,y),lp;
// compute the intersection points of two curves
ideal s=  x2 + y2 - 10, x2 + xy + 2y2 - 16;
triangM_solve(s,10);
@expansion{} // name of new ring: rC
@expansion{} // list of roots: rlist
rlist;
@expansion{} [1]:
@expansion{}    [1]:
@expansion{}       2.8284271247
@expansion{}    [2]:
@expansion{}       1.4142135624
@expansion{} [2]:
@expansion{}    [1]:
@expansion{}       -2.8284271247
@expansion{}    [2]:
@expansion{}       -1.4142135624
@expansion{} [3]:
@expansion{}    [1]:
@expansion{}       1
@expansion{}    [2]:
@expansion{}       -3
@expansion{} [4]:
@expansion{}    [1]:
@expansion{}       -1
@expansion{}    [2]:
@expansion{}       3
@c end example triangM_solve d2t_singular/solve_lib.doc:531
@end smallexample
@c ---end content triangM_solve---

@c ------------------- triangL_solve -------------
@node triangL_solve, triang_solve, triangM_solve, solve_lib
@subsubsection triangL_solve
@cindex triangL_solve
@c ---content triangL_solve---
Procedure from library @code{solve.lib} (@pxref{solve_lib}).

@table @asis
@item @strong{Usage:}
triangL_solve(i [, p] ); i=ideal, p=integer,@*
p>0: gives precision of complex numbers in digits (default: p=30).

@item @strong{Assume:}
the ground field has char 0; i is a zero-dimensional ideal.

@item @strong{Return:}
nothing

@item @strong{Create:}
The procedure creates a ring rC with the same number of variables but
with complex coefficients (and precision p).@*
In rC a list rlist of numbers is created, in which the complex
roots of i are stored.@*
The proc uses a triangular system (Lazard's Algorithm) computed from
a standard basis to determine recursively all complex roots with
Laguerre's algorithm of input ideal i.

@end table
@strong{Example:}
@smallexample
@c reused example triangL_solve d2t_singular/solve_lib.doc:572
LIB "solve.lib";
ring r = 0,(x,y),lp;
// compute the intersection points of two curves
ideal s=  x2 + y2 - 10, x2 + xy + 2y2 - 16;
triangL_solve(s,10);
@expansion{} // name of new ring: rC
@expansion{} // list of roots: rlist
rlist;
@expansion{} [1]:
@expansion{}    [1]:
@expansion{}       2.8284271247
@expansion{}    [2]:
@expansion{}       1.4142135624
@expansion{} [2]:
@expansion{}    [1]:
@expansion{}       -2.8284271247
@expansion{}    [2]:
@expansion{}       -1.4142135624
@expansion{} [3]:
@expansion{}    [1]:
@expansion{}       1
@expansion{}    [2]:
@expansion{}       -3
@expansion{} [4]:
@expansion{}    [1]:
@expansion{}       -1
@expansion{}    [2]:
@expansion{}       3
@c end example triangL_solve d2t_singular/solve_lib.doc:572
@end smallexample
@c ---end content triangL_solve---

@c ------------------- triang_solve -------------
@node triang_solve,, triangL_solve, solve_lib
@subsubsection triang_solve
@cindex triang_solve
@c ---content triang_solve---
Procedure from library @code{solve.lib} (@pxref{solve_lib}).

@table @asis
@item @strong{Usage:}
triang_solve(l,p [, d] ); l=list, p,d=integers,@*
l a list of finitely many triangular systems, such that the union of
their varieties equals the variety of the initial ideal.@*
p>0: gives precision of complex numbers in digits,@*
d>0: gives precision (1<d<p) for near-zero-determination,@*
(default: d=1/2*p).

@item @strong{Assume:}
the ground field has char 0;@*
l was computed using Algorithm of Lazard or Algorithm of Moeller
(see triang.lib).

@item @strong{Return:}
nothing

@item @strong{Create:}
The procedure creates a ring rC with the same number of variables but
with complex coefficients (and precision p).@*
In rC a list rlist of numbers is created, in which the complex
roots of i are stored.@*

@end table
@strong{Example:}
@smallexample
@c reused example triang_solve d2t_singular/solve_lib.doc:616
LIB "solve.lib";
ring r = 0,(x,y),lp;
// compute the intersection points of two curves
ideal s=  x2 + y2 - 10, x2 + xy + 2y2 - 16;
triang_solve(triangLfak(stdfglm(s)),10);
@expansion{} // name of new ring: rC
@expansion{} // list of roots: rlist
rlist;
@expansion{} [1]:
@expansion{}    [1]:
@expansion{}       -1
@expansion{}    [2]:
@expansion{}       3
@expansion{} [2]:
@expansion{}    [1]:
@expansion{}       1
@expansion{}    [2]:
@expansion{}       -3
@expansion{} [3]:
@expansion{}    [1]:
@expansion{}       2.8284271247
@expansion{}    [2]:
@expansion{}       1.4142135624
@expansion{} [4]:
@expansion{}    [1]:
@expansion{}       -2.8284271247
@expansion{}    [2]:
@expansion{}       -1.4142135624
@c end example triang_solve d2t_singular/solve_lib.doc:616
@end smallexample
@c ---end content triang_solve---


code:
@c ---content LibInfo---
@comment This file was generated by doc2tex.pl from d2t_singular/spcurve_lib.doc
@comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/spcurve_lib.doc INSTEAD
@c library version: (1.15.2.1,2002/02/20)
@c library file: ../Singular/LIB/spcurve.lib
@cindex spcurve.lib
@cindex spcurve_lib
@table @asis
@item @strong{Library:}
spcurve.lib
@item @strong{Purpose:}
    Deformations and Invariants of CM-codim 2 Singularities
@item @strong{Author:}
Anne Fruehbis-Krueger, anne@@mathematik.uni-kl.de

@end table

@strong{Procedures:}
@menu
* isCMcod2:: presentation matrix of the ideal i, if i is CM
* CMtype:: Cohen-Macaulay type of the ideal i
* matrixT1:: 1st order deformation T1 in matrix description
* semiCMcod2:: semiuniversal deformation of maximal minors of M
* discr:: discriminant of semiuniversal deformation
* qhmatrix:: weights if M is quasihomogeneous
* relweight:: relative matrix weight of N w.r.t. weights (W,a)
* posweight:: deformation of coker(M) of non-negative weight
* KSpencerKernel:: kernel of the Kodaira-Spencer map
@end menu
@c ---end content LibInfo---

@c ------------------- isCMcod2 -------------
@node isCMcod2, CMtype,, spcurve_lib
@subsubsection isCMcod2
@cindex isCMcod2
@c ---content isCMcod2---
Procedure from library @code{spcurve.lib} (@pxref{spcurve_lib}).

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

@item @strong{Return:}
presentation matrix of i, if i is Cohen-Macaulay of codimension 2 @*
a zero matrix otherwise

@end table
@strong{Example:}
@smallexample
@c computed example isCMcod2 d2t_singular/spcurve_lib.doc:48
LIB "spcurve.lib";
ring r=32003,(x,y,z),ds;
ideal i=xz,yz,x^3-y^4;
print(isCMcod2(i));
@expansion{} -y,-x2,
@expansion{} x, y3,
@expansion{} 0, z
@c end example isCMcod2 d2t_singular/spcurve_lib.doc:48
@end smallexample
@c ---end content isCMcod2---

@c ------------------- CMtype -------------
@node CMtype, matrixT1, isCMcod2, spcurve_lib
@subsubsection CMtype
@cindex CMtype
@c ---content CMtype---
Procedure from library @code{spcurve.lib} (@pxref{spcurve_lib}).

@table @asis
@item @strong{Usage:}
CMtype(i); i an ideal, CM of codimension 2

@item @strong{Return:}
Cohen-Macaulay type of i (integer)
@*(-1, if i is not Cohen-Macaulay of codimension 2)

@end table
@strong{Example:}
@smallexample
@c computed example CMtype d2t_singular/spcurve_lib.doc:75
LIB "spcurve.lib";
ring r=32003,(x,y,z),ds;
ideal i=xy,xz,yz;
CMtype(i);
@expansion{} 2
@c end example CMtype d2t_singular/spcurve_lib.doc:75
@end smallexample
@c ---end content CMtype---

@c ------------------- matrixT1 -------------
@node matrixT1, semiCMcod2, CMtype, spcurve_lib
@subsubsection matrixT1
@cindex matrixT1
@c ---content matrixT1---
Procedure from library @code{spcurve.lib} (@pxref{spcurve_lib}).

@table @asis
@item @strong{Usage:}
matrixT1(M,n); M matrix, n integer

@item @strong{Assume:}
M is a presentation matrix of an ideal i, CM of codimension 2;
consider i as a family of ideals in a ring in the first n
variables where the remaining variables are considered as
parameters

@item @strong{Return:}
list consisting of the k x (k+1) matrix M and a module K_M such that
T1=Mat(k,k+1;R)/K_M is the space of first order deformations of i

@end table
@strong{Example:}
@smallexample
@c computed example matrixT1 d2t_singular/spcurve_lib.doc:108
LIB "spcurve.lib";
ring r=32003,(x(1),x(2),x(3)),ds;
ideal curve=x(1)*x(2),x(1)*x(3),x(2)*x(3);
matrix M=isCMcod2(curve);
matrixT1(M,3);
@expansion{} [1]:
@expansion{}    _[1,1]=0
@expansion{}    _[1,2]=-x(3)
@expansion{}    _[2,1]=-x(2)
@expansion{}    _[2,2]=x(2)
@expansion{}    _[3,1]=x(1)
@expansion{}    _[3,2]=0
@expansion{} [2]:
@expansion{}    _[1]=gen(5)
@expansion{}    _[2]=gen(4)-gen(3)
@expansion{}    _[3]=-gen(2)
@expansion{}    _[4]=x(1)*gen(5)-x(2)*gen(3)
@expansion{}    _[5]=x(1)*gen(6)-x(2)*gen(4)
@expansion{}    _[6]=x(2)*gen(3)-x(3)*gen(1)
@expansion{}    _[7]=x(2)*gen(4)-x(3)*gen(2)
@expansion{}    _[8]=-x(3)*gen(2)
@expansion{}    _[9]=x(2)*gen(2)-x(2)*gen(1)
@expansion{}    _[10]=x(1)*gen(1)
@expansion{}    _[11]=-x(3)*gen(4)
@expansion{}    _[12]=x(2)*gen(4)-x(2)*gen(3)
@expansion{}    _[13]=x(1)*gen(3)
@expansion{}    _[14]=-x(3)*gen(6)
@expansion{}    _[15]=x(2)*gen(6)-x(2)*gen(5)
@expansion{}    _[16]=x(1)*gen(5)
@c end example matrixT1 d2t_singular/spcurve_lib.doc:108
@end smallexample
@c ---end content matrixT1---

@c ------------------- semiCMcod2 -------------
@node semiCMcod2, discr, matrixT1, spcurve_lib
@subsubsection semiCMcod2
@cindex semiCMcod2
@c ---content semiCMcod2---
Procedure from library @code{spcurve.lib} (@pxref{spcurve_lib}).

@table @asis
@item @strong{Usage:}
semiCMcod2(M,t1); M matrix, t1 module

@item @strong{Assume:}
M is a presentation matrix of an ideal i, CM of codimension 2,
and t1 is a presentation of the space of first order deformations
of i ((M,t1) as returned by the procedure matrixT1)

@item @strong{Create:}
new basering with name rneu

@item @strong{Return:}
ideal in rneu describing the semiuniversal deformation of i

@item @strong{Note:}
The current basering should not contain any variables named
A(j) where j is some integer!

@end table
@strong{Example:}
@smallexample
@c computed example semiCMcod2 d2t_singular/spcurve_lib.doc:147
LIB "spcurve.lib";
ring r=32003,(x(1),x(2),x(3)),ds;
ideal curve=x(1)*x(2),x(1)*x(3),x(2)*x(3);
matrix M=isCMcod2(curve);
list l=matrixT1(M,3);
semiCMcod2(l[1],std(l[2]));
@expansion{} _[1]=A(2)*A(3)-x(2)*A(3)-x(1)*x(2)
@expansion{} _[2]=A(1)*A(3)+x(1)*x(3)
@expansion{} _[3]=-x(2)*A(1)-x(3)*A(2)+x(2)*x(3)
@c end example semiCMcod2 d2t_singular/spcurve_lib.doc:147
@end smallexample
@c ---end content semiCMcod2---

@c ------------------- discr -------------
@node discr, qhmatrix, semiCMcod2, spcurve_lib
@subsubsection discr
@cindex discr
@c ---content discr---
Procedure from library @code{spcurve.lib} (@pxref{spcurve_lib}).

@table @asis
@item @strong{Usage:}
discr(sem,n); sem ideal, n integer

@item @strong{Assume:}
sem is the versal deformation of an ideal of codimension 2. @*
the first n variables of the ring are treated as variables
all the others as parameters

@item @strong{Return:}
ideal describing the discriminant

@item @strong{Note:}
This is not a powerful algorithm!

@end table
@strong{Example:}
@smallexample
@c computed example discr d2t_singular/spcurve_lib.doc:183
LIB "spcurve.lib";
ring r=32003,(x(1),x(2),x(3)),ds;
ideal curve=x(1)*x(2),x(1)*x(3),x(2)*x(3);
matrix M=isCMcod2(curve);
list l=matrixT1(M,3);
def sem=semiCMcod2(l[1],std(l[2]));
basering;
@expansion{} //   characteristic : 32003
@expansion{} //   number of vars : 6
@expansion{} //        block   1 : ordering ds
@expansion{} //                  : names    x(1) x(2) x(3)
@expansion{} //        block   2 : ordering dp
@expansion{} //                  : names    A(1) A(2) A(3)
@expansion{} //        block   3 : ordering C
discr(sem,3);
@expansion{} _[1]=A(1)*A(2)*A(3)
@c end example discr d2t_singular/spcurve_lib.doc:183
@end smallexample
@c ---end content discr---

@c ------------------- qhmatrix -------------
@node qhmatrix, relweight, discr, spcurve_lib
@subsubsection qhmatrix
@cindex qhmatrix
@c ---content qhmatrix---
Procedure from library @code{spcurve.lib} (@pxref{spcurve_lib}).

@table @asis
@item @strong{Usage:}
qhmatrix(M); M a k x (k+1) matrix

@item @strong{Return:}
list, consisting of an integer vector containing the weights of
the variables of the basering and an integer matrix giving the
weights of the entries of M, if M is quasihomogeneous;
zero integer vector and zero integer matrix, if M is not
quasihomogeneous, i.e. does not allow row and column weights

@end table
@strong{Example:}
@smallexample
@c computed example qhmatrix d2t_singular/spcurve_lib.doc:217
LIB "spcurve.lib";
ring r=0,(x,y,z),ds;
matrix M[3][2]=z,0,y,x,x^3,y;
qhmatrix(M);
@expansion{} [1]:
@expansion{}    1,2,1
@expansion{} [2]:
@expansion{}    1,0,
@expansion{}    2,1,
@expansion{}    3,2
pmat(M);
@expansion{} z,  0,
@expansion{} y,  x,
@expansion{} x3, y
@c end example qhmatrix d2t_singular/spcurve_lib.doc:217
@end smallexample
@c ---end content qhmatrix---

@c ------------------- relweight -------------
@node relweight, posweight, qhmatrix, spcurve_lib
@subsubsection relweight
@cindex relweight
@c ---content relweight---
Procedure from library @code{spcurve.lib} (@pxref{spcurve_lib}).

@table @asis
@item @strong{Assume:}
N is a non-zero matrix
@*W is an integer matrix of the same size as N
@*a is an integer vector giving the weights of the variables

@item @strong{Return:}
integer, max(a-weighted order(N_ij) - W_ij | all entries ij) @*
string "ERROR" if sizes do not match

@end table
@strong{Example:}
@smallexample
@c computed example relweight d2t_singular/spcurve_lib.doc:247
LIB "spcurve.lib";
ring r=32003,(x,y,z),ds;
matrix N[2][3]=z,0,y,x,x^3,y;
intmat W[2][3]=1,1,1,1,1,1;
intvec a=1,1,1;
relweight(N,W,a);
@expansion{} 2
@c end example relweight d2t_singular/spcurve_lib.doc:247
@end smallexample
@c ---end content relweight---

@c ------------------- posweight -------------
@node posweight, KSpencerKernel, relweight, spcurve_lib
@subsubsection posweight
@cindex posweight
@c ---content posweight---
Procedure from library @code{spcurve.lib} (@pxref{spcurve_lib}).

@table @asis
@item @strong{Usage:}
posweight(M,t1,n[,s]); M matrix, t1 module, n int, s string @*
n=0 : all deformations of non-negative weight @*
n=1 : only non-constant deformations of non-negative weight @*
n=2 : all deformations of positive weight @*
As an optional parameter the name of a new ring may be
specified.

@item @strong{Assume:}
M is a presentation matrix of a Cohen-Macaulay codimension 2
ideal and t1 is its T1 space in matrix notation

@item @strong{Create:}
new basering (default name: rneu); a different name for this ring
may be given as a 4th parameter

@item @strong{Return:}
list, consisting of a presentation matrix describing the deformation
given by the generators of T1 of non-negative/positive weight
and the weight vector for the new variables

@item @strong{Note:}
The current basering should not contain any variables named
T(i) where i is some integer!

@end table
@strong{Example:}
@smallexample
@c computed example posweight d2t_singular/spcurve_lib.doc:294
LIB "spcurve.lib";
ring r=32003,(x(1),x(2),x(3)),ds;
ideal curve=(x(3)-x(1)^2)*x(3),(x(3)-x(1)^2)*x(2),x(2)^2-x(1)^7*x(3);
matrix M=isCMcod2(curve);
list l=matrixT1(M,3);
list li=posweight(l[1],std(l[2]),0);
pmat(li[1]);
@expansion{} T(2)+x(1)*T(1), -x(3)+x(1)^2,
@expansion{} -x(3),          x(2),
@expansion{} x(2),           -x(1)^7
li[2];
@expansion{} 3,1
@c end example posweight d2t_singular/spcurve_lib.doc:294
@end smallexample
@c ---end content posweight---

@c ------------------- KSpencerKernel -------------
@node KSpencerKernel,, posweight, spcurve_lib
@subsubsection KSpencerKernel
@cindex KSpencerKernel
@c ---content KSpencerKernel---
Procedure from library @code{spcurve.lib} (@pxref{spcurve_lib}).

@table @asis
@item @strong{Usage:}
KSpencerKernel(M[,s][,v]); M matrix, s string, v intvec @*
optional parameters (please specify in this order, if both are
present):
@** s = first of the names of the new rings
@*e.g. "R" leads to ring names R and R1
@** v of size n(n+1) leads to the following module ordering @*
gen(v[1]) > gen(v[2]) > ... > gen(v[n(n+1)]) where the matrix
entry ij corresponds to gen((i-1)*n+j)

@item @strong{Assume:}
M is a quasihomogeneous n x (n+1) matrix where the n minors define
an isolated space curve singularity

@item @strong{Create:}
2 new rings (default names: rneu and reneu)
@*different ring names may be specified as a 2nd parameter

@item @strong{Return:}
coefficient matrix representing the kernel of the Kodaira-
Spencer map of the family of non-negative deformations
having the given singularity as special fibre

@item @strong{Note:}
* the initial basering should not contain variables with name
e(i) or T(i), since those variable names will internally be
used by the script
@** setting an intvec with 5 entries and name watchProgress
shows the progress of the computations: @*
watchProgress[1]>0 => option(prot) in groebner commands @*
watchProgress[2]>0 => trace output for highcorner @*
watchProgress[3]>0 => output of deformed matrix @*
watchProgress[4]>0 => result of elimination step @*
watchProgress[4]>1 => trace output of multiplications with xyz
and subsequent reductions @*
watchProgress[5]>0 => matrix representing the kernel using print

@end table
@strong{Example:}
@smallexample
@c computed example KSpencerKernel d2t_singular/spcurve_lib.doc:355
LIB "spcurve.lib";
ring r=0,(x,y,z),ds;
matrix M[3][2]=z-x^7,0,y^2,z,x^9,y;
def KS=KSpencerKernel(M,"ar");
print(KS);
@expansion{} T(7),   0,      0,      0,     0,     0,     0,     0,
@expansion{} KS[2,1],6*T(3), 3*T(7), 0,     0,     0,     0,     0,
@expansion{} KS[3,1],KS[3,2],KS[3,3],6*T(3),3*T(7),0,     0,     0,
@expansion{} 10*T(4),8*T(1), 7*T(5), 5*T(2),4*T(6),2*T(8),2*T(3),T(7)
nameof(basering);
@expansion{} ar
basering;
@expansion{} //   characteristic : 0
@expansion{} //   number of vars : 17
@expansion{} //        block   1 : ordering Ws
@expansion{} //                  : names    e(1) e(2) e(3) e(4) e(5) e(6) x y z
@expansion{} //                  : weights  -21 -10 -32 -21 -27 -16 3 16 21
@expansion{} //        block   2 : ordering wp
@expansion{} //                  : names    T(1) T(2) T(3) T(4) T(5) T(6) T(7) T(8)
@expansion{} //                  : weights     8    5    2   10    7    4    1    2
@expansion{} //        block   3 : ordering C
@c end example KSpencerKernel d2t_singular/spcurve_lib.doc:355
@end smallexample
@c ---end content KSpencerKernel---


code:
@c ---content LibInfo---
@comment This file was generated by doc2tex.pl from d2t_singular/spectrum_lib.doc
@comment DO NOT EDIT DIRECTLY, BUT EDIT d2t_singular/spectrum_lib.doc INSTEAD
@c library version: (1.12.2.3,2002/03/06)
@c library file: ../Singular/LIB/spectrum.lib
@cindex spectrum.lib
@cindex spectrum_lib
@table @asis
@item @strong{Library:}
spectrum.lib
@item @strong{Purpose:}
  Singularity Spectrum for Nondegenerate Singularities
@item @strong{Author:}
S. Endrass

@end table

@strong{Procedures:}
@menu
* spectrumnd:: spectrum of nondegenerate isolated singularity f
@end menu
@c ---end content LibInfo---

@c ------------------- spectrumnd -------------
@node spectrumnd,,, spectrum_lib
@subsubsection spectrumnd
@cindex spectrumnd
@c ---content spectrumnd---
Procedure from library @code{spectrum.lib} (@pxref{spectrum_lib}).

@table @asis
@item @strong{Usage:}
spectrumnd(f[,1]); poly f

@item @strong{Assume:}
basering has characteristic 0 and local ordering,
@*f has isolated singularity at 0 and nondegenerate principal part

@item @strong{Return:}
@format
list S:
  ideal S[1]: spectral numbers in increasing order
  intvec S[2]:
    int S[2][i]: multiplicity of spectral number S[1][i]
@end format

@item @strong{Note:}
if a second argument 1 is given,
@*no test for a degenerate principal part will be done
@*SEE_ALSO: gaussman_lib

@cindex singularities
@cindex Gauss-Manin connection
@cindex spectrum
@end table
@strong{Example:}
@smallexample
@c computed example spectrumnd d2t_singular/spectrum_lib.doc:56
LIB "spectrum.lib";
ring R=0,(x,y),ds;
poly f=x^31+x^6*y^7+x^2*y^12+x^13*y^2+y^29;
spectrumnd(f);
@expansion{} [1]:
@expansion{}    _[1]=-67/79
@expansion{}    _[2]=-62/79
@expansion{}    _[3]=-45/58
@expansion{}    _[4]=-57/79
@expansion{}    _[5]=-41/58
@expansion{}    _[6]=-55/79
@expansion{}    _[7]=-52/79
@expansion{}    _[8]=-37/58
@expansion{}    _[9]=-50/79
@expansion{}    _[10]=-18/29
@expansion{}    _[11]=-47/79
@expansion{}    _[12]=-45/79
@expansion{}    _[13]=-33/58
@expansion{}    _[14]=-16/29
@expansion{}    _[15]=-43/79
@expansion{}    _[16]=-42/79
@expansion{}    _[17]=-40/79
@expansion{}    _[18]=-1/2
@expansion{}    _[19]=-15/31
@expansion{}    _[20]=-14/29
@expansion{}    _[21]=-38/79
@expansion{}    _[22]=-27/58
@expansion{}    _[23]=-14/31
@expansion{}    _[24]=-35/79
@expansion{}    _[25]=-25/58
@expansion{}    _[26]=-13/31
@expansion{}    _[27]=-33/79
@expansion{}    _[28]=-12/29
@expansion{}    _[29]=-23/58
@expansion{}    _[30]=-31/79
@expansion{}    _[31]=-12/31
@expansion{}    _[32]=-30/79
@expansion{}    _[33]=-21/58
@expansion{}    _[34]=-11/31
@expansion{}    _[35]=-28/79
@expansion{}    _[36]=-10/29
@expansion{}    _[37]=-26/79
@expansion{}    _[38]=-19/58
@expansion{}    _[39]=-10/31
@expansion{}    _[40]=-25/79
@expansion{}    _[41]=-9/29
@expansion{}    _[42]=-17/58
@expansion{}    _[43]=-23/79
@expansion{}    _[44]=-9/31
@expansion{}    _[45]=-8/29
@expansion{}    _[46]=-21/79
@expansion{}    _[47]=-15/58
@expansion{}    _[48]=-8/31
@expansion{}    _[49]=-20/79
@expansion{}    _[50]=-7/29
@expansion{}    _[51]=-19/79
@expansion{}    _[52]=-18/79
@expansion{}    _[53]=-7/31
@expansion{}    _[54]=-13/58
@expansion{}    _[55]=-6/29
@expansion{}    _[56]=-16/79
@expansion{}    _[57]=-6/31
@expansion{}    _[58]=-15/79
@expansion{}    _[59]=-11/58
@expansion{}    _[60]=-14/79
@expansion{}    _[61]=-5/29
@expansion{}    _[62]=-13/79
@expansion{}    _[63]=-5/31
@expansion{}    _[64]=-9/58
@expansion{}    _[65]=-11/79
@expansion{}    _[66]=-4/29
@expansion{}    _[67]=-4/31
@expansion{}    _[68]=-10/79
@expansion{}    _[69]=-7/58
@expansion{}    _[70]=-9/79
@expansion{}    _[71]=-3/29
@expansion{}    _[72]=-8/79
@expansion{}    _[73]=-3/31
@expansion{}    _[74]=-7/79
@expansion{}    _[75]=-5/58
@expansion{}    _[76]=-6/79
@expansion{}    _[77]=-2/29
@expansion{}    _[78]=-2/31
@expansion{}    _[79]=-5/79
@expansion{}    _[80]=-3/58
@expansion{}    _[81]=-4/79
@expansion{}    _[82]=-3/79
@expansion{}    _[83]=-1/29
@expansion{}    _[84]=-1/31
@expansion{}    _[85]=-2/79
@expansion{}    _[86]=-1/58
@expansion{}    _[87]=-1/79
@expansion{}    _[88]=0
@expansion{}    _[89]=1/79
@expansion{}    _[90]=1/58
@expansion{}    _[91]=2/79
@expansion{}    _[92]=1/31
@expansion{}    _[93]=1/29
@expansion{}    _[94]=3/79
@expansion{}    _[95]=4/79
@expansion{}    _[96]=3/58
@expansion{}    _[97]=5/79
@expansion{}    _[98]=2/31
@expansion{}    _[99]=2/29
@expansion{}    _[100]=6/79
@expansion{}    _[101]=5/58
@expansion{}    _[102]=7/79
@expansion{}    _[103]=3/31
@expansion{}    _[104]=8/79
@expansion{}    _[105]=3/29
@expansion{}    _[106]=9/79
@expansion{}    _[107]=7/58
@expansion{}    _[108]=10/79
@expansion{}    _[109]=4/31
@expansion{}    _[110]=4/29
@expansion{}    _[111]=11/79
@expansion{}    _[112]=9/58
@expansion{}    _[113]=5/31
@expansion{}    _[114]=13/79
@expansion{}    _[115]=5/29
@expansion{}    _[116]=14/79
@expansion{}    _[117]=11/58
@expansion{}    _[118]=15/79
@expansion{}    _[119]=6/31
@expansion{}    _[120]=16/79
@expansion{}    _[121]=6/29
@expansion{}    _[122]=13/58
@expansion{}    _[123]=7/31
@expansion{}    _[124]=18/79
@expansion{}    _[125]=19/79
@expansion{}    _[126]=7/29
@expansion{}    _[127]=20/79
@expansion{}    _[128]=8/31
@expansion{}    _[129]=15/58
@expansion{}    _[130]=21/79
@expansion{}    _[131]=8/29
@expansion{}    _[132]=9/31
@expansion{}    _[133]=23/79
@expansion{}    _[134]=17/58
@expansion{}    _[135]=9/29
@expansion{}    _[136]=25/79
@expansion{}    _[137]=10/31
@expansion{}    _[138]=19/58
@expansion{}    _[139]=26/79
@expansion{}    _[140]=10/29
@expansion{}    _[141]=28/79
@expansion{}    _[142]=11/31
@expansion{}    _[143]=21/58
@expansion{}    _[144]=30/79
@expansion{}    _[145]=12/31
@expansion{}    _[146]=31/79
@expansion{}    _[147]=23/58
@expansion{}    _[148]=12/29
@expansion{}    _[149]=33/79
@expansion{}    _[150]=13/31
@expansion{}    _[151]=25/58
@expansion{}    _[152]=35/79
@expansion{}    _[153]=14/31
@expansion{}    _[154]=27/58
@expansion{}    _[155]=38/79
@expansion{}    _[156]=14/29
@expansion{}    _[157]=15/31
@expansion{}    _[158]=1/2
@expansion{}    _[159]=40/79
@expansion{}    _[160]=42/79
@expansion{}    _[161]=43/79
@expansion{}    _[162]=16/29
@expansion{}    _[163]=33/58
@expansion{}    _[164]=45/79
@expansion{}    _[165]=47/79
@expansion{}    _[166]=18/29
@expansion{}    _[167]=50/79
@expansion{}    _[168]=37/58
@expansion{}    _[169]=52/79
@expansion{}    _[170]=55/79
@expansion{}    _[171]=41/58
@expansion{}    _[172]=57/79
@expansion{}    _[173]=45/58
@expansion{}    _[174]=62/79
@expansion{}    _[175]=67/79
@expansion{} [2]:
@expansion{}    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,\
   1,1,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,2,1,1,1\
   ,1,1,2,1,1,1,1,2,1,1,1,1,1,2,1,4,1,2,1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,2,1,\
   1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1\
   ,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
@c end example spectrumnd d2t_singular/spectrum_lib.doc:56
@end smallexample
@c ---end content spectrumnd---