# Singular

#### D.6.5.1 versal

Procedure from library `deform.lib` (see deform_lib).

Usage:
versal(Fo[,d,any]); Fo=ideal, d=int, any=list

Compute:
miniversal deformation of Fo up to degree d (default d=100),

Return:
list L of 4 rings:
L[1] extending the basering Po by new variables given by "A,B,.." (deformation parameters); the new variables precede the old ones, the ordering is the product of "ls" and "ord(Po)"
L[2] = L[1]/Fo extending Qo=Po/Fo,
L[3] = the embedding ring of the versal base space,
L[4] = L[1]/Js extending L[3]/Js.
In the ring L[1] the following matrices are stored:
Js = giving the versal base space (obstructions),
Fs = giving the versal family of Fo,
Rs = giving the lifting of Ro=syz(Fo).

If d is defined (!=0), it computes up to degree d.
If 'any' is defined and any[1] is no string, interactive version.
Otherwise 'any' is interpreted as a list of predefined strings: "my","param","order","out":
("my" internal prefix, "param" is a letter (e.g. "A") for the name of the first parameter or (e.g. "A(") for index parameter variables, "order" ordering string for ring extension), "out" name of output file).

Note:
printlevel < 0 no additional output,
printlevel >=0,1,2,.. informs you, what is going on;
this proc uses 'execute'.

Example:
 ```LIB "deform.lib"; int p = printlevel; printlevel = 0; ring r1 = 0,(x,y,z,u,v),ds; matrix m[2][4] = x,y,z,u,y,z,u,v; ideal Fo = minor(m,2); // cone over rational normal curve of degree 4 list L=versal(Fo); ==> // ready: T_1 and T_2 ==> // start computation in degree 2. ==> // ** J is no standard basis ==> ==> ==> // 'versal' returned a list, say L, of four rings. In L[1] are stored: ==> // as matrix Fs: Equations of total space of the miniversal deformation\ , ==> // as matrix Js: Equations of miniversal base space, ==> // as matrix Rs: syzygies of Fs mod Js. ==> // To access these data, type ==> def Px=L[1]; setring Px; print(Fs); print(Js); print(Rs); ==> ==> // L[2] = L[1]/Fo extending Qo=Po/Fo, ==> // L[3] = the embedding ring of the versal base space, ==> // L[4] = L[1]/Js extending L[3]/Js. ==> L; ==> [1]: ==> // characteristic : 0 ==> // number of vars : 9 ==> // block 1 : ordering ds ==> // : names A B C D ==> // block 2 : ordering ds ==> // : names x y z u v ==> // block 3 : ordering C ==> [2]: ==> // characteristic : 0 ==> // number of vars : 9 ==> // block 1 : ordering ds ==> // : names A B C D ==> // block 2 : ordering ds ==> // : names x y z u v ==> // block 3 : ordering C ==> // quotient ring from ideal ... ==> [3]: ==> // characteristic : 0 ==> // number of vars : 4 ==> // block 1 : ordering ds ==> // : names A B C D ==> // block 2 : ordering C ==> [4]: ==> // characteristic : 0 ==> // number of vars : 9 ==> // block 1 : ordering ds ==> // : names A B C D ==> // block 2 : ordering ds ==> // : names x y z u v ==> // block 3 : ordering C ==> // quotient ring from ideal ... def Px=L[1]; setring Px; // ___ Equations of miniversal base space ___: Js;""; ==> Js[1,1]=BD ==> Js[1,2]=AD-D2 ==> Js[1,3]=-CD ==> // ___ Equations of miniversal total space ___: Fs;""; ==> Fs[1,1]=-u2+zv+Bu+Dv ==> Fs[1,2]=-zu+yv-Au+Du ==> Fs[1,3]=-yu+xv+Cu+Dz ==> Fs[1,4]=z2-yu+Az+By ==> Fs[1,5]=yz-xu+Bx-Cz ==> Fs[1,6]=-y2+xz+Ax+Cy ==> ```