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 : 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*g^-1 == 1 and g^-1*g == 1)
|
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 : 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*g^-1 == 1 and g^-1*g == 1)
|