Section Prod_Func_Hom_Func_NT.
Context {A B C D : Category}
{F : A –≻ C^op}
{F' : A –≻ D^op}
{G : B –≻ C}
{G' : B –≻ D}
(N : (((Hom_Func C) ∘ (Prod_Functor F G))
–≻ ((Hom_Func D) ∘ (Prod_Functor F' G')))%nattrans
)
.
Local Obligation Tactic := idtac.
(** Given a natural transformation from ((Hom_Func C) ∘ (Prod_Functor F G)) to ((Hom_Func D) ∘ (Prod_Functor F' G')), we construct a natural transformation from ((Hom_Func C^op) ∘ (Prod_Functor G F)) to ((Hom_Func D^op) ∘ (Prod_Functor G' F')). *)
Program Definition Prod_Func_Hom_Func_NT :
(((Hom_Func (C^op)) ∘ (Prod_Functor G F))
–≻ ((Hom_Func (D^op)) ∘ (Prod_Functor G' F')))%nattrans :=
{|
Trans := fun c h => Trans N (snd c, fst c) h
|}.
Next Obligation.
Next Obligation.
End Prod_Func_Hom_Func_NT.
Section Prod_Func_Hom_Func.
Context {A B C D : Category}
{F : A –≻ C^op}
{F' : A –≻ D^op}
{G : B –≻ C}
{G' : B –≻ D}
(N : (
((Hom_Func C) ∘ (Prod_Functor F G))%functor
≃ ((Hom_Func D) ∘ (Prod_Functor F' G'))%functor
)%natiso
)
.
Local Ltac TRC :=
match goal with
[|- ?W = _] =>
match W with
Trans ?A ?X (Trans ?B ?X ?Z) =>
change W with (Trans (NatTrans_compose B A) X Z)
end
end.
Local Obligation Tactic :=
apply NatTrans_eq_simplify; FunExt; basic_simpl; TRC;
solve [(cbn_rewrite (right_inverse N); trivial) |
(cbn_rewrite (left_inverse N); trivial)].
(** Given a natural isomorphism ((Hom_Func C) ∘ (Prod_Functor F G)) ≃ ((Hom_Func D) ∘ (Prod_Functor F' G')), we construct a natural ismorphism ((Hom_Func C^op) ∘ (Prod_Functor G F)) ≃ ((Hom_Func D^op) ∘ (Prod_Functor G' F')) *)
Program Definition Prod_Func_Hom_Func :
((((Hom_Func (C^op)) ∘ (Prod_Functor G F))%functor)
≃ ((Hom_Func (D^op)) ∘ (Prod_Functor G' F'))%functor)%natiso
:=
{|
iso_morphism := Prod_Func_Hom_Func_NT (iso_morphism N);
inverse_morphism := Prod_Func_Hom_Func_NT (inverse_morphism N)
|}
.
End Prod_Func_Hom_Func.
Section Prod_Func_Hom_Func_invl.
Context {A B C D : Category}
{F : A –≻ C^op}
{F' : A –≻ D^op}
{G : B –≻ C}
{G' : B –≻ D}
(N :
(
((Hom_Func C) ∘ (Prod_Functor F G))%functor
≃ ((Hom_Func D) ∘ (Prod_Functor F' G'))%functor
)%natiso
)
.

(* Specifications: *)
(** Prod_Func_Hom_Func defined above is involutive. *)
Theorem Prod_Func_Hom_Func_invl :
N = Prod_Func_Hom_Func (Prod_Func_Hom_Func N).