// The simple threefold singularity E7 and all non-free
// indecomposable MCM modules
LIB "conn.lib";
ring s = 0, (x,y,z,w), dp;
ideal i = x3+xy3+zw;
qring a = std(i);
matrix M1[2][2] = x,y,xy2,-x2;
matrix M2[2][2] = x,y2,xy,-x2;
matrix N1[2][2] = x2,y,xy2,-x;
matrix N2[2][2] = x2,y2,xy,-x;
matrix P[2][2] = x2,xy,xy2,-x2;
matrix Q[2][2] = x,y,y2,-x;
matrix R[1][1] = x;
matrix S[1][1] = x2+y3;
matrix X1[3][3] = xy2,-x2,-x2y,xy,y2,-x2,x2,xy,xy2;
matrix X2[3][3] = x2,-y2,-xy,xy,x,-y2,xy2,xy,x2;
matrix Y1[3][3] = y,0,x,-x,xy,0,0,-x,y;
matrix Y2[3][3] = x,0,y,-xy,x2,0,0,-xy,x;
matrix X3[4][4] = x2,xy,y,0,xy2,-x2,0,y,0,0,x,y,0,0,y2,-x;
matrix Y3[4][4] = x,y,-y,0,y2,-x,0,-y,0,0,x2,xy,0,0,xy2,-x2;
list MCM1 = M1,M2,N1,N2,P,Q,R,S,X1,X2,Y1,Y2,X3,Y3;
matrix sM1[2][2] = x2,y,xy2,-x;
matrix sM2[2][2] = x2,y2,xy,-x;
matrix sN1[2][2] = x,y,xy2,-x2;
matrix sN2[2][2] = x,y2,xy,-x2;
matrix sP[2][2] = x,y,y2,-x;
matrix sQ[2][2] = x2,xy,xy2,-x2;
matrix sR[1][1] = x2+y3;
matrix sS[1][1] = x;
matrix sX1[3][3] = y,0,x,-x,xy,0,0,-x,y;
matrix sX2[3][3] = x,0,y,-xy,x2,0,0,-xy,x;
matrix sY1[3][3] = xy2,-x2,-x2y,xy,y2,-x2,x2,xy,xy2;
matrix sY2[3][3] = x2,-y2,-xy,xy,x,-y2,xy2,xy,x2;
matrix sX3[4][4] = x,y,-y,0,y2,-x,0,-y,0,0,x2,xy,0,0,xy2,-x2;
matrix sY3[4][4] = x2,xy,y,0,xy2,-x2,0,y,0,0,x,y,0,0,y2,-x;
list sMCM1 = sM1,sM2,sN1,sN2,sP,sQ,sR,sS,sX1,sX2,sY1,sY2,sX3,sY3;
list MCM, sMCM;
matrix e11[2][2] = 1,0,0,0;
matrix e12[2][2] = 0,1,0,0;
matrix e21[2][2] = 0,0,1,0;
matrix e22[2][2] = 0,0,0,1;
int i; int ms;
for (i=1; i<=size(MCM1);i++)
{
ms = ncols(MCM1[i]);
MCM[i] = tensor(e11,diag(z,ms)) - tensor(e12,sMCM1[i]) + tensor(e21,MCM1[i]) + tensor(e22,diag(w,ms));
sMCM[i] = tensor(e11,diag(w,ms)) + tensor(e12,sMCM1[i]) - tensor(e21,MCM1[i]) + tensor(e22,diag(z,ms));
}
print("Threefold E7:");
print("-------");
for(i=1;i<=size(MCM);i++)
{
print("Module:");
print("-------");
print(MCM[i]);
print("-------");
print("Obstructions:");
print("-------");
print(KSKernel(MCM[i]));
print(LClass(MCM[i]));
print("-------");
}