This routine checks that the differential of C composes to zero. Additionally, it checks that the underlying data in C is a properly formed Complex object in Macaulay2. If the variable debugLevel is set to a value greater than zero, then information about the nature of any failure is displayed.
As a first example, we construct by hand the free resolution of the twisted cubic. One must work with maps rather than matrices, because the source and the target of adjacent maps must be the same (including degree information).
i1 : R = QQ[a..d]; |
i2 : f0 = matrix {{-b^2+a*c, b*c-a*d, -c^2+b*d}} o2 = | -b2+ac bc-ad -c2+bd | 1 3 o2 : Matrix R <--- R |
i3 : f1 = map(source f0,, {{d, c}, {c, b}, {b, a}}) o3 = {2} | d c | {2} | c b | {2} | b a | 3 2 o3 : Matrix R <--- R |
i4 : C = complex {f0, f1} 1 3 2 o4 = R <-- R <-- R 0 1 2 o4 : Complex |
i5 : isWellDefined C o5 = true |
i6 : dd^C 1 3 o6 = 0 : R <--------------------------- R : 1 | -b2+ac bc-ad -c2+bd | 3 2 1 : R <--------------- R : 2 {2} | d c | {2} | c b | {2} | b a | o6 : ComplexMap |
i7 : (dd^C)^2 o7 = 0 o7 : ComplexMap |
The zero complex is well-defined.
i8 : C = complex R^0 o8 = 0 0 o8 : Complex |
i9 : isWellDefined C o9 = true |
The next example demonstrates the case when the sequence maps do not compose to 0.
i10 : g1 = map(source f0,, {{-d, c}, {c, b}, {b, a}}) o10 = {2} | -d c | {2} | c b | {2} | b a | 3 2 o10 : Matrix R <--- R |
i11 : C = complex {f0, g1} 1 3 2 o11 = R <-- R <-- R 0 1 2 o11 : Complex |
i12 : isWellDefined C o12 = false |
i13 : debugLevel = 1 o13 = 1 |
i14 : isWellDefined C -- expected maps in the differential to compose to zero -- differentials at indices (2, 1) fail this condition o14 = false |
i15 : (dd^C)^2 1 2 o15 = 0 : R <------------------- R : 2 | 2b2d-2acd 0 | o15 : ComplexMap |