Library ConCaT.CATEGORY_THEORY.ADJUNCTION.HomFunctor2
Require Export SET.
Require Export Dual.
Require Export PROD.
Require Export Functor.
Set Implicit Arguments.
Unset Strict Implicit.
Section FunSet2_r.
Variable C D : Category.
Section abrev.
Definition OB_l (dxc : POb (Dual D) C) : D := Ob_l dxc.
Variables (d1xc1 d2xc2 : POb (Dual D) C) (foxg : Pmor d1xc1 d2xc2).
Definition HOM_l : OB_l d2xc2 --> OB_l d1xc1 := Hom_l foxg.
Definition Build_POb1 (d : D) (c : C) := Build_POb (A:=Dual D) (B:=C) d c.
Definition Build_Pmor1 (c c' : C) (d d' : D) (f : d' --> d)
(g : c --> c') := Build_Pmor (u:=Build_POb1 d c) (t:=Build_POb1 d' c') f g.
End abrev.
Variable F : Functor D C.
Definition FunSET2_r_ob (dxc : POb (Dual D) C) := F (OB_l dxc) --> Ob_r dxc.
Section funset2_r_map_def.
Variable d1xc1 d2xc2 : POb (Dual D) C.
Section funset2_r_mor_def.
Variable foxg : Pmor d1xc1 d2xc2.
Definition FunSET2_r_mor1 (h : FunSET2_r_ob d1xc1) :=
(FMor F (HOM_l foxg) o h) o Hom_r foxg.
Lemma FunSET2_r_map_law1 : Map_law FunSET2_r_mor1.
Proof.
unfold Map_law, FunSET2_r_mor1 in |- *; simpl in |- ×.
intros h1 h2 H.
apply Comp_r; apply Comp_l; assumption.
Qed.
Canonical Structure FunSET2_r_mor :
Map (FunSET2_r_ob d1xc1) (FunSET2_r_ob d2xc2) := FunSET2_r_map_law1.
End funset2_r_mor_def.
Lemma FunSET2_r_map_law : Map_law FunSET2_r_mor.
Proof.
unfold Map_law, FunSET2_r_mor in |- ×.
intros f1xg1 f2xg2; elim f1xg1; intros f1 g1.
elim f2xg2; intros f2 g2; simpl in |- ×.
unfold Ext in |- *; simpl in |- ×.
unfold Equal_Pmor in |- *; simpl in |- ×.
unfold FunSET2_r_mor1 in |- *; simpl in |- ×.
unfold FunSET2_r_ob in |- ×.
intro H; elim H; intros H1 H2 h.
apply Comp_lr.
apply Comp_r; trivial.
apply FPres; assumption.
assumption.
Qed.
Canonical Structure FunSET2_r_map := Build_Map FunSET2_r_map_law.
End funset2_r_map_def.
Lemma Fun2_r_comp_law : Fcomp_law FunSET2_r_map.
Proof.
unfold Fcomp_law, FunSET2_r_map in |- *; simpl in |- ×.
unfold FunSET2_r_mor, Ext in |- *; simpl in |- ×.
unfold FunSET2_r_mor1, FunSET2_r_ob in |- *; simpl in |- ×.
intros d1xc1 d2xc2 d3xc3 f1xg1 f2xg2 h.
elim f1xg1; simpl in |- *; unfold DHom in |- *; intros f1 g1.
elim f2xg2; simpl in |- *; unfold DHom in |- *; intros f2 g2; simpl in |- ×.
apply Trans with (((FMor F (f2 o f1) o h) o g1) o g2).
apply Ass.
apply Comp_r.
apply Trans with ((FMor F f2 o FMor F f1 o h) o g1).
apply Comp_r.
apply Trans with ((FMor F f2 o FMor F f1) o h).
apply Comp_r.
apply FComp.
apply Ass1.
apply Ass1.
Qed.
Lemma Fun2_r_id_law : Fid_law FunSET2_r_map.
Proof.
unfold Fid_law, FunSET2_r_map, FunSET2_r_mor in |- *; simpl in |- ×.
unfold Ext, Id_SET in |- *; simpl in |- ×.
unfold FunSET2_r_mor1 in |- *; simpl in |- ×.
unfold FunSET2_r_ob in |- *; intros dxc f.
unfold Id_fun in |- ×.
apply Trans with (FMor F (Id (OB_l dxc)) o f).
apply Idr1.
apply Trans with (Id (F (OB_l dxc)) o f).
apply Comp_r.
apply FId.
apply Idl.
Qed.
Canonical Structure FunSET2_r := Build_Functor Fun2_r_comp_law Fun2_r_id_law.
End FunSet2_r.
Section FunSet2_l.
Variables (C D : Category) (G : Functor C D).
Definition FunSET2_l_ob (dxc : POb (Dual D) C) := OB_l dxc --> G (Ob_r dxc).
Section funset2_l_map_def.
Variable d1xc1 d2xc2 : POb (Dual D) C.
Section funset2_l_mor_def.
Variable foxg : Pmor d1xc1 d2xc2.
Definition FunSET2_l_mor1 (h : FunSET2_l_ob d1xc1) :=
(HOM_l foxg o h) o FMor G (Hom_r foxg).
Lemma FunSET2_l_map_law1 : Map_law FunSET2_l_mor1.
Proof.
unfold Map_law, FunSET2_l_mor1 in |- *; simpl in |- ×.
intros h1 h2 H.
apply Comp_r; apply Comp_l; assumption.
Qed.
Canonical Structure FunSET2_l_mor :
Map (FunSET2_l_ob d1xc1) (FunSET2_l_ob d2xc2) := FunSET2_l_map_law1.
End funset2_l_mor_def.
Lemma FunSET2_l_map_law : Map_law FunSET2_l_mor.
Proof.
unfold Map_law, FunSET2_l_mor in |- ×.
intros f1xg1 f2xg2; elim f1xg1; intros f1 g1.
elim f2xg2; intros f2 g2; simpl in |- ×.
unfold Ext in |- *; simpl in |- ×.
unfold Equal_Pmor in |- *; simpl in |- ×.
unfold FunSET2_l_mor1 in |- *; simpl in |- ×.
unfold FunSET2_l_ob in |- ×.
intro H; elim H; intros H1 H2 h.
apply Comp_lr.
apply Comp_r; trivial.
apply FPres.
assumption.
Qed.
Canonical Structure FunSET2_l_map := Build_Map FunSET2_l_map_law.
End funset2_l_map_def.
Lemma Fun2_l_comp_law : Fcomp_law FunSET2_l_map.
Proof.
unfold Fcomp_law, FunSET2_l_map in |- *; simpl in |- ×.
unfold FunSET2_l_mor, Ext in |- *; simpl in |- ×.
unfold FunSET2_l_mor1, FunSET2_l_ob in |- *; simpl in |- ×.
intros d1xc1 d2xc2 d3xc3 f1xg1 f2xg2 h.
elim f1xg1; simpl in |- *; unfold DHom in |- *; intros f1 g1.
elim f2xg2; simpl in |- *; unfold DHom in |- *; intros f2 g2; simpl in |- ×.
apply Trans with (((f2 o f1) o h) o FMor G g1 o FMor G g2).
apply Comp_l.
apply FComp.
apply Trans with ((((f2 o f1) o h) o FMor G g1) o FMor G g2).
apply Ass.
apply Comp_r.
apply Trans with ((f2 o f1 o h) o FMor G g1).
apply Comp_r.
apply Ass1.
apply Ass1.
Qed.
Lemma Fun2_l_id_law : Fid_law FunSET2_l_map.
Proof.
unfold Fid_law, FunSET2_l_map, FunSET2_l_mor in |- *; simpl in |- ×.
unfold Ext, Id_SET in |- *; simpl in |- ×.
unfold FunSET2_l_mor1 in |- *; simpl in |- ×.
unfold FunSET2_l_ob in |- *; simpl in |- *; intros dxc f.
unfold Id_fun in |- ×.
apply Trans with (Id (OB_l dxc) o f o FMor G (Id (Ob_r dxc))).
apply Ass1.
apply Trans with (f o FMor G (Id (Ob_r dxc))).
apply Idl.
apply Trans with (f o Id (G (Ob_r dxc))).
apply Comp_l; apply FId.
apply Idr1.
Qed.
Canonical Structure FunSET2_l := Build_Functor Fun2_l_comp_law Fun2_l_id_law.
End FunSet2_l.
