The coimage of a chain complex map $f : C \to D$ is the complex $E$ whose $i-th$ term is $coimage(f_i)$, and whose differential is induced from the differential on the source.
In the following example, we first construct a random complex morphism $f : C \to D$. We consider the exact sequence $0 \to D \to cone(f) \to C[-1] \to 0$. For the maps $g : D \to cone(f)$ and $h : cone(f) \to C[-1]$, we compute the coimage.
i1 : S = ZZ/101[a,b,c,d]; |
i2 : C = freeResolution ideal(b^2-a*c, b*c-a*d, c^2-b*d) 1 3 2 o2 = S <-- S <-- S 0 1 2 o2 : Complex |
i3 : D = freeResolution ideal(a,b,c) 1 3 3 1 o3 = S <-- S <-- S <-- S 0 1 2 3 o3 : Complex |
i4 : f = randomComplexMap(D, C, Cycle => true, InternalDegree => 0) 1 1 o4 = 0 : S <----------- S : 0 | -22 | 3 3 1 : S <------------------------------------------------ S : 1 {1} | 36b+3c 30b-19c+22d -29b-10c | {1} | -36a-22b+29c -30a-14c 29a+29c+22d | {1} | 19a-29b 19a-8b 10a-29b-22c | 3 2 2 : S <--------------------------------------------- S : 2 {2} | -29a-30b+31c-22d 29b+6c-36d | {2} | -10a+24b+3c 34b-19c+19d | {2} | 24a-8b+29c -24a-29b-14c-29d | o4 : ComplexMap |
i5 : Cf = cone f 1 4 6 3 o5 = S <-- S <-- S <-- S 0 1 2 3 o5 : Complex |
i6 : g = canonicalMap(Cf, D) 1 1 o6 = 0 : S <--------- S : 0 | 1 | 4 3 1 : S <----------------- S : 1 {0} | 0 0 0 | {1} | 1 0 0 | {1} | 0 1 0 | {1} | 0 0 1 | 6 3 2 : S <----------------- S : 2 {2} | 0 0 0 | {2} | 0 0 0 | {2} | 0 0 0 | {2} | 1 0 0 | {2} | 0 1 0 | {2} | 0 0 1 | 3 1 3 : S <------------- S : 3 {3} | 0 | {3} | 0 | {3} | 1 | o6 : ComplexMap |
i7 : h = canonicalMap(C[-1], Cf) 1 4 o7 = 1 : S <--------------- S : 1 | 1 0 0 0 | 3 6 2 : S <----------------------- S : 2 {2} | 1 0 0 0 0 0 | {2} | 0 1 0 0 0 0 | {2} | 0 0 1 0 0 0 | 2 3 3 : S <----------------- S : 3 {3} | 1 0 0 | {3} | 0 1 0 | o7 : ComplexMap |
i8 : coimage g == D o8 = true |
i9 : prune coimage h == C[-1] o9 = true |
There is a canonical map of complexes from the source to the coimage.
i10 : g1 = canonicalMap(coimage g, source g) 1 1 o10 = 0 : S <--------- S : 0 | 1 | 3 3 1 : S <----------------- S : 1 {1} | 1 0 0 | {1} | 0 1 0 | {1} | 0 0 1 | 3 3 2 : S <----------------- S : 2 {2} | 1 0 0 | {2} | 0 1 0 | {2} | 0 0 1 | 1 1 3 : S <------------- S : 3 {3} | 1 | o10 : ComplexMap |
i11 : coimage g1 == coimage g o11 = true |
i12 : coker g1 == 0 o12 = true |
i13 : h1 = canonicalMap(coimage h, source h) 1 o13 = 0 : cokernel | 1 | <----- S : 0 0 4 1 : cokernel {0} | 0 0 0 | <------------------- S : 1 {1} | 1 0 0 | {0} | 1 0 0 0 | {1} | 0 1 0 | {1} | 0 0 0 0 | {1} | 0 0 1 | {1} | 0 0 0 0 | {1} | 0 0 0 0 | 6 2 : cokernel {2} | 0 0 0 | <----------------------- S : 2 {2} | 0 0 0 | {2} | 1 0 0 0 0 0 | {2} | 0 0 0 | {2} | 0 1 0 0 0 0 | {2} | 1 0 0 | {2} | 0 0 1 0 0 0 | {2} | 0 1 0 | {2} | 0 0 0 0 0 0 | {2} | 0 0 1 | {2} | 0 0 0 0 0 0 | {2} | 0 0 0 0 0 0 | 3 3 : cokernel {3} | 0 | <----------------- S : 3 {3} | 0 | {3} | 1 0 0 | {3} | 1 | {3} | 0 1 0 | {3} | 0 0 0 | o13 : ComplexMap |
i14 : coimage h1 == coimage h o14 = true |
i15 : coker h1 == 0 o15 = true |
The coimage is more computationally intensive than image(ComplexMap) because, unlike image, it computes kernels of maps of modules.