This method checks whether the given representation of each module $C_i$ is free. To determine whether the complex $C$ is isomorphic to a free complex, use prune.
The following example demonstrates that the presentation of a module might not reveal the property of being free.
i1 : S = ZZ/101[a,b]; |
i2 : M = kernel vars S o2 = image {1} | -b | {1} | a | 2 o2 : S-module, submodule of S |
i3 : assert not isFreeModule M |
i4 : assert isFreeModule prune M |
By definition, a free resolution $C$ consists of free modules. In contrast, the augmented complex $C'$ might or might not consist of free modules.
i5 : C = freeResolution M 1 o5 = S 0 o5 : Complex |
i6 : assert isFree C |
i7 : C' = cone map(complex M, C, i -> map(M, C_0, 1))[1] 1 o7 = image {1} | -b | <-- S {1} | a | 0 -1 o7 : Complex |
i8 : isWellDefined C' o8 = true |
i9 : assert not isFree C' |
i10 : prune C' 1 1 o10 = S <-- S -1 0 o10 : Complex |
i11 : assert isFree prune C' |