Description
This is one of the algorithms written at top level of Macaulay2 for computing free resolutions, although it uses engine code to compute syzygies. This variant works over most rings in Macaulay2, including Weyl algebras and exterior algebras.
This first example computes part of the free resolution of the ground field over a inhomogeneous $E_8$ singularity.
i1 : kk = ZZ/32003;
|
i2 : R = kk[a,b,c]/(a^2+b^3+c^5);
|
i3 : I = ideal(a,b,c)
o3 = ideal (a, b, c)
o3 : Ideal of R
|
i4 : M = R^1/I
o4 = cokernel | a b c |
1
o4 : R-module, quotient of R
|
i5 : F = freeResolution(M, Strategy => Syzygies, LengthLimit => 5)
1 3 4 4 4 4
o5 = R <-- R <-- R <-- R <-- R <-- R
0 1 2 3 4 5
o5 : Complex
|
i6 : dd^F
1 3
o6 = 0 : R <------------- R : 1
| a b c |
3 4
1 : R <----------------------- R : 2
{1} | b 0 c a |
{1} | -a c 0 b2 |
{1} | 0 -b -a c4 |
4 4
2 : R <------------------------ R : 3
{2} | c 0 -a b2 |
{2} | a -b2 c4 0 |
{2} | -b -a 0 c4 |
{5} | 0 c b a |
4 4
3 : R <------------------------ R : 4
{3} | a -b2 c4 0 |
{6} | -b -a 0 c4 |
{6} | c 0 -a b2 |
{6} | 0 c b a |
4 4
4 : R <------------------------- R : 5
{7} | a -b2 c4 0 |
{7} | -b -a 0 c4 |
{7} | c 0 -a b2 |
{10} | 0 c b a |
o6 : ComplexMap
|
i7 : assert isWellDefined F
|
i8 : assert isQuasiIsomorphism(augmentationMap F, Concentration => (0,4))
|
When the input is an ideal $I$, the free resolution of $R^1/I$ is returned.
i9 : F1 = freeResolution(I, Strategy => Syzygies, LengthLimit => 3)
1 3 4 4
o9 = R <-- R <-- R <-- R
0 1 2 3
o9 : Complex
|
i10 : assert(F1 == naiveTruncation(F,0,3))
|
i11 : F2 = freeResolution(module I, Strategy => Syzygies, LengthLimit => 3)
3 4 4 4
o11 = R <-- R <-- R <-- R
0 1 2 3
o11 : Complex
|
i12 : dd^F1
1 3
o12 = 0 : R <------------- R : 1
| a b c |
3 4
1 : R <----------------------- R : 2
{1} | b 0 c a |
{1} | -a c 0 b2 |
{1} | 0 -b -a c4 |
4 4
2 : R <------------------------ R : 3
{2} | c 0 -a b2 |
{2} | a -b2 c4 0 |
{2} | -b -a 0 c4 |
{5} | 0 c b a |
o12 : ComplexMap
|
i13 : dd^F2
3 4
o13 = 0 : R <----------------------- R : 1
{1} | b 0 c a |
{1} | -a c 0 b2 |
{1} | 0 -b -a c4 |
4 4
1 : R <------------------------ R : 2
{2} | c 0 -a b2 |
{2} | a -b2 c4 0 |
{2} | -b -a 0 c4 |
{5} | 0 c b a |
4 4
2 : R <------------------------ R : 3
{3} | a -b2 c4 0 |
{6} | -b -a 0 c4 |
{6} | c 0 -a b2 |
{6} | 0 c b a |
o13 : ComplexMap
|
For completeness, we present an example over an exterior algebra.
i14 : E = kk[a..d, SkewCommutative => true]
o14 = E
o14 : PolynomialRing, 4 skew commutative variable(s)
|
i15 : I = ideal(a*b-c*d, a*b*c*d)
o15 = ideal (a*b - c*d, a*b*c*d)
o15 : Ideal of E
|
i16 : M = E^1/I
o16 = cokernel | ab-cd abcd |
1
o16 : E-module, quotient of E
|
i17 : F = freeResolution(M, Strategy => Syzygies, LengthLimit => 4)
1 2 6 16 35
o17 = E <-- E <-- E <-- E <-- E
0 1 2 3 4
o17 : Complex
|
i18 : dd^F
1 2
o18 = 0 : E <------------------ E : 1
| ab-cd abcd |
2 6
1 : E <--------------------------------- E : 2
{2} | bd ad bc ac ab+cd -cd |
{4} | 0 0 0 0 0 1 |
6 16
2 : E <--------------------------------------------- E : 3
{4} | d b 0 a 0 c 0 0 0 0 0 0 -a 0 c 0 |
{4} | 0 0 d b a 0 0 0 c 0 0 0 0 0 0 c |
{4} | 0 0 0 0 0 d c b 0 0 a 0 0 -a 0 0 |
{4} | 0 0 0 0 0 0 0 0 d c b a 0 0 0 0 |
{4} | 0 0 0 0 0 0 0 0 0 0 0 0 d c b a |
{4} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
16 35
3 : E <-------------------------------------------------------------------------------------- E : 4
{5} | d b 0 0 a 0 0 0 0 c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -a 0 0 c 0 0 0 0 0 0 |
{5} | 0 d b 0 0 a 0 0 0 0 0 0 c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -a 0 c 0 0 0 0 |
{5} | 0 0 0 d b 0 a 0 0 0 0 0 0 0 0 c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 c 0 0 0 |
{5} | 0 0 0 0 d b 0 a 0 0 0 0 0 0 0 0 0 0 c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 c 0 |
{5} | 0 0 0 0 0 0 d b a 0 0 0 0 0 0 0 0 0 0 0 0 c 0 0 0 0 0 0 0 0 0 0 0 0 c |
{5} | 0 0 0 0 0 0 0 0 0 d c 0 b 0 0 0 0 0 a 0 0 0 0 0 0 0 -a 0 0 0 0 0 0 0 0 |
{5} | 0 0 0 0 0 0 0 0 0 0 d c 0 b 0 0 0 0 0 a 0 0 0 0 0 0 0 -a 0 0 0 0 0 0 0 |
{5} | 0 0 0 0 0 0 0 0 0 0 0 0 d c b 0 0 0 0 0 a 0 0 0 0 0 0 0 0 -a 0 0 0 0 0 |
{5} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 d c 0 b 0 0 a 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 0 0 0 0 0 d c 0 b 0 0 a 0 0 0 0 0 0 0 0 0 0 0 0 |
{5} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 d c b 0 0 a 0 0 0 0 0 0 0 0 0 0 0 |
{5} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 d c b a 0 0 0 0 0 0 0 0 0 0 |
{5} | 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 d c 0 b 0 0 a 0 0 0 |
{5} | 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 d c 0 b 0 0 a 0 0 |
{5} | 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 d c b 0 0 a 0 |
{5} | 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 d c b a |
o18 : ComplexMap
|
i19 : assert isWellDefined F
|
i20 : assert isQuasiIsomorphism(augmentationMap F, Concentration => (0,3))
|
This strategy works one homological degree at a time. It first computes the syzygies of the presentation matrix, and then computes the second syzygies, and so on. This strategy uses Schreyer orders on the free modules in the resolution which often improves efficiency.