Truncation of homogeneous (graded) modules induces a natural operation on chain complexes.
In the singly graded case, the truncation of a homogeneous module $M$ at degree $d$ is generated by all homogeneous elements of degree at least $d$ in $M$. This method applies this operation to each term in a chain complex.
i1 : R = QQ[a,b,c]; |
i2 : I = ideal(a*b, a*c, b*c) o2 = ideal (a*b, a*c, b*c) o2 : Ideal of R |
i3 : C = freeResolution I 1 3 2 o3 = R <-- R <-- R 0 1 2 o3 : Complex |
i4 : D = truncate(3,C) 2 o4 = image | c3 bc2 ac2 b2c abc a2c b3 ab2 a2b a3 | <-- image {2} | c b a 0 0 0 0 0 0 | <-- R {2} | 0 0 0 c b a 0 0 0 | 0 {2} | 0 0 0 0 0 0 c b a | 2 1 o4 : Complex |
i5 : assert isWellDefined D |
i6 : prune HH D o6 = cokernel {3} | b a 0 0 0 0 | {3} | 0 0 c a 0 0 | {3} | 0 0 0 0 c b | 0 o6 : Complex |
Truncating at a degree less than the minimal generators is the identity operation.
i7 : assert(C == truncate(0, C)) |
In the multi-graded case, the truncation of a homogeneous module at a list of degrees is generated by all homogeneous elements of degree that are component-wise greater than or equal to at least one of the degrees.
i8 : A = ZZ/101[x_0, x_1, y_0, y_1, y_2, Degrees => {2:{1,0}, 3:{0,1}}]; |
i9 : I = intersect(ideal(x_0, x_1), ideal(y_0, y_1, y_2)) o9 = ideal (x y , x y , x y , x y , x y , x y ) 1 2 0 2 1 1 0 1 1 0 0 0 o9 : Ideal of A |
i10 : C = freeResolution I 1 6 9 5 1 o10 = A <-- A <-- A <-- A <-- A 0 1 2 3 4 o10 : Complex |
i11 : D1 = prune truncate({{1,1}}, C) 6 9 5 1 o11 = cokernel {1, 1} | x_0 y_1 0 0 y_0 0 0 0 0 | <-- A <-- A <-- A <-- A {1, 1} | -x_1 0 y_1 0 0 0 y_0 0 0 | {1, 1} | 0 -y_2 0 x_0 0 y_0 0 0 0 | 1 2 3 4 {1, 1} | 0 0 -y_2 -x_1 0 0 0 y_0 0 | {1, 1} | 0 0 0 0 -y_2 -y_1 0 0 x_0 | {1, 1} | 0 0 0 0 0 0 -y_2 -y_1 -x_1 | 0 o11 : Complex |
i12 : D2 = truncate({{1,0}}, C) o12 = image | x_1 x_0 | <-- image {1, 1} | 1 0 0 0 0 0 | <-- image {2, 1} | 1 0 0 0 0 0 0 0 0 | <-- image {2, 2} | 1 0 0 0 0 | <-- image {2, 3} | 1 | {1, 1} | 0 1 0 0 0 0 | {2, 1} | 0 1 0 0 0 0 0 0 0 | {2, 2} | 0 1 0 0 0 | 0 {1, 1} | 0 0 1 0 0 0 | {1, 2} | 0 0 1 0 0 0 0 0 0 | {2, 2} | 0 0 1 0 0 | 4 {1, 1} | 0 0 0 1 0 0 | {1, 2} | 0 0 0 1 0 0 0 0 0 | {1, 3} | 0 0 0 1 0 | {1, 1} | 0 0 0 0 1 0 | {2, 1} | 0 0 0 0 1 0 0 0 0 | {1, 3} | 0 0 0 0 1 | {1, 1} | 0 0 0 0 0 1 | {1, 2} | 0 0 0 0 0 1 0 0 0 | {1, 2} | 0 0 0 0 0 0 1 0 0 | 3 1 {1, 2} | 0 0 0 0 0 0 0 1 0 | {1, 2} | 0 0 0 0 0 0 0 0 1 | 2 o12 : Complex |
i13 : D3 = truncate({{0,1}}, C) o13 = image | y_2 y_1 y_0 | <-- image {1, 1} | 1 0 0 0 0 0 | <-- image {2, 1} | 1 0 0 0 0 0 0 0 0 | <-- image {2, 2} | 1 0 0 0 0 | <-- image {2, 3} | 1 | {1, 1} | 0 1 0 0 0 0 | {2, 1} | 0 1 0 0 0 0 0 0 0 | {2, 2} | 0 1 0 0 0 | 0 {1, 1} | 0 0 1 0 0 0 | {1, 2} | 0 0 1 0 0 0 0 0 0 | {2, 2} | 0 0 1 0 0 | 4 {1, 1} | 0 0 0 1 0 0 | {1, 2} | 0 0 0 1 0 0 0 0 0 | {1, 3} | 0 0 0 1 0 | {1, 1} | 0 0 0 0 1 0 | {2, 1} | 0 0 0 0 1 0 0 0 0 | {1, 3} | 0 0 0 0 1 | {1, 1} | 0 0 0 0 0 1 | {1, 2} | 0 0 0 0 0 1 0 0 0 | {1, 2} | 0 0 0 0 0 0 1 0 0 | 3 1 {1, 2} | 0 0 0 0 0 0 0 1 0 | {1, 2} | 0 0 0 0 0 0 0 0 1 | 2 o13 : Complex |
i14 : D4 = truncate({{1,0},{0,1}}, C) o14 = image | y_2 y_1 y_0 x_1 x_0 | <-- image {1, 1} | 1 0 0 0 0 0 | <-- image {2, 1} | 1 0 0 0 0 0 0 0 0 | <-- image {2, 2} | 1 0 0 0 0 | <-- image {2, 3} | 1 | {1, 1} | 0 1 0 0 0 0 | {2, 1} | 0 1 0 0 0 0 0 0 0 | {2, 2} | 0 1 0 0 0 | 0 {1, 1} | 0 0 1 0 0 0 | {1, 2} | 0 0 1 0 0 0 0 0 0 | {2, 2} | 0 0 1 0 0 | 4 {1, 1} | 0 0 0 1 0 0 | {1, 2} | 0 0 0 1 0 0 0 0 0 | {1, 3} | 0 0 0 1 0 | {1, 1} | 0 0 0 0 1 0 | {2, 1} | 0 0 0 0 1 0 0 0 0 | {1, 3} | 0 0 0 0 1 | {1, 1} | 0 0 0 0 0 1 | {1, 2} | 0 0 0 0 0 1 0 0 0 | {1, 2} | 0 0 0 0 0 0 1 0 0 | 3 1 {1, 2} | 0 0 0 0 0 0 0 1 0 | {1, 2} | 0 0 0 0 0 0 0 0 1 | 2 o14 : Complex |
i15 : D5 = truncate({{2,2}}, C) o15 = image | x_1^2y_2^2 x_0x_1y_2^2 x_0^2y_2^2 x_1^2y_1y_2 x_0x_1y_1y_2 x_0^2y_1y_2 x_1^2y_0y_2 x_0x_1y_0y_2 x_0^2y_0y_2 x_1^2y_1^2 x_0x_1y_1^2 x_0^2y_1^2 x_1^2y_0y_1 x_0x_1y_0y_1 x_0^2y_0y_1 x_1^2y_0^2 x_0x_1y_0^2 x_0^2y_0^2 | <-- image {1, 1} | x_1y_2 x_0y_2 x_1y_1 x_0y_1 x_1y_0 x_0y_0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | <-- image {2, 1} | y_2 y_1 y_0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | <-- image {2, 2} | 1 0 0 0 0 0 0 | <-- image {2, 3} | 1 | {1, 1} | 0 0 0 0 0 0 x_1y_2 x_0y_2 x_1y_1 x_0y_1 x_1y_0 x_0y_0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {2, 1} | 0 0 0 y_2 y_1 y_0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {2, 2} | 0 1 0 0 0 0 0 | 0 {1, 1} | 0 0 0 0 0 0 0 0 0 0 0 0 x_1y_2 x_0y_2 x_1y_1 x_0y_1 x_1y_0 x_0y_0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {1, 2} | 0 0 0 0 0 0 x_1 x_0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {2, 2} | 0 0 1 0 0 0 0 | 4 {1, 1} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x_1y_2 x_0y_2 x_1y_1 x_0y_1 x_1y_0 x_0y_0 0 0 0 0 0 0 0 0 0 0 0 0 | {1, 2} | 0 0 0 0 0 0 0 0 x_1 x_0 0 0 0 0 0 0 0 0 0 0 0 | {1, 3} | 0 0 0 x_1 x_0 0 0 | {1, 1} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x_1y_2 x_0y_2 x_1y_1 x_0y_1 x_1y_0 x_0y_0 0 0 0 0 0 0 | {2, 1} | 0 0 0 0 0 0 0 0 0 0 y_2 y_1 y_0 0 0 0 0 0 0 0 0 | {1, 3} | 0 0 0 0 0 x_1 x_0 | {1, 1} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x_1y_2 x_0y_2 x_1y_1 x_0y_1 x_1y_0 x_0y_0 | {1, 2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 x_1 x_0 0 0 0 0 0 0 | {1, 2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x_1 x_0 0 0 0 0 | 3 1 {1, 2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x_1 x_0 0 0 | {1, 2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x_1 x_0 | 2 o15 : Complex |
i16 : assert all({D1,D2,D3,D4,D5}, isWellDefined) |