proposition: Lemma isExactisMonic {x y : ob A} {f : x --> y} (isM : isMonic f) (H : ZeroArrow (to_Zero A) (to_Zero A) x · f = ZeroArrow (to_Zero A) (to_Zero A) y) : isExact (ZeroArrow (to_Zero A) (to_Zero A) x) f H.
proof: Proof. unfold isExact. use make_isKernel. - intros w h H'. use unique_exists. + use KernelIn. * exact h. * rewrite <- (ZeroArrow_comp_left _ _ _ _ _ f) in H'. apply isM in H'. rewrite H'. apply ZeroArrow_comp_left. + cbn. use KernelCommutes. + intros y'. apply hs. + intros y' X. cbn in X. cbn. use (KernelArrowisMonic (to_Zero A) (Abelian.Image (ZeroArrow (to_Zero A) (to_Zero A) x))). rewrite X. apply pathsinv0. use KernelCommutes. Qed.
imports: UniMath.Foundations.PartD UniMath.Foundations.Propositions UniMath.Foundations.Sets UniMath.MoreFoundations.Tactics UniMath.CategoryTheory.Limits.Zero UniMath.CategoryTheory.Limits.Equalizers UniMath.CategoryTheory.Limits.Coequalizers UniMath.CategoryTheory.Limits.Opp UniMath.CategoryTheory.Core.Categories UniMath.CategoryTheory.Core.Isos UniMath.CategoryTheory.opp_precat UniMath.CategoryTheory.Monics UniMath.CategoryTheory.Epis UniMath.CategoryTheory.Morphisms UniMath.CategoryTheory.CategoriesWithBinOps UniMath.CategoryTheory.PrecategoriesWithAbgrops UniMath.CategoryTheory.PreAdditive UniMath.CategoryTheory.Additive UniMath.CategoryTheory.Abelian UniMath.CategoryTheory.AbelianToAdditive UniMath.CategoryTheory.Limits.Kernels UniMath.CategoryTheory.Limits.Cokernels UniMath.CategoryTheory.Limits.BinDirectSums