The resolutions computed are those described in the paper "Layered Resolutions of Cohen-Macaulay modules" by Eisenbud and Peeva. They are both minimal when M is a suffiently high syzygy of a module N. If the option Verbose=>true is set, then (in the case of the resolution over S) the ranks of the modules B_s in the resolution are output.
Here is an example computing 5 terms of an infinite resolution:
i1 : S = ZZ/101[a,b,c] o1 = S o1 : PolynomialRing |
i2 : ff = matrix"a3, b3, c3" o2 = | a3 b3 c3 | 1 3 o2 : Matrix S <--- S |
i3 : R = S/ideal ff o3 = R o3 : QuotientRing |
i4 : M = syzygyModule(2,coker vars R) o4 = cokernel {2} | a 0 -c2 0 b2 0 0 0 0 0 | {2} | -b 0 0 -c2 0 0 0 a2 0 0 | {2} | c 0 0 0 0 0 -b2 0 a2 0 | {3} | 0 c b a 0 0 0 0 0 0 | {3} | 0 0 0 0 c b a 0 0 0 | {3} | 0 0 0 0 0 0 0 c b a | 6 o4 : R-module, quotient of R |
i5 : (FF, aug) = layeredResolution(ff,M,5) 0 1 2 3 4 5 total: 4 4 4 4 4 4 2: 3 1 . . . . 3: 1 3 3 1 . . 4: . . 1 3 3 1 5: . . . . 1 3 0 1 2 3 4 5 total: 5 7 9 11 13 15 2: 3 1 . . . . 3: 2 6 6 2 . . 4: . . 3 9 9 3 5: . . . . 4 12 0 1 2 3 4 5 total: 6 10 15 21 28 36 2: 3 1 . . . . 3: 3 9 9 3 . . 4: . . 6 18 18 6 5: . . . . 10 30 6 10 15 21 28 36 o5 = (R <-- R <-- R <-- R <-- R <-- R , {2} | 0 0 0 1 0 0 |) {2} | 0 -1 0 0 0 0 | 0 1 2 3 4 5 {2} | 0 0 -1 0 0 0 | {3} | 0 0 0 0 0 1 | {3} | 0 0 0 0 1 0 | {3} | 1 0 0 0 0 0 | o5 : Sequence |
i6 : betti FF 0 1 2 3 4 5 o6 = total: 6 10 15 21 28 36 2: 3 1 . . . . 3: 3 9 9 3 . . 4: . . 6 18 18 6 5: . . . . 10 30 o6 : BettiTally |
i7 : betti res(M, LengthLimit=>5) 0 1 2 3 4 5 o7 = total: 6 10 15 21 28 36 2: 3 1 . . . . 3: 3 9 9 3 . . 4: . . 6 18 18 6 5: . . . . 10 30 o7 : BettiTally |
i8 : C = chainComplex flatten {{aug} |apply(4, i-> FF.dd_(i+1))} 6 10 15 21 28 o8 = cokernel {2} | a 0 -c2 0 b2 0 0 0 0 0 | <-- R <-- R <-- R <-- R <-- R {2} | -b 0 0 -c2 0 0 0 a2 0 0 | {2} | c 0 0 0 0 0 -b2 0 a2 0 | 1 2 3 4 5 {3} | 0 c b a 0 0 0 0 0 0 | {3} | 0 0 0 0 c b a 0 0 0 | {3} | 0 0 0 0 0 0 0 c b a | 0 o8 : ChainComplex |
i9 : apply(4, i ->FF.dd_(i+1)) o9 = {{3} | 0 a -c -b 0 0 0 0 0 0 |, {3} | 0 0 -c2 0 0 0 0 b2 0 {2} | b 0 a2 0 0 0 0 0 0 c2 | {4} | 0 0 0 0 0 0 0 0 0 {2} | -c 0 0 a2 0 0 b2 0 0 0 | {4} | -c2 0 0 0 0 0 0 0 0 {2} | a 0 0 0 b2 0 0 0 c2 0 | {4} | 0 0 0 0 0 0 -b2 0 0 {3} | 0 0 0 0 c b a 0 0 0 | {4} | 0 0 0 0 c2 0 0 -a 0 {3} | 0 0 0 0 0 0 0 c -b a | {4} | 0 0 0 0 0 0 0 0 -a {4} | 0 0 0 0 0 0 a2 c b {4} | 0 -a 0 b 0 c2 0 0 0 {4} | 0 0 a c -b2 0 0 0 0 {4} | a2 c b 0 0 0 0 0 0 ------------------------------------------------------------------------ 0 0 0 0 0 a2 |, {6} | 0 a -c -b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 a2 c b 0 | {5} | b 0 a2 0 0 0 0 0 0 c2 0 0 0 0 0 0 0 0 0 a 0 -b | {5} | -c 0 0 a2 0 0 b2 0 0 0 0 0 0 0 0 0 0 0 0 0 a c | {5} | a 0 0 0 b2 0 0 0 c2 0 0 0 0 0 0 0 b 0 0 0 0 0 | {6} | 0 0 0 0 c b a 0 0 0 0 0 0 0 0 0 -c b2 0 0 0 0 | {6} | 0 0 0 0 0 0 0 c -b a 0 0 0 0 0 0 0 0 0 0 0 0 | {6} | 0 0 0 0 0 0 0 0 0 0 0 a -c -b 0 0 0 0 0 0 0 0 | {5} | 0 0 0 0 0 0 c2 0 0 0 b 0 a2 0 0 0 0 0 0 0 0 0 | {5} | 0 0 0 0 0 0 0 0 0 0 -c 0 0 a2 0 0 0 0 0 0 0 0 | {5} | 0 0 0 0 0 -c2 0 0 0 0 a 0 0 0 b2 0 {6} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 c b {6} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 {5} | 0 c2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 {5} | 0 0 0 0 0 0 0 0 0 0 0 b2 0 0 0 0 {5} | 0 0 0 c2 0 0 0 0 0 0 0 0 -b2 0 0 0 ------------------------------------------------------------------------ 0 0 0 0 0 |, {6} | 0 0 -c2 0 0 0 0 b2 0 0 0 0 0 0 a2 0 0 0 0 0 | {7} | 0 0 0 0 0 0 0 0 0 0 0 a2 c b 0 0 0 0 0 0 | {7} | -c2 0 0 0 0 0 0 0 0 0 0 0 a 0 -b 0 0 0 0 0 | {7} | 0 0 0 0 0 0 -b2 0 0 0 0 0 0 a c 0 0 0 0 0 | {7} | 0 0 0 0 c2 0 0 -a 0 b 0 0 0 0 0 0 0 0 0 0 | {7} | 0 0 0 0 0 0 0 0 -a -c b2 0 0 0 0 0 0 0 0 0 | {7} | 0 0 0 0 0 0 a2 c b 0 0 0 0 0 0 0 0 0 0 0 | {7} | 0 -a 0 b 0 c2 0 0 0 0 0 0 0 0 0 b2 0 0 0 0 | {7} | 0 0 a c -b2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {7} | a2 c b 0 0 0 0 0 0 0 0 0 0 0 0 a 0 0 0 0 | {6} | 0 0 0 0 0 0 0 0 -c2 0 0 0 0 0 0 0 0 a -c -b | {7} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 b 0 a2 0 | {7} | 0 0 0 0 0 0 -c2 0 0 0 0 0 0 0 0 0 -c 0 0 a2 | {7} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 a 0 0 0 | {7} | 0 0 0 0 0 0 0 0 0 0 c2 0 0 0 0 {7} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 {7} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 {6} | 0 0 0 0 0 0 0 0 0 0 0 0 0 -c2 0 {7} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 {7} | 0 0 0 0 0 0 0 0 0 0 0 -c2 0 0 0 {7} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ------------------------------------------------------------------------ 0 0 0 0 0 0 0 0 0 0 0 0 0 |} 0 0 0 0 0 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 0 0 0 0 0 | 0 b2 0 0 0 0 0 0 a2 0 0 0 0 | 0 0 0 0 0 a2 c b 0 0 0 0 0 | 0 0 0 0 0 0 a 0 -b 0 0 0 0 | -b2 0 0 0 0 0 0 a c 0 0 0 0 | 0 -a 0 b 0 0 0 0 0 0 0 0 0 | 0 0 -a -c b2 0 0 0 0 0 0 0 0 | a2 c b 0 0 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 b2 0 0 0 0 0 a2 | 0 0 0 0 0 0 0 0 0 a2 c b 0 | 0 0 0 0 0 0 0 0 0 0 a 0 -b | 0 0 0 0 0 -b2 0 0 0 0 0 a c | o9 : List |
i10 : apply(5, j-> prune HH_j C == 0) o10 = {true, true, true, true, true} o10 : List |
And one computing the whole finite resolution:
i11 : MS = pushForward(map(R,S), M); |
i12 : (GG, aug) = layeredResolution(ff,MS) 6 13 10 3 o12 = (S <-- S <-- S <-- S , {2} | 0 0 0 1 0 0 |) {2} | 0 -1 0 0 0 0 | 0 1 2 3 {2} | 0 0 -1 0 0 0 | {3} | 0 0 0 0 0 1 | {3} | 0 0 0 0 1 0 | {3} | 1 0 0 0 0 0 | o12 : Sequence |
i13 : (GG, aug) = layeredResolution(ff,MS, Verbose =>true) {3, 1} in codimension 3 {3, 1} in codimension 2 6 13 10 3 o13 = (S <-- S <-- S <-- S , {2} | 0 0 0 1 0 0 |) {2} | 0 -1 0 0 0 0 | 0 1 2 3 {2} | 0 0 -1 0 0 0 | {3} | 0 0 0 0 0 1 | {3} | 0 0 0 0 1 0 | {3} | 1 0 0 0 0 0 | o13 : Sequence |
i14 : betti GG 0 1 2 3 o14 = total: 6 13 10 3 2: 3 1 . . 3: 3 9 . . 4: . . . . 5: . 3 9 . 6: . . . . 7: . . 1 3 o14 : BettiTally |
i15 : betti res MS 0 1 2 3 o15 = total: 6 13 10 3 2: 3 1 . . 3: 3 9 . . 4: . . . . 5: . 3 9 . 6: . . . . 7: . . 1 3 o15 : BettiTally |
i16 : C = chainComplex flatten {{aug} |apply(length GG -1, i-> GG.dd_(i+1))} 6 13 10 o16 = cokernel {2} | a 0 c2 0 b2 0 0 0 0 0 0 0 0 | <-- S <-- S <-- S {2} | -b 0 0 c2 0 0 0 a2 0 0 0 0 0 | {2} | c 0 0 0 0 0 b2 0 a2 0 0 0 0 | 1 2 3 {3} | 0 c -b -a 0 0 0 0 0 0 0 0 0 | {3} | 0 0 0 0 c b -a 0 0 0 c3 0 0 | {3} | 0 0 0 0 0 0 0 c b a 0 c3 b3 | 0 o16 : ChainComplex |
i17 : apply(length GG +1 , j-> prune HH_j C == 0) o17 = {true, true, true, false} o17 : List |
The object layeredResolution is a method function with options.