In an abelian category is it true that $\ker f \cong \ker (\operatorname{coker} (\ker f))$? In an abelian category is it true that $\ker f \cong \ker (\operatorname{coker} (\ker f))$?
I am teaching myself category and was playing with the definitions of kernel and cokernel and think I established this result (and of course dually that 
$\operatorname{coker} f \cong \operatorname{coker} (\ker (\operatorname{coker} f))$ ).
The trouble is, that I haven't seen it in any of the texts and lecture notes I have been reading so perhaps I am wrong.
Here is my reasoning (which would look simpler if I could work out how to draw the commutative diagram in LaTeX):
Let $f:A\to B$.  Then there exists $i: \ker f \to A$ with $f\circ i = 0$.  Hence there exists $q: A \to \operatorname{coker} (\ker f)$ with $ q\circ i = 0$.
Hence there exists $j: \ker (\operatorname{coker}(\ker f)) \to A$ such that $q\circ j = 0$.
We thus have two maps: $0 = q\circ i : \ker f \to A \to \operatorname{coker} (\ker f)$ and $0 = q\circ j : \ker (\operatorname{coker} (\ker f)) \to A \to \operatorname{coker} (\ker f)$
and so by the universal property of kernels we must have that $\ker f \cong \ker (\operatorname{coker} (\ker f))$.
 A: In any category with zero morphisms (this is a little bit weaker than to require the existence of zero objects) one can define kernels and cokernels by the well-known universal properties. In general not every morphism will have a kernel or a cokernel, and if a (co)kernel exists, it is in general not uniquely determined. However, if a morphism $f : A \to B$ has (co)kernels, then any two  (co)kernels differ by an isomorphism between their (co)domains.
Let us recall the definition of a kernel (cokernels are defined "dually"):
A kernel of a morphism $f : A \to B$ is a morphism $k : K \to A$ such that
(1) $f \circ k = 0$
(2) For each morphism $n : N \to A$ such that $f \circ n = 0$ there exists a unique morphism $u : N \to K$ such that $k \circ u = n$.
We must not confuse the morphism $k$ with the object $K$. Let us for the moment denote $k$ as kernel morphism and $K$ as kernel object. Clearly $k$ determines $K$ (it belongs to $k$ as its domain), but $K$ alone does not determine $k$.
Thus, strictly speaking, the notation $ker(f)$ only makes sense if we mean a kernel morphism and not a kernel object. Be aware, however, that writing $ker(f)$ suggests that we can assign to $f$ a unique kernel morphism. But in general $f$ has many kernel morphisms so that we need to make a choice. In the best case we can give a universal construction assigning to each $f$ a specific kernel morphism $ker(f)$.
Despite these general findings, in many concrete applications a certain kernel object is defined as "the kernel" of $f$. This is due to the fact that $K$ comes together with an "obviuos" morphism $k : K \to A$. Consider for example the category of abelian groups. As the kernel of a homomorphism $f : A \to B$ one usually understands the subgroup $f^{-1}(0)$ of $A$ and writes $ker(f) = f^{-1}(0)$. In this  case the inclusion $i_f : f^{-1}(0) \to A$ is a kernel morphism of $f$. In fact, $i_f$ is the only reasonable choice for a homomorphism $f^{-1}(0) \to A$ which justifies the lax identification of kernel object and kernel morphism. Moreover, $f^{-1}(0)$ is uniquely determined by $f$ so that have the above-mentioned universal construction assigning to each $f$ its "standard" kernel morphism $i_f$. 
Now, with no other requirements than the existence of zero morphisms we can prove:
Theorem. Let $f : A \to B$ be a morphism which has a kernel $k : K \to A$. If $k$ has a cokernel $c : A \to C$, then $k$ is a kernel of $c$. Thus, laxly written: $ker(f) \cong ker(coker(ker(f)))$.
Your proof is essentially correct, but is focussing on (co)kernel objects. For (co)kernel morphisms we do it as follows:
Since $k$ is a kernel of $f$, we have $f \circ k = 0$. Since $c$ is a cokernel of $k$ , its universal property implies the existence of a unique $h : C \to B$ such that $h \circ c = f$.
We now show that $k$ is a kernel of $c$ by verifying the universal property.
(1) $c \circ k = 0$ because $c$ is a cokernel of $k$.
(2) Let $n : N \to A$ be any morphism such that $c \circ n = 0$. Then $f \circ n = h \circ c \circ n = 0$. Since $k$ is a kernel of $f$, there exists a unique $u : N \to K$ such that $k \circ u = n$.
The above proof shows that we can split the theorem in two parts:
(a) Let $f : A \to B$ be a morphism which has a kernel $k : K \to A$. If $f$ is the composition of two morphisms $f = h \circ c$ such that $c \circ k = 0$, then $k$ is a kernel of $c$.
(b) Let $f : A \to B$ be a morphism and $k : K \to A$ be a morphism such that $f \circ k = 0$. If $k$ has a cokernel $c : A \to C$, then $f$ can be decomposed as $f = h \circ c$. 
A: Your argument seems correct to me, although I would maybe add some details in the last step. From $qi=0$ we get a unique arrow $\varphi \colon \ker{f}\to \ker( \operatorname{coker}(\ker{f}))$ such that $i=j\varphi$. From $fi=0$ we get a unique arrow $h\colon \operatorname{coker}(\ker{f}) \to B$ such that $f=hq$. Thus $fj=hqj=h0=0$ and we get a unique arrow $\psi \colon \ker(\operatorname{coker}(\ker{f})) \to \ker{f} $ such that $j=i\psi$. Now by uniqueness it follows that $\varphi$ and $\psi$ are mutually inverse, giving thus the desired isomorphism.
There is a more general reason why your statement holds, and I thought it was a pitty not to mention it. Besides, it seems to me that the first reference given in the comments above uses the result that you are trying to prove [CWM page 199 Proposition 1, see end of first paragraph of the proof: $e=\operatorname{coker}(g)=\operatorname{coker}(\ker(\operatorname{coker}(g)))$].
As mentioned in CWM a couple pages earlier, the reason behind this equalities is that kernel and cokernel define a Galois connection with some nice property between arrows with domain a given object $c$ and arrows with codomain $c$ (modulo some equivalence relation).
A preorder is a set $P$ with some reflexive and transitive binary relation $\leqslant $. We may also regard it as a category with an arrow $p\to q$ if and only if $p\leqslant q$. From this point of view, order preserving (resp. reversing) functions between two preorders  are just covariant (resp. contravariant) functors.
In our case let $A$ be an $Ab$-category (or a preadditive category) with a zero object and all kernels and cokernels. Fix an object $c\in A$. We have a preorder on $C=\operatorname{cod}^{-1}(c)$, the arrows in $A$ with codomain $c$, defined as $g\leqslant f$ if and only if $g$ factors through $f$. With the same relation we have a preorder on $D=\operatorname{dom}^{-1}(c)$: the small arrow factors through the big one. If $f\leqslant g$ and $g\leqslant f$, indentify them and quotient out by this equivalence relation. So we get a transitive, reflexive and antisymmetric relation on $C$ and also on $D$.
With this set up, $\ker$ (resp. $\operatorname{coker}$) defines a contravariant functor $D\to C$ (resp. $C\to D$). The defining property of $\ker{u}$ (resp. $ \operatorname{coker}{f}$) for $u\in D$ and $f\in C$ says now that
$$ f\leqslant \ker{u} \Leftrightarrow uf=0 \Leftrightarrow \operatorname{coker}{f} \geqslant u$$
This implies that
$$ \operatorname{hom}_{C}(f, \ker{u})=\operatorname{hom}_{D^{op}}(
\operatorname{coker}{f},u) $$
Hence the two functors $R=\ker$ and $L=\operatorname{coker}$ are adjoint (regard them as covariant with $D^{op}$ instead of $D$). It follows now from the triangular identities relating units and counits of adjunctions [see CWM page 85] that
$$ L \geqslant LRL \geqslant L \quad \text{and} \quad R\leqslant RLR \leqslant R $$
But we are considering only equivalence classes, so antisymmetry implies now the desired identities
$$ L=LRL \quad \text{and} \quad R=RLR $$
