The dual of a complex $C$ is by definition $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 |
The double dual is not necessarily isomorphic to the original 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) |