next | previous | forward | backward | up | top | index | toc | Macaulay2 website
ChainComplexExtras :: isChainComplexMap

isChainComplexMap -- Test to see if the ChainComplexMap commutes with the differentials.

Synopsis

Description

i1 : S = ZZ/101[a,b,c]

o1 = S

o1 : PolynomialRing
i2 : kRes = res coker vars S

      1      3      3      1
o2 = S  <-- S  <-- S  <-- S  <-- 0
                                  
     0      1      2      3      4

o2 : ChainComplex
i3 : multBya = extend(kRes,kRes,matrix{{a}})

          1             1
o3 = 0 : S  <--------- S  : 0
               | a |

          3                     3
     1 : S  <----------------- S  : 1
               {1} | a b c |
               {1} | 0 0 0 |
               {1} | 0 0 0 |

          3         3
     2 : S  <----- S  : 2
               0

          1         1
     3 : S  <----- S  : 3
               0

     4 : 0 <----- 0 : 4
              0

o3 : ChainComplexMap
i4 : isChainComplexMap(multBya)

o4 = true
i5 : T = chainComplex(map(S^1,S^1,a))

      1      1
o5 = S  <-- S
             
     0      1

o5 : ChainComplex
i6 : T' = chainComplex{map(S^1/(ideal a),S^1, 1), map(S^1,S^1, -a)}[1]

                         1      1
o6 = cokernel | a | <-- S  <-- S
                                
     -1                 0      1

o6 : ChainComplex
i7 : phi = chainComplexMap(T',T,apply(toList(min T..max T), i->id_(T_i)))

          1             1
o7 = 0 : S  <--------- S  : 0
               | 1 |

          1             1
     1 : S  <--------- S  : 1
               | 1 |

o7 : ChainComplexMap
i8 : isChainComplexMap phi

o8 = true

Caveat: The script uses trivialHomologicalTruncation to truncates the source and target of the map phi to include only the indices for which phi has matrices. This eliminates the problem of complexes of different lengths seen in an earlier version, which would have made the last line in the example return false.

Ways to use isChainComplexMap :

For the programmer

The object isChainComplexMap is a method function.