-- -*- M2-comint -*- hash: 13294881241001448597

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)

i18 : 
