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
|