proposition: Lemma to_isEpi {x y : ob A} (f : x --> y) (H : ∏ (z : ob A) (g : y --> z) (H : f · g = ZeroArrow (to_Zero A) _ _), g = ZeroArrow (to_Zero A) _ _ ) : isEpi f.
proof: Proof. use make_isEpi. intros x0 g h X. set (tmp := H x0 (to_binop _ _ g (to_inv h))). use (to_rcan A (to_inv h)). rewrite (@to_rinvax' A (to_Zero A)). apply tmp. clear tmp. rewrite to_premor_linear'. use (to_rcan A (f · h)). rewrite to_assoc. rewrite <- to_premor_linear'. rewrite (@to_linvax' A (to_Zero A)). rewrite ZeroArrow_comp_right. rewrite to_runax''. rewrite to_lunax''. exact X. Qed.
imports: UniMath.Foundations.PartD UniMath.Foundations.Propositions UniMath.MoreFoundations.Propositions UniMath.Foundations.Sets UniMath.Algebra.Monoids UniMath.CategoryTheory.Core.Categories UniMath.CategoryTheory.Core.Isos UniMath.CategoryTheory.Monics UniMath.CategoryTheory.Epis UniMath.CategoryTheory.PrecategoryBinProduct UniMath.CategoryTheory.CategoriesWithBinOps UniMath.CategoryTheory.PrecategoriesWithAbgrops UniMath.CategoryTheory.PreAdditive UniMath.CategoryTheory.opp_precat UniMath.CategoryTheory.Limits.Zero UniMath.CategoryTheory.Limits.Opp UniMath.CategoryTheory.Limits.BinCoproducts UniMath.CategoryTheory.Limits.BinProducts UniMath.CategoryTheory.Limits.Equalizers UniMath.CategoryTheory.Limits.Coequalizers UniMath.CategoryTheory.Limits.Kernels UniMath.CategoryTheory.Limits.Cokernels UniMath.CategoryTheory.Limits.BinDirectSums