Singular

7.7.19.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))); ==> 1,0,0,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 ```