Processing math: 100%

Library CT.Instance.Functor.ProductFunctor

Require Import CT.Category.
Require Import CT.Functor.
Require Export CT.Instance.Functor.Bifunctor.
Require Import CT.Instance.Functor.Endofunctor.

A product functor F on a category C is a Bifunctor: F:C×CC.
Program Definition ProductFunctor (C : Category) := Bifunctor C C C.

This is just an alias for ProductFunctor. It is often used as a tensor product.
Definition Tensor := ProductFunctor.

The endofunctor y for a given tensor functor t and given yOb(C).
Program Definition _tensor {C : Category} (t : Tensor C) (y : @ob C)
  : Endofunctor C :=
  {| F_ob := fun a F_ob t (a, y);
     F_mor := fun _ _ f bimap f id
  |}.
Proof.
Next Obligation.
  unfold bimap.
  destruct t.
  simpl.
  rewrite F_id_law.
  trivial.
Qed.
Next Obligation.
  destruct t.
  simpl.
  rewrite <- F_comp_law.
  simpl.
  rewrite id_left.
  trivial.
Qed.

The endofunctor y for a given tensor functor t and given yOb(C).
Program Definition tensor_ {C : Category} (t : Tensor C) (y : @ob C)
  : Endofunctor C :=
  {| F_ob := fun a F_ob t (y, a);
     F_mor := fun _ _ f bimap id f
  |}.
Proof.
Next Obligation. apply _tensor_obligation_1. Qed.
Next Obligation.
  destruct t.
  simpl.
  rewrite <- F_comp_law.
  simpl.
  rewrite id_left.
  trivial.
Qed.