add HaskXXXXCategory, generalized arrows, and reifications
[coq-hetmet.git] / src / Reification.v
diff --git a/src/Reification.v b/src/Reification.v
new file mode 100644 (file)
index 0000000..a56ded8
--- /dev/null
@@ -0,0 +1,46 @@
+(*********************************************************************************************************************************)
+(* Reification:                                                                                                                  *)
+(*                                                                                                                               *)
+(*   A reification is a functor R from one enrichING category A to another enrichING category B which forms a commuting square   *)
+(*   with every pair of hom-functors Hom(X,-):a->A and Hom(Y,-):b->B up to natural isomorphism.                                  *)
+(*                                                                                                                               *)
+(*********************************************************************************************************************************)
+
+Generalizable All Variables.
+Require Import Preamble.
+Require Import General.
+Require Import Categories_ch1_3.
+Require Import Functors_ch1_4.
+Require Import Isomorphisms_ch1_5.
+Require Import ProductCategories_ch1_6_1.
+Require Import OppositeCategories_ch1_6_2.
+Require Import Enrichment_ch2_8.
+Require Import Subcategories_ch7_1.
+Require Import NaturalTransformations_ch7_4.
+Require Import NaturalIsomorphisms_ch7_5.
+Require Import MonoidalCategories_ch7_8.
+Require Import Coherence_ch7_8.
+Require Import Enrichment_ch2_8.
+Require Import RepresentableStructure_ch7_2.
+
+Opaque RepresentableFunctor.
+Opaque functor_comp.
+Structure Reification (K:Enrichment) (C:Enrichment) (CI:C) :=
+{ reification_r_obj     : K -> K -> C
+; reification_rstar_obj : enr_v K -> enr_v C
+; reification_r         : forall k:K, Functor K C (reification_r_obj k)
+; reification_rstar_f   :             Functor (enr_v K) (enr_v C) reification_rstar_obj
+; reification_rstar     :             MonoidalFunctor (enr_v_mon K) (enr_v_mon C) reification_rstar_f
+; reification_commutes  : forall k, reification_r k >>>> RepresentableFunctor C CI <~~~> RepresentableFunctor K k >>>> reification_rstar_f
+}.
+Transparent RepresentableFunctor.
+Transparent functor_comp.
+
+Coercion reification_rstar : Reification >-> MonoidalFunctor.
+Implicit Arguments Reification                [ ].
+Implicit Arguments reification_r_obj          [ K C CI ].
+Implicit Arguments reification_r              [ K C CI ].
+Implicit Arguments reification_rstar          [ K C CI ].
+Implicit Arguments reification_rstar_f        [ K C CI ].
+Implicit Arguments reification_commutes       [ K C CI ].
+Implicit Arguments reification_rstar_obj      [ K C CI ].