next | previous | forward | backward | up | top | index | toc | Macaulay2 website
Complexes :: minimalPresentation(Complex)

minimalPresentation(Complex) -- minimal presentation of all terms in a complex

Synopsis

Description

This is frequently useful to make the output of certain operations readable or understandable. This operation is functorial, applying both to complexes and complex maps.

In particular, homology often needs to be pruned to be understood. For instance, this is useful for recognizing when terms given by subquotient modules are actually zero.

i1 : S = ZZ/101[a,b,c,d,e];
i2 : I = ideal(a,b) * ideal(c,d,e)

o2 = ideal (a*c, a*d, a*e, b*c, b*d, b*e)

o2 : Ideal of S
i3 : F = dual freeResolution I

      1      5      9      6      1
o3 = S  <-- S  <-- S  <-- S  <-- S
                                  
     -4     -3     -2     -1     0

o3 : Complex
i4 : C = HH F

o4 = cokernel {-5} | -e d -c -b a | <-- subquotient ({-4} | d c  0 b  0 0  a 0  0 0 |, {-4} | d -c -b a 0  0  0  0  0 |) <-- subquotient ({-3} | c b a  0  0  0  0 |, {-3} | -b a  0  0  0  0 |) <-- subquotient ({-2} | ac |, {-2} | ac |) <-- image 0
                                                     {-4} | e 0  c 0  b 0  0 a  0 0 |  {-4} | e 0  0  0 -c -b a  0  0 |                   {-3} | d 0 0  b  0  a  0 |  {-3} | 0  0  -b a  0  0 |                   {-2} | bc |  {-2} | bc |       
     -4                                              {-4} | 0 -e d 0  0 b  0 0  a 0 |  {-4} | 0 e  0  0 -d 0  0  -b a |                   {-3} | 0 d 0  -c 0  0  0 |  {-3} | -d 0  c  0  0  0 |                   {-2} | ad |  {-2} | ad |      0
                                                     {-4} | 0 0  0 -e d -c 0 0  0 a |  {-4} | 0 0  e  0 0  -d 0  c  0 |                   {-3} | 0 0 -d 0  0  c  0 |  {-3} | 0  -d 0  c  0  0 |                   {-2} | bd |  {-2} | bd |
                                                     {-4} | 0 0  0 0  0 0  e -d c b |  {-4} | 0 0  0  e 0  0  -d 0  c |                   {-3} | e 0 0  0  b  0  a |  {-3} | 0  0  0  0  -b a |                   {-2} | ae |  {-2} | ae |
                                                                                                                                          {-3} | 0 e 0  0  -c 0  0 |  {-3} | -e 0  0  0  c  0 |                   {-2} | be |  {-2} | be |
                                        -3                                                                                                {-3} | 0 0 -e 0  0  0  c |  {-3} | 0  -e 0  0  0  c |       
                                                                                                                                          {-3} | 0 0 0  e  -d 0  0 |  {-3} | 0  0  -e 0  d  0 |      -1
                                                                                                                                          {-3} | 0 0 0  0  0  -e d |  {-3} | 0  0  0  -e 0  d |
                                                                                                                              
                                                                                                                             -2

o4 : Complex
i5 : D = prune C

o5 = cokernel {-5} | e d c b a | <-- cokernel {-3} | e d c | <-- cokernel {-2} | b a |
                                                                  
     -4                              -3                          -2

o5 : Complex
i6 : g = D.cache.pruningMap

o6 = -4 : cokernel {-5} | -e d -c -b a | <-------------- cokernel {-5} | e d c b a | : -4
                                            {-5} | 1 |

     -3 : subquotient ({-4} | d c  0 b  0 0  a 0  0 0 |, {-4} | d -c -b a 0  0  0  0  0 |) <-------------- cokernel {-3} | e d c | : -3
                       {-4} | e 0  c 0  b 0  0 a  0 0 |  {-4} | e 0  0  0 -c -b a  0  0 |     {-3} | 0 |
                       {-4} | 0 -e d 0  0 b  0 0  a 0 |  {-4} | 0 e  0  0 -d 0  0  -b a |     {-3} | 0 |
                       {-4} | 0 0  0 -e d -c 0 0  0 a |  {-4} | 0 0  e  0 0  -d 0  c  0 |     {-3} | 0 |
                       {-4} | 0 0  0 0  0 0  e -d c b |  {-4} | 0 0  0  e 0  0  -d 0  c |     {-3} | 0 |
                                                                                              {-3} | 0 |
                                                                                              {-3} | 0 |
                                                                                              {-3} | 0 |
                                                                                              {-3} | 0 |
                                                                                              {-3} | 0 |
                                                                                              {-3} | 1 |

     -2 : subquotient ({-3} | c b a  0  0  0  0 |, {-3} | -b a  0  0  0  0 |) <-------------- cokernel {-2} | b a | : -2
                       {-3} | d 0 0  b  0  a  0 |  {-3} | 0  0  -b a  0  0 |     {-2} | 1 |
                       {-3} | 0 d 0  -c 0  0  0 |  {-3} | -d 0  c  0  0  0 |     {-2} | 0 |
                       {-3} | 0 0 -d 0  0  c  0 |  {-3} | 0  -d 0  c  0  0 |     {-2} | 0 |
                       {-3} | e 0 0  0  b  0  a |  {-3} | 0  0  0  0  -b a |     {-2} | 0 |
                       {-3} | 0 e 0  0  -c 0  0 |  {-3} | -e 0  0  0  c  0 |     {-2} | 0 |
                       {-3} | 0 0 -e 0  0  0  c |  {-3} | 0  -e 0  0  0  c |     {-2} | 0 |
                       {-3} | 0 0 0  e  -d 0  0 |  {-3} | 0  0  -e 0  d  0 |     {-2} | 0 |
                       {-3} | 0 0 0  0  0  -e d |  {-3} | 0  0  0  -e 0  d |

o6 : ComplexMap
i7 : assert isWellDefined g
i8 : assert isComplexMorphism g
i9 : assert (target g == C)
i10 : assert (source g == D)
i11 : g^-1

o11 = -4 : cokernel {-5} | e d c b a | <-------------- cokernel {-5} | -e d -c -b a | : -4
                                          {-5} | 1 |

      -3 : cokernel {-3} | e d c | <-------------------------------- subquotient ({-4} | d c  0 b  0 0  a 0  0 0 |, {-4} | d -c -b a 0  0  0  0  0 |) : -3
                                      {-3} | 0 0 0 0 0 0 0 0 0 1 |                {-4} | e 0  c 0  b 0  0 a  0 0 |  {-4} | e 0  0  0 -c -b a  0  0 |
                                                                                  {-4} | 0 -e d 0  0 b  0 0  a 0 |  {-4} | 0 e  0  0 -d 0  0  -b a |
                                                                                  {-4} | 0 0  0 -e d -c 0 0  0 a |  {-4} | 0 0  e  0 0  -d 0  c  0 |
                                                                                  {-4} | 0 0  0 0  0 0  e -d c b |  {-4} | 0 0  0  e 0  0  -d 0  c |

      -2 : cokernel {-2} | b a | <-------------------------- subquotient ({-3} | c b a  0  0  0  0 |, {-3} | -b a  0  0  0  0 |) : -2
                                    {-2} | 1 0 0 0 0 0 0 |                {-3} | d 0 0  b  0  a  0 |  {-3} | 0  0  -b a  0  0 |
                                                                          {-3} | 0 d 0  -c 0  0  0 |  {-3} | -d 0  c  0  0  0 |
                                                                          {-3} | 0 0 -d 0  0  c  0 |  {-3} | 0  -d 0  c  0  0 |
                                                                          {-3} | e 0 0  0  b  0  a |  {-3} | 0  0  0  0  -b a |
                                                                          {-3} | 0 e 0  0  -c 0  0 |  {-3} | -e 0  0  0  c  0 |
                                                                          {-3} | 0 0 -e 0  0  0  c |  {-3} | 0  -e 0  0  0  c |
                                                                          {-3} | 0 0 0  e  -d 0  0 |  {-3} | 0  0  -e 0  d  0 |
                                                                          {-3} | 0 0 0  0  0  -e d |  {-3} | 0  0  0  -e 0  d |

o11 : ComplexMap
i12 : assert(g*g^-1 == 1 and g^-1*g == 1)

The image of a map of complexes also becomes more understandable via pruning.

i13 : S = ZZ/101[a,b,c];
i14 : I = ideal(a^2,b^2,c^2);

o14 : Ideal of S
i15 : J = I + ideal(a*b*c);

o15 : Ideal of S
i16 : FI = freeResolution I

       1      3      3      1
o16 = S  <-- S  <-- S  <-- S
                            
      0      1      2      3

o16 : Complex
i17 : FJ = freeResolution J

       1      4      6      3
o17 = S  <-- S  <-- S  <-- S
                            
      0      1      2      3

o17 : Complex
i18 : f = randomComplexMap(FJ, FI ** S^{-1}, Cycle => true)

           1                       1
o18 = 0 : S  <------------------- S  : 0
                | 32a-36b-30c |

           4                                                   3
      1 : S  <----------------------------------------------- S  : 1
                {2} | 32a-36b-30c 0           0           |
                {2} | 0           32a-36b-30c 0           |
                {2} | 0           0           32a-36b-30c |
                {3} | 0           0           0           |

           6                                                  3
      2 : S  <---------------------------------------------- S  : 2
                {4} | 32a-36b+42c -19c       19c         |
                {4} | 29b+10c     19b-29c    -19b+22c    |
                {4} | -29a+29c    -19a-24c   19a+8c      |
                {4} | -10b        32a-7b-30c -22b        |
                {4} | -10a-29b    29a+24b    -22a-8b     |
                {4} | -29a        24a        24a-36b-30c |

           3                                        1
      3 : S  <------------------------------------ S  : 3
                {5} | 19a2+19b2+32ac-36bc+42c2 |
                {5} | -22a2-32ab+7b2+30bc-10c2 |
                {5} | 24a2-36ab-24b2-30ac-29c2 |

o18 : ComplexMap
i19 : C = image f

o19 = image | 32a-36b-30c | <-- image {2} | 32a-36b-30c 0           0           | <-- image {4} | 32a-36b+42c -19c       19c         | <-- image {5} | 19a2+19b2+32ac-36bc+42c2 |
                                      {2} | 0           32a-36b-30c 0           |           {4} | 29b+10c     19b-29c    -19b+22c    |           {5} | -22a2-32ab+7b2+30bc-10c2 |
      0                               {2} | 0           0           32a-36b-30c |           {4} | -29a+29c    -19a-24c   19a+8c      |           {5} | 24a2-36ab-24b2-30ac-29c2 |
                                      {3} | 0           0           0           |           {4} | -10b        32a-7b-30c -22b        |      
                                                                                            {4} | -10a-29b    29a+24b    -22a-8b     |     3
                                1                                                           {4} | -29a        24a        24a-36b-30c |
                                                                                       
                                                                                      2

o19 : Complex
i20 : D = prune C

       1      3      3      1
o20 = S  <-- S  <-- S  <-- S
                            
      0      1      2      3

o20 : Complex
i21 : g = D.cache.pruningMap

                                                1
o21 = 0 : image | 32a-36b-30c | <------------- S  : 0
                                   {1} | 1 |

                                                                                3
      1 : image {2} | 32a-36b-30c 0           0           | <----------------- S  : 1
                {2} | 0           32a-36b-30c 0           |    {3} | 1 0 0 |
                {2} | 0           0           32a-36b-30c |    {3} | 0 1 0 |
                {3} | 0           0           0           |    {3} | 0 0 1 |

                                                                               3
      2 : image {4} | 32a-36b+42c -19c       19c         | <----------------- S  : 2
                {4} | 29b+10c     19b-29c    -19b+22c    |    {5} | 1 0 0 |
                {4} | -29a+29c    -19a-24c   19a+8c      |    {5} | 0 1 0 |
                {4} | -10b        32a-7b-30c -22b        |    {5} | 0 0 1 |
                {4} | -10a-29b    29a+24b    -22a-8b     |
                {4} | -29a        24a        24a-36b-30c |

                                                                 1
      3 : image {5} | 19a2+19b2+32ac-36bc+42c2 | <------------- S  : 3
                {5} | -22a2-32ab+7b2+30bc-10c2 |    {7} | 1 |
                {5} | 24a2-36ab-24b2-30ac-29c2 |

o21 : ComplexMap
i22 : assert isWellDefined g
i23 : assert isComplexMorphism g
i24 : assert (target g == C)
i25 : assert (source g == D)
i26 : g^-1

           1
o26 = 0 : S  <------------- image | 32a-36b-30c | : 0
                {1} | 1 |

           3
      1 : S  <----------------- image {2} | 32a-36b-30c 0           0           | : 1
                {3} | 1 0 0 |         {2} | 0           32a-36b-30c 0           |
                {3} | 0 1 0 |         {2} | 0           0           32a-36b-30c |
                {3} | 0 0 1 |         {3} | 0           0           0           |

           3
      2 : S  <----------------- image {4} | 32a-36b+42c -19c       19c         | : 2
                {5} | 1 0 0 |         {4} | 29b+10c     19b-29c    -19b+22c    |
                {5} | 0 1 0 |         {4} | -29a+29c    -19a-24c   19a+8c      |
                {5} | 0 0 1 |         {4} | -10b        32a-7b-30c -22b        |
                                      {4} | -10a-29b    29a+24b    -22a-8b     |
                                      {4} | -29a        24a        24a-36b-30c |

           1
      3 : S  <------------- image {5} | 19a2+19b2+32ac-36bc+42c2 | : 3
                {7} | 1 |         {5} | -22a2-32ab+7b2+30bc-10c2 |
                                  {5} | 24a2-36ab-24b2-30ac-29c2 |

o26 : ComplexMap
i27 : assert(g*g^-1 == 1 and g^-1*g == 1)

One can directly prune the map of complexes $f$.

i28 : h = prune f

           1                       1
o28 = 0 : S  <------------------- S  : 0
                | 32a-36b-30c |

           4                                                   3
      1 : S  <----------------------------------------------- S  : 1
                {2} | 32a-36b-30c 0           0           |
                {2} | 0           32a-36b-30c 0           |
                {2} | 0           0           32a-36b-30c |
                {3} | 0           0           0           |

           6                                                  3
      2 : S  <---------------------------------------------- S  : 2
                {4} | 32a-36b+42c -19c       19c         |
                {4} | 29b+10c     19b-29c    -19b+22c    |
                {4} | -29a+29c    -19a-24c   19a+8c      |
                {4} | -10b        32a-7b-30c -22b        |
                {4} | -10a-29b    29a+24b    -22a-8b     |
                {4} | -29a        24a        24a-36b-30c |

           3                                        1
      3 : S  <------------------------------------ S  : 3
                {5} | 19a2+19b2+32ac-36bc+42c2 |
                {5} | -22a2-32ab+7b2+30bc-10c2 |
                {5} | 24a2-36ab-24b2-30ac-29c2 |

o28 : ComplexMap
i29 : assert(source h === prune source f)
i30 : assert(target h === prune target f)

See also