# Strategy for free resolutions of homogeneous modules aided by Hilbert functions -- algorithm for computing free resolutions step by step aided by Hilbert functions

## Synopsis

• Usage:
freeResolution(M, Strategy => 3)
freeResolution(I, Strategy => 3)
• Inputs:
• M, , a homogeneous module over $S$, a (quotient of a) polynomial ring
• I, an ideal, a homogeneous ideal in $S$
• Outputs:
• , a minimal free resolution of $M$ or $S^1/I$

## Description

This is one of the algorithms in the engine of Macaulay2 for computing minimal free resolutions. This is a variant when the ring $S$ is a homogeneous quotient of an almost commutative polynomial ring over a base field. In particular, this variant applies to homogeneous modules over a homogenized Weyl algebra or an exterior algebra.

This first example computes part of the minimal free resolution of the ground field over a hypersurface ring.

 i1 : kk = ZZ/32003; i2 : R = kk[a..d]/(a^2+b^2+c^2+d^2); i3 : I = ideal(a,b,c,d) o3 = ideal (a, b, c, d) o3 : Ideal of R i4 : M = R^1/I o4 = cokernel | a b c d | 1 o4 : R-module, quotient of R i5 : F = freeResolution(M, Strategy => 3, LengthLimit => 5) 1 4 7 8 8 8 o5 = R <-- R <-- R <-- R <-- R <-- R 0 1 2 3 4 5 o5 : Complex i6 : dd^F 1 4 o6 = 0 : R <--------------- R : 1 | a b c d | 4 7 1 : R <------------------------------- R : 2 {1} | 0 0 -d 0 -c -b a | {1} | 0 -d 0 -c 0 a b | {1} | -d 0 0 b a 0 c | {1} | c b a 0 0 0 d | 7 8 2 : R <---------------------------------- R : 3 {2} | b a 0 0 c -d 0 0 | {2} | -c 0 a 0 b 0 -d 0 | {2} | 0 -c -b 0 a 0 0 -d | {2} | d 0 0 a 0 b -c 0 | {2} | 0 d 0 -b 0 a 0 -c | {2} | 0 0 d c 0 0 a -b | {2} | 0 0 0 0 d c b a | 8 8 3 : R <---------------------------------- R : 4 {3} | -a -b c 0 -d 0 0 0 | {3} | b -a 0 c 0 -d 0 0 | {3} | -c 0 -a b 0 0 -d 0 | {3} | d 0 0 0 -a b -c 0 | {3} | 0 -c -b -a 0 0 0 d | {3} | 0 d 0 0 -b -a 0 c | {3} | 0 0 d 0 c 0 -a b | {3} | 0 0 0 d 0 c b a | 8 8 4 : R <---------------------------------- R : 5 {4} | a -b c 0 -d 0 0 0 | {4} | b a 0 -c 0 d 0 0 | {4} | -c 0 a -b 0 0 d 0 | {4} | 0 -c -b -a 0 0 0 d | {4} | d 0 0 0 a -b c 0 | {4} | 0 d 0 0 -b -a 0 c | {4} | 0 0 d 0 c 0 -a b | {4} | 0 0 0 d 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 => 3, LengthLimit => 3) 1 4 7 8 o9 = R <-- R <-- R <-- R 0 1 2 3 o9 : Complex i10 : assert(F1 == naiveTruncation(F,0,3)) i11 : F2 = freeResolution(module I, Strategy => 3, LengthLimit => 3) 4 7 8 8 o11 = R <-- R <-- R <-- R 0 1 2 3 o11 : Complex i12 : dd^F1 1 4 o12 = 0 : R <--------------- R : 1 | a b c d | 4 7 1 : R <------------------------------- R : 2 {1} | 0 0 -d 0 -c -b a | {1} | 0 -d 0 -c 0 a b | {1} | -d 0 0 b a 0 c | {1} | c b a 0 0 0 d | 7 8 2 : R <---------------------------------- R : 3 {2} | b a 0 0 c -d 0 0 | {2} | -c 0 a 0 b 0 -d 0 | {2} | 0 -c -b 0 a 0 0 -d | {2} | d 0 0 a 0 b -c 0 | {2} | 0 d 0 -b 0 a 0 -c | {2} | 0 0 d c 0 0 a -b | {2} | 0 0 0 0 d c b a | o12 : ComplexMap i13 : dd^F2 4 7 o13 = 0 : R <------------------------------- R : 1 {1} | -b 0 -c a 0 0 -d | {1} | a -c 0 b 0 -d 0 | {1} | 0 b a c -d 0 0 | {1} | 0 0 0 d c b a | 7 8 1 : R <---------------------------------- R : 2 {2} | 0 0 -c -d a 0 b 0 | {2} | -d 0 -a 0 -c b 0 0 | {2} | 0 -d b 0 0 a c 0 | {2} | 0 0 0 0 b c -a d | {2} | -b -a 0 0 0 -d 0 c | {2} | c 0 0 -a -d 0 0 b | {2} | 0 c 0 b 0 0 d a | 8 8 2 : R <---------------------------------- R : 3 {3} | a -b -d 0 c 0 0 0 | {3} | -b -a 0 0 0 0 -d c | {3} | -d 0 -a 0 0 -c b 0 | {3} | c 0 0 0 -a -d 0 b | {3} | 0 0 -c -b -d a 0 0 | {3} | 0 -d b -c 0 0 a 0 | {3} | 0 0 0 a 0 b c d | {3} | 0 c 0 -d b 0 0 a | o13 : ComplexMap

This strategy also works when the underlying ring is simply a polynomial ring, but is often slower than Strategy 1. However, unlike Strategy 1, this strategy preserves the given presentation of the module, which can be desirable.

 i14 : S = kk[a..e] o14 = S o14 : PolynomialRing i15 : J = ideal(a^3-e^3, a*b^2-c*e^2, a*b*c, a*b*c + a^3 - e^3) 3 3 2 2 3 3 o15 = ideal (a - e , a*b - c*e , a*b*c, a + a*b*c - e ) o15 : Ideal of S i16 : assert isHomogeneous J i17 : C2 = freeResolution(J, Strategy => 3) 1 4 5 2 o17 = S <-- S <-- S <-- S 0 1 2 3 o17 : Complex i18 : C1 = freeResolution ideal J_* 1 3 4 2 o18 = S <-- S <-- S <-- S 0 1 2 3 o18 : Complex i19 : assert isWellDefined C2 i20 : betti C2 0 1 2 3 o20 = total: 1 4 5 2 0: 1 . . . 1: . . 1 . 2: . 4 . . 3: . . . . 4: . . 4 1 5: . . . 1 o20 : BettiTally i21 : betti C1 0 1 2 3 o21 = total: 1 3 4 2 0: 1 . . . 1: . . . . 2: . 3 . . 3: . . . . 4: . . 4 1 5: . . . 1 o21 : BettiTally i22 : assert(dd^C2_1 == gens J) i23 : assert(dd^C1_1 != gens J)

For completeness, we present an example over an exterior algebra.

 i24 : E = kk[a..d, SkewCommutative => true] o24 = E o24 : PolynomialRing, 4 skew commutative variable(s) i25 : I = ideal(a*b-c*d, a*b*c*d) o25 = ideal (a*b - c*d, a*b*c*d) o25 : Ideal of E i26 : M = E^1/I o26 = cokernel | ab-cd abcd | 1 o26 : E-module, quotient of E i27 : F = freeResolution(M, Strategy => 3, LengthLimit => 4) 1 2 6 16 35 o27 = E <-- E <-- E <-- E <-- E 0 1 2 3 4 o27 : Complex i28 : dd^F 1 2 o28 = 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 0 c 0 b a -a 0 0 0 0 0 0 0 c 0 | {4} | 0 d 0 c 0 b 0 a 0 0 0 0 0 0 0 c | {4} | 0 0 d 0 0 0 0 0 c 0 b a -a 0 0 0 | {4} | 0 0 0 d 0 0 0 0 0 c 0 b 0 a 0 0 | {4} | 0 0 0 0 0 0 d 0 0 0 0 0 c 0 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 0 c 0 -a 0 0 0 b a 0 0 c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {5} | 0 d 0 c 0 0 0 0 0 b 0 0 0 a 0 c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {5} | 0 0 d 0 0 c 0 -a 0 0 b a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {5} | 0 0 0 d 0 0 c 0 0 0 0 b 0 0 a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {5} | 0 0 0 0 0 0 0 0 d 0 c 0 -a 0 0 0 0 0 0 0 0 0 0 0 b a 0 0 c 0 0 0 0 0 0 | {5} | 0 0 0 0 0 0 0 0 0 d 0 c 0 0 0 0 0 0 0 0 0 0 0 0 0 b 0 0 0 a 0 c 0 0 0 | {5} | 0 0 0 0 d 0 0 c 0 0 0 0 b 0 0 a 0 0 0 0 0 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 0 0 d c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 b 0 0 a 0 c | {5} | 0 0 0 0 0 d 0 0 0 0 0 0 0 0 0 0 c 0 -a b a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {5} | 0 0 0 0 0 0 d 0 0 0 0 0 0 0 0 0 0 c 0 0 b 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 d 0 0 0 0 0 0 0 0 c 0 -a 0 0 0 0 b a 0 0 0 0 0 0 0 | {5} | 0 0 0 0 0 0 0 0 0 0 0 d 0 0 0 0 0 0 0 0 c 0 0 0 0 0 0 b 0 0 a 0 0 0 0 | {5} | 0 0 0 0 0 0 0 d 0 0 0 0 0 0 0 0 0 0 c 0 0 b 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 d 0 0 0 0 0 0 0 c 0 0 0 0 0 0 0 b 0 0 a 0 | {5} | 0 0 0 0 0 0 0 0 0 0 0 0 d 0 0 0 0 0 0 0 0 c 0 0 0 0 0 0 b 0 0 a 0 0 0 | {5} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 d 0 0 0 0 0 0 0 c 0 0 0 0 0 0 0 b 0 0 a | o28 : ComplexMap i29 : assert isWellDefined F i30 : assert isQuasiIsomorphism(augmentationMap F, Concentration => (0,3))

This strategy works degree by degree. Within each degree, 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.

Although similar to Strategy 2, this strategy does use Hilbert functions to aid the computation.