Lemma iso_between_pullbacks_are_inv : is_inverse_in_precat iso_between_pullbacks_map iso_between_pullbacks_inv. Proof. split ; unfold iso_between_pullbacks_map, iso_between_pullbacks_inv. - use (MorphismsIntoPullbackEqual H). + rewrite !assoc'. rewrite (PullbackArrow_PullbackPr1 P). rewrite !assoc. rewrite (PullbackArrow_PullbackPr1 P'). rewrite !assoc'. rewrite z_iso_inv_after_z_iso. rewrite id_left, id_right. apply idpath. + rewrite !assoc'. rewrite (PullbackArrow_PullbackPr2 P). rewrite !assoc. rewrite (PullbackArrow_PullbackPr2 P'). rewrite !assoc'. rewrite z_iso_inv_after_z_iso. rewrite id_left, id_right. apply idpath. - use (MorphismsIntoPullbackEqual H'). + rewrite !assoc'. rewrite (PullbackArrow_PullbackPr1 P'). rewrite !assoc. rewrite (PullbackArrow_PullbackPr1 P). rewrite !assoc'. rewrite z_iso_after_z_iso_inv. rewrite id_left, id_right. apply idpath. + rewrite !assoc'. rewrite (PullbackArrow_PullbackPr2 P'). rewrite !assoc. rewrite (PullbackArrow_PullbackPr2 P). rewrite !assoc'. rewrite z_iso_after_z_iso_inv. rewrite id_left, id_right. apply idpath. Qed.
Require Import UniMath.Foundations.All. Require Import UniMath.MoreFoundations.All. Require Import UniMath.CategoryTheory.Core.Categories. Require Import UniMath.CategoryTheory.Core.Isos. Require Import UniMath.CategoryTheory.Core.NaturalTransformations. Require Import UniMath.CategoryTheory.Core.TransportMorphisms. Require Import UniMath.CategoryTheory.Core.Univalence. Require Import UniMath.CategoryTheory.Core.Functors. Require Import UniMath.CategoryTheory.Limits.Terminal. Require Import UniMath.CategoryTheory.Limits.BinProducts. Require Import UniMath.CategoryTheory.Limits.Equalizers. Require Import UniMath.CategoryTheory.FunctorCategory. Require Import UniMath.CategoryTheory.Monics. Definition UnivProductFromPullback (c d a : C) (f : a --> c) (g : a --> d): exists (UnivProductFromPullback c d a f g). Definition BinProductsFromPullbacks : BinProducts C := BinProduct_Pullback.