# Singular

How to deal with graded modules in SINGULAR is best explained by looking at an example:

 ring R = 0, (w,x,y,z), dp; module I = [-x,0,-z2,0,y2z], [0,-x,-yz,0,y3], [-w,0,0,yz,-z3], [0,-w,0,y2,-yz2], [0,-1,-w,0,xz], [0,-w,0,y2,-yz2], [x2,-y2,-wy2+xz2]; print(I); ==> -x, 0, -w, 0, 0, 0, x2, ==> 0, -x, 0, -w, -1,-w, -y2, ==> -z2,-yz,0, 0, -w,0, -wy2+xz2, ==> 0, 0, yz, y2, 0, y2, 0, ==> y2z,y3, -z3,-yz2,xz,-yz2,0 // (1) Check on degrees: // ===================== attrib(I,"isHomog"); // attribute not set => empty output ==> homog(I); ==> 1 attrib(I,"isHomog"); ==> 2,2,1,1,0 print(betti(I,0),"betti"); // read degrees from Betti diagram ==> 0 1 ==> ------------------ ==> 0: 1 - ==> 1: 2 1 ==> 2: 2 5 ==> 3: - 1 ==> ------------------ ==> total: 5 7 ==> // (2) Shift degrees: // ================== def J=I; intvec DV = 0,0,-1,-1,-2; attrib(J,"isHomog",DV); // assign new weight vector attrib(J,"isHomog"); ==> 0,0,-1,-1,-2 print(betti(J,0),"betti"); ==> 0 1 ==> ------------------ ==> -2: 1 - ==> -1: 2 1 ==> 0: 2 5 ==> 1: - 1 ==> ------------------ ==> total: 5 7 ==> intmat bettiI=betti(I,0); // degree corresponding to first non-zero row // of Betti diagram is accessible via // attribute "rowShift" attrib(bettiI); ==> attr:rowShift, type int intmat bettiJ=betti(J,0); attrib(bettiJ); ==> attr:rowShift, type int // (3) Graded free resolutions: // ============================ resolution resJ = mres(J,0); attrib(resJ); ==> attr:isHomog, type intvec print(betti(resJ),"betti"); ==> 0 1 2 ==> ------------------------ ==> -2: 1 - - ==> -1: 2 - - ==> 0: 1 4 - ==> 1: - - 1 ==> ------------------------ ==> total: 4 4 1 ==> attrib(betti(resJ)); ==> attr:rowShift, type int 

A check on degrees ((1), by using the homog command) shows that this is a graded matrix. The homog command assigns an admissible weight vector (here: 2,2,1,1,0) to the module I which is accessible via the attribute "isHomog". Thus, we may think of I as a graded submodule of the graded free -module We may also read the degrees from the Betti diagram as shown above. The degree on the left of the first nonzero row of the Betti diagram is accessible via the attribute "rowShift" of the betti matrix (which is of type intmat):

(2) We may shift degrees by assigning another admissible degree vector. Note that SINGULAR does not check whether the assigned degree vector really is admissible. Moreover, note that all assigned attributes are lost under a type conversion (e.g. from module to matrix).

(3) These considerations may be applied when computing data from free resolutions (see Computation of Ext).

### Misc 