Library ConCaT.CATEGORY_THEORY.ADJUNCTION.CCC.Diagonal



Require Export PROD.
Require Export Functor.

Set Implicit Arguments.
Unset Strict Implicit.

Section diag.

Variable C : Category.

Definition Diag_ob (c : C) := Build_POb c c.

 Section diag_map_def.

 Variable a b : C.

 Definition Diag_mor (f : a --> b) :=
   Build_Pmor (u:=Diag_ob a) (t:=Diag_ob b) f f.

 Lemma Diag_map_law : Map_law Diag_mor.
 Proof.
 unfold Map_law, Diag_mor in |- *; simpl in |- ×.
 intros f g H; unfold Equal_Pmor in |- *; simpl in |- ×.
 split; trivial.
 Qed.

 Canonical Structure Diag_map := Build_Map Diag_map_law.

 End diag_map_def.

Lemma Diag_comp_law : Fcomp_law Diag_map.
Proof.
unfold Fcomp_law, Diag_map, Diag_mor in |- *; simpl in |- ×.
unfold Equal_Pmor in |- *; simpl in |- ×.
intros a b c f g; split; apply Refl.
Qed.

Lemma Diag_id_law : Fid_law Diag_map.
Proof.
unfold Fid_law, Diag_map, Diag_mor in |- *; simpl in |- ×.
unfold Equal_Pmor, Id_PROD in |- *; simpl in |- ×.
intro a; split; apply Refl.
Qed.

Canonical Structure Diag := Build_Functor Diag_comp_law Diag_id_law.

End diag.