##### 7.5.23.0. projectiveDimension

Procedure from library `purityfiltration.lib` (see purityfiltration_lib).

Usage:
  projectiveDimension(R,i,j), R matrix representing the Modul M=coker(R)
  int i, with i=0 or i=1, j a natural number

Return:
  list T, a projective resolution of M and its projective dimension

Purpose:
  if i=0 (and by default), T[1] gives a shortest left resolution of M=D^p/D^q(R^t) and T[2] the left projective dimension of M
  if i=1, T[1] gives a shortest right resolution of M=D^p/RD^q and T[2] the right projective dimension of M
  in both cases T[1][j] is the (j-1)-th syzygy module of M

Note:
  The algorithm is due to A. Quadrat, D. Robertz, Computation of bases of free modules over the Weyl algebras, J.Symb.Comp. 42, 2007.

Example:

    LIB "purityfiltration.lib";
    // commutative example
    ring D = 0,(x,y,z),dp;
    matrix R[6][4]=
    0,-2*x,z-2*y-x,-1,
    0,z-2*x,2*y-3*x,1,
    z,-6*x,-2*y-5*x,-1,
    0,y-x,y-x,0,
    y,-x,-y-x,0,
    x,-x,-2*x,0;
    // compute a left resolution of M=D^4/D^6*R
    list T=projectiveDimension(transpose(R),0);
    // so we have the left projective dimension
    T[2];
    ==> 3
    //we could also compute a right resolution of M=D^6/RD^4
    list T1=projectiveDimension(R,1);
    // and we have right projective dimension
    T1[2];
    ==> 1
    // check, that a syzygy matrix of R has left inverse:
    print(leftInverse(syz(R)));
    ==> 0,0,1,0
    // so lpd(M) must be 1.
    // Non-commutative example
    ring D1 = 0,(x1,x2,x3,d1,d2,d3),dp;
    def S=Weyl();  setring S;
    matrix R[3][3]=
    1/2*x2*d1, x2*d2+1, x2*d3+1/2*d1,
    -1/2*x2*d2-3/2,0,1/2*d2,
    -d1-1/2*x2*d3,-d2,-1/2*d3;
    list T=projectiveDimension(R,0);
    // left projective dimension of coker(R) is
    T[2];
    ==> 1
    list T1=projectiveDimension(R,1);
    // both modules have the same projective dimension, but different resolutions, because D is non-commutative
    print(T[1][1]);
    ==> 1/2*x2*d1,   -1/2*x2*d2-3/2,-1/2*x2*d3-d1,
    ==> x2*d2+1,     0,             -d2,
    ==> x2*d3+1/2*d1,1/2*d2,        -1/2*d3
    // not the same as
    print(transpose(T1[1][1]));
    ==> 1/2*x2*d1,   -1/2*x2*d2-3/2,-1/2*x2*d3-d1,-1/2*x2,
    ==> x2*d2+1,     0,             -d2,          0,
    ==> x2*d3+1/2*d1,1/2*d2,        -1/2*d3,      1/2

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