Lemma Pullback_of_z_iso {C:category} {a b c : C} {f : C ⟦b, a⟧} {g : C ⟦c, a⟧} (gis : is_z_isomorphism g) (pb : Pullback f g) : is_z_isomorphism (PullbackPr1 pb). Proof. use make_is_z_isomorphism. + use PullbackArrow. - exact (identity b). - exact (f · (is_z_isomorphism_mor gis)). - now rewrite assoc', (is_inverse_in_precat2 (is_z_isomorphism_is_inverse_in_precat gis)), id_left, id_right. + use make_is_inverse_in_precat. - use pathsinv0. use PullbackEndo_is_identity. * now rewrite (assoc' (PullbackPr1 pb)), PullbackArrow_PullbackPr1, id_right. * now rewrite (assoc' (PullbackPr1 pb)), PullbackArrow_PullbackPr2, assoc, PullbackSqrCommutes, assoc', (is_inverse_in_precat1 (is_z_isomorphism_is_inverse_in_precat gis)), id_right. - use PullbackArrow_PullbackPr1. Defined.
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.