proposition: Lemma nat_ob_rec_z (N : nat_ob) {X : ob C} : ∏ (f : 1 --> X) (g : X --> X), nat_ob_z N · nat_ob_rec N f g = f.
proof: Proof. intros f g. pose (inlN := BinCoproductIn1 (bc 1 N)). pose (succ := nat_ob_s N). pose (diagram := maponpaths (fun x => inlN · x) (algebra_mor_commutes F (pr1 N) _ (InitialArrow N (make_F_alg f g)))). rewrite (F_compute2 _) in diagram. rewrite (BinCoproductArrowEta C 1 X (bc _ _) _ _) in diagram. rewrite (precompWithBinCoproductArrow C (bc 1 N) (bc 1 X) (identity 1) _ _ _) in diagram. rewrite (BinCoproductIn1Commutes C 1 N (bc 1 _) _ _ _) in diagram. rewrite (id_left _) in diagram. rewrite assoc in diagram. rewrite (BinCoproductArrowEta C 1 N (bc _ _) _ _) in diagram. refine (_ @ (BinCoproductIn1Commutes C _ _ (bc 1 _) _ f g)). rewrite (!BinCoproductIn1Commutes C _ _ (bc 1 _) _ 0 succ). unfold nat_ob_rec in *. exact diagram. Defined.
imports: UniMath.Foundations.PartD UniMath.Foundations.Propositions UniMath.Foundations.Sets UniMath.MoreFoundations.Tactics UniMath.CategoryTheory.Core.Categories UniMath.CategoryTheory.Core.Isos UniMath.CategoryTheory.Core.Univalence UniMath.CategoryTheory.Core.Functors UniMath.CategoryTheory.whiskering UniMath.CategoryTheory.Limits.Initial UniMath.CategoryTheory.DisplayedCats.Core UniMath.CategoryTheory.DisplayedCats.Total UniMath.CategoryTheory.DisplayedCats.Constructions UniMath.CategoryTheory.DisplayedCats.Isos UniMath.CategoryTheory.DisplayedCats.Univalence UniMath.CategoryTheory.Limits.Terminal UniMath.CategoryTheory.Limits.BinCoproducts UniMath.CategoryTheory.NNO UniMath.CategoryTheory.PrecategoryBinProduct UniMath.CategoryTheory.ProductCategory UniMath.CategoryTheory.Limits.Coproducts