Home Online Manual
Top
Back: purityfiltration_lib
Forward: purityFiltration
FastBack:
FastForward:
Up: purityfiltration_lib
Top: Singular Manual
Contents: Table of Contents
Index: Index
About: About this document
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