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.