next | previous | forward | backward | up | index | toc

# Strategy for free resolutions over the integers -- algorithm for computing free resolutions of ZZ-modules

## Synopsis

• Usage:
freeResolution M
freeResolution(M, Strategy => OverZZ)
• Inputs:
• M, , over the ring of integers
• Outputs:
• , a free resolution of the module $M$

## Description

Every module over the integers has projective dimension at most one. This is the default strategy when the underlying ring is the integers, so in practice it never needs to be specified.

Our first example is the cokernel of a $3 \times 3$ matrix with positive small integer entries.

 i1 : M = coker matrix{{8,4,9},{7,3,7},{6,9,5}} o1 = cokernel | 8 4 9 | | 7 3 7 | | 6 9 5 | 3 o1 : ZZ-module, quotient of ZZ i2 : F = freeResolution M -- uses Strategy => OverZZ 1 1 o2 = ZZ <-- ZZ 0 1 o2 : Complex i3 : assert isWellDefined F i4 : dd^F 1 1 o4 = 0 : ZZ <---------- ZZ : 1 | 49 | o4 : ComplexMap i5 : g = augmentationMap F 1 o5 = 0 : cokernel | 8 4 9 | <--------- ZZ : 0 | 7 3 7 | | 1 | | 6 9 5 | | 0 | | 0 | o5 : ComplexMap i6 : assert isWellDefined g i7 : assert(source g == F) i8 : assert(target g == complex M) i9 : assert isQuasiIsomorphism g

The next example shows that the projective dimension can be less than one. In other words, a free module can have a non-trivial presentation.

 i10 : G = freeResolution coker matrix {{20, 15, 19}, {7, 3, 7}, {6, 9, 5}} 1 o10 = ZZ <-- 0 0 1 o10 : Complex i11 : length G o11 = 0 i12 : G_0 1 o12 = ZZ o12 : ZZ-module, free i13 : g = augmentationMap G 1 o13 = 0 : cokernel | 20 15 19 | <---------- ZZ : 0 | 7 3 7 | | -1 | | 6 9 5 | | 0 | | 0 | o13 : ComplexMap i14 : assert isWellDefined g i15 : assert isQuasiIsomorphism g

The final example involves a slightly larger matrix. The first matrix of the free resolution is the minimal presentation of the module.

 i16 : n = random(ZZ^5, ZZ^3) * matrix{{21,3,0},{0,3,1},{0,0,7}} * random(ZZ^3, ZZ^10) o16 = | 816 1500 1877 1533 534 876 897 935 1625 992 | | 291 534 589 546 114 582 435 487 463 313 | | 558 996 1098 1026 306 873 717 780 963 567 | | 840 1500 1759 1545 564 951 924 967 1606 907 | | 858 1524 1810 1572 624 822 876 898 1696 928 | 5 10 o16 : Matrix ZZ <-- ZZ i17 : F = freeResolution coker n 4 2 o17 = ZZ <-- ZZ 0 1 o17 : Complex i18 : dd^F_1 o18 = | 147 0 | | 0 3 | | 0 0 | | 0 0 | 4 2 o18 : Matrix ZZ <-- ZZ i19 : minimalPresentation coker n o19 = cokernel | 147 0 | | 0 3 | | 0 0 | | 0 0 | 4 o19 : ZZ-module, quotient of ZZ i20 : smithNormalForm(n, ChangeMatrix => {false,false}) o20 = | 147 0 0 | | 0 3 0 | | 0 0 1 | 3 3 o20 : Matrix ZZ <-- ZZ