The dual of a complex $C$ is by definition $\operatorname{Hom}(C, R)$, where $R$ is the ring of $C$.
i1 : S = ZZ/101[a..d];
|
i2 : B = intersect(ideal(a,c),ideal(b,d))
o2 = ideal (c*d, a*d, b*c, a*b)
o2 : Ideal of S
|
i3 : C1 = freeResolution B
1 4 4 1
o3 = S <-- S <-- S <-- S
0 1 2 3
o3 : Complex
|
i4 : C2 = dual C1
1 4 4 1
o4 = S <-- S <-- S <-- S
-3 -2 -1 0
o4 : Complex
|
i5 : assert(C2 == Hom(C1, S^1))
|
i6 : C1 == dual dual C1
o6 = true
|
i7 : prune HH C2
o7 = cokernel {-4} | d c b a | <-- cokernel {-2} | c a 0 0 |
{-2} | 0 0 d b |
-3
-2
o7 : Complex
|
i8 : I = ideal(a^2, a*b, b^2)
2 2
o8 = ideal (a , a*b, b )
o8 : Ideal of S
|
i9 : J = ideal(b^3, b*c, c^3)
3 3
o9 = ideal (b , b*c, c )
o9 : Ideal of S
|
i10 : K = intersect(I,J)
2 3 2 3
o10 = ideal (b c, a*b*c, b , a c )
o10 : Ideal of S
|
i11 : f = map(S^1/I ++ S^1/J, S^1/K, {{1},{1}})
o11 = | 1 |
| 1 |
o11 : Matrix
|
i12 : g = map(S^1/(I+J), S^1/I ++ S^1/J, {{1,-1}})
o12 = | 1 -1 |
o12 : Matrix
|
i13 : C = complex{g,f}
o13 = cokernel | a2 ab b2 b3 bc c3 | <-- cokernel | a2 ab b2 0 0 0 | <-- cokernel | b2c abc b3 a2c3 |
| 0 0 0 b3 bc c3 |
0 2
1
o13 : Complex
|
i14 : assert isWellDefined C
|
i15 : assert isExact C
|
i16 : assert(dual C == 0)
|
i17 : assert(C != dual dual C)
|