### A.3.5 Handling graded modules

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).

User manual for Singular version 4.4.1, 2025, generated by texi2html.