The length of a complex is the difference between the highest index of a non-zero object and the lowest index of a non-zero object.
Typically, it counts the number of non-zero differentials, e.g. in a free resolution.
i1 : S = ZZ/101[a,b,c,d]; |
i2 : C1 = freeResolution coker vars S
1 4 6 4 1
o2 = S <-- S <-- S <-- S <-- S
0 1 2 3 4
o2 : Complex
|
i3 : length C1 o3 = 4 |
i4 : C2 = C1[5]
1 4 6 4 1
o4 = S <-- S <-- S <-- S <-- S
-5 -4 -3 -2 -1
o4 : Complex
|
i5 : length C2 o5 = 4 |
i6 : C3 = C1 ++ C1[6]
1 4 6 4 1 1 4 6 4 1
o6 = S <-- S <-- S <-- S <-- S <-- 0 <-- S <-- S <-- S <-- S <-- S
-6 -5 -4 -3 -2 -1 0 1 2 3 4
o6 : Complex
|
i7 : length C3 o7 = 10 |
This function always prunes the input complex, so might involve computation.
i8 : M1 = S^1/(a*b, c*d, a*c, b*c)
o8 = cokernel | ab cd ac bc |
1
o8 : S-module, quotient of S
|
i9 : M2 = S^1/(a*b, c*d, a*c)
o9 = cokernel | ab cd ac |
1
o9 : S-module, quotient of S
|
i10 : C4 = freeResolution M1
1 4 4 1
o10 = S <-- S <-- S <-- S
0 1 2 3
o10 : Complex
|
i11 : C5 = freeResolution M2
1 3 2
o11 = S <-- S <-- S
0 1 2
o11 : Complex
|
i12 : f = map(M1, M2, 1) o12 = | 1 | o12 : Matrix |
i13 : C6 = coker extend(C4, C5, matrix f)
1
o13 = cokernel | 1 | <-- cokernel {2} | 1 0 0 | <-- cokernel {3} | 1 0 | <-- S
{2} | 0 1 0 | {3} | 0 0 |
0 {2} | 0 0 0 | {3} | 0 1 | 3
{2} | 0 0 1 | {3} | 0 0 |
1 2
o13 : Complex
|
i14 : concentration C6 o14 = (0, 3) o14 : Sequence |
i15 : length C6 o15 = 2 |
i16 : prune C6
1 2 1
o16 = S <-- S <-- S
1 2 3
o16 : Complex
|
i17 : concentration prune C6 o17 = (1, 3) o17 : Sequence |