# longExactSequence(ComplexMap,ComplexMap) -- make the long exact sequence in homology

## Synopsis

• Function: longExactSequence
• Usage:
L = longExactSequence(g, f)
• Inputs:
• f, ,
• g, ,
• Optional inputs:
• Concentration => , default value null, this optional argument is not yet implemented
• Outputs:
• L, ,

## Description

Every short exact sequence of complexes

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

gives rise to a long exact sequence $L$ in homology having the form

$\phantom{WWWW} \dotsb \leftarrow H_{i-1}(C) \xleftarrow{H_{i-1}(g)} H_{i-1}(B) \xleftarrow{H_{i-1}(f)} H_{i-1}(A) \xleftarrow{\delta_i} H_{i}(C) \xleftarrow{H_{i}(g)} H_{i}(B) \xleftarrow{H_{i}(f)} H_{i}(A) \leftarrow \dotsb.$

This method returns the complex $L$ such that, for all integers $i$, we have $L_{3i} = H_i(C)$, $L_{3i+1} = H_i(B)$, and $L_{3i+2} = H_i(A)$. The differentials $\operatorname{dd}^L_{3i}$ are the connecting homomorphisms $\delta_i \colon H_i(C) \to H_{i-1}(A)$. Moreover, we have $\operatorname{dd}^L_{3i+1} = H_{i}(g)$ and $\operatorname{dd}^L_{3i+2} = H_{i}(f)$.

For example, consider a free resolution $F$ of $S/I$. Applying the Hom functor $\operatorname{Hom}(F, -)$ to a short exact sequence of modules

$\phantom{WWWW} 0 \leftarrow S/h \leftarrow S \xleftarrow{h} S(- \deg h) \leftarrow 0$

gives rise to a short exact sequence of complexes. The corresponding long exact sequence $L$ in homology has the form

$\phantom{WWWW} \dotsb \leftarrow \operatorname{Ext}^{d+1}(S/I, S(-\deg h)) \xleftarrow{\delta} \operatorname{Ext}^d(S/I, S/h) \leftarrow \operatorname{Ext}^d(S/I, S) \leftarrow \operatorname{Ext}^d(S/I, S(-\deg h)) \leftarrow \dotsb.$

 i1 : S = ZZ/101[a..d, Degrees=>{2:{1,0},2:{0,1}}]; i2 : h = a*c^2 + a*c*d + b*d^2; i3 : I = (ideal(a,b) * ideal(c,d))^[2] 2 2 2 2 2 2 2 2 o3 = ideal (a c , a d , b c , b d ) o3 : Ideal of S i4 : F = freeResolution comodule I; i5 : g = Hom(F, map(S^1/h, S^1, 1)) 1 o5 = -3 : cokernel {-4, -4} | ac2+acd+bd2 | <------------------ S : -3 {-4, -4} | 1 | 4 -2 : cokernel {-4, -2} | ac2+acd+bd2 0 0 0 | <------------------------ S : -2 {-4, -2} | 0 ac2+acd+bd2 0 0 | {-4, -2} | 1 0 0 0 | {-2, -4} | 0 0 ac2+acd+bd2 0 | {-4, -2} | 0 1 0 0 | {-2, -4} | 0 0 0 ac2+acd+bd2 | {-2, -4} | 0 0 1 0 | {-2, -4} | 0 0 0 1 | 4 -1 : cokernel {-2, -2} | ac2+acd+bd2 0 0 0 | <------------------------ S : -1 {-2, -2} | 0 ac2+acd+bd2 0 0 | {-2, -2} | 1 0 0 0 | {-2, -2} | 0 0 ac2+acd+bd2 0 | {-2, -2} | 0 1 0 0 | {-2, -2} | 0 0 0 ac2+acd+bd2 | {-2, -2} | 0 0 1 0 | {-2, -2} | 0 0 0 1 | 1 0 : cokernel | ac2+acd+bd2 | <--------- S : 0 | 1 | o5 : ComplexMap i6 : f = Hom(F, map(S^1, S^{-degree h}, {{h}})) 1 1 o6 = -3 : S <---------------------------- S : -3 {-4, -4} | ac2+acd+bd2 | 4 4 -2 : S <---------------------------------------------------------------- S : -2 {-4, -2} | ac2+acd+bd2 0 0 0 | {-4, -2} | 0 ac2+acd+bd2 0 0 | {-2, -4} | 0 0 ac2+acd+bd2 0 | {-2, -4} | 0 0 0 ac2+acd+bd2 | 4 4 -1 : S <---------------------------------------------------------------- S : -1 {-2, -2} | ac2+acd+bd2 0 0 0 | {-2, -2} | 0 ac2+acd+bd2 0 0 | {-2, -2} | 0 0 ac2+acd+bd2 0 | {-2, -2} | 0 0 0 ac2+acd+bd2 | 1 1 0 : S <------------------- S : 0 | ac2+acd+bd2 | o6 : ComplexMap i7 : assert isWellDefined g i8 : assert isWellDefined f i9 : assert isShortExactSequence(g, f) i10 : L = longExactSequence(g,f) o10 = cokernel {-4, -4} | d2 -c2 -b2 a2 ac2+acd+bd2 | <-- cokernel {-4, -4} | d2 -c2 -b2 a2 | <-- cokernel {-3, -2} | d2 -c2 -b2 a2 | <-- subquotient ({-4, -2} | c2 ac+bd -bc b2 0 a2 0 ab 0 0 |, {-4, -2} | -b2 a2 0 0 ac2+acd+bd2 0 0 0 |) <-- subquotient ({-4, -2} | c2 b2 0 a2 0 0 |, {-4, -2} | -b2 a2 0 0 |) <-- subquotient ({-3, 0} | c2 b2 0 a2 0 0 |, {-3, 0} | -b2 a2 0 0 |) <-- subquotient ({-2, -2} | ac2+acd+bd2 0 0 0 -a2cd-abd2 a3c+a2bd -a2bc acd3+bd4 c2d4 |, {-2, -2} | -a2cd-abd2 ac2+acd+bd2 0 0 0 |) <-- subquotient ({-2, -2} | a2c2 |, {-2, -2} | a2c2 |) <-- subquotient ({-1, 0} | a2c2 |, {-1, 0} | a2c2 |) <-- subquotient (| ac2+acd+bd2 |, | ac2+acd+bd2 |) <-- image 0 <-- image 0 <-- 0 {-4, -2} | d2 -ad ac+ad 0 b2 0 a2 0 0 0 | {-4, -2} | 0 0 -b2 a2 0 ac2+acd+bd2 0 0 | {-4, -2} | d2 0 b2 0 a2 0 | {-4, -2} | 0 0 -b2 a2 | {-3, 0} | d2 0 b2 0 a2 0 | {-3, 0} | 0 0 -b2 a2 | {-2, -2} | 0 ac2+acd+bd2 0 0 b2c2 ab2c+b3d -b3c bc4+bc3d c6+2c5d+c4d2 | {-2, -2} | b2c2 0 ac2+acd+bd2 0 0 | {-2, -2} | b2c2 | {-2, -2} | b2c2 | {-1, 0} | b2c2 | {-1, 0} | b2c2 | -9 -8 -7 {-2, -4} | 0 0 0 d2 -c2 0 0 0 a2 ac2+acd+bd2 | {-2, -4} | -d2 0 c2 0 0 0 ac2+acd+bd2 0 | {-2, -4} | 0 d2 -c2 0 0 a2 | {-2, -4} | -d2 0 c2 0 | {-1, -2} | 0 d2 -c2 0 0 a2 | {-1, -2} | -d2 0 c2 0 | {-2, -2} | 0 0 ac2+acd+bd2 0 a2d2 -a3d a3c+a3d -ad4 d6 | {-2, -2} | a2d2 0 0 ac2+acd+bd2 0 | {-2, -2} | a2d2 | {-2, -2} | a2d2 | {-1, 0} | a2d2 | {-1, 0} | a2d2 | 0 1 2 3 {-2, -4} | 0 0 0 0 0 -d2 c2 c2+cd b2 0 | {-2, -4} | 0 -d2 0 c2 0 0 0 ac2+acd+bd2 | {-2, -4} | 0 0 0 -d2 c2 b2 | {-2, -4} | 0 -d2 0 c2 | {-1, -2} | 0 0 0 -d2 c2 b2 | {-1, -2} | 0 -d2 0 c2 | {-2, -2} | 0 0 0 ac2+acd+bd2 b2d2 -ab2d ab2c+ab2d bc2d2+bcd3 c4d2+2c3d3+c2d4 | {-2, -2} | b2d2 0 0 0 ac2+acd+bd2 | {-2, -2} | b2d2 | {-2, -2} | b2d2 | {-1, 0} | b2d2 | {-1, 0} | b2d2 | -6 -5 -4 -3 -2 -1 o10 : Complex i11 : assert isWellDefined L i12 : assert(HH L == 0)

We verify that the indexing on $L$ in this example matches the description above.

 i13 : delta = connectingMap(g, f); i14 : assert(dd^L_-9 === delta_-3) i15 : assert(dd^L_-8 === HH_-3 g) i16 : assert(dd^L_-7 === HH_-3 f) i17 : assert(dd^L_-6 === delta_-2) i18 : assert(dd^L_-5 === HH_-2 g) i19 : assert(dd^L_-4 === HH_-2 f) i20 : assert(dd^L_-3 === delta_-1)