Completely prunes the n-th differential of the chain complex C by removing unit elements.
Computing the syzygy over a local ring using liftUp and pruneDiff:
i1 : needsPackage "LocalRings"; |
i2 : R = ZZ/32003[vars(0..5)]; |
i3 : I = ideal"abc-def,ab2-cd2-c,-b3+acd"; o3 : Ideal of R |
i4 : C = res I; |
i5 : M = ideal gens R; o5 : Ideal of R |
i6 : RM = localRing(R, M); |
i7 : F = C.dd_2;
4 6
o7 : Matrix R <--- R
|
i8 : FM = F ** RM
o8 = {3} | 0 0 -b3+acd -abc+def 0 a2c2-b2ef |
{3} | cef ac2 ab2-cd2-c 0 abc-def -ac2d+abef |
{3} | -ac2 -b2c 0 ab2-cd2-c -b3+acd -a2bc+b2cd |
{5} | b d 0 0 0 1 |
4 6
o8 : Matrix RM <--- RM
|
This is the process for finding the syzygy of FM:
i9 : f = liftUp FM;
4 6
o9 : Matrix R <--- R
|
i10 : g = syz f;
6 5
o10 : Matrix R <--- R
|
i11 : h = syz g;
5 2
o11 : Matrix R <--- R
|
i12 : C = {g ** RM, h ** RM}/mutableMatrix;
|
Now we prune the map h, which is the first map from the right:
i13 : C = pruneDiff(C, 1, PruningMap => false)
o13 = {| -d d2+1 0 |, 0}
| b -bd -1 |
| 0 ef -ac |
| 0 -ac b2 |
| -c 0 ab |
| 0 -b d |
o13 : List
|
i14 : g' = C#0; |
Scale each row with the common denominator of the corresponding column in FM:
i15 : N = transpose entries FM; |
i16 : for i from 0 to numcols FM - 1 do
rowMult(g', i, N_i/denominator//lcm);
|
The syzygy of FM is:
i17 : GM = map(source FM, , matrix g')
o17 = {6} | -d d2+1 0 |
{6} | b -bd -1 |
{6} | 0 ef -ac |
{6} | 0 -ac b2 |
{6} | -c 0 ab |
{7} | 0 -b d |
6 3
o17 : Matrix RM <--- RM
|
i18 : kernel FM == image GM o18 = true |
This method does not use the algorithms in the engine, hence it might be slow.
The object pruneDiff is a method function with options.