Let $f \colon P \to C$ be a morphism of chain complexes, where each term in $P$ is a free module. Given a quasi-isomorphism $g \colon B \to C$, this method produces a morphism $f' \colon P \to B$ such that there exists a map $h \colon P \to C$ of chain complexes having degree $1$ satisfying
$f - g \circ f' = h \circ \operatorname{dd}^P + \operatorname{dd}^C \circ h$.
Given a morphism between complexes, we can construct the corresponding map between their free resolutions using this method.
To be more precise, given a morphism $\phi \colon B \to C$ of complexes, let $\alpha \colon P \to B$ and $\beta \colon F \to C$ denote the free resolutions of the source and target complexes. Lifting the composite map $\phi \circ \alpha$ along the quasi-isomorphism $\beta$ gives a commutative diagram $\phantom{WWWW} \begin{array}{ccc} P & \!\!\rightarrow\!\! & F \\ \downarrow \, {\scriptstyle \alpha} & & \downarrow \, {\scriptstyle \beta} \\ B & \xrightarrow{\phi} & C \end{array} $
i1 : S = ZZ/101[a,b,c,d];
|
i2 : J = ideal(a*b, a*d, b*c);
o2 : Ideal of S
|
i3 : I = J + ideal(c^3);
o3 : Ideal of S
|
i4 : C = prune Hom(S^{2} ** freeResolution I, S^1/I)
o4 = cokernel {-4} | ad bc ab c3 | <-- cokernel {-1} | 0 0 0 0 0 0 0 ad bc ab 0 0 0 0 c3 0 | <-- cokernel {0} | 0 0 0 ad bc ab 0 0 0 0 0 0 0 c3 0 0 | <-- cokernel {2} | ad bc ab c3 |
{-1} | 0 0 0 0 0 0 0 0 0 0 ad bc ab 0 0 c3 | {0} | 0 0 0 0 0 0 ad bc ab 0 0 0 0 0 c3 0 |
-3 {-2} | 0 0 0 ad bc ab 0 0 0 0 0 0 0 c3 0 0 | {0} | 0 0 0 0 0 0 0 0 0 ad bc ab 0 0 0 c3 | 0
{-3} | ad bc ab 0 0 0 c3 0 0 0 0 0 0 0 0 0 | {-1} | ad bc ab 0 0 0 0 0 0 0 0 0 c3 0 0 0 |
-2 -1
o4 : Complex
|
i5 : D = prune Hom(freeResolution J, S^1/J)
o5 = cokernel {-3} | ad bc ab 0 0 0 | <-- cokernel {-2} | ad bc ab 0 0 0 0 0 0 | <-- cokernel | ad bc ab |
{-3} | 0 0 0 ad bc ab | {-2} | 0 0 0 ad bc ab 0 0 0 |
{-2} | 0 0 0 0 0 0 ad bc ab | 0
-2
-1
o5 : Complex
|
i6 : r = randomComplexMap(D,C,Cycle=>true)
o6 = -3 : 0 <----- cokernel {-4} | ad bc ab c3 | : -3
0
-2 : cokernel {-3} | ad bc ab 0 0 0 | <----------------------------------------- cokernel {-1} | 0 0 0 0 0 0 0 ad bc ab 0 0 0 0 c3 0 | : -2
{-3} | 0 0 0 ad bc ab | {-3} | 24b2-36bd 0 0 0 | {-1} | 0 0 0 0 0 0 0 0 0 0 ad bc ab 0 0 c3 |
{-3} | -30b2-29bd -29b2+43bd -47b 0 | {-2} | 0 0 0 ad bc ab 0 0 0 0 0 0 0 c3 0 0 |
{-3} | ad bc ab 0 0 0 c3 0 0 0 0 0 0 0 0 0 |
-1 : cokernel {-2} | ad bc ab 0 0 0 0 0 0 | <------------------------------------------------- cokernel {0} | 0 0 0 ad bc ab 0 0 0 0 0 0 0 c3 0 0 | : -1
{-2} | 0 0 0 ad bc ab 0 0 0 | {-2} | 10b2+43bd 21b2 34b2 0 | {0} | 0 0 0 0 0 0 ad bc ab 0 0 0 0 0 c3 0 |
{-2} | 0 0 0 0 0 0 ad bc ab | {-2} | 19b2+19bd -10b2-29bd -8b2-22bd 19b | {0} | 0 0 0 0 0 0 0 0 0 ad bc ab 0 0 0 c3 |
{-2} | 39bd 21bd -29b2-24bd -47b | {-1} | ad bc ab 0 0 0 0 0 0 0 0 0 c3 0 0 0 |
0 : cokernel | ad bc ab | <------------------ cokernel {2} | ad bc ab c3 | : 0
| -38b2-16bd |
o6 : ComplexMap
|
i7 : f = r * resolutionMap C
8
o7 = -2 : cokernel {-3} | ad bc ab 0 0 0 | <----------------------------------------------- S : -2
{-3} | 0 0 0 ad bc ab | {-3} | 0 0 0 0 0 0 24b2-36bd 0 |
{-3} | 0 0 47b 0 0 0 -30b2-29bd 29b2-43bd |
24
-1 : cokernel {-2} | ad bc ab 0 0 0 0 0 0 | <------------------------------------------------------------------------------------------------------------------ S : -1
{-2} | 0 0 0 ad bc ab 0 0 0 | {-2} | 0 0 0 0 0 0 0 0 0 -10b2-43bd 21b2 -34b2 0 0 0 0 0 0 -21b3 -10b3+24b2d 0 0 0 0 |
{-2} | 0 0 0 0 0 0 ad bc ab | {-2} | 0 0 0 0 0 -19b 0 0 0 -19b2-19bd -10b2-29bd 8b2+22bd 0 0 0 0 0 0 10b3+29b2d -19b3-11b2d+22bd2 0 0 0 0 |
{-2} | 0 0 0 0 0 47b 0 0 0 -39bd 21bd 29b2+24bd 0 0 0 0 0 0 -21b2d -10b2d+24bd2 0 0 0 0 |
34
0 : cokernel | ad bc ab | <----------------------------------------------------------------------------------- S : 0
| 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 38b2+16bd 0 0 0 0 0 0 0 0 |
o7 : ComplexMap
|
i8 : g = resolutionMap D
2
o8 = -2 : cokernel {-3} | ad bc ab 0 0 0 | <------------------ S : -2
{-3} | 0 0 0 ad bc ab | {-3} | -1 0 |
{-3} | 0 -1 |
9
-1 : cokernel {-2} | ad bc ab 0 0 0 0 0 0 | <-------------------------------------- S : -1
{-2} | 0 0 0 ad bc ab 0 0 0 | {-2} | 1 0 0 0 -a 0 -b 0 0 |
{-2} | 0 0 0 0 0 0 ad bc ab | {-2} | 0 -1 0 -d -c -b 0 0 0 |
{-2} | 0 0 -1 0 0 0 -d -c -a |
14
0 : cokernel | ad bc ab | <------------------------------------ S : 0
| 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 |
o8 : ComplexMap
|
i9 : assert isQuasiIsomorphism g
|
i10 : f' = liftMapAlongQuasiIsomorphism(f, g)
1
o10 = -3 : 0 <----- S : -3
0
2 8
-2 : S <------------------------------------------------- S : -2
{-3} | 0 0 0 0 0 0 -24b2+36bd 0 |
{-3} | 0 0 -47b 0 0 0 30b2+29bd -29b2+43bd |
9 24
-1 : S <--------------------------------------------------------------------------------------------------------------------------------------------------------------------- S : -1
{-2} | 0 0 0 0 0 0 0 0 0 -24b2+36bd 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
{-2} | 0 0 0 0 0 0 0 0 0 0 -24b2+36bd 0 0 0 0 24b2d-36bd2 0 0 0 0 0 0 0 0 |
{-2} | 0 0 0 0 0 -47b -47ad 0 0 30bc-48bd+29cd+22d2 30ab-47c2+29ad -29b2+43bd 0 0 0 -30abd-29ad2 -29abd+43ad2 0 0 0 0 0 -29bc3+43c3d -29bc2d+43c2d2 |
{-1} | 0 0 0 0 0 0 0 0 0 19b -7b -22b 0 0 0 -24b2+36bd 0 0 -29b2 11b2-22bd 0 0 0 0 |
{-1} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
{-1} | 0 0 0 0 0 19 0 0 0 19b 34b -8b 0 0 0 0 0 0 -10b2 19b2 0 0 0 0 |
{-1} | 0 0 0 0 0 0 0 0 0 -14b-22d -21b 34b 0 0 0 0 0 0 21b2 10b2-24bd 0 0 0 0 |
{-1} | 0 0 0 0 0 0 0 0 0 -30b-29d 47c 0 0 0 0 0 0 0 0 0 0 0 29bc2-43c2d 29bcd-43cd2 |
{-1} | 0 0 0 0 0 0 47d 0 0 0 -30b-29d 0 0 0 0 30bd+29d2 29bd-43d2 0 0 0 0 0 0 0 |
14 34
0 : S <----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- S : 0
| 0 0 0 0 0 0 0 0 0 0 0 0 -24bd+36d2 0 -24b2+36bd 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
| 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
| 0 0 0 0 0 0 0 0 0 0 0 0 -24b2+36bd 0 7b2 0 0 -29b2 0 0 11b2-22bd 0 0 0 0 0 0 0 -22bc2 0 -22bcd 0 0 0 |
| 0 0 0 0 0 0 0 0 0 0 0 0 -24bd+36d2 0 7bd 0 0 -29bd 0 0 11bd-22d2 0 0 0 0 0 0 0 -22c2d 0 -22cd2 0 0 0 |
| 0 0 0 0 0 0 0 0 0 0 0 24ab-29ad 19ad -22ad 19ab 0 24b2 0 -29ab 11ab-22ad 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
| 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -34b2+19c2 0 19cd -10b2 0 0 19b2 0 0 0 0 0 0 0 -8bc2 0 -8bcd 0 0 0 |
| 0 0 19d 0 0 0 0 0 0 0 0 -10bd-29d2 19bd+19d2 -8bd-22d2 19b2+19bd 0 0 0 -10b2-29bd 19b2+11bd-22d2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
| 0 0 0 0 0 0 0 0 0 0 0 21bd -14bd-22d2 34bd -14b2-22bd 0 0 0 21b2 10b2-24bd 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
| 0 0 0 0 0 0 0 0 0 0 0 0 0 0 21b2 0 0 21b2 0 0 10b2-24bd 0 0 0 0 0 0 0 34bc2 0 34bcd 0 0 0 |
| 0 0 0 0 0 0 0 0 0 0 0 0 -30ad 0 -30ab-47c2-29ad+21bd 0 -47cd 21bd 0 0 10bd-24d2 0 0 0 0 0 0 0 -29bc2-24c2d 0 -29bcd-24cd2 29acd 0 0 |
| 0 0 -47b 0 0 0 0 0 0 0 0 0 30bc+29bd-43d2 -29b2+43bd 29b2+29bc-43bd 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -29bc2 0 0 |
| 0 0 0 0 0 0 0 0 0 0 0 -47cd -29d2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -43cd2 -29bc2d+43c2d2 -29bcd2+43cd3 |
| 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30bc 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
| 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -38b2-16bd 0 0 0 0 0 0 0 0 |
9 24
1 : S <-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- S : 1
{1} | 0 0 0 0 -24b2 0 -29ab 11ab-22ad 0 0 0 0 0 0 0 0 0 -22acd 0 0 22ac2d 0 0 0 |
{1} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
{1} | 0 0 0 0 0 19cd -10b2-29bd 19b2+11bd-22d2 0 0 -19c2d 0 0 0 0 0 0 -8bcd-22cd2 0 0 8bc2d+22c2d2 0 0 0 |
{1} | 0 0 0 0 0 0 21b2 10b2-24bd 0 0 0 0 0 0 0 0 0 34bcd 0 0 -34bc2d 0 0 0 |
{1} | 0 0 0 0 30bc-29cd 47c2 -21bc -10bc+24cd 0 0 -47c3 0 0 0 0 0 0 24c2d 0 29bc3 -29bc3-24c3d 0 29bc2d 29ac2d |
{1} | 0 0 0 0 29d2 -47cd 21bd 10bd-24d2 0 0 47c2d 0 0 0 0 0 0 -24cd2 0 -29bc2d 29bc2d+24c2d2 0 -29bcd2 -29acd2 |
{2} | 0 0 0 0 0 0 0 0 0 0 0 -38b2-16bd 0 0 0 0 0 0 0 0 0 0 0 0 |
{2} | 0 0 0 0 0 0 0 0 0 0 0 0 -38b2-16bd 0 0 0 0 0 -38bc2-16c2d 0 0 0 0 0 |
{2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 -38b2-16bd 0 0 0 0 0 0 0 0 0 0 |
2 8
2 : S <--------------------------------------------------------- S : 2
{3} | 0 -38b2-16bd 0 0 0 0 0 -38bc3-16c3d |
{3} | 0 0 -38b2-16bd 0 0 0 0 38bc2d+16c2d2 |
1
3 : 0 <----- S : 3
0
o10 : ComplexMap
|
i11 : assert(f' == f//g)
|
i12 : assert isWellDefined f'
|
i13 : assert isComplexMorphism f'
|
i14 : h = homotopyMap f'
1
o14 = -2 : cokernel {-3} | ad bc ab 0 0 0 | <----- S : -3
{-3} | 0 0 0 ad bc ab | 0
8
-1 : cokernel {-2} | ad bc ab 0 0 0 0 0 0 | <----- S : -2
{-2} | 0 0 0 ad bc ab 0 0 0 | 0
{-2} | 0 0 0 0 0 0 ad bc ab |
24
0 : cokernel | ad bc ab | <----- S : -1
0
34
1 : 0 <----- S : 0
0
24
2 : 0 <----- S : 1
0
8
3 : 0 <----- S : 2
0
1
4 : 0 <----- S : 3
0
o14 : ComplexMap
|
i15 : isNullHomotopyOf(h, g * (f//g) - f)
o15 = true
|
TODO: XXX start here. Do triangles, invert interesting quasi-isomorphism. isSemiFree, and add in an example or 2. Include finding an inverse for a quasi-isomorphism. We need some kind of better example here.