Macaulay2 » Documentation
Packages » SimplicialModules :: schurMap
next | previous | forward | backward | up | index | toc

schurMap -- construct the Dold-Puppe extension of the Schur functor

Description

This function constructs the Dold-Puppe extension of the Schur functor to the category of simplicial modules, applied to a simplicial module S or a complex (or maps thereof). The construction involves creating a simplicial module where each component is a Schur functor applied to the corresponding component of S.

By default, degeneracy maps are not computed in this method since it adds additional computation time that is not necessary for computing the normalization or many of the invariants of interest. However, if the user is interested in having degeneracy maps, use the option Degeneracy => true.

i1 : Q = ZZ/101[a..b]

o1 = Q

o1 : PolynomialRing
i2 : K = koszulComplex vars Q;
i3 : S = simplicialModule(K, 4, Degeneracy => true)

      1      3      6      10      15
o3 = Q  <-- Q  <-- Q  <-- Q   <-- Q  <-- ...
                                   
     0      1      2      3       4

o3 : SimplicialModule
i4 : S2S = elapsedTime schurMap({2}, S)
 -- .216133s elapsed

      1      6      21      55      120
o4 = Q  <-- Q  <-- Q   <-- Q   <-- Q   <-- ...
                                    
     0      1      2       3       4

o4 : SimplicialModule
i5 : elapsedTime schurMap({2}, S, Degeneracy => true)
 -- .410776s elapsed

      1      6      21      55      120
o5 = Q  <-- Q  <-- Q   <-- Q   <-- Q   <-- ...
                                    
     0      1      2       3       4

o5 : SimplicialModule

In general, if a polynomial functor has degree $d$, the Dold-Puppe extension of a functor applied to a chain complex of length $t$ will have length at most $d \cdot t$. We can see this explicitly in the following example:

i6 : S = simplicialModule(K, 5)

      1      3      6      10      15      21
o6 = Q  <-- Q  <-- Q  <-- Q   <-- Q   <-- Q  <-- ...
                                           
     0      1      2      3       4       5

o6 : SimplicialModule
i7 : S2 = schurMap({2}, S)

      1      6      21      55      120      231
o7 = Q  <-- Q  <-- Q   <-- Q   <-- Q    <-- Q   <-- ...
                                             
     0      1      2       3       4        5

o7 : SimplicialModule
i8 : prune normalize S2 --notice the output has length 4

      1      5      10      9      3
o8 = Q  <-- Q  <-- Q   <-- Q  <-- Q
                                   
     0      1      2       3      4

o8 : Complex
i9 : minimize oo

      1      2      2      2      1
o9 = Q  <-- Q  <-- Q  <-- Q  <-- Q
                                  
     0      1      2      3      4

o9 : Complex

If the input is a complex, then the default top degree is taken to be the degree of the Schur functor multiplied by the length of the complex. Computationally, this upper bound is often too big to be computed at the moment, so the user may need to specify a top degree by using the TopDegree => d option.

i10 : Q = ZZ/101[a..c]

o10 = Q

o10 : PolynomialRing
i11 : K = koszulComplex vars Q;
i12 : S2K = elapsedTime prune schurMap({2}, K, TopDegree => 4)
 -- .843987s elapsed

       1      9      36      74      81
o12 = Q  <-- Q  <-- Q   <-- Q   <-- Q
                                     
      0      1      2       3       4

o12 : Complex
i13 : (minimize S2K).dd --ignore the last differential

           1                 3
o13 = 0 : Q  <------------- Q  : 1
                | a b c |

           3                                 6
      1 : Q  <----------------------------- Q  : 2
                {1} | -b -c 0  b  c  0  |
                {1} | a  0  -c -a 0  c  |
                {1} | 0  a  b  0  -a -b |

           6                                      10
      2 : Q  <---------------------------------- Q   : 3
                {2} | c  a 0 0  b 0 0 c  0 0 |
                {2} | -b 0 a 0  0 b 0 0  c 0 |
                {2} | a  0 0 a  0 0 b 0  0 c |
                {2} | 0  a 0 -c b c 0 0  0 0 |
                {2} | 0  0 a b  0 0 0 b  c 0 |
                {2} | 0  0 0 0  0 a b -a 0 c |

           10                                                                                                                            41
      3 : Q   <------------------------------------------------------------------------------------------------------------------------ Q   : 4
                 {3} | -a -b -c 0  0  0  0  0  0  0 0 0 0 0 0 0   0 0   0 0   0 0 0 0 0   0 0   0 0   0 0 0   0 0   0 0   0 0 0 0 0 |
                 {3} | c  0  0  -b -c 0  0  0  0  0 0 0 0 0 0 -bc 0 -c2 0 0   0 0 0 0 0   0 0   0 0   0 0 0   0 0   0 0   0 0 0 0 0 |
                 {3} | -b 0  0  0  -b -c 0  0  0  0 0 0 0 0 0 b2  0 bc  0 0   0 0 0 0 b2  0 bc  0 0   0 0 -b2 0 -bc 0 0   0 0 0 0 0 |
                 {3} | a  0  0  0  0  0  -b -c 0  0 0 0 0 0 0 -ab 0 -ac 0 0   0 0 0 0 -ab 0 -ac 0 0   0 0 ab  0 ac  0 0   0 0 0 0 0 |
                 {3} | 0  c  0  a  0  0  -c 0  0  0 0 0 0 0 0 ac  0 0   0 -c2 0 0 0 0 0   0 0   0 0   0 0 0   0 0   0 0   0 0 0 0 0 |
                 {3} | 0  -b 0  0  a  0  0  -c 0  0 0 0 0 0 0 -ab 0 0   0 bc  0 0 0 0 -ab 0 -ac 0 0   0 0 ab  0 ac  0 0   0 0 0 0 0 |
                 {3} | 0  a  0  0  0  0  a  0  -c 0 0 0 0 0 0 a2  0 0   0 -ac 0 0 0 0 a2  0 0   0 -ac 0 0 -a2 0 0   0 ac  0 0 0 0 0 |
                 {3} | 0  0  c  0  a  0  b  0  0  0 0 0 0 0 0 0   0 ac  0 bc  0 0 0 0 0   0 0   0 0   0 0 0   0 0   0 0   0 0 0 0 0 |
                 {3} | 0  0  -b 0  0  a  0  b  0  0 0 0 0 0 0 0   0 -ab 0 -b2 0 0 0 0 0   0 0   0 0   0 0 0   0 0   0 0   0 0 0 0 0 |
                 {3} | 0  0  a  0  0  0  0  a  b  0 0 0 0 0 0 0   0 a2  0 ab  0 0 0 0 0   0 a2  0 ab  0 0 0   0 -a2 0 -ab 0 0 0 0 0 |

o13 : ComplexMap

These functors are particularly interesting in the modular setting, i.e., when the characteristic of the underlying field is small relative to the degree of the Schur functor. In this case, the induced complexes will have different homotopy classes as the characteristic varies.

i14 : needsPackage "ChainComplexOperations"

o14 = ChainComplexOperations

o14 : Package
i15 : Q = ZZ/2[a,b]

o15 = Q

o15 : PolynomialRing
i16 : K = koszulComplex vars Q;
i17 : S2K = minimize prune schurMap({2}, K)

       1      2      2      2      1
o17 = Q  <-- Q  <-- Q  <-- Q  <-- Q
                                   
      0      1      2      3      4

o17 : Complex
i18 : S2K' = sym2 K --the "naive" sym2 functor

             2      2      2
o18 = 0 <-- Q  <-- Q  <-- Q  <-- 0
                                  
      0     1      2      3      4

o18 : Complex
i19 : S2K.dd

           1               2
o19 = 0 : Q  <----------- Q  : 1
                | a b |

           2                   2
      1 : Q  <--------------- Q  : 2
                {1} | b b |
                {1} | a a |

           2                   2
      2 : Q  <--------------- Q  : 3
                {2} | a b |
                {2} | a b |

           2                 1
      3 : Q  <------------- Q  : 4
                {3} | b |
                {3} | a |

o19 : ComplexMap
i20 : S2K'.dd

                    2
o20 = 0 : 0 <----- Q  : 1
               0

           2                   2
      1 : Q  <--------------- Q  : 2
                {1} | b b |
                {1} | a a |

           2                   2
      2 : Q  <--------------- Q  : 3
                {2} | a b |
                {2} | a b |

           2
      3 : Q  <----- 0 : 4
                0

o20 : ComplexMap
i21 : prune HH S2K

o21 = cokernel | b a | <-- 0 <-- cokernel {2} | b a |
                                  
      0                    1     2

o21 : Complex
i22 : prune HH S2K' --not quasi-isomorphic!

                                                       1
o22 = cokernel {1} | b | <-- cokernel {2} | b a | <-- Q
               {1} | a |                               
                             2                        3
      1

o22 : Complex
i23 : Q = ZZ/3[a,b];
i24 : K = koszulComplex vars Q;
i25 : prune HH schurMap({2}, K)

o25 = cokernel | b a | <-- 0 <-- cokernel {2} | b a |
                                  
      0                    1     2

o25 : Complex
i26 : prune HH sym2 K --quasi-isomorphic in all other characteristics

o26 = cokernel | b a | <-- 0 <-- cokernel {2} | b a |
                                  
      0                    1     2

o26 : Complex

This method is also implemented in a functorial way.

i27 : Q = ZZ/2[a,b]

o27 = Q

o27 : PolynomialRing
i28 : K = koszulComplex vars Q;
i29 : F = freeResolution( (ideal vars Q)^2)

       1      3      2
o29 = Q  <-- Q  <-- Q
                     
      0      1      2

o29 : Complex
i30 : phi = extend(K, F, id_(K_0))

           1             1
o30 = 0 : Q  <--------- Q  : 0
                | 1 |

           2                     3
      1 : Q  <----------------- Q  : 1
                {1} | a b 0 |
                {1} | 0 0 b |

           1                   2
      2 : Q  <--------------- Q  : 2
                {2} | 0 b |

o30 : ComplexMap
i31 : f = elapsedTime prune schurMap({2}, phi)
 -- .997967s elapsed

           1             1
o31 = 0 : Q  <--------- Q  : 0
                | 1 |

           5                                       9
      1 : Q  <----------------------------------- Q  : 1
                {1} | a b 0 0  0  0  0  0  0  |
                {1} | 0 0 b 0  0  0  0  0  0  |
                {2} | 0 0 0 a2 ab 0  b2 0  0  |
                {2} | 0 0 0 0  0  ab 0  b2 0  |
                {2} | 0 0 0 0  0  0  0  0  b2 |

           10                                                                                  26
      2 : Q   <------------------------------------------------------------------------------ Q   : 2
                 {2} | 0 b 0 0  0  0  0  0  0  0  0  0 0  0 0  0 0  0 0  0 0  0 0  0 0 0  |
                 {2} | 0 0 0 ab b2 0  0  0  0  0  0  0 0  0 0  0 0  0 0  0 0  0 0  0 0 0  |
                 {2} | 0 0 0 0  0  a2 ab 0  b2 0  0  0 0  0 0  0 0  0 0  0 0  0 0  0 0 0  |
                 {2} | 0 0 0 0  0  0  0  ab 0  b2 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0 0  |
                 {2} | 0 0 0 0  0  0  0  0  0  0  b2 0 0  0 0  0 0  0 0  0 0  0 0  0 0 0  |
                 {3} | 0 0 0 0  0  0  0  0  0  0  0  0 ab 0 b2 0 0  0 0  0 0  0 0  0 0 0  |
                 {3} | 0 0 0 0  0  0  0  0  0  0  0  0 0  0 0  0 b2 0 0  0 0  0 0  0 0 0  |
                 {3} | 0 0 0 0  0  0  0  0  0  0  0  0 0  0 0  0 0  0 ab 0 b2 0 0  0 0 0  |
                 {3} | 0 0 0 0  0  0  0  0  0  0  0  0 0  0 0  0 0  0 0  0 0  0 b2 0 0 0  |
                 {4} | 0 0 0 0  0  0  0  0  0  0  0  0 0  0 0  0 0  0 0  0 0  0 0  0 0 b2 |

           9                                                                                       30
      3 : Q  <----------------------------------------------------------------------------------- Q   : 3
                {3} | 0 ab 0 b2 0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0 0 0 0  0 0 0 0  0 0 0  |
                {3} | 0 0  0 0  0 b2 0 0  0 0  0 0  0 0  0 0  0 0  0 0 0 0 0  0 0 0 0  0 0 0  |
                {3} | 0 0  0 0  0 0  0 ab 0 0  0 b2 0 0  0 0  0 0  0 0 0 0 0  0 0 0 0  0 0 0  |
                {3} | 0 0  0 0  0 0  0 0  0 ab 0 0  0 b2 0 0  0 0  0 0 0 0 0  0 0 0 0  0 0 0  |
                {3} | 0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 b2 0 0  0 0 0 0 0  0 0 0 0  0 0 0  |
                {3} | 0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 b2 0 0 0 0 0  0 0 0 0  0 0 0  |
                {4} | 0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0 0 0 b2 0 0 0 0  0 0 0  |
                {4} | 0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0 0 0 0  0 0 0 b2 0 0 0  |
                {4} | 0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0  0 0 0 0 0  0 0 0 0  0 0 b2 |

           3                                          12
      4 : Q  <-------------------------------------- Q   : 4
                {4} | 0 0 b2 0 0 0 0 0  0 0 0 0  |
                {4} | 0 0 0  0 0 0 0 b2 0 0 0 0  |
                {4} | 0 0 0  0 0 0 0 0  0 0 0 b2 |

o31 : ComplexMap
i32 : isCommutative f

o32 = true
i33 : isWellDefined f

o33 = true
i34 : prune HH source f

o34 = cokernel | b2 ab a2 | <-- 0 <-- cokernel {4} | b a 0 0 0 0 |
                                               {4} | 0 0 b a 0 0 |
      0                         1              {4} | 0 0 0 0 b a |
                                       
                                      2

o34 : Complex
i35 : prune HH target f

o35 = cokernel | b a | <-- 0 <-- cokernel {2} | b a |
                                  
      0                    1     2

o35 : Complex
i36 : prune HH f

o36 = 0 : cokernel | b a | <--------- cokernel | b2 ab a2 | : 0
                              | 1 |

o36 : ComplexMap

Caveat

As many of the above examples show, this method can quickly become computationally infeasible when the modules in the complex have too big of rank. This seems to stem more from the efficiency of the schur method, since methods such as the tensor product still run very quickly even with huge matrices.

See also

Ways to use schurMap:

  • schurMap(List,Complex)
  • schurMap(List,ComplexMap)
  • schurMap(List,SimplicialModule)
  • schurMap(List,SimplicialModuleMap)

For the programmer

The object schurMap is a method function with options.


The source of this document is in /build/reproducible-path/macaulay2-1.26.05+ds/M2/Macaulay2/packages/SimplicialModules/SimplicialModuleDOC.m2:3545:0.