End adjoint_ua_map_def.
(* unicite' de # pour <cd,ud> : *)
(* qq a':C. qq f':d->Ga'. qq g:cd->a'. *)
(* ud o Gg = f' => g=f'# *)
(* appliquer unicite' pour (Id(d) o ud) et Id(cd) *)

(* Specifications: *)
Lemma AdjointUA_id_law : Fid_law AdjointUA_map.
(* revient a` prouver: ((f o g) o ud3)#1 = (f o ud2)#1 o (g o ud3)#2 *)
(* unicite' ud1 avec ((f o g) o ud3) et (f o ud2)#1 o (g o ud3)#2 *)
(* revient a` dem: ud1 o G((f o ud2)#1 o (g o ud3)#2) = (f o g) o ud3 *)
(*                            (1)   *)
(* (1) = (ud1 o G((f o ud2)#1)) o G((g o ud3)#2) (Fcomplaw) *)
(*     = (f o ud2) o G((g o ud3)#2)              (loi #1) *)
(*     = f o (g o ud3)                           (loi #2) *)
(* cqfd *)
Lemma AdjointUA_comp_law : Fcomp_law AdjointUA_map.
Canonical Structure AdjointUA :=
Build_Functor AdjointUA_comp_law AdjointUA_id_law.