next | previous | forward | backward | up | top | index | toc | Macaulay2 web site
Macaulay2Doc :: FastNonminimal

FastNonminimal -- compute a non-minimal graded free resolution

Synopsis

Description

Given a singly-graded module, this function computes a non-minimal free resolution. If the input is an ideal I ⊂S, it computes a non-minimal resolution of S1/I.

The key benefit of this function is that it allows a much faster method for computing the betti numbers of the minimal free resolution. If that is your only interest (i.e. you don’t need the complex itself), instead use minimalBetti.

i1 : I = Grassmannian(1,6, CoefficientRing => ZZ/101);

               ZZ
o1 : Ideal of ---[p   , p   , p   , p   , p   , p   , p   , p   , p   , p   , p   , p   , p   , p   , p   , p   , p   , p   , p   , p   , p   ]
              101  0,1   0,2   1,2   0,3   1,3   2,3   0,4   1,4   2,4   3,4   0,5   1,5   2,5   3,5   4,5   0,6   1,6   2,6   3,6   4,6   5,6
i2 : S = ring I

o2 = S

o2 : PolynomialRing
i3 : elapsedTime C = res(I, FastNonminimal => true)
     -- 3.0116 seconds elapsed

      1      35      241      841      1781      2464      2294      1432      576      135      14
o3 = S  <-- S   <-- S    <-- S    <-- S     <-- S     <-- S     <-- S     <-- S    <-- S    <-- S   <-- 0
                                                                                                         
     0      1       2        3        4         5         6         7         8        9        10      11

o3 : ChainComplex
i4 : elapsedTime C1 = res ideal(I_*)
     -- 3.22308 seconds elapsed

      1      35      140      385      819      1080      819      385      140      35      1
o4 = S  <-- S   <-- S    <-- S    <-- S    <-- S     <-- S    <-- S    <-- S    <-- S   <-- S  <-- 0
                                                                                                    
     0      1       2        3        4        5         6        7        8        9       10     11

o4 : ChainComplex
i5 : betti(C, Minimize => true) == betti C1

o5 = true

For a non-minimal resolution, betti gives the actual Betti numbers, and using the betti(..., Minimize => ...) option gives the ranks in a minimal resolution (which is itself not computed).

i6 : betti C

            0  1   2   3    4    5    6    7   8   9 10
o6 = total: 1 35 241 841 1781 2464 2294 1432 576 135 14
         0: 1  .   .   .    .    .    .    .   .   .  .
         1: . 35 140 290  402  402  293  152  53  11  1
         2: .  . 101 514 1174 1577 1365  780 287  62  6
         3: .  .   .  37  204  479  621  480 221  56  6
         4: .  .   .   .    1    6   15   20  15   6  1

o6 : BettiTally
i7 : betti(C, Minimize => true)

            0  1   2   3   4    5   6   7   8  9 10
o7 = total: 1 35 140 385 819 1080 819 385 140 35  1
         0: 1  .   .   .   .    .   .   .   .  .  .
         1: . 35 140 189  84    .   .   .   .  .  .
         2: .  .   . 196 735 1080 735 196   .  .  .
         3: .  .   .   .   .    .  84 189 140 35  .
         4: .  .   .   .   .    .   .   .   .  .  1

o7 : BettiTally

As mentioned above, if you are just interested in the minimal betti numbers of the ideal or module, then use minimalBetti, as it avoids construction of the non-minimal free resolution.

i8 : minimalBetti I

            0  1   2   3   4    5   6   7   8  9 10
o8 = total: 1 35 140 385 819 1080 819 385 140 35  1
         0: 1  .   .   .   .    .   .   .   .  .  .
         1: . 35 140 189  84    .   .   .   .  .  .
         2: .  .   . 196 735 1080 735 196   .  .  .
         3: .  .   .   .   .    .  84 189 140 35  .
         4: .  .   .   .   .    .   .   .   .  .  1

o8 : BettiTally

If the resolution is not large, this function can be slower than the usual function resolution. But for larger examples, if one is only interested in the betti numbers, this function can be hundreds or thousands of times faster.

Functions with optional argument named FastNonminimal :

Caveat

Released in M2 1.9, still experimental. Only works over finite prime fields. Uses quite alot of memory.

See also

For the programmer

The object FastNonminimal is a symbol.