substitute matrices of two differentials of F into S = ring ff, compose them, and divide by entries of ff, in order. If the second Matrix argument t0 is present, use it as the first CI operator.
The degrees of the targets of the T_j are changed by the degrees of the f_j to make the T_j homogeneneous.
i1 : S = ZZ/101[x,y,z]; |
i2 : ff = matrix"x3,y3,z3"; 1 3 o2 : Matrix S <--- S |
i3 : R = S/ideal ff; |
i4 : M = coker matrix"x,y,z;y,z,x"; |
i5 : betti (F = res M) 0 1 2 3 4 o5 = total: 2 3 5 6 8 0: 2 3 . . . 1: . . 5 6 . 2: . . . . 8 o5 : BettiTally |
i6 : T = makeT(ff,F,3); |
i7 : netList T +------------------------+ o7 = |{4} | 0 0 0 0 1 0 | | |{4} | 0 0 0 -1 0 0 | | |{4} | 0 0 0 0 0 1 | | +------------------------+ |{4} | 0 1 0 0 0 0 | | |{4} | 1 0 0 0 0 0 | | |{4} | 0 0 1 0 0 0 | | +------------------------+ |{4} | 0 -1 0 0 -1 0 || |{4} | -1 0 0 1 0 0 || |{4} | 0 0 -1 0 0 -1 || +------------------------+ |
i8 : isHomogeneous T_2 o8 = true |
Script assumes that ring F == (ring ff)/(ideal ff). It might be more useful to return the operators as matrices over S rather than over R, since this is what we'd need for things like matrixFactorization (where this process currently done on the fly, not calling makeT)
The object makeT is a method function.