(** 1 × a ≃ a. where 1 is the terminal object. *)
Section Term_Prod.
Context {C : Category} {term : (𝟙_ C)%object} {CHP : Has_Products C}.
Local Notation "1" := (terminal term) : object_scope.
Local Notation "a × b" := (CHP a b) : object_scope.
(** Natural transformations to be used with Yoneda. *)
Program Definition Term_Prod_lr (a : C) :
((((Yoneda C) _o (a × 1))%object)
–≻ ((Yoneda C) _o a)%object)%nattrans
:=
{|
Trans := fun b f => @compose C _ _ _ f (@Pi_1 _ _ _ (CHP a term))
|}.
Program Definition Term_Prod_rl (a : C) :
((((Yoneda C) _o a)%object)
–≻ ((Yoneda C) _o (a × 1))%object)%nattrans
:=
{|
Trans := fun b f =>  @Prod_morph_ex C _ _ _ _ f (@t_morph C _ b)
|}.
Next Obligation. (* Trans_com *)
Next Obligation. (* Trans_com *)

(* Specifications: *)
Theorem Term_Prod (a : C) : (((×ᶠⁿᶜ C) _o (a, 1)%object) ≃ a)%isomorphism.
End Term_Prod.