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. One can directly obtain the pruning map by accessing the cached pruningMap key.
i1 : S = ZZ/101[x,y,z,w];
|
i2 : F = koszulMF({x,y,z,w}, y*w - x*z);
|
i3 : E = Hom(F,F)
8 8 8
o3 = S <-- S <-- S
0 1 0
o3 : ZZdFactorization
|
i4 : Ed = dual E
8 8 8
o4 = S <-- S <-- S
0 1 0
o4 : ZZdFactorization
|
i5 : C = HH E
o5 = subquotient (| 1 0 z 0 -x |, | w z 0 0 y 0 -x 0 |) <-- subquotient (| 0 -y 0 0 z -y -x |, | -y -z 0 0 y 0 -x 0 |) <-- subquotient (| 1 0 z 0 -x |, | w z 0 0 y 0 -x 0 |)
| 0 -x -y 0 0 | | -x -y 0 0 0 y 0 -x | | -y 0 -x 0 -w 0 0 | | x w 0 0 0 y 0 -x | | 0 -x -y 0 0 | | -x -y 0 0 0 y 0 -x |
| 0 0 0 z -w | | 0 0 w z z 0 -w 0 | | 0 -z -z -y 0 0 -w | | 0 0 -y -z z 0 -w 0 | | 0 0 0 z -w | | 0 0 w z z 0 -w 0 |
| 1 -w 0 -y 0 | | 0 0 -x -y 0 z 0 -w | | -z 0 0 x 0 -w 0 | | 0 0 x w 0 z 0 -w | | 1 -w 0 -y 0 | | 0 0 -x -y 0 z 0 -w |
| 1 0 0 0 0 | | w 0 -x 0 y z 0 0 | | z w 0 -x 0 w 0 | | w 0 -x 0 -w -z 0 0 | | 1 0 0 0 0 | | w 0 -x 0 y z 0 0 |
| 0 0 w -x 0 | | 0 w 0 -x -x -w 0 0 | | -y -x -x 0 -w 0 0 | | 0 w 0 -x x y 0 0 | | 0 0 w -x 0 | | 0 w 0 -x -x -w 0 0 |
| 0 z 0 0 y | | z 0 -y 0 0 0 y z | | 0 0 -z -y 0 0 -w | | z 0 -y 0 0 0 -w -z | | 0 z 0 0 y | | z 0 -y 0 0 0 y z |
| 1 -w z -y -x | | 0 z 0 -y 0 0 -x -w | | 0 0 0 0 -z y x | | 0 z 0 -y 0 0 x y | | 1 -w z -y -x | | 0 z 0 -y 0 0 -x -w |
0 1 0
o5 : ZZdFactorization
|
i6 : D = prune C
o6 = cokernel | w z y x | <-- 0 <-- cokernel | w z y x |
0 1 0
o6 : ZZdFactorization
|
i7 : g = D.cache.pruningMap
o7 = 0 : subquotient (| 1 0 z 0 -x |, | w z 0 0 y 0 -x 0 |) <------------- cokernel | w z y x | : 0
| 0 -x -y 0 0 | | -x -y 0 0 0 y 0 -x | {0} | 1 |
| 0 0 0 z -w | | 0 0 w z z 0 -w 0 | {1} | 0 |
| 1 -w 0 -y 0 | | 0 0 -x -y 0 z 0 -w | {1} | 0 |
| 1 0 0 0 0 | | w 0 -x 0 y z 0 0 | {1} | 0 |
| 0 0 w -x 0 | | 0 w 0 -x -x -w 0 0 | {1} | 0 |
| 0 z 0 0 y | | z 0 -y 0 0 0 y z |
| 1 -w z -y -x | | 0 z 0 -y 0 0 -x -w |
1 : subquotient (| 0 -y 0 0 z -y -x |, | -y -z 0 0 y 0 -x 0 |) <----- 0 : 1
| -y 0 -x 0 -w 0 0 | | x w 0 0 0 y 0 -x | 0
| 0 -z -z -y 0 0 -w | | 0 0 -y -z z 0 -w 0 |
| -z 0 0 x 0 -w 0 | | 0 0 x w 0 z 0 -w |
| z w 0 -x 0 w 0 | | w 0 -x 0 -w -z 0 0 |
| -y -x -x 0 -w 0 0 | | 0 w 0 -x x y 0 0 |
| 0 0 -z -y 0 0 -w | | z 0 -y 0 0 0 -w -z |
| 0 0 0 0 -z y x | | 0 z 0 -y 0 0 x y |
o7 : ZZdFactorizationMap
|
i8 : assert isWellDefined g
|
i9 : assert isFactorizationMorphism g
|
i10 : assert (target g == C)
|
i11 : assert (source g == D)
|
i12 : g^-1
o12 = 0 : cokernel | w z y x | <----------------- subquotient (| 1 0 z 0 -x |, | w z 0 0 y 0 -x 0 |) : 0
| 1 0 0 0 0 | | 0 -x -y 0 0 | | -x -y 0 0 0 y 0 -x |
| 0 0 0 z -w | | 0 0 w z z 0 -w 0 |
| 1 -w 0 -y 0 | | 0 0 -x -y 0 z 0 -w |
| 1 0 0 0 0 | | w 0 -x 0 y z 0 0 |
| 0 0 w -x 0 | | 0 w 0 -x -x -w 0 0 |
| 0 z 0 0 y | | z 0 -y 0 0 0 y z |
| 1 -w z -y -x | | 0 z 0 -y 0 0 -x -w |
1 : 0 <----- subquotient (| 0 -y 0 0 z -y -x |, | -y -z 0 0 y 0 -x 0 |) : 1
0 | -y 0 -x 0 -w 0 0 | | x w 0 0 0 y 0 -x |
| 0 -z -z -y 0 0 -w | | 0 0 -y -z z 0 -w 0 |
| -z 0 0 x 0 -w 0 | | 0 0 x w 0 z 0 -w |
| z w 0 -x 0 w 0 | | w 0 -x 0 -w -z 0 0 |
| -y -x -x 0 -w 0 0 | | 0 w 0 -x x y 0 0 |
| 0 0 -z -y 0 0 -w | | z 0 -y 0 0 0 -w -z |
| 0 0 0 0 -z y x | | 0 z 0 -y 0 0 x y |
o12 : ZZdFactorizationMap
|
i13 : assert(g*g^-1 == 1 and g^-1*g == 1)
|