4.8 Free resolution

In SINGULAR a free resolution of a module or ideal has its own type: resolution. It is a structure that stores all information related to free resolutions. This allows partial computations of resolutions via the command res. After applying res, only a pre-format of the resolution is computed which allows to determine invariants like Betti-numbers or homological dimension. To see the differentials of the complex, a resolution must be converted into the type list which yields a list of modules: the k-th module in this list is the first syzygy-module (module of relations) of the (k-1)st module. There are the following commands to compute a resolution:

res
computes a free resolution of an ideal or module using a heuristically chosen method. This is the prefered method to compute free resolutions of ideals or modules.
lres
computes a free resolution of an ideal or module with LaScala's method. The input needs to be homogeneous.
mres
computes a minimal free resolution of an ideal or module with the Szyzygy method.
sres
computes a free resolution of an ideal or module with Schreyer's method. The input has to be a standard basis.
nres
computes a free resolution of an ideal or module with the standard basis method.
minres
minimizes a free resolution of an ideal or module.
syz
computes the first Szyzygy (i.e., the module of relations of the given generators).

res(i,r), lres(i,r), sres(i,r), mres(i,r), nres(i,r) compute the first r modules of the resolution of i, resp. the full resolution if r=0 and the basering is not a qring. See the the manual for a precise description of these commands.
Note: The command betti does not require a minimal resolution for the minimal betti numbers.

Now let's look at an examples which uses resolutions: The Hilbert-Burch theorem says that the ideal i of a reduced curve in K^3 has a free resolution of length 2 and that i is given by the 2x2 minors of the 2nd matrix in the resolution. We test this for the two transversal cusps in K^3. Afterwards we compute the resolution of the ideal j of the tangent developable of the rational normal curve in P^4 from above. Finally we demonstrate the use of the type resoltuion in connection with the lres command.

// Two transversal cusps in (k^3,0):
ring r2 =0,(x,y,z),ds;
ideal i =z2-1y3+x3y,xz,-1xy2+x4,x3z;
resolution rs=mres(i,0);   // computes a minimal resolution
rs;                        // the standard representation of complexes
==>   1       3       2       0
==> r2  <-- r2  <-- r2  <-- r2
==> 
==> 0       1       2       3
==> 
  list resi=rs;            // convertion to a list
print(resi[1]);            // the 1-st module is i minimized
==> xz,
==> z2-y3+x3y,
==> xy2-x4
print(resi[2]);            // the 1-st syzygy module of i
==> -z,-y2+x3,
==> x, 0,     
==> y, z      
resi[3];                   // the 2-nd syzygy module of i
==> _[1]=0
ideal j=minor(resi[2],2);
reduce(j,std(i));          // check whether j is contained in i
==> _[1]=0
==> _[2]=0
==> _[3]=0
size(reduce(i,std(j)));    // check whether i is contained in j
==> 0
// size(<ideal>) counts the non-zero generators
// ---------------------------------------------
// The tangent developable of the rational normal curve in P^4:
ring P = 0,(a,b,c,d,e),dp;
ideal j= 3c2-4bd+ae, -2bcd+3ad2+3b2e-4ace,
         8b2d2-9acd2-9b2ce+9ac2e+2abde-1a2e2;
resolution rs=mres(j,0);
rs;
==>  1      2      1      0
==> P  <-- P  <-- P  <-- P
==> 
==> 0      1      2      3
==> 
list L=rs;
print(L[2]);
==> 2bcd-3ad2-3b2e+4ace,
==> -3c2+4bd-ae         
// create an intmat with graded betti numbers
intmat B=betti(rs);
// this gives a nice output of betti numbers
print(B,"betti");
==>            0     1     2
==> ------------------------
==>     0:     1     0     0
==>     1:     0     1     0
==>     2:     0     1     0
==>     3:     0     0     1
==> ------------------------
==> total:     1     2     1
// the user has access to all betti numbers
// the 2-nd column of B:
B[1..4,2];
==> 0 1 1 0
ring cyc5=32003,(a,b,c,d,e,h),dp;
ideal i=
a+b+c+d+e,
ab+bc+cd+de+ea,
abc+bcd+cde+dea+eab,
abcd+bcde+cdea+deab+eabc,
h5-abcde;
resolution rs=lres(i,0);   //computes the resolution according LaScala
rs;                        //the shape of the minimal resolution
==>     1         5         10         10         5         1         0
==> cyc5  <-- cyc5  <-- cyc5   <-- cyc5   <-- cyc5  <-- cyc5  <-- cyc5
==> 
==> 0         1         2          3          4         5         6
==> resolution not minimized yet
==> 
print(betti(rs),"betti");  //shows the Betti-numbers of cyclic 5
==>            0     1     2     3     4     5
==> ------------------------------------------
==>     0:     1     1     0     0     0     0
==>     1:     0     1     1     0     0     0
==>     2:     0     1     1     0     0     0
==>     3:     0     1     2     1     0     0
==>     4:     0     1     2     1     0     0
==>     5:     0     0     2     2     0     0
==>     6:     0     0     1     2     1     0
==>     7:     0     0     1     2     1     0
==>     8:     0     0     0     1     1     0
==>     9:     0     0     0     1     1     0
==>    10:     0     0     0     0     1     1
==> ------------------------------------------
==> total:     1     5    10    10     5     1
dim(rs);                   //the homological dimension
==> 4
size(list(rs));            //gets the full (non-reduced) resolution
==> 6
minres(rs);                //minimizes the resolution
==>     1         5         10         10         5         1         0
==> cyc5  <-- cyc5  <-- cyc5   <-- cyc5   <-- cyc5  <-- cyc5  <-- cyc5
==> 
==> 0         1         2          3          4         5         6
==> 
size(list(rs));            //gets the minimized resolution
==> 6