Definition comp_preserves_subobject_classifier {C₁ C₂ C₃ : category} {F : C₁ ⟶ C₂} {G : C₂ ⟶ C₃} {T₁ : Terminal C₁} {T₂ : Terminal C₂} {T₃ : Terminal C₃} {HF : preserves_terminal F} {HG : preserves_terminal G} (HF' : preserves_subobject_classifier F T₁ T₂ HF) (HG' : preserves_subobject_classifier G T₂ T₃ HG) : preserves_subobject_classifier (F ∙ G) T₁ T₃ (composition_preserves_terminal HF HG). Proof. intros Ω t H. pose (HG' (F Ω) (TerminalArrow (preserves_terminal_to_terminal F HF T₁) _ · #F t) (HF' Ω t H)) as H'. use (is_subobject_classifier_eq_ar _ H'). abstract (cbn ; rewrite functor_comp ; rewrite !assoc ; apply maponpaths_2 ; apply (TerminalArrowEq (T := preserves_terminal_to_terminal _ (composition_preserves_terminal HF HG) T₁))). Defined.
Require Import UniMath.Foundations.All. Require Import UniMath.MoreFoundations.All. Require Import UniMath.CategoryTheory.Core.Prelude. Require Import UniMath.CategoryTheory.Limits.Terminal. Require Import UniMath.CategoryTheory.Limits.Pullbacks. Require Import UniMath.CategoryTheory.Limits.Preservation. Require Import UniMath.CategoryTheory.Monics. Require Import UniMath.CategoryTheory.SubobjectClassifier.SubobjectClassifier. Require Import UniMath.CategoryTheory.SubobjectClassifier.SubobjectClassifierIso.