Given a complex $C$, this method produces the natural quasi-isomorphism from a complex $F$ all of whose terms are free modules to the complex $C$. The algorithm used minimizes the ranks of the free modules in $F$.
i1 : R = ZZ/101[a,b,c]; |
i2 : I = ideal(a^2, a*b, b*c) 2 o2 = ideal (a , a*b, b*c) o2 : Ideal of R |
i3 : C = Hom(freeResolution I, R^1/I) o3 = cokernel {-3} | bc ab a2 0 0 0 | <-- cokernel {-2} | bc ab a2 0 0 0 0 0 0 | <-- cokernel | bc ab a2 | {-3} | 0 0 0 bc ab a2 | {-2} | 0 0 0 bc ab a2 0 0 0 | {-2} | 0 0 0 0 0 0 bc ab a2 | 0 -2 -1 o3 : Complex |
i4 : assert all(min C .. max C, i -> not isFreeModule C_i) |
i5 : fC = resolutionMap C 2 o5 = -2 : cokernel {-3} | bc ab a2 0 0 0 | <------------------ R : -2 {-3} | 0 0 0 bc ab a2 | {-3} | -1 0 | {-3} | 0 -1 | 9 -1 : cokernel {-2} | bc ab a2 0 0 0 0 0 0 | <-------------------------------------- R : -1 {-2} | 0 0 0 bc ab a2 0 0 0 | {-2} | 1 0 0 -c -a 0 0 0 0 | {-2} | 0 0 0 0 0 0 bc ab a2 | {-2} | 0 -1 0 0 0 -b -a 0 0 | {-2} | 0 0 -1 0 0 0 -c -b -a | 14 0 : cokernel | bc ab a2 | <------------------------------------ R : 0 | 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 | o5 : ComplexMap |
i6 : FC = resolution C 2 9 14 9 2 o6 = R <-- R <-- R <-- R <-- R -2 -1 0 1 2 o6 : Complex |
i7 : prune HH FC o7 = cokernel {-3} | b a 0 | <-- cokernel {-1} | b a 0 0 0 0 0 0 0 0 0 0 | <-- cokernel | bc ab a2 | {-3} | 0 -c a | {-1} | 0 -c b a 0 0 0 0 0 0 0 0 | {-1} | 0 0 0 0 c a 0 0 0 0 0 0 | 0 -2 {-1} | 0 0 0 0 0 0 b 0 0 a 0 0 | {-1} | 0 0 0 0 0 0 0 c a 0 0 0 | {-1} | 0 0 0 0 0 0 0 0 0 -c b a | -1 o7 : Complex |
i8 : assert isQuasiIsomorphism fC |
i9 : assert isFree FC |
i10 : assert isWellDefined fC |
i11 : assert(0 == coker fC) -- showing that fC is surjective. |
The resolution of a short exact sequence is simply the zero complex.
i12 : J = ideal(a,b) o12 = ideal (a, b) o12 : Ideal of R |
i13 : K = ideal(b^2,c) 2 o13 = ideal (b , c) o13 : Ideal of R |
i14 : g1 = map(R^1/(J+K), R^1/J ++ R^1/K, {{1,-1}}) o14 = | 1 -1 | o14 : Matrix |
i15 : g2 = map(R^1/J ++ R^1/K, R^1/(intersect(J,K)), {{1},{1}}) o15 = | 1 | | 1 | o15 : Matrix |
i16 : D = complex{g1, g2} o16 = cokernel | a b b2 c | <-- cokernel | a b 0 0 | <-- cokernel | bc ac b2 | | 0 0 b2 c | 0 2 1 o16 : Complex |
i17 : assert isWellDefined D |
i18 : assert isShortExactSequence(g1,g2) |
i19 : fD = resolutionMap D o19 = 0 o19 : ComplexMap |
i20 : assert isWellDefined fD |
i21 : assert isQuasiIsomorphism fD |
i22 : assert(0 == source fD) -- so fD is certainly not surjective! |
To avoid recomputation, this method caches its value.
The object resolutionMap is a method function with options.