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 |
The object freeResolution is a method function with options.