# connectingTorMap(Module,Matrix,Matrix) -- makes the connecting maps in Tor

## Synopsis

• Function: connectingTorMap
• Usage:
connectingTorMap(M, g, f)
connectingTorMap(g, f, M)
• Inputs:
• M, , over a ring $S$
• f, , over a ring $S$ defining an injective map $f \colon A \to B$
• g, , over a ring $S$ defining a surjective map $g \colon B \to C$ such that the image of $f$ equals the kernel of $g$
• Optional inputs:
• Concentration => , default value null, not yet implemented
• Outputs:

## Description

Since Tor is a bifunctor, there are two different connecting maps. The first comes from applying the covariant functor $M \otimes_S -$ to a short exact sequence of modules. The second comes from applying the covariant functor $- \otimes_S M$ to a short exact sequence of modules. More explicitly, given the short exact sequence

$\phantom{WWWW} 0 \leftarrow C \xleftarrow{g} B \xleftarrow{f} A \leftarrow 0,$

the $i$-th connecting homomorphism is, in the first case, a map $\operatorname{Tor}^S_i(M, C) \to \operatorname{Tor}^S_{i-1}(M, A)$ and, in the second case, a map $\operatorname{Tor}^S_i(A, M) \to \operatorname{Tor}^S_{i-1}(C, M)$.

As a first example, let $\Bbbk$ be the base field as an $S$-module. Applying the functor $\Bbbk \otimes_S -$ to a short exact sequence of modules

$\phantom{WWWW} 0 \leftarrow S/(I+J) \leftarrow S/I \oplus S/J \leftarrow S/I \cap J \leftarrow 0$

gives rise to the long exact sequence of Tor modules having the form

$\phantom{WWWW} \dotsb \leftarrow \operatorname{Tor}_{i-1}(\Bbbk, S/(I+J)) \xleftarrow{\delta_{i}} \operatorname{Tor}_i(\Bbbk, S/I \cap J) \leftarrow \operatorname{Tor}_i(\Bbbk, S/I \oplus S/J) \leftarrow \operatorname{Tor}_i(\Bbbk, S/(I+J)) \leftarrow \dotsb.$

 i1 : S = ZZ/101[a..d]; i2 : I = ideal(c^3-b*d^2, b*c-a*d) 3 2 o2 = ideal (c - b*d , b*c - a*d) o2 : Ideal of S i3 : J = ideal(a*c^2-b^2*d, b^3-a^2*c) 2 2 3 2 o3 = ideal (a*c - b d, b - a c) o3 : Ideal of S i4 : g = map(S^1/(I+J), S^1/I ++ S^1/J, {{1,1}}); o4 : Matrix i5 : f = map(S^1/I ++ S^1/J, S^1/intersect(I,J), {{1},{-1}}); o5 : Matrix i6 : assert isShortExactSequence(g,f) i7 : kk = coker vars S o7 = cokernel | a b c d | 1 o7 : S-module, quotient of S i8 : delta = connectingTorMap(kk, g, f) o8 = 2 : subquotient ({1} | -b 0 -c 0 0 -d bc2-acd c2d c3 -b2d |, {1} | -b -c 0 -d 0 0 ac2d-b2d2 ac3-b2cd abc2-a2cd b3c-ab2d 0 0 0 0 0 0 0 0 0 0 0 0 |) <----------------------------------------------------- subquotient ({2} | c d 0 0 bc-ad 0 -d2 cd bd 0 0 0 d2 c2 c3-bd2 ac2-b2d b3-a2c 0 0 |, {2} | c d 0 0 c3-bd2 bc-ad ac2-b2d b3-a2c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |) : 2 {1} | a -c 0 0 -d 0 0 -bd2 -bcd b2c | {1} | a 0 -c 0 -d 0 0 0 0 0 ac2d-b2d2 ac3-b2cd abc2-a2cd b3c-ab2d 0 0 0 0 0 0 0 0 | {2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {2} | -b 0 0 d 0 bc-ad c2 -bd -ac 0 -cd d2 0 0 0 0 0 0 0 | {2} | -b 0 d 0 0 0 0 0 c3-bd2 bc-ad ac2-b2d b3-a2c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {1} | 0 b a -d 0 0 0 0 0 0 | {1} | 0 a b 0 0 -d 0 0 0 0 0 0 0 0 ac2d-b2d2 ac3-b2cd abc2-a2cd b3c-ab2d 0 0 0 0 | {2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {2} | a 0 d 0 0 0 -bd bc b2 0 c2 -cd 0 0 0 0 0 c3-bd2 d3 | {2} | a 0 0 d 0 0 0 0 0 0 0 0 c3-bd2 bc-ad ac2-b2d b3-a2c 0 0 0 0 0 0 0 0 0 0 0 0 | {1} | 0 0 0 c b a 0 0 0 0 | {1} | 0 0 0 a b c 0 0 0 0 0 0 0 0 0 0 0 0 ac2d-b2d2 ac3-b2cd abc2-a2cd b3c-ab2d | {2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {2} | 0 -b 0 -c 0 0 0 0 0 bc-ad c2 -cd -bd -ac 0 0 0 0 0 | {2} | 0 -b -c 0 0 0 0 0 0 0 0 0 0 0 0 0 c3-bd2 bc-ad ac2-b2d b3-a2c 0 0 0 0 0 0 0 0 | {2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {2} | 0 a -c 0 0 0 0 0 0 0 -bd c2 bc b2 0 0 0 0 -cd2 | {2} | 0 a 0 -c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 c3-bd2 bc-ad ac2-b2d b3-a2c 0 0 0 0 | {2} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {2} | 0 0 b a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 c3 | {2} | 0 0 a b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 c3-bd2 bc-ad ac2-b2d b3-a2c | {2} | 0 0 0 0 0 0 0 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 -1 0 0 0 0 0 | {4} | 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 | {4} | 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 | {4} | 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 | 3 : subquotient ({2} | c d 0 0 0 c3 ac2d-b2d2 ac3-b2cd b2c2-abcd abc2-a2cd b3c-ab2d 0 0 -bc3+b2d2 0 0 -c3d -c4 b2cd 0 -bc2d+acd2 0 -c2d2 |, {2} | c d 0 0 ac2d-b2d2 ac3-b2cd abc2-a2cd b3c-ab2d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |) <---------------------------------------- subquotient ({3} | -d bc-ad 0 0 -d2 -c2 c3-bd2 ac2-b2d b3-a2c 0 0 0 0 0 |, {3} | -d c3-bd2 bc-ad ac2-b2d b3-a2c 0 0 0 0 0 0 0 0 0 0 0 0 |) : 3 {2} | -b 0 0 d -c2d -bc2+acd 0 0 0 0 0 ac2d-b2d2 ac3-b2cd b2c2-abcd abc2-a2cd b3c-ab2d bc2d bc3 -b3d 0 0 0 0 | {2} | -b 0 d 0 0 0 0 0 ac2d-b2d2 ac3-b2cd abc2-a2cd b3c-ab2d 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 | {3} | c 0 bc-ad 0 cd bd 0 0 0 c3-bd2 ac2-b2d b3-a2c 0 0 | {3} | c 0 0 0 0 c3-bd2 bc-ad ac2-b2d b3-a2c 0 0 0 0 0 0 0 0 | {2} | a 0 d 0 bd2 0 0 0 0 0 0 0 0 0 0 0 -b2d2 -b2cd b3c 0 0 0 0 | {2} | a 0 0 d 0 0 0 0 0 0 0 0 ac2d-b2d2 ac3-b2cd abc2-a2cd b3c-ab2d 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 | {3} | -b 0 0 bc-ad -bd -ac 0 0 0 0 0 0 c3-bd2 0 | {3} | -b 0 0 0 0 0 0 0 0 c3-bd2 bc-ad ac2-b2d b3-a2c 0 0 0 0 | {2} | 0 -b 0 -c c3 -b2d 0 0 0 0 0 0 0 0 0 0 0 0 0 ac2d-b2d2 b2c2-abcd abc2-a2cd bc2d | {2} | 0 -b -c 0 0 0 0 0 0 0 0 0 0 0 0 0 ac2d-b2d2 ac3-b2cd abc2-a2cd b3c-ab2d 0 0 0 0 0 0 0 0 | {3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {3} | a 0 0 0 bc b2 0 0 0 0 0 0 0 c3-bd2 | {3} | a 0 0 0 0 0 0 0 0 0 0 0 0 c3-bd2 bc-ad ac2-b2d b3-a2c | {2} | 0 a -c 0 -bcd b2c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -b2d2 | {2} | 0 a 0 -c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ac2d-b2d2 ac3-b2cd abc2-a2cd b3c-ab2d 0 0 0 0 | {3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {2} | 0 0 b a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {2} | 0 0 a b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ac2d-b2d2 ac3-b2cd abc2-a2cd b3c-ab2d | {5} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {5} | 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 | {6} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {6} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {6} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {6} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {6} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {6} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {6} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {6} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {6} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {6} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {6} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {6} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {6} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {6} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {6} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {6} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | {6} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | o8 : ComplexMap i9 : assert isWellDefined delta i10 : assert(source delta_2 == Tor_2(kk, target g)) i11 : assert(target delta_2 == Tor_1(kk, source f)) i12 : prune delta o12 = 2 : cokernel {4} | d c b a 0 0 0 0 0 0 0 0 0 0 0 0 | <----------------------- cokernel {4} | d c b a 0 0 0 0 0 0 0 0 0 0 0 0 | : 2 {4} | 0 0 0 0 d c b a 0 0 0 0 0 0 0 0 | {4} | 0 0 0 -1 | {4} | 0 0 0 0 d c b a 0 0 0 0 0 0 0 0 | {4} | 0 0 0 0 0 0 0 0 d c b a 0 0 0 0 | {4} | 0 0 -1 0 | {4} | 0 0 0 0 0 0 0 0 d c b a 0 0 0 0 | {4} | 0 0 0 0 0 0 0 0 0 0 0 0 d c b a | {4} | -1 0 0 0 | {4} | 0 0 0 0 0 0 0 0 0 0 0 0 d c b a | {4} | 0 -1 0 0 | 3 : cokernel {5} | d c b a 0 0 0 0 0 0 0 0 | <-------------- cokernel {5} | d c b a | : 3 {5} | 0 0 0 0 d c b a 0 0 0 0 | {5} | 0 | {6} | 0 0 0 0 0 0 0 0 d c b a | {5} | -1 | {6} | 0 | o12 : ComplexMap

The connecting homomorphism fits into a natural long exact sequence in Tor.

 i13 : F = freeResolution kk; i14 : LES = longExactSequence(F ** g, F ** f); i15 : assert all(3, i -> dd^LES_(3*(i+1)) == delta_(i+1)) i16 : assert(HH LES == 0)

As a second example, applying the functor $- \otimes_S \Bbbk$ to a short exact sequence of modules

$\phantom{WWWW} 0 \leftarrow S/(I+J) \leftarrow S/I \oplus S/J \leftarrow S/I \cap J \leftarrow 0$

gives rise to the long exact sequence of Tor modules having the form

$\phantom{WWWW} \dotsb \leftarrow \operatorname{Tor}_{i-1}(S/(I+J), \Bbbk) \xleftarrow{\delta_{i}} \operatorname{Tor}_i(S/I \cap J, \Bbbk) \leftarrow \operatorname{Tor}_i(S/I \oplus S/J, \Bbbk) \leftarrow \operatorname{Tor}_i(S/(I+J), \Bbbk) \leftarrow \dotsb.$

 i17 : delta' = connectingTorMap(g, f, kk) o17 = 2 : cokernel {4} | 0 0 0 a b c d 0 0 0 0 0 0 0 0 0 0 0 0 | <--------------------- cokernel {4} | 0 a b c d 0 0 0 0 0 0 0 0 0 0 0 0 | : 2 {4} | 0 0 0 0 0 0 0 a b c d 0 0 0 0 0 0 0 0 | {4} | -1 0 0 0 | {4} | 0 0 0 0 0 a b c d 0 0 0 0 0 0 0 0 | {4} | 0 0 0 0 0 0 0 0 0 0 0 a b c d 0 0 0 0 | {4} | 0 -1 0 0 | {4} | 0 0 0 0 0 0 0 0 0 a b c d 0 0 0 0 | {4} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 a b c d | {4} | 0 0 1 0 | {4} | 0 0 0 0 0 0 0 0 0 0 0 0 0 a b c d | {4} | 0 0 0 1 | 3 : cokernel {5} | a b c d 0 0 0 0 0 0 0 0 | <------------- cokernel {5} | a b c d | : 3 {5} | 0 0 0 0 a b c d 0 0 0 0 | {5} | 1 | {6} | 0 0 0 0 0 0 0 0 a b c d | {5} | 0 | {6} | 0 | o17 : ComplexMap i18 : assert isWellDefined delta' i19 : (g',f') = horseshoeResolution(g,f); i20 : assert isShortExactSequence(g',f') i21 : LES' = longExactSequence(g' ** kk, f' ** kk); i22 : assert(HH LES' == 0) i23 : assert all(3, i -> dd^LES'_(3*(i+1)) == delta'_(i+1))