next | previous | forward | backward | up | top | index | toc | packages | Macaulay2 website
Complexes :: Strategy for free resolutions over a field

Strategy for free resolutions over a field -- algorithm for computing free resolutions over a field

Synopsis

Description

Every module over a field is free. Therefore a minimal free resolution is determined by choosing a basis. This is the default strategy when the underlying ring is a field, so in practice it never needs to be specified.

Our first examples are over finite fields. Notice that the most interesting feature is the augmentation map.

i1 : kk = ZZ/32003;
i2 : M = coker random(kk^3, kk^2)

o2 = cokernel | 107   3187  |
              | 4376  3783  |
              | -5570 -5307 |

                              3
o2 : kk-module, quotient of kk
i3 : F = freeResolution M

       1
o3 = kk
      
     0

o3 : Complex
i4 : assert(F === freeResolution(M, Strategy => "Field"))
i5 : assert isWellDefined F
i6 : g = augmentationMap F

                                                    1
o6 = 0 : cokernel | 107   3187  | <-------------- kk  : 0
                  | 4376  3783  |    | -13898 |
                  | -5570 -5307 |    | 0      |
                                     | 0      |

o6 : ComplexMap
i7 : assert isWellDefined g
i8 : assert(source g == F)
i9 : assert(target g == complex M)
i10 : assert(coker g == 0 and ker g == 0)

Finding a minimal free resolution for a module over a field is equivalent to finding a minimal Presentation.

i11 : N = ker random(kk^3, kk^2) ++ M

o11 = subquotient (| 0 0 0 |, | 0     0     |)
                   | 0 0 0 |  | 0     0     |
                   | 1 0 0 |  | 107   3187  |
                   | 0 1 0 |  | 4376  3783  |
                   | 0 0 1 |  | -5570 -5307 |

                                  5
o11 : kk-module, subquotient of kk
i12 : F = freeResolution N

        1
o12 = kk
       
      0

o12 : Complex
i13 : g = augmentationMap F

                                                                     1
o13 = 0 : subquotient (| 0 0 0 |, | 0     0     |) <-------------- kk  : 0
                       | 0 0 0 |  | 0     0     |     | -13898 |
                       | 1 0 0 |  | 107   3187  |     | 0      |
                       | 0 1 0 |  | 4376  3783  |     | 0      |
                       | 0 0 1 |  | -5570 -5307 |

o13 : ComplexMap
i14 : PN = minimalPresentation N

        1
o14 = kk

o14 : kk-module, free
i15 : assert(g_0 == PN.cache.pruningMap)
i16 : kk = GF(3^10);
i17 : M = coker random(kk^3, kk^2)

o17 = cokernel | -a9+a7-a4-a2+a        a9+a7+a6+a5+a4+a     |
               | -a9-a8-a6+a5+a4+a3+a2 -a9-a8-a7-a5-a4+a3+a |
               | 0                     a3+a                 |

                               3
o17 : kk-module, quotient of kk
i18 : F = freeResolution M

        1
o18 = kk
       
      0

o18 : Complex
i19 : g = augmentationMap F

                                                                                           1
o19 = 0 : cokernel | -a9+a7-a4-a2+a        a9+a7+a6+a5+a4+a     | <--------------------- kk  : 0
                   | -a9-a8-a6+a5+a4+a3+a2 -a9-a8-a7-a5-a4+a3+a |    | -a9-a5-a4+a+1 |
                   | 0                     a3+a                 |    | 0             |
                                                                     | 0             |

o19 : ComplexMap

This also works over the rationals, number fields, and fraction fields.

i20 : kk = QQ;
i21 : M = coker random(kk^3, kk^2, Height => 10000)

o21 = cokernel | 7369/2654 1835/4116 |
               | 5072/9417 5865/5027 |
               | 528/1535  8119/9535 |

                               3
o21 : QQ-module, quotient of QQ
i22 : F = freeResolution M

        1
o22 = QQ
       
      0

o22 : Complex
i23 : g = augmentationMap F

                                                                                                  1
o23 = 0 : cokernel | 7369/2654 1835/4116 | <--------------------------------------------------- QQ  : 0
                   | 5072/9417 5865/5027 |    | 1135053355240151631425/21684957995331197952 |
                   | 528/1535  8119/9535 |    | 0                                           |
                                              | 0                                           |

o23 : ComplexMap
i24 : S = QQ[a]/(a^3-a-1);
i25 : kk = toField S;
i26 : M = coker sub(random(S^3, S^{-2,-2}) + random(S^3, S^{-1,-1}) + random(S^3, S^2), kk)

o26 = cokernel | 4/7a2+1/3a+5/6  8/7a2+7/4a+9/10 |
               | 9/7a2+7/10a+1/5 10/7a2+3/4a+2/3 |
               | 5/2a2+2/3a+2    3/7a2+4/5a+10/7 |

                               3
o26 : kk-module, quotient of kk
i27 : F = freeResolution M

o27 = cokernel | 1 0 |
               | 0 1 |
               | 0 0 |
       
      0

o27 : Complex
i28 : g = augmentationMap F

o28 = 0 : cokernel | 4/7a2+1/3a+5/6  8/7a2+7/4a+9/10 | <--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- cokernel | 1 0 | : 0
                   | 9/7a2+7/10a+1/5 10/7a2+3/4a+2/3 |    | 0 0 88962783715378833419004/36978459195795265534493927790940847a2-141294095220208460369104/36978459195795265534493927790940847a-15992241288597633182489/36978459195795265534493927790940847 |            | 0 1 |
                   | 5/2a2+2/3a+2    3/7a2+4/5a+10/7 |    | 0 0 0                                                                                                                                                                                       |            | 0 0 |
                                                          | 0 0 0                                                                                                                                                                                       |

o28 : ComplexMap
i29 : S = ZZ/101[a,b,c,d];
i30 : kk = frac S;
i31 : M = coker sub(random(S^3, S^{-1,-1}), kk)

o31 = cokernel | -47a-23b-7c+2d   39a+27b-22c+32d  |
               | 29a-47b+15c-37d  -9a-32b-20c+24d  |
               | -13a-10b+30c-18d -30a-48b-15c+39d |

                               3
o31 : kk-module, quotient of kk
i32 : F = freeResolution M

        1
o32 = kk
       
      0

o32 : Complex
i33 : g = augmentationMap F

                                                                                                                                                                        1
o33 = 0 : cokernel | -47a-23b-7c+2d   39a+27b-22c+32d  | <----------------------------------------------------------------------------------------------------------- kk  : 0
                   | 29a-47b+15c-37d  -9a-32b-20c+24d  |    | (-22a2+41ab-27b2+2ac-46bc+38c2-45ad+3bd-17cd+36d2)/(a2-30ab-30b2+41ac+28bc-32c2-19ad+40bd+7cd-22d2) |
                   | -13a-10b+30c-18d -30a-48b-15c+39d |    | 0                                                                                                   |
                                                            | 0                                                                                                   |

o33 : ComplexMap

See also