The input module M should be a maximal Cohen-Macaulay module over R = S/ideal ff. If M is in fact a "high syzygy", then the function matrixFactorization(ff,M,Layered=>false) uses a different, faster algorithm which only works in the high syzygy case.
In all examples we know, M can be considered a "high syzygy" as long as Ext^{even}_R(M,k) and Ext^{odd}_R(M,k) have negative regularity over the ring of CI operators (regraded with variables of degree 1. However, the best result we can prove is that it suffices to have regularity < -(2*dim R+1).
When the optional input Check==true (the default is Check==false), the properties in the definition of Matrix Factorization are verified
The output is a list of maps \{d,h\} or \{d,h,gamma\}, where gamma is an augmentation, that is, a map from target d to M.
The map d is a special lifting to S of a presentation of M over R. To explain the contents, we introduce some notation (from Eisenbud and Peeva, "Minimal free resolutions over complete intersections" Lecture Notes in Mathematics, 2152. Springer, Cham, 2016. x+107 pp. ISBN: 978-3-319-26436-3; 978-3-319-26437-0).
R(i) = S/(ff_0,..,ff_{i-1}). Here 0<= i <= c, and R = R(c) and S = R(0).
B(i) = the matrix (over S) representing d_i: B_1(i) \to B_0(i)
d(i): A_1(i) \to A_0(i) the restriction of d = d(c). where A(i) = \oplus_{i=1}^p B(i)
The map h is a direct sum of maps target d(p) \to source d(p) that are homotopies for ff_p on the restriction d(p): over the ring R#(p-1) = S/(ff#1..ff#(p-1), so d(p) * h#p = ff#p mod (ff#1..ff#(p-1).
In addition, h#p * d(p) induces ff#p on B1#p mod (ff#1..ff#(p-1).
Here is a simple example:
i1 : setRandomSeed 0 o1 = 0 |
i2 : kk = ZZ/101 o2 = kk o2 : QuotientRing |
i3 : S = kk[a,b,u,v] o3 = S o3 : PolynomialRing |
i4 : ff = matrix"au,bv" o4 = | au bv | 1 2 o4 : Matrix S <--- S |
i5 : R = S/ideal ff o5 = R o5 : QuotientRing |
i6 : M0 = R^1/ideal"a,b" o6 = cokernel | a b | 1 o6 : R-module, quotient of R |
i7 : M = highSyzygy M0 o7 = cokernel {2} | b -a 0 0 | {2} | 0 0 a b | {2} | 0 v 0 u | 3 o7 : R-module, quotient of R |
i8 : MF = matrixFactorization(ff,M); |
i9 : netList BRanks MF +-+-+ o9 = |2|2| +-+-+ |1|2| +-+-+ |
i10 : netList bMaps MF +-----------+ o10 = |{2} | a b || |{2} | 0 u || +-----------+ |{2} | b a || +-----------+ |
i11 : betti res(M, LengthLimit => 7) 0 1 2 3 4 5 6 7 o11 = total: 3 4 5 6 7 8 9 10 2: 3 4 5 6 7 8 9 10 o11 : BettiTally |
i12 : infiniteBettiNumbers (MF,7) o12 = {3, 4, 5, 6, 7, 8, 9, 10} o12 : List |
i13 : betti res pushForward(map(R,S),M) 0 1 2 o13 = total: 3 5 2 2: 3 4 . 3: . 1 2 o13 : BettiTally |
i14 : finiteBettiNumbers MF o14 = {3, 5, 2} o14 : List |
The object matrixFactorization is a method function with options.