Library UniMath.CategoryTheory.DisplayedCats.MonoCodomain.MonoCodLimits
Require Import UniMath.Foundations.All.
Require Import UniMath.MoreFoundations.All.
Require Import UniMath.CategoryTheory.Core.Prelude.
Require Import UniMath.CategoryTheory.Monics.
Require Import UniMath.CategoryTheory.Adjunctions.Core.
Require Import UniMath.CategoryTheory.Limits.Terminal.
Require Import UniMath.CategoryTheory.Limits.BinProducts.
Require Import UniMath.CategoryTheory.Limits.Pullbacks.
Require Import UniMath.CategoryTheory.Limits.Preservation.
Require Import UniMath.CategoryTheory.DisplayedCats.Core.
Require Import UniMath.CategoryTheory.DisplayedCats.Fibrations.
Require Import UniMath.CategoryTheory.DisplayedCats.Fiber.
Require Import UniMath.CategoryTheory.DisplayedCats.Codomain.
Require Import UniMath.CategoryTheory.DisplayedCats.Examples.MonoCodomain.
Require Import UniMath.CategoryTheory.DisplayedCats.Fiberwise.FiberwiseTerminal.
Require Import UniMath.CategoryTheory.DisplayedCats.Fiberwise.FiberwiseProducts.
Require Import UniMath.CategoryTheory.DisplayedCats.Codomain.FiberCod.
Require Import UniMath.CategoryTheory.DisplayedCats.Codomain.CodLimits.
Require Import UniMath.CategoryTheory.DisplayedCats.MonoCodomain.FiberMonoCod.
Require Import UniMath.CategoryTheory.DisplayedCats.MonoCodomain.Inclusion.
Local Open Scope cat.
Section CodomainStructure.
Context {C : category}
(HC : Pullbacks C).
Let HD : cleaving (disp_mono_codomain C) := mono_cod_disp_cleaving HC.
Require Import UniMath.MoreFoundations.All.
Require Import UniMath.CategoryTheory.Core.Prelude.
Require Import UniMath.CategoryTheory.Monics.
Require Import UniMath.CategoryTheory.Adjunctions.Core.
Require Import UniMath.CategoryTheory.Limits.Terminal.
Require Import UniMath.CategoryTheory.Limits.BinProducts.
Require Import UniMath.CategoryTheory.Limits.Pullbacks.
Require Import UniMath.CategoryTheory.Limits.Preservation.
Require Import UniMath.CategoryTheory.DisplayedCats.Core.
Require Import UniMath.CategoryTheory.DisplayedCats.Fibrations.
Require Import UniMath.CategoryTheory.DisplayedCats.Fiber.
Require Import UniMath.CategoryTheory.DisplayedCats.Codomain.
Require Import UniMath.CategoryTheory.DisplayedCats.Examples.MonoCodomain.
Require Import UniMath.CategoryTheory.DisplayedCats.Fiberwise.FiberwiseTerminal.
Require Import UniMath.CategoryTheory.DisplayedCats.Fiberwise.FiberwiseProducts.
Require Import UniMath.CategoryTheory.DisplayedCats.Codomain.FiberCod.
Require Import UniMath.CategoryTheory.DisplayedCats.Codomain.CodLimits.
Require Import UniMath.CategoryTheory.DisplayedCats.MonoCodomain.FiberMonoCod.
Require Import UniMath.CategoryTheory.DisplayedCats.MonoCodomain.Inclusion.
Local Open Scope cat.
Section CodomainStructure.
Context {C : category}
(HC : Pullbacks C).
Let HD : cleaving (disp_mono_codomain C) := mono_cod_disp_cleaving HC.
Proposition isTerminal_mono_codomain_fib
{x : C}
(yf : C /m x)
(H : is_z_isomorphism (pr21 yf))
: isTerminal (C /m x) yf.
Show proof.
Definition mono_codomain_fib_terminal
(x : C)
: Terminal (C /m x).
Show proof.
Proposition mono_codomain_fib_preserves_terminal
{x y : C}
(f : x --> y)
: preserves_terminal (mono_cod_pb HC f).
Show proof.
Definition mono_codomain_fiberwise_terminal
: fiberwise_terminal HD.
Show proof.
{x : C}
(yf : C /m x)
(H : is_z_isomorphism (pr21 yf))
: isTerminal (C /m x) yf.
Show proof.
pose (f := (_ ,, H) : z_iso _ _).
intro zg.
use iscontraprop1.
- abstract
(use invproofirrelevance ;
intros φ₁ φ₂ ;
use eq_mor_mono_cod_fib ;
use (cancel_z_iso _ _ f) ;
exact (pr2 φ₁ @ !(pr2 φ₂))).
- use make_mono_cod_fib_mor.
+ exact (mono_cod_mor zg · inv_from_z_iso f).
+ abstract
(rewrite assoc' ;
refine (_ @ id_right _) ;
apply maponpaths ;
exact (z_iso_after_z_iso_inv f)).
intro zg.
use iscontraprop1.
- abstract
(use invproofirrelevance ;
intros φ₁ φ₂ ;
use eq_mor_mono_cod_fib ;
use (cancel_z_iso _ _ f) ;
exact (pr2 φ₁ @ !(pr2 φ₂))).
- use make_mono_cod_fib_mor.
+ exact (mono_cod_mor zg · inv_from_z_iso f).
+ abstract
(rewrite assoc' ;
refine (_ @ id_right _) ;
apply maponpaths ;
exact (z_iso_after_z_iso_inv f)).
Definition mono_codomain_fib_terminal
(x : C)
: Terminal (C /m x).
Show proof.
use make_Terminal.
- exact (mono_cod_fib_id x).
- use isTerminal_mono_codomain_fib.
apply identity_is_z_iso.
- exact (mono_cod_fib_id x).
- use isTerminal_mono_codomain_fib.
apply identity_is_z_iso.
Proposition mono_codomain_fib_preserves_terminal
{x y : C}
(f : x --> y)
: preserves_terminal (mono_cod_pb HC f).
Show proof.
use preserves_terminal_if_preserves_chosen.
{
apply mono_codomain_fib_terminal.
}
unfold preserves_chosen_terminal.
use isTerminal_mono_codomain_fib.
use (is_z_iso_from_isTerminal_codomain (_ ,, _)).
use (codomain_fib_preserves_terminal HC f (_ ,, _)).
apply isTerminal_codomain_fib.
apply identity_is_z_iso.
{
apply mono_codomain_fib_terminal.
}
unfold preserves_chosen_terminal.
use isTerminal_mono_codomain_fib.
use (is_z_iso_from_isTerminal_codomain (_ ,, _)).
use (codomain_fib_preserves_terminal HC f (_ ,, _)).
apply isTerminal_codomain_fib.
apply identity_is_z_iso.
Definition mono_codomain_fiberwise_terminal
: fiberwise_terminal HD.
Show proof.
Section Prod.
Context {x : C}
{fy₁ fy₂ pz : C /m x}
(π₁ : pz --> fy₁)
(π₂ : pz --> fy₂).
Let fy₁' : C / x := mono_cod_to_cod_fib _ fy₁.
Let fy₂' : C / x := mono_cod_to_cod_fib _ fy₂.
Let pz' : C / x := mono_cod_to_cod_fib _ pz.
Let π₁' : pz' --> fy₁' := pr1 π₁.
Let π₂' : pz' --> fy₂' := pr1 π₂.
Context (H : isBinProduct (C / x) _ _ _ π₁' π₂').
Let P : BinProduct _ _ _ := make_BinProduct _ _ _ _ _ _ H.
Definition mono_codomain_fib_binproducts_prod
: isBinProduct (C /m x) _ _ _ π₁ π₂.
Show proof.
Definition mono_codomain_fib_binproducts
(x : C)
: BinProducts (C /m x).
Show proof.
Proposition mono_codomain_fib_preserves_binproduct
{x y : C}
(f : x --> y)
: preserves_binproduct (mono_cod_pb HC f).
Show proof.
Definition mono_codomain_fiberwise_binproducts
: fiberwise_binproducts HD.
Show proof.
Context {x : C}
{fy₁ fy₂ pz : C /m x}
(π₁ : pz --> fy₁)
(π₂ : pz --> fy₂).
Let fy₁' : C / x := mono_cod_to_cod_fib _ fy₁.
Let fy₂' : C / x := mono_cod_to_cod_fib _ fy₂.
Let pz' : C / x := mono_cod_to_cod_fib _ pz.
Let π₁' : pz' --> fy₁' := pr1 π₁.
Let π₂' : pz' --> fy₂' := pr1 π₂.
Context (H : isBinProduct (C / x) _ _ _ π₁' π₂').
Let P : BinProduct _ _ _ := make_BinProduct _ _ _ _ _ _ H.
Definition mono_codomain_fib_binproducts_prod
: isBinProduct (C /m x) _ _ _ π₁ π₂.
Show proof.
intros h φ ψ.
use iscontraprop1.
- abstract
(use isaproptotal2 ; [ intro ; apply isapropdirprod ; apply homset_property | ] ;
intros ;
apply locally_propositional_mono_cod_disp_cat).
- simple refine ((_ ,, tt) ,, _ ,, _).
+ exact (BinProductArrow _ P (#(mono_cod_to_cod_fib _) φ) (#(mono_cod_to_cod_fib _) ψ)).
+ apply locally_propositional_mono_cod_disp_cat.
+ apply locally_propositional_mono_cod_disp_cat.
End Prod.use iscontraprop1.
- abstract
(use isaproptotal2 ; [ intro ; apply isapropdirprod ; apply homset_property | ] ;
intros ;
apply locally_propositional_mono_cod_disp_cat).
- simple refine ((_ ,, tt) ,, _ ,, _).
+ exact (BinProductArrow _ P (#(mono_cod_to_cod_fib _) φ) (#(mono_cod_to_cod_fib _) ψ)).
+ apply locally_propositional_mono_cod_disp_cat.
+ apply locally_propositional_mono_cod_disp_cat.
Definition mono_codomain_fib_binproducts
(x : C)
: BinProducts (C /m x).
Show proof.
intros fy₁ fy₂.
pose (fy₁' := mono_cod_dom fy₁ ,, pr1 (mono_cod_mor fy₁) : C / x).
pose (fy₂' := mono_cod_dom fy₂ ,, pr1 (mono_cod_mor fy₂) : C / x).
pose (P := codomain_fib_binproducts HC x fy₁' fy₂').
use make_BinProduct.
- use make_mono_cod_fib_ob.
+ exact (cod_dom P).
+ use (make_Monic _ (cod_mor P)).
abstract
(use isMonic_comp ; [ | apply (MonicisMonic _ (monic_of_mono_in_cat fy₁)) ] ;
apply (MonicPullbackisMonic' _ _ (monic_of_mono_in_cat fy₂))).
- exact (BinProductPr1 _ P ,, tt).
- exact (BinProductPr2 _ P ,, tt).
- apply mono_codomain_fib_binproducts_prod.
apply isBinProduct_BinProduct.
pose (fy₁' := mono_cod_dom fy₁ ,, pr1 (mono_cod_mor fy₁) : C / x).
pose (fy₂' := mono_cod_dom fy₂ ,, pr1 (mono_cod_mor fy₂) : C / x).
pose (P := codomain_fib_binproducts HC x fy₁' fy₂').
use make_BinProduct.
- use make_mono_cod_fib_ob.
+ exact (cod_dom P).
+ use (make_Monic _ (cod_mor P)).
abstract
(use isMonic_comp ; [ | apply (MonicisMonic _ (monic_of_mono_in_cat fy₁)) ] ;
apply (MonicPullbackisMonic' _ _ (monic_of_mono_in_cat fy₂))).
- exact (BinProductPr1 _ P ,, tt).
- exact (BinProductPr2 _ P ,, tt).
- apply mono_codomain_fib_binproducts_prod.
apply isBinProduct_BinProduct.
Proposition mono_codomain_fib_preserves_binproduct
{x y : C}
(f : x --> y)
: preserves_binproduct (mono_cod_pb HC f).
Show proof.
use preserves_binproduct_if_preserves_chosen.
{
apply mono_codomain_fib_binproducts.
}
intros m₁ m₂.
pose (π₁ := BinProductPr1 (C /m y) (mono_codomain_fib_binproducts y m₁ m₂)).
pose (π₂ := BinProductPr2 (C /m y) (mono_codomain_fib_binproducts y m₁ m₂)).
pose (π₁' := #(mono_cod_to_cod_fib _) π₁).
pose (π₂' := #(mono_cod_to_cod_fib _) π₂).
Locate mono_cod_fiber_functor_on_mor.
rewrite !mono_cod_fiber_functor_on_mor.
use mono_codomain_fib_binproducts_prod.
use codomain_fib_preserves_binproduct.
apply isBinProduct_BinProduct.
{
apply mono_codomain_fib_binproducts.
}
intros m₁ m₂.
pose (π₁ := BinProductPr1 (C /m y) (mono_codomain_fib_binproducts y m₁ m₂)).
pose (π₂ := BinProductPr2 (C /m y) (mono_codomain_fib_binproducts y m₁ m₂)).
pose (π₁' := #(mono_cod_to_cod_fib _) π₁).
pose (π₂' := #(mono_cod_to_cod_fib _) π₂).
Locate mono_cod_fiber_functor_on_mor.
rewrite !mono_cod_fiber_functor_on_mor.
use mono_codomain_fib_binproducts_prod.
use codomain_fib_preserves_binproduct.
apply isBinProduct_BinProduct.
Definition mono_codomain_fiberwise_binproducts
: fiberwise_binproducts HD.
Show proof.
split.
- exact mono_codomain_fib_binproducts.
- exact (λ x y, mono_codomain_fib_preserves_binproduct).
End CodomainStructure.- exact mono_codomain_fib_binproducts.
- exact (λ x y, mono_codomain_fib_preserves_binproduct).