Homology defines a functor from the category of chain complexes to itself. Given a map of chain complexes $f : C \to D$, this method returns the induced map $HH f : HH C \to HH D$.
To directly obtain the $n$-th map in $h$, use HH_n f or HH^n f. By definition HH^n f === HH_(-n) f. This can be more efficient, as it will compute only the desired induced map.
If $f$ commutes with the differentials, then these induced maps are well defined.
i1 : S = ZZ/101[a..d] o1 = S o1 : PolynomialRing |
i2 : I = ideal(a*b, a*d, c*b, c*d) o2 = ideal (a*b, a*d, b*c, c*d) o2 : Ideal of S |
i3 : C = (dual freeResolution I)[1] 1 4 4 1 o3 = S <-- S <-- S <-- S -4 -3 -2 -1 o3 : Complex |
i4 : D = dual complex for i from 0 to 4 list koszul(i,gens I) 1 4 6 4 1 o4 = S <-- S <-- S <-- S <-- S <-- 0 -5 -4 -3 -2 -1 0 o4 : Complex |
i5 : assert isWellDefined D |
i6 : f = randomComplexMap(D, C, Cycle => true) 4 1 o6 = -4 : S <---------------------------- S : -4 {-6} | -30ab+24bc-36ad | {-6} | -29ab-10ad+24cd | {-6} | 19ab+19bc+36cd | {-6} | 29bc+19ad-cd | 6 4 -3 : S <------------------------------------------------ S : -3 {-4} | -24d -29a+24c 24b -24a | {-4} | -29b-36d 36c 36b -36a | {-4} | d -c -30b 30a | {-4} | -10d -19c -19b -10a | {-4} | 29d -29c -29b-29d 29a | {-4} | -19d 19c 19b -19a-29c | 4 4 -2 : S <------------------------ S : -2 {-2} | 29 0 0 0 | {-2} | 0 0 29 0 | {-2} | 0 29 0 0 | {-2} | 0 0 0 29 | 1 1 -1 : S <----------- S : -1 | -29 | o6 : ComplexMap |
i7 : assert isCommutative f |
i8 : h = HH f o8 = -4 : subquotient ({-6} | b a 0 0 |, {-6} | bc -ad ab 0 0 0 |) <----------------- cokernel {-4} | -d c b -a | : -4 {-6} | d 0 0 a | {-6} | cd 0 0 -ad ab 0 | {-5} | 0 | {-6} | 0 -c b 0 | {-6} | 0 cd 0 -bc 0 ab | {-5} | 0 | {-6} | 0 0 d -c | {-6} | 0 0 cd 0 -bc ad | {-5} | 0 | {-5} | -29d | -3 : subquotient ({-4} | ad 0 ab 0 a2 0 |, {-4} | -ad ab 0 0 |) <---------------------------- subquotient ({-3} | c b 0 a 0 0 |, {-3} | c -a 0 0 |) : -3 {-4} | bc b2 0 ab 0 0 | {-4} | -bc 0 ab 0 | {-2} | 0 0 0 0 0 0 | {-3} | d 0 b 0 a 0 | {-3} | d 0 -b 0 | {-4} | 0 bd -bc ad -ac 0 | {-4} | 0 -bc ad 0 | {-2} | 0 -29 0 0 0 0 | {-3} | 0 d -c 0 0 a | {-3} | 0 0 c -a | {-4} | cd bd 0 0 ac ab | {-4} | -cd 0 0 ab | {-2} | 0 0 0 0 0 0 | {-3} | 0 0 0 -d c b | {-3} | 0 d 0 -b | {-4} | 0 d2 -cd 0 0 ad | {-4} | 0 -cd 0 ad | {-2} | 0 0 0 0 0 0 | {-4} | 0 0 0 -cd c2 bc | {-4} | 0 0 -cd bc | {-2} | 0 0 0 0 -29 0 | {-2} | 0 0 0 0 0 0 | -2 : subquotient ({-2} | ab |, {-2} | ab |) <----- subquotient ({-2} | ab |, {-2} | -ab |) : -2 {-2} | ad | {-2} | ad | 0 {-2} | bc | {-2} | -bc | {-2} | bc | {-2} | bc | {-2} | ad | {-2} | -ad | {-2} | cd | {-2} | cd | {-2} | cd | {-2} | -cd | -1 : image 0 <----- image 0 : -1 0 o8 : ComplexMap |
i9 : assert isWellDefined h |
i10 : prune h o10 = -4 : cokernel {-5} | c 0 0 a 0 0 0 | <----------------- cokernel {-4} | d c b a | : -4 {-5} | 0 d 0 0 b 0 0 | {-5} | 0 | {-5} | 0 0 a 0 0 c 0 | {-5} | 0 | {-5} | 0 0 0 -d -d d b | {-5} | 0 | {-5} | -29d | -3 : cokernel {-2} | c a 0 0 | <-------------------- cokernel {-2} | c a 0 0 | : -3 {-2} | 0 0 d b | {-2} | -29 0 | {-2} | 0 0 d b | {-2} | 0 -29 | o10 : ComplexMap |
i11 : assert(source h == HH C) |
i12 : assert(target h == HH D) |
i13 : f2 = randomComplexMap(D, C, Cycle => true, Degree => -1) 1 1 o13 = -5 : S <---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- S : -4 {-8} | 19a3b-47a2b2-13ab3-42a2bc-21ab2c-23b3c+26abc2-7b2c2+29bc3-29a3d-26a2bd-39ab2d-20a2cd+32abcd+47b2cd-40ac2d+20bc2d-47c3d-29a2d2+22abd2+21acd2-33bcd2+47c2d2+34ad3+19cd3 | 4 4 -4 : S <------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- S : -3 {-6} | 48a2b-26ab2-5b3+13abc-8b2c-2bc2-22a2d+33abd+38b2d+40acd+16bcd+47c2d+36ad2-15bd2-47cd2-19d3 -37a3-13a2b-18ab2-8a2c+13abc+23b2c+49ac2+37bc2-47c3+30a2d+39abd-22acd-7bcd+47c2d+32ad2+19cd2 46a2b-26ab2+44b3+15abc+15b2c+42bc2-41a2d+4abd+11b2d-13acd-20bcd+4ad2+5bd2 -16a3+7a2b+39ab2+15a2c-9abc-35b2c-17ac2+6bc2-23a2d+43abd-11acd+40bcd+48ad2 | {-6} | -26a2b+22ab2-49abc+20a2d-22abd-28b2d-26acd-15bcd+27c2d-26ad2-16bd2+36cd2-48d3 -9a3-32a2b-30ab2-17a2c+31abc+23b2c-15ac2+7bc2-29c3+24a2d-15abd-3acd-24bcd+17c2d+33ad2+26cd2 3a2b-22ab2+23b3+47abc+7b2c-29bc2+14a2d+5abd-3b2d-34acd-5bcd-12c2d-8ad2+44bd2+34cd2-14d3 36a3+35a2b+33ab2+11a2c+40abc+46ac2-38a2d+11abd-37acd-35bcd+6c2d+ad2+40cd2 | {-6} | -17a2b-12ab2+14b3-abc-7b2c-39bc2+29a2d-25abd+42acd-13bcd+29ad2+3bd2+44cd2-34d3 16a2b-28ab2+8a2c+48abc-24b2c-12ac2+4bc2+12c3+35abd+42acd-32bcd+43c2d+2cd2 45a2b-30ab2-34b3+45abc-20b2c-29bc2+10abd-7b2d+41acd+12bcd+13c2d-15bd2-4cd2 29a3+8a2b+24ab2+36a2c+15abc+17b2c+25ac2+34bc2-37c3+29a2d+16abd+2acd+5bcd-36c2d-34ad2+34cd2 | {-6} | 26abc-22b2c+49bc2+2a2d+42abd+b2d-15acd-32bcd+26c2d+50ad2-39bd2-23cd2+25d3 -10a2c-22abc+43b2c-42ac2-10bc2-11c3+16a2d-28abd+37acd+12bcd-12c2d+35ad2-48cd2 -19a2b+47ab2+13b3+39abc+43b2c+28bc2-27a2d-4abd+5b2d-4acd+18bcd-41c2d+39ad2-29bd2+3cd2-49d3 19a3-47a2b-13ab2+23a2c+45abc+45b2c+15ac2-47bc2-17c3-18a2d-15abd-9acd-9bcd-19c2d+38ad2+14cd2 | 6 4 -3 : S <---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- S : -2 {-4} | 4a2+12ab+5b2+2ac+8bc+2c2-8ad+40bd+48cd+22d2 -49a2-33ab-19ac+26ad+35bd-6cd-40d2 -27a2-5ab-21b2-7ac+22bc+12c2+16ad-18bd-34cd+14d2 3a2-40ab-35b2+25ac+6bc-2ad+40bd | {-4} | -37a2+31ab+29b2-30ac-28bc-12c2+30ad-39bd+14cd+32d2 6a2+50ab+20b2-25ac+20bc+37c2+42ad+44bd+36cd-34d2 -7ab-30b2-41ac+39bc-13c2+17bd+4cd 41a2-21ab+48b2+13ac+29bc-4ad+48bd | {-4} | 49ac+14bc-15c2+44ad+47bd+35cd+23d2 48a2-26ab-5b2-39ac+25bc+17c2-25ad+19bd+19cd-14d2 -37a2-13ab-18b2-27ac+44bc+41c2+23ad+9bd-3cd+49d2 30a2-19ab-18b2+27ac+46bc-40ad+bd | {-4} | -9a2+46ab+14b2+7ac-7bc-39c2+24ad+5bd-37cd+33d2 16a2+46ab-12ac-12ad+37bd-47cd+49d2 -49ab-10b2-13ac-24bc-41c2-5bd+8cd -14a2+23ab-17b2+37ac-34bc+37c2+8ad+43bd-36cd+14d2 | {-4} | 26ac-22bc+49c2-23ad+44bd-28cd+20d2 -26a2+22ab-49ac-11ad+40bd-22cd+10d2 -9a2-32ab-30b2-20ac-48bc+39c2-25ad-25bd-27cd+28d2 39a2+13ab-45b2-43ac+47bc+17c2-10ad-9bd-36cd-13d2 | {-4} | 8ac-43bc+8c2-16ad+28bd-30cd-35d2 -17a2-12ab+14b2+15ac+39bc+50c2-33ad-24bd+11cd-13d2 16ab-28b2-37ac+29bc+31c2+35bd+39cd -27a2-22ab-10b2-34ac+18bc+33c2+39ad+9bd+43cd-49d2 | 4 1 -2 : S <-------------------------------------------------------------- S : -1 {-2} | 27a2+4ab-20b2+4ac-20bc-37c2-16ad+9bd+36cd-14d2 | {-2} | 4a2+12ab+5b2-47ac-25bc-17c2-9ad-bd+36cd+13d2 | {-2} | -37a2+31ab+29b2+3ac+26bc-33c2+23ad+32bd-43cd+49d2 | {-2} | -9a2+46ab+14b2+23ac+39bc+50c2-25ad-5bd-46cd+28d2 | o13 : ComplexMap |
i14 : h2 = HH f2 o14 = -5 : cokernel {-8} | -cd bc -ad ab | <----- cokernel {-4} | -d c b -a | : -4 0 -4 : subquotient ({-6} | b a 0 0 |, {-6} | bc -ad ab 0 0 0 |) <---------------------------------------------------------------- subquotient ({-3} | c b 0 a 0 0 |, {-3} | c -a 0 0 |) : -3 {-6} | d 0 0 a | {-6} | cd 0 0 -ad ab 0 | {-5} | 0 -5b3-19b2d-4bd2-14d3 0 0 0 0 | {-3} | d 0 b 0 a 0 | {-3} | d 0 -b 0 | {-6} | 0 -c b 0 | {-6} | 0 cd 0 -bc 0 ab | {-5} | 0 0 0 0 -37a3-24a2c-37ac2+37c3 0 | {-3} | 0 d -c 0 0 a | {-3} | 0 0 c -a | {-6} | 0 0 d -c | {-6} | 0 0 cd 0 -bc ad | {-5} | 0 14b3-34b2d-4bd2-49d3 0 0 0 0 | {-3} | 0 0 0 -d c b | {-3} | 0 d 0 -b | {-5} | 0 0 0 0 -9a3+19a2c-4ac2+17c3 0 | -3 : subquotient ({-4} | ad 0 ab 0 a2 0 |, {-4} | -ad ab 0 0 |) <----- subquotient ({-2} | ab |, {-2} | -ab |) : -2 {-4} | bc b2 0 ab 0 0 | {-4} | -bc 0 ab 0 | 0 {-2} | bc | {-2} | -bc | {-4} | 0 bd -bc ad -ac 0 | {-4} | 0 -bc ad 0 | {-2} | ad | {-2} | -ad | {-4} | cd bd 0 0 ac ab | {-4} | -cd 0 0 ab | {-2} | cd | {-2} | -cd | {-4} | 0 d2 -cd 0 0 ad | {-4} | 0 -cd 0 ad | {-4} | 0 0 0 -cd c2 bc | {-4} | 0 0 -cd bc | -2 : subquotient ({-2} | ab |, {-2} | ab |) <----- image 0 : -1 {-2} | ad | {-2} | ad | 0 {-2} | bc | {-2} | bc | {-2} | cd | {-2} | cd | o14 : ComplexMap |
i15 : assert isWellDefined h2 |
i16 : prune h2 o16 = -4 : cokernel {-5} | c 0 0 a 0 0 0 | <-------------------------------------------------------- cokernel {-2} | c a 0 0 | : -3 {-5} | 0 d 0 0 b 0 0 | {-5} | -5b3-19b2d-4bd2-14d3 0 | {-2} | 0 0 d b | {-5} | 0 0 a 0 0 c 0 | {-5} | 0 -37a3-24a2c-37ac2+37c3 | {-5} | 0 0 0 -d -d d b | {-5} | 14b3-34b2d-4bd2-49d3 0 | {-5} | 0 -9a3+19a2c-4ac2+17c3 | o16 : ComplexMap |
A boundary will always induce the zero map.
i17 : f3 = randomComplexMap(D, C, Boundary => true) 4 1 o17 = -4 : S <---------------------------- S : -4 {-6} | -47ab+19bc | {-6} | 47ab+28ad+19cd | {-6} | -28ab+28bc | {-6} | -47bc-28ad-47cd | 6 4 -3 : S <-------------------------------- S : -3 {-4} | -19d 19c 19b -19a | {-4} | 0 0 0 0 | {-4} | 47d -47c -47b 47a | {-4} | 28d -28c -28b 28a | {-4} | -47d 47c 47b -47a | {-4} | 28d -28c -28b 28a | 4 4 -2 : S <----- S : -2 0 1 1 -1 : S <----- S : -1 0 o17 : ComplexMap |
i18 : h3 = HH f3 o18 = -4 : subquotient ({-6} | b a 0 0 |, {-6} | bc -ad ab 0 0 0 |) <----- cokernel {-4} | -d c b -a | : -4 {-6} | d 0 0 a | {-6} | cd 0 0 -ad ab 0 | 0 {-6} | 0 -c b 0 | {-6} | 0 cd 0 -bc 0 ab | {-6} | 0 0 d -c | {-6} | 0 0 cd 0 -bc ad | -3 : subquotient ({-4} | ad 0 ab 0 a2 0 |, {-4} | -ad ab 0 0 |) <----- subquotient ({-3} | c b 0 a 0 0 |, {-3} | c -a 0 0 |) : -3 {-4} | bc b2 0 ab 0 0 | {-4} | -bc 0 ab 0 | 0 {-3} | d 0 b 0 a 0 | {-3} | d 0 -b 0 | {-4} | 0 bd -bc ad -ac 0 | {-4} | 0 -bc ad 0 | {-3} | 0 d -c 0 0 a | {-3} | 0 0 c -a | {-4} | cd bd 0 0 ac ab | {-4} | -cd 0 0 ab | {-3} | 0 0 0 -d c b | {-3} | 0 d 0 -b | {-4} | 0 d2 -cd 0 0 ad | {-4} | 0 -cd 0 ad | {-4} | 0 0 0 -cd c2 bc | {-4} | 0 0 -cd bc | -2 : subquotient ({-2} | ab |, {-2} | ab |) <----- subquotient ({-2} | ab |, {-2} | -ab |) : -2 {-2} | ad | {-2} | ad | 0 {-2} | bc | {-2} | -bc | {-2} | bc | {-2} | bc | {-2} | ad | {-2} | -ad | {-2} | cd | {-2} | cd | {-2} | cd | {-2} | -cd | -1 : image 0 <----- image 0 : -1 0 o18 : ComplexMap |
i19 : assert isWellDefined h3 |
i20 : assert(h3 == 0) |