Library ConCaT.CATEGORY_THEORY.ADJUNCTION.Limit_Adj



Require Export Adj_UA.
Require Export Pres_Limits.

Set Implicit Arguments.
Unset Strict Implicit.


Section ladj_pres.

Variables (C D : Category) (G : Functor C D) (la : LeftAdj G)
  (J : Category) (H : Functor J C) (l : Limit H).


 Section lp_diese.

 Variables (d : D) (tau : Cone d (H o_F G)).

 Definition Lp_sigma_tau (i : J) := ApAphi_inv la (tau i:d --> G (H i)).


 Lemma Lp_sigma_tau_cone_law : Cone_law Lp_sigma_tau.
 Proof.
 unfold Cone_law, Lp_sigma_tau in |- ×.
 intros i j g.
apply Trans with (ApAphi_inv la (tau i o FMor G (FMor H g))).
 apply Aphi_invPres.
 apply (Eq_cone tau g).
 apply (Adj_eq5 la (FMor H g) (tau i)).
 Qed.

 Definition Lp_sigma := Build_Cone Lp_sigma_tau_cone_law.


 Definition Lp_diese : d --> G (Lim l) := ApAphi la (Lim_diese l Lp_sigma).

 End lp_diese.

Lemma Lp_coUAlaw1 : Limit_law1 (Limiting_cone l o_C G) Lp_diese.
Proof.
unfold Limit_law1, Limit_eq in |- *; simpl in |- *; intros d tau i.
unfold Comp_cone_tau, Lp_diese in |- ×.
apply
       Trans
        with (ApAphi la (Lim_diese l (Lp_sigma tau) o Limiting_cone l i)).
apply Sym.
apply (Adj_eq3 la (Limiting_cone l i) (Lim_diese l (Lp_sigma tau))).
apply Trans with (ApAphi la (ApAphi_inv (c:=H i) la (tau i))).
unfold Comp_FOb in |- *; apply AphiPres.
apply (Prf_limit1 l (Lp_sigma tau) i).
apply (Idl_inv (NTa_areIso la (Build_POb1 d (H i))) (tau i)).
Qed.

Lemma Lp_coUAlaw2 : Limit_law2 (Limiting_cone l o_C G) Lp_diese.
Proof.
unfold Limit_law2, Limit_eq in |- *; simpl in |- *; intros d tau t.
unfold Comp_cone_tau, Lp_diese in |- ×.
intro H'.
apply Trans with (ApAphi la (ApAphi_inv la t)).
apply Sym.
apply (Idl_inv (NTa_areIso la (Build_POb1 d (Lim l))) t).
apply AphiPres; apply (Prf_limit2 l).
unfold Limit_eq in |- *; intro i.
apply Trans with (ApAphi_inv la (t o FMor G (Limiting_cone l i))).
apply Sym.
apply (Adj_eq5 la (Limiting_cone l i) t).
simpl in |- *; unfold Lp_sigma_tau in |- *; apply Aphi_invPres; apply (H' i).
Qed.

Lemma Ladj_Pres1 : Preserves_1limit G l.
Proof.
apply (Build_IsLimit Lp_coUAlaw1 Lp_coUAlaw2).
Defined.

End ladj_pres.


Lemma Ladj_continuous :
  (C D : Category) (G : Functor C D), LeftAdj GContinuous G.
Proof.
unfold Continuous, Preserves_limits in |- *; intros C D G la J H l.
apply (Ladj_Pres1 la l).
Defined.