Testing exactness with doubled objects
Written with GPT-6.1 Sol (OpenAI), Ultra reasoning effort. Self-checked by the AI that wrote it. Original text: CC0.
An additive functor already respects finite sums. Its failure of exactness lies in the maps attached to those sums: a kernel may cease to be a kernel, or a quotient may cease to be a quotient. Doubling an object along a subobject, or doubling it over a quotient, packages these failures into a pair of parallel arrows. This gives tests that use only monomorphisms or only epimorphisms, while still detecting preservation of every finite limit or colimit.
The first prerequisite is the kernel, cokernel and image factorization in an abelian category. We use the ordinary kernel-pair and self-pushout descriptions proved in Trace coreflections and balanced nonabelian categories, Section 3. For additive functors and finite sums, see Formal linear combinations and finite sums. The full exactness criterion is proved in Full subcategories and exact closure, Lemma 2.1. All categories in this lesson are locally small abelian categories, and all diagrams below are finite.
Basic references are the Stacks Project, Abelian categories, its short-exact criteria for additive functors, Lemma 12.7.2, and its snake lemma with open row ends, Lemma 12.5.17. The short-exact criteria are used in Section 1; the precise weak-row snake construction is used in Section 4.
1. Witnesses for a kernel or a quotient
Write \(u:A\to B\) and \(v:B\to C\), with \(vu=0\). To say that \(0\to A\xrightarrow{u}B\xrightarrow{v}C\) is exact means precisely that \(u\) presents the kernel of \(v\). For fixed \(W\), put \(H(T)=\operatorname{Hom}(W,T)\). Consequently, for every object \(W\), the sequence
\[ 0\to H(A) \to H(B) \to H(C) \tag{1.1} \]is exact. Conversely, its initial injectivity and middle exactness say that every map \(t:W\to B\) killed by \(v\) has a unique factor through \(u\). Varying \(W\) gives exactly the kernel universal property. This proves both directions without assuming that \(v\) is epic.
For an exact sequence \(A\xrightarrow{u}B\xrightarrow{v}C\to0\), use maps out of the objects. For fixed \(W\), put \(D(T)=\operatorname{Hom}(T,W)\). The corresponding condition is exactness, for every \(W\), of
\[ 0\to D(C) \to D(B) \to D(A). \tag{1.2} \]Here injectivity of precomposition by \(v\), together with middle exactness, says that every \(t:B\to W\) with \(tu=0\) factors uniquely through \(v\). This is the cokernel universal property. These are the two Hom tests of Stacks, Lemma 12.5.8; the arguments above supply the universal-property proofs. A single probe need not suffice. In particular, a general abelian category need not have an object whose maps into every object detect all kernels.
We also use the short-exact tests of Stacks, Lemma 12.7.2. For an additive functor \(F:\mathcal A\to\mathcal B\), left exactness is equivalent to preserving the left three terms of every short exact sequence; right exactness has the corresponding right three-term test. Left exactness means preservation of finite limits, and right exactness means preservation of finite colimits. The lemma supplies both implications in their full abelian generality.
For later use, full exactness is also equivalent to preserving every sequence \(A\to B\to C\) exact at \(B\). Indeed, if \(F\) is exact, it preserves all kernels and cokernels by Lemma 2.1. In an exact three-term sequence, factor the first arrow as \(A\twoheadrightarrow I\hookrightarrow B\), where \(I=\ker(B\to C)\). Its image under \(F\) is an epimorphism followed by the kernel of \(F(B)\to F(C)\), proving middle exactness. Conversely, preservation of all three-term exact sequences tests every monomorphism on \(0\to A\to B\), every epimorphism on \(B\to C\to0\), and the middle of every short exact sequence on \(A\to B\to C\). Since an additive functor sends a zero object to a zero object, these three tests give preservation of the full short exact sequence.
2. The two doubled objects
Let \(i:K\hookrightarrow Y\) be monic and let \(q:Y \twoheadrightarrow Q\) be its cokernel. Its self-pushout has the description
\[ \begin{gathered} P=Y\amalg_KY\cong Y\oplus Q,\\ j_1=\binom{1_Y}{0},\qquad j_2=\binom{1_Y}{q}. \end{gathered} \tag{2.1} \]The notation is a biproduct matrix, so it makes sense without elements. If \(s:Q\to Y\oplus Q\) is the second inclusion, then
\[ j_2-j_1=sq. \tag{2.2} \]The map \(s\) is split monic. Thus the equalizer of \(j_1,j_2\) is the kernel of \(q\), namely \(i\). The doubled object remembers the quotient through the difference of its two inclusions.
Now let \(q:X \twoheadrightarrow Y\) be epic, with kernel \(i:K\hookrightarrow X\). Its kernel pair has the description
\[ \begin{gathered} R=X\times_YX\cong X\oplus K,\\ p_1=(1_X,0),\qquad p_2=(1_X,i). \end{gathered} \tag{2.3} \]If \(r:X\oplus K\to K\) is the second projection, then
\[ p_2-p_1=ir. \tag{2.4} \]The projection \(r\) is split epic. Hence the coequalizer of \(p_1,p_2\) is the cokernel of \(i\), namely \(q\). The difference of the two projections remembers the subobject that was quotiented out.
Additivity of \(F\) identifies \(F(Y\oplus Q)\) with \(FY\oplus FQ\), and similarly for \(X\oplus K\). It also preserves split monomorphisms and split epimorphisms: the equations for their one-sided inverses survive application of any functor. In particular, \(Fs\) is monic and \(Fr\) is epic. These observations concern the displayed biproducts and maps. They do not presume that \(F\) preserves the pushout or pullback universal property used to construct them.
3. Testing one side of exactness
An exact fork \(K\to Y\rightrightarrows P\) means that its first arrow is the equalizer of the parallel pair. An exact cofork \(R\rightrightarrows X\to Y\) means that its last arrow is their coequalizer. Thus the fork includes monicity of its first arrow, and the cofork includes epicity of its last arrow.
Theorem 3.1. Let \(F:\mathcal A\to\mathcal B\) be additive between abelian categories. The following conditions are equivalent:
- \(F\) is left exact.
- For every monomorphism \(i:K\hookrightarrow Y\), its self-pushout gives an exact fork
Proof. If \(F\) is left exact, it preserves the equalizer identified in Section 2, giving the fork in (3.1).
Conversely, suppose every such fork is exact. By (2.2) and additivity, \(Fj_2-Fj_1=(Fs)(Fq)\). Because \(Fs\) is monic, the kernels of this composite and of \(Fq\) agree. The test therefore says that \(Fi\) is monic and is the kernel of \(Fq\). In particular, \(F\) preserves every monomorphism, since every monomorphism is included in a tested fork.
Take any morphism \(f:Y\to Z\), and choose its image factorization
\[ Y\xrightarrow{e}I\xrightarrow{m}Z, \qquad f=me, \tag{3.2} \]with \(e\) epic and \(m\) monic. Let \(k:\ker f\hookrightarrow Y\). In an abelian category \(e\) is the cokernel of \(k\). The fork test for \(k\) says that \(Fk\) is the kernel of \(Fe\). The already proved preservation of monomorphisms makes \(Fm\) monic. Therefore \(\ker(Fm\,Fe)=\ker(Fe)\), and \(Fk\) is the kernel of \(Ff\).
So \(F\) preserves all kernels. Equalizers in an abelian category are kernels of differences, and additivity preserves differences. Finite products and a terminal zero object are already preserved by additivity. Every finite limit is an equalizer between finite products; hence \(F\) preserves every finite limit. \(\square\)
Theorem 3.2. Under the same hypotheses, \(F\) is right exact if and only if the kernel pair of every epimorphism \(q:X \twoheadrightarrow Y\) gives an exact cofork
\[ FR\mathrel{\substack{\xrightarrow{Fp_1}\\[-3pt]\xrightarrow{Fp_2}}} FX\xrightarrow{Fq}FY. \tag{3.3} \]Proof. A right exact functor preserves the coequalizer described in Section 2, giving (3.3).
Suppose instead that every tested cofork is exact. Equation (2.4) gives \(Fp_2-Fp_1=(Fi)(Fr)\). Since \(Fr\) is epic, a map out of \(FX\) kills this composite exactly when it kills \(Fi\). The cokernel universal properties are therefore the same. The test says that \(Fq\) is epic and is the cokernel of \(Fi\). In particular \(F\) preserves every epimorphism.
Take an arbitrary \(f:A\to B\) and factor it as \(f=me\), with \(e:A \twoheadrightarrow I\) epic and \(m:I\hookrightarrow B\) monic. Let \(q_f:B\twoheadrightarrow Q_f\) be its cokernel. Then \(m\) is the kernel of \(q_f\). Testing this epimorphism says that \(Fq_f\) is the cokernel of \(Fm\). Since \(Fe\) is epic, a map out of \(FB\) kills \(Fm\,Fe\) exactly when it kills \(Fm\). Thus \(Fq_f\) is the cokernel of \(Ff\).
The functor preserves all cokernels. Coequalizers are cokernels of differences, and finite coproducts together with an initial zero object are already preserved. Expressing a finite colimit as a coequalizer between finite coproducts proves right exactness. \(\square\)
For example, a tensor functor can keep the middle of a tested fork exact even when its first map loses monicity. Exercise 1 computes this phenomenon for every pair of positive integers. The corresponding missing epicity in a cofork is exhibited in Exercise 2.
4. How composition changes kernels and quotients
The kernels and cokernels of two consecutive maps are related even when their composite is nonzero. Write \(f:X\to Y\), \(g:Y\to Z\), and, for each map \(h\), write \(k_h:K_h\hookrightarrow\operatorname{dom}h\) and \(q_h:\operatorname{cod}h\twoheadrightarrow Q_h\) for its kernel and cokernel.
There are canonical arrows \(a:K_f\to K_{gf}\) and \(b:K_{gf}\to K_g\), characterized by
\[ k_{gf}a=k_f,\qquad k_gb=fk_{gf}. \tag{4.1} \]There are also canonical arrows
\[ \begin{gathered} c=q_fk_g:K_g\to Q_f,\\ d:Q_f\to Q_{gf},\qquad dq_f=q_{gf}g,\\ e:Q_{gf}\to Q_g,\qquad eq_{gf}=q_g. \end{gathered} \tag{4.2} \]The defining equations for \(d\) and \(e\) have unique solutions because the displayed maps kill \(f\) and \(gf\), respectively. With these choices, the following two lines form one exact sequence, joined at their occurrence of \(K_g\):
\[ 0\longrightarrow K_f\xrightarrow{a}K_{gf} \xrightarrow{b}K_g, \tag{4.3} \] \[ K_g\xrightarrow{c}Q_f\xrightarrow{d}Q_{gf} \xrightarrow{e}Q_g\longrightarrow0. \tag{4.4} \]Here is the precise reduction to Stacks snake lemma, Lemma 12.5.17. Use the two rows
\[ \begin{gathered} X\xrightarrow{f}Y\xrightarrow{q_f}Q_f\longrightarrow0,\\ 0\longrightarrow Z\xrightarrow{1_Z}Z\longrightarrow0. \end{gathered} \tag{4.5} \]The vertical arrows, in order, are \(gf:X\to Z\), \(g:Y\to Z\), and \(0:Q_f\to0\). The rows are exact, both squares commute, and the snake lemma gives the following exact sequence, displayed in two lines joined at \(Q_f\):
\[ \begin{gathered} K_{gf}\xrightarrow{b}K_g\xrightarrow{c}Q_f,\\ Q_f\xrightarrow{d}Q_{gf}\xrightarrow{e}Q_g\longrightarrow0. \end{gathered} \tag{4.6} \]To identify the sign of its connecting arrow, its defining pullback is \(Y\times_{Q_f}Q_f\cong Y\), using the identity on \(Q_f\). Its defining pushout is \(Q_{gf}\amalg_ZZ\cong Q_{gf}\), using the identity on \(Z\) and the map \(q_{gf}:Z\to Q_{gf}\). The snake defining square therefore says exactly \(dq_f=q_{gf}g\), with the positive sign used in (4.2). No monicity of \(f\), epicity of \(g\), or vanishing of \(gf\) was introduced.
It remains to prepend \(0\to K_f\). The arrow \(a\) is monic because \(k_{gf}a=k_f\) is monic. For an arbitrary \(t:W\to K_{gf}\) with \(bt=0\), equation (4.1) gives \(fk_{gf}t=0\). There is a unique \(r:W\to K_f\) with \(k_fr=k_{gf}t\). Monicity of \(k_{gf}\) gives \(ar=t\). Uniqueness follows from monicity of \(a\). Thus \(a\) is the kernel of \(b\), completing (4.3)–(4.4).
The entire sequence is natural in a commuting pair of squares between two composable pairs. More explicitly, if \(\alpha:X\to X'\), \(\beta:Y\to Y'\), \(\gamma:Z\to Z'\) satisfy \(\beta f=f'\alpha\) and \(\gamma g=g'\beta\), universality induces maps between all six kernel and cokernel objects. For \(a,b\), composing with the target kernel inclusions reduces the required equalities to these two square equations. For \(c\), its formula \(q_fk_g\) does the same. For \(d,e\), precomposing with the source cokernel epimorphisms reduces them to the square equations and the defining formulas in (4.2). Monicity and epicity then give the required equalities. Thus no choice of element representatives is needed for the connecting map.
5. Kernels in a diagram with open right ends
Consider three exact rows, indexed by \(i=0,1,2\)
\[ 0\longrightarrow L_i\xrightarrow{a_i}M_i \xrightarrow{b_i}R_i, \tag{5.1} \]so that each \(a_i\) is the kernel of \(b_i\). Between consecutive rows let the vertical arrows be \(\ell_i:L_i\to L_{i+1}\), \(m_i:M_i\to M_{i+1}\), and \(r_i:R_i\to R_{i+1}\), for \(i=0,1\). Assume every square commutes:
\[ \begin{gathered} a_{i+1}\ell_i=m_i a_i,\\ b_{i+1}m_i=r_i b_i. \end{gathered} \tag{5.2} \]Theorem 5.1. Suppose \(0\to M_0\xrightarrow{m_0}M_1\xrightarrow{m_1}M_2\) is exact and \(r_0\) is monic. Then
\[ 0\longrightarrow L_0\xrightarrow{\ell_0}L_1 \xrightarrow{\ell_1}L_2 \tag{5.3} \]is exact. In particular the conclusion holds if the right column \(0\to R_0\to R_1\to R_2\) is exact.
Proof. First, \(a_2\ell_1\ell_0=m_1m_0a_0=0\). Since \(a_2\) is monic, the left column is a complex. The equality \(a_1\ell_0=m_0a_0\), with both \(m_0\) and \(a_0\) monic, makes \(\ell_0\) monic.
Take an arbitrary \(t:W\to L_1\) with \(\ell_1t=0\). Then \(m_1a_1t=a_2\ell_1t=0\). The middle column is a kernel sequence, so there is a unique \(s:W\to M_0\) such that \(m_0s=a_1t\). Next,
\[ r_0b_0s=b_1m_0s=b_1a_1t=0. \tag{5.4} \]Monicity of \(r_0\) gives \(b_0s=0\). Row 0 is a kernel sequence, so there is a unique \(u:W\to L_0\) with \(a_0u=s\). Finally,
\[ a_1\ell_0u=m_0a_0u=m_0s=a_1t. \tag{5.5} \]Monicity of \(a_1\) gives \(\ell_0u=t\); monicity of \(\ell_0\) gives uniqueness. Section 1 therefore proves (5.3). \(\square\)
There is no terminal zero in (5.1), and none is needed: the maps \(b_i\) may fail to be epic. The proof uses only initial monicity in the right column, so it proves more than the version with both middle and right columns exact. It makes no claim of exactness at \(L_2\). Exercise 4 supplies a concrete diagram and shows how the conclusion can fail if \(r_0\) loses monicity.
6. Four exercises and complete solutions
Exercise 1 (calculation and diagnosis). Let \(m,n\) be positive integers and put \(d=\gcd(m,n)\). Form the self-pushout of \(i:\mathbb Z\hookrightarrow\mathbb Z\), \(i(t)=nt\). Apply the tensor functor \(F(A)=A\otimes\mathbb Z/m\), with tensor product over \(\mathbb Z\). Compute the difference of the two arrows out of \(F\mathbb Z\), its kernel, and the image and kernel of \(Fi\). For which \(m,n\) is this particular fork exact? Does equality of the middle image and kernel suffice?
Solution. The cokernel of \(i\) is \(\mathbb Z/n\). By (2.1), the doubled object is \(\mathbb Z\oplus\mathbb Z/n\). We have natural identifications
\[ \begin{gathered} F\mathbb Z=\mathbb Z/m,\\ F(\mathbb Z/n)\cong\mathbb Z/d,\\ FP\cong\mathbb Z/m\oplus\mathbb Z/d. \end{gathered} \tag{6.1} \]For the second identification, tensor the generators and relation presentation of \(\mathbb Z/n\): its tensor product is \((\mathbb Z/m)/n(\mathbb Z/m)\). The subgroup generated by \(n\) in \(\mathbb Z/m\) is the subgroup generated by \(d\), since Bezout gives \(d=an+bm\). Its quotient is \(\mathbb Z/d\). Equivalently, the mutually inverse tensor maps send \(\bar a\otimes\bar b\) to \(\overline{ab}\) modulo \(d\), and the generator \(\bar1\) modulo \(d\) to \(\bar1\otimes\bar1\). The relation \(d=an+bm\) makes the latter well-defined.
Under (6.1), the two arrows are \(x\mapsto(x,0)\) and \(x\mapsto(x,\bar x)\). Their difference is \(x\mapsto(0,\bar x)\), with \(\bar x\) taken modulo \(d\). Hence its kernel is \(d(\mathbb Z/m)\). The map \(Fi\) is multiplication by \(n\), whose image is exactly this same subgroup.
Writing \(m=dm'\), \(n=dn'\), with \(m',n'\) coprime, its kernel consists of the multiples of \(m'\) modulo \(m\): divisibility \(m\mid nx\) is equivalent to \(m'\mid x\). This kernel has \(d\) elements. Thus \(Fi\) is monic exactly when \(d=1\). The tested fork is exact precisely in that case. For \(d>1\), it has middle image equal to middle kernel, but its first arrow is not monic, so it is not an equalizer fork. For \(m=1\) all objects here are zero; for \(n=1\) the map \(i\) is the identity. Both give \(d=1\) and pass the test, as required.
Exercise 2 (a missing quotient). Let \(m,n\) be positive and let \(T_m(A)=A[m]=\{a\in A:ma=0\}\), viewed as the additive functor \(\operatorname{Hom}(\mathbb Z/m,-)\) on abelian groups. Apply it to the kernel pair of \(q:\mathbb Z\twoheadrightarrow\mathbb Z/n\). When is the resulting cofork exact? Use the answer to decide whether \(T_m\) can be right exact when \(m>1\).
Solution. The kernel of \(q\) is \(n\mathbb Z\), embedded by inclusion. Its kernel pair is \(\mathbb Z\oplus n\mathbb Z\), with projections \((x,k)\mapsto x\) and \((x,k)\mapsto x+k\). Both this direct sum and \(\mathbb Z\) are torsion-free, so their \(m\)-torsion groups vanish.
Put \(d=\gcd(m,n)\), and write \(n=dn'\), \(m=dm'\). A residue \(x\) modulo \(n\) is killed by \(m\) exactly when \(n'\mid x\), since \(m',n'\) are coprime. Therefore \((\mathbb Z/n)[m]\) is generated by \(n'\) modulo \(n\), and is cyclic of order \(d\). The image cofork is consequently
\[ 0\rightrightarrows0\longrightarrow\mathbb Z/d. \tag{6.2} \]The cokernel of the difference \(0\to0\) is zero, so this is an exact cofork exactly when \(d=1\). For \(d>1\) its last arrow is not epic. Taking \(n=m>1\) gives a failed epimorphism test, and Theorem 3.2 shows that \(T_m\) is not right exact. When \(m=1\), \(T_m\) is the zero functor, which is exact. When \(m>1\) but \(m,n\) are coprime, this particular cofork passes; that alone says nothing about all the other tests required for right exactness.
Exercise 3 (a composition obstruction). Take
\[ \begin{gathered} f:\mathbb Z\to\mathbb Z^2,\qquad f(t)=(2t,0),\\ g:\mathbb Z^2\to\mathbb Z,\\ g(a,b)=3a+2b. \end{gathered} \tag{6.3} \]Compute all six objects and all arrows of (4.3)–(4.4). Verify its nontrivial exactness directly, including the map from \(Q_f\) to \(Q_{gf}\).
Solution. Both \(f\) and \(gf:t\mapsto6t\) are injective, so \(K_f=K_{gf}=0\). The equation \(3a+2b=0\) forces \(a=2t\), \(b=-3t\), uniquely, so \(K_g\cong\mathbb Z\), embedded by \(t\mapsto(2t,-3t)\). The cokernels are
\[ \begin{gathered} Q_f\cong\mathbb Z/2\oplus\mathbb Z,\\ Q_{gf}\cong\mathbb Z/6,\qquad Q_g=0. \end{gathered} \tag{6.4} \]For \(Q_g=0\), note that \(g(1,-1)=1\), so \(g\) is onto. The first two kernel arrows have zero domain. The map \(c=q_fk_g\) is \(t\mapsto(0,-3t)\). The defining formula for \(d\) gives
\[ d(\bar a,b)=\overline{3a+2b}\quad\text{in }\mathbb Z/6. \tag{6.5} \]Changing the integer representative \(a\) by \(2s\) changes \(3a+2b\) by \(6s\), so the formula is well-defined. The arrow \(e\) is the unique map to zero. Thus the nontrivial portion is
\[ 0\to\mathbb Z \xrightarrow{c} \mathbb Z/2\oplus\mathbb Z \xrightarrow{d}\mathbb Z/6\to0. \tag{6.6} \]The first map is injective. If \(d(\bar a,b)=0\), reduction modulo 2 gives \(\bar a=0\). Choosing \(a=0\), the remaining condition is \(6\mid2b\), hence \(3\mid b\). These are exactly the pairs \((0,-3t)\). Finally \(d(\bar1,-1)=\bar1\), so \(d\) is onto. This checks every nonzero exactness condition. The composite \(gf\) is nonzero, demonstrating that this sequence of defects does not require the original pair to be a complex.
Exercise 4 (kernel columns and a necessary hypothesis). Over a field \(k\), use \(M_0=R_0=k^2\), \(M_1=R_1=k^3\), and \(M_2=R_2=k\). In each vertical column use the inclusion \((x,y)\mapsto(x,y,0)\), followed by \((x,y,z)\mapsto z\). Define the row maps by
\[ \begin{gathered} b_0(a,b)=(a,0),\\ b_1(a,b,c)=(a,0,c),\\ b_2=1_k. \end{gathered} \tag{6.7} \]Find their kernels and the induced left column, and check the conclusion of Theorem 5.1 despite failure of row surjectivity. Then find a diagram with exact middle column and kernel-exact rows for which dropping monicity of \(r_0\) makes the conclusion false.
Solution. The two nontrivial squares commute: both composites from \(M_0\) to \(R_1\) send \((a,b)\) to \((a,0,0)\); both from \(M_1\) to \(R_2\) send \((a,b,c)\) to \(c\). Each middle and right column is exact at its first two positions: the first arrow is injective and its image is exactly the kernel of the last-coordinate projection.
Identify \(L_0\cong k\) by \(b\mapsto(0,b)\), and \(L_1\cong k\) by \(b\mapsto(0,b,0)\). We have \(L_2=0\). The induced arrows are the identity \(k\to k\) and the zero map \(k\to0\), so the kernel column is \(0\to k\xrightarrow{1}k\to0\), which is exact. Yet \(b_0\) misses \((0,1)\), and \(b_1\) misses \((0,1,0)\). Thus the rows are the kernel sequences specified in (5.1), with no terminal zero that could assert surjectivity.
For failure without monicity, take the middle column \(M_0=k\xrightarrow{1}M_1=k\to M_2=0\). Take the right column \(R_0=k\to R_1=0\to R_2=0\), so \(r_0=0\) is not monic. Use \(b_0=1_k\), \(b_1:k\to0\) zero, and the unique \(b_2:0\to0\). The squares commute, and the row kernels are \(L_0=0\), \(L_1=k\), \(L_2=0\). The induced left column \(0\to0\to k\to0\) is not exact at \(k\): the preceding image is zero while the following kernel is all of \(k\). This is exactly the point where (5.4) would require cancellation of \(r_0\).
References
- The Stacks Project, Lemma 12.5.8, for the two Hom tests.
- The Stacks Project, Lemma 12.5.17, for the weak-row snake lemma used in Section 4.
- The Stacks Project, Section 12.7, especially Lemma 12.7.2, for the retained additive exactness criteria.
- Trace coreflections and balanced nonabelian categories, Section 3, for the ordinary doubled-object constructions.
- Full subcategories and exact closure, Lemma 2.1, for preservation of kernels and cokernels by an exact additive functor.
- The Stacks Project, Lemma 12.7.2, gives both directions of the short-exact criteria used in Section 1. Lemma 12.5.17 gives the weak-row snake construction used in Section 4, with the maps and connecting-arrow sign identified there. The doubled-object arguments and four exercise solutions are supplied in this lesson and its precise owned prerequisites.