The isomorphism g : D →C is available as g = D.cache.pruningMap. The inverse isomorphism can be obtained as g^-1
This is frequently useful to make the output of certain operations readable or understandable.
In particular, homology often needs to be pruned to be understood. For instance, this is useful for recognizing when terms given by subquotient modules are actually zero.
i1 : S = ZZ/101[a,b,c,d,e]; |
i2 : I = ideal(a,b) * ideal(c,d,e) o2 = ideal (a*c, a*d, a*e, b*c, b*d, b*e) o2 : Ideal of S |
i3 : F = dual freeResolution I 1 5 9 6 1 o3 = S <-- S <-- S <-- S <-- S -4 -3 -2 -1 0 o3 : Complex |
i4 : C = HH F o4 = cokernel {-5} | -e d -c -b a | <-- subquotient ({-4} | d c 0 b 0 0 a 0 0 0 |, {-4} | d -c -b a 0 0 0 0 0 |) <-- subquotient ({-3} | c b a 0 0 0 0 |, {-3} | -b a 0 0 0 0 |) <-- subquotient ({-2} | ac |, {-2} | ac |) <-- image 0 {-4} | e 0 c 0 b 0 0 a 0 0 | {-4} | e 0 0 0 -c -b a 0 0 | {-3} | d 0 0 b 0 a 0 | {-3} | 0 0 -b a 0 0 | {-2} | bc | {-2} | bc | -4 {-4} | 0 -e d 0 0 b 0 0 a 0 | {-4} | 0 e 0 0 -d 0 0 -b a | {-3} | 0 d 0 -c 0 0 0 | {-3} | -d 0 c 0 0 0 | {-2} | ad | {-2} | ad | 0 {-4} | 0 0 0 -e d -c 0 0 0 a | {-4} | 0 0 e 0 0 -d 0 c 0 | {-3} | 0 0 -d 0 0 c 0 | {-3} | 0 -d 0 c 0 0 | {-2} | bd | {-2} | bd | {-4} | 0 0 0 0 0 0 e -d c b | {-4} | 0 0 0 e 0 0 -d 0 c | {-3} | e 0 0 0 b 0 a | {-3} | 0 0 0 0 -b a | {-2} | ae | {-2} | ae | {-3} | 0 e 0 0 -c 0 0 | {-3} | -e 0 0 0 c 0 | {-2} | be | {-2} | be | -3 {-3} | 0 0 -e 0 0 0 c | {-3} | 0 -e 0 0 0 c | {-3} | 0 0 0 e -d 0 0 | {-3} | 0 0 -e 0 d 0 | -1 {-3} | 0 0 0 0 0 -e d | {-3} | 0 0 0 -e 0 d | -2 o4 : Complex |
i5 : D = prune C o5 = cokernel {-5} | e d c b a | <-- cokernel {-3} | e d c | <-- cokernel {-2} | b a | -4 -3 -2 o5 : Complex |
i6 : g = D.cache.pruningMap o6 = -4 : cokernel {-5} | -e d -c -b a | <-------------- cokernel {-5} | e d c b a | : -4 {-5} | 1 | -3 : subquotient ({-4} | d c 0 b 0 0 a 0 0 0 |, {-4} | d -c -b a 0 0 0 0 0 |) <-------------- cokernel {-3} | e d c | : -3 {-4} | e 0 c 0 b 0 0 a 0 0 | {-4} | e 0 0 0 -c -b a 0 0 | {-3} | 0 | {-4} | 0 -e d 0 0 b 0 0 a 0 | {-4} | 0 e 0 0 -d 0 0 -b a | {-3} | 0 | {-4} | 0 0 0 -e d -c 0 0 0 a | {-4} | 0 0 e 0 0 -d 0 c 0 | {-3} | 0 | {-4} | 0 0 0 0 0 0 e -d c b | {-4} | 0 0 0 e 0 0 -d 0 c | {-3} | 0 | {-3} | 0 | {-3} | 0 | {-3} | 0 | {-3} | 0 | {-3} | 0 | {-3} | 1 | -2 : subquotient ({-3} | c b a 0 0 0 0 |, {-3} | -b a 0 0 0 0 |) <-------------- cokernel {-2} | b a | : -2 {-3} | d 0 0 b 0 a 0 | {-3} | 0 0 -b a 0 0 | {-2} | 1 | {-3} | 0 d 0 -c 0 0 0 | {-3} | -d 0 c 0 0 0 | {-2} | 0 | {-3} | 0 0 -d 0 0 c 0 | {-3} | 0 -d 0 c 0 0 | {-2} | 0 | {-3} | e 0 0 0 b 0 a | {-3} | 0 0 0 0 -b a | {-2} | 0 | {-3} | 0 e 0 0 -c 0 0 | {-3} | -e 0 0 0 c 0 | {-2} | 0 | {-3} | 0 0 -e 0 0 0 c | {-3} | 0 -e 0 0 0 c | {-2} | 0 | {-3} | 0 0 0 e -d 0 0 | {-3} | 0 0 -e 0 d 0 | {-2} | 0 | {-3} | 0 0 0 0 0 -e d | {-3} | 0 0 0 -e 0 d | o6 : ComplexMap |
i7 : assert isWellDefined g |
i8 : assert isComplexMorphism g |
i9 : assert (target g == C) |
i10 : assert (source g == D) |
i11 : h = g^-1 o11 = -4 : cokernel {-5} | e d c b a | <-------------- cokernel {-5} | -e d -c -b a | : -4 {-5} | 1 | -3 : cokernel {-3} | e d c | <-------------------------------- subquotient ({-4} | d c 0 b 0 0 a 0 0 0 |, {-4} | d -c -b a 0 0 0 0 0 |) : -3 {-3} | 0 0 0 0 0 0 0 0 0 1 | {-4} | e 0 c 0 b 0 0 a 0 0 | {-4} | e 0 0 0 -c -b a 0 0 | {-4} | 0 -e d 0 0 b 0 0 a 0 | {-4} | 0 e 0 0 -d 0 0 -b a | {-4} | 0 0 0 -e d -c 0 0 0 a | {-4} | 0 0 e 0 0 -d 0 c 0 | {-4} | 0 0 0 0 0 0 e -d c b | {-4} | 0 0 0 e 0 0 -d 0 c | -2 : cokernel {-2} | b a | <-------------------------- subquotient ({-3} | c b a 0 0 0 0 |, {-3} | -b a 0 0 0 0 |) : -2 {-2} | 1 0 0 0 0 0 0 | {-3} | d 0 0 b 0 a 0 | {-3} | 0 0 -b a 0 0 | {-3} | 0 d 0 -c 0 0 0 | {-3} | -d 0 c 0 0 0 | {-3} | 0 0 -d 0 0 c 0 | {-3} | 0 -d 0 c 0 0 | {-3} | e 0 0 0 b 0 a | {-3} | 0 0 0 0 -b a | {-3} | 0 e 0 0 -c 0 0 | {-3} | -e 0 0 0 c 0 | {-3} | 0 0 -e 0 0 0 c | {-3} | 0 -e 0 0 0 c | {-3} | 0 0 0 e -d 0 0 | {-3} | 0 0 -e 0 d 0 | {-3} | 0 0 0 0 0 -e d | {-3} | 0 0 0 -e 0 d | o11 : ComplexMap |
i12 : assert(g*h == 1 and h*g == 1) |
The image of a map of complexes also becomes more understandable via pruning.
i13 : S = ZZ/101[a,b,c]; |
i14 : I = ideal(a^2,b^2,c^2); o14 : Ideal of S |
i15 : J = I + ideal(a*b*c); o15 : Ideal of S |
i16 : FI = freeResolution I 1 3 3 1 o16 = S <-- S <-- S <-- S 0 1 2 3 o16 : Complex |
i17 : FJ = freeResolution J 1 4 6 3 o17 = S <-- S <-- S <-- S 0 1 2 3 o17 : Complex |
i18 : f = randomComplexMap(FJ, FI ** S^{-1}, Cycle => true) 1 1 o18 = 0 : S <------------------- S : 0 | 32a-36b-30c | 4 3 1 : S <----------------------------------------------- S : 1 {2} | 32a-36b-30c 0 0 | {2} | 0 32a-36b-30c 0 | {2} | 0 0 32a-36b-30c | {3} | 0 0 0 | 6 3 2 : S <---------------------------------------------- S : 2 {4} | 32a-36b+42c -19c 19c | {4} | 29b+10c 19b-29c -19b+22c | {4} | -29a+29c -19a-24c 19a+8c | {4} | -10b 32a-7b-30c -22b | {4} | -10a-29b 29a+24b -22a-8b | {4} | -29a 24a 24a-36b-30c | 3 1 3 : S <------------------------------------ S : 3 {5} | 19a2+19b2+32ac-36bc+42c2 | {5} | -22a2-32ab+7b2+30bc-10c2 | {5} | 24a2-36ab-24b2-30ac-29c2 | o18 : ComplexMap |
i19 : C = image f o19 = image | 32a-36b-30c | <-- image {2} | 32a-36b-30c 0 0 | <-- image {4} | 32a-36b+42c -19c 19c | <-- image {5} | 19a2+19b2+32ac-36bc+42c2 | {2} | 0 32a-36b-30c 0 | {4} | 29b+10c 19b-29c -19b+22c | {5} | -22a2-32ab+7b2+30bc-10c2 | 0 {2} | 0 0 32a-36b-30c | {4} | -29a+29c -19a-24c 19a+8c | {5} | 24a2-36ab-24b2-30ac-29c2 | {3} | 0 0 0 | {4} | -10b 32a-7b-30c -22b | {4} | -10a-29b 29a+24b -22a-8b | 3 1 {4} | -29a 24a 24a-36b-30c | 2 o19 : Complex |
i20 : D = prune C 1 3 3 1 o20 = S <-- S <-- S <-- S 0 1 2 3 o20 : Complex |
i21 : g = D.cache.pruningMap 1 o21 = 0 : image | 32a-36b-30c | <------------- S : 0 {1} | 1 | 3 1 : image {2} | 32a-36b-30c 0 0 | <----------------- S : 1 {2} | 0 32a-36b-30c 0 | {3} | 1 0 0 | {2} | 0 0 32a-36b-30c | {3} | 0 1 0 | {3} | 0 0 0 | {3} | 0 0 1 | 3 2 : image {4} | 32a-36b+42c -19c 19c | <----------------- S : 2 {4} | 29b+10c 19b-29c -19b+22c | {5} | 1 0 0 | {4} | -29a+29c -19a-24c 19a+8c | {5} | 0 1 0 | {4} | -10b 32a-7b-30c -22b | {5} | 0 0 1 | {4} | -10a-29b 29a+24b -22a-8b | {4} | -29a 24a 24a-36b-30c | 1 3 : image {5} | 19a2+19b2+32ac-36bc+42c2 | <------------- S : 3 {5} | -22a2-32ab+7b2+30bc-10c2 | {7} | 1 | {5} | 24a2-36ab-24b2-30ac-29c2 | o21 : ComplexMap |
i22 : assert isWellDefined g |
i23 : assert isComplexMorphism g |
i24 : assert (target g == C) |
i25 : assert (source g == D) |
i26 : h = g^-1 1 o26 = 0 : S <------------- image | 32a-36b-30c | : 0 {1} | 1 | 3 1 : S <----------------- image {2} | 32a-36b-30c 0 0 | : 1 {3} | 1 0 0 | {2} | 0 32a-36b-30c 0 | {3} | 0 1 0 | {2} | 0 0 32a-36b-30c | {3} | 0 0 1 | {3} | 0 0 0 | 3 2 : S <----------------- image {4} | 32a-36b+42c -19c 19c | : 2 {5} | 1 0 0 | {4} | 29b+10c 19b-29c -19b+22c | {5} | 0 1 0 | {4} | -29a+29c -19a-24c 19a+8c | {5} | 0 0 1 | {4} | -10b 32a-7b-30c -22b | {4} | -10a-29b 29a+24b -22a-8b | {4} | -29a 24a 24a-36b-30c | 1 3 : S <------------- image {5} | 19a2+19b2+32ac-36bc+42c2 | : 3 {7} | 1 | {5} | -22a2-32ab+7b2+30bc-10c2 | {5} | 24a2-36ab-24b2-30ac-29c2 | o26 : ComplexMap |
i27 : assert(g*h == 1 and h*g == 1) |