# freeResolution -- compute a free resolution of a module or ideal

## Synopsis

• Usage:
freeResolution M
• Inputs:
• M, , or an ideal or , an ideal I in a ring R
• Optional inputs:
• LengthLimit => an integer, default value infinity, this is used to limit somehow the computation where resolutions might be too long or infinite
• DegreeLimit => a list, default value null, or an integer, an option that specifies that the computation stops at the given (slanted) degree
• FastNonminimal => , default value false, unused (TODO: probably used)
• HardDegreeLimit => a list, default value {}, unused (TODO: used?)
• PairLimit => an integer, default value infinity, or infinity, an internal option which specifies that the computation should stop after a certain number of s-pairs have computed
• SortStrategy => an integer, default value 0, an internal option that specifies the strategy to be used for sorting S-pairs
• StopBeforeComputation => , default value false, whether to start the computation. This can be useful when you want to obtain the partially computed resolution contained in an interrupted computation.
• Strategy => an integer, default value null, TODO: perhaps needs its own page
• SyzygyLimit => an integer, default value infinity, or infinity, an internal option which specifies that the computation should stop after a certain number of syzygies have computed
• Outputs:
• , a free resolution of the module M or of the quotient module R^1/I

## Description

A free resolution of a module $M$ is a complex $F_0 \leftarrow F_1 \leftarrow F_2 \leftarrow \ldots$ of free modules, which is acyclic: the cokernel of the map to $F_0$ is $M$ and the complex is exact at all other locations.

 i1 : R = QQ[a..d] o1 = R o1 : PolynomialRing i2 : I = ideal(c^2-b*d, b*c-a*d, b^2-a*c) 2 2 o2 = ideal (c - b*d, b*c - a*d, b - a*c) o2 : Ideal of R i3 : M = R^1/I o3 = cokernel | c2-bd bc-ad b2-ac | 1 o3 : R-module, quotient of R i4 : C = freeResolution M 1 3 2 o4 = R <-- R <-- R 0 1 2 o4 : Complex i5 : betti C 0 1 2 o5 = total: 1 3 2 0: 1 . . 1: . 3 2 o5 : BettiTally i6 : length C o6 = 2 i7 : dd^C 1 3 o7 = 0 : R <------------------------- R : 1 | b2-ac bc-ad c2-bd | 3 2 1 : R <----------------- R : 2 {2} | -c d | {2} | b -c | {2} | -a b | o7 : ComplexMap i8 : assert isWellDefined C i9 : assert(prune HH C == complex M)

Giving an ideal as the input produces a free resolution not of the module I, but of the module R^1/I.

 i10 : assert(freeResolution I == C) i11 : resolution complex M == freeResolution M o11 = true

Over a quotient ring, free resolutions are often infinite. Use the optional argument LengthLimit to obtain part of the resolution.

 i12 : S = ZZ/101[a,b] o12 = S o12 : PolynomialRing i13 : R = S/(a^3+b^3) o13 = R o13 : QuotientRing i14 : C = freeResolution (coker vars R, LengthLimit => 7) 1 2 2 2 2 2 2 2 o14 = R <-- R <-- R <-- R <-- R <-- R <-- R <-- R 0 1 2 3 4 5 6 7 o14 : Complex i15 : dd^C 1 2 o15 = 0 : R <----------- R : 1 | a b | 2 2 1 : R <----------------- R : 2 {1} | -b a2 | {1} | a b2 | 2 2 2 : R <------------------ R : 3 {2} | a2 -b2 | {3} | b a | 2 2 3 : R <----------------- R : 4 {4} | -a b2 | {4} | b a2 | 2 2 4 : R <------------------ R : 5 {5} | -a2 b2 | {6} | b a | 2 2 5 : R <----------------- R : 6 {7} | -a b2 | {7} | b a2 | 2 2 6 : R <------------------ R : 7 {8} | -a2 b2 | {9} | b a | o15 : ComplexMap