Require Import Categories_ch1_3.
Require Import Functors_ch1_4.
Require Import Isomorphisms_ch1_5.
+Require Import EpicMonic_ch2_1.
Require Import ProductCategories_ch1_6_1.
Require Import OppositeCategories_ch1_6_2.
Require Import Enrichment_ch2_8.
Require Import NaturalIsomorphisms_ch7_5.
Require Import MonoidalCategories_ch7_8.
Require Import Coherence_ch7_8.
-
-(* FIXME: an object is a Generator if its covariant representable functor is faithful *)
+Require Import BinoidalCategories.
+Require Import PreMonoidalCategories.
+Require Import MonoidalCategories_ch7_8.
Section RepresentableStructure.
Context `(ec:ECategory(mn:=mn)(V:=V)).
- Definition hom_contravariant {a:ec}{d e:ec}(f:EI~~{V}~~>(d~~>e)) := #(pmon_cancell mn _)⁻¹ >>> (f ⋉ (_ ~~> a)) >>> ecomp.
- Definition hom_covariant {a:ec}{d e:ec}(f:EI~~{V}~~>(d~~>e)) := #(pmon_cancelr mn _)⁻¹ >>> ((a ~~> d) ⋊ f) >>> ecomp.
+ Definition hom_contravariant {a:ec}{d e:ec}(f:EI~~{V}~~>(d~~>e)) := #(pmon_cancell _)⁻¹ >>> (f ⋉ (_ ~~> a)) >>> ecomp.
+ Definition hom_covariant {a:ec}{d e:ec}(f:EI~~{V}~~>(d~~>e)) := #(pmon_cancelr _)⁻¹ >>> ((a ~~> d) ⋊ f) >>> ecomp.
Lemma hom_covariant_distributes {a b c:ec}{x}(f:a~~{ec}~~>b)(g:b~~{ec}~~>c)
: hom_covariant (f >>> g) ~~ (hom_covariant (a:=x) f) >>> (hom_covariant g).
apply qq.
Qed.
- Lemma hom_contravariant_distributes {a b c:ec}{x}(f:a~~{ec}~~>b)(g:b~~{ec}~~>c)
- : hom_contravariant (f >>> g) ~~ (hom_contravariant g) >>> (hom_contravariant (a:=x) f).
- set (f >>> g) as fg; simpl in fg; unfold fg; clear fg.
- unfold hom_contravariant.
- repeat setoid_rewrite associativity.
- etransitivity; [ idtac | symmetry; apply associativity ].
- apply comp_respects; try reflexivity.
- set (@ecomp_is_functorial _ _ _ _ _ _ _ _ _ _ _ _ _ x f g) as qq.
- setoid_rewrite juggle2 in qq.
- admit.
- Qed.
-
+ (*
Lemma hom_swap {a b c d:ec}(f:a~~{ec}~~>b)(g:c~~{ec}~~>d)
: hom_covariant f >>> hom_contravariant g ~~ hom_contravariant g >>> hom_covariant f.
etransitivity.
unfold hom_covariant.
unfold hom_contravariant.
- Admitted.
+ Defined.
Definition YonedaBiFunctor_fmor (a b:ec⁽ºᑭ⁾ ×× ec)(f:a~~{ec⁽ºᑭ⁾ ×× ec}~~>b)
: ((fst_obj _ _ a)~~>(snd_obj _ _ a))~~{V}~~>((fst_obj _ _ b)~~>(snd_obj _ _ b)).
reflexivity).
Defined.
- Definition RepresentableFunctorºᑭ (X:ec) : Functor ec⁽ºᑭ⁾ V (fun a => a~~>X) := func_rlecnac X >>>> YonedaBiFunctor.
- Definition RepresentableFunctor (X:ec) : Functor ec V (fun a => X~~>a) :=
- func_llecnac(C:=ec⁽ºᑭ⁾)(D:=ec) X >>>> YonedaBiFunctor.
-
- Lemma undo_homfunctor `(f:a~~{ec}~~>b) : f ~~ eid _ >>> (RepresentableFunctor a \ f).
+ Definition HomFunctorºᑭ (X:ec) : Functor ec⁽ºᑭ⁾ V (fun a => a~~>X) := func_rlecnac X >>>> YonedaBiFunctor.
+ *)
+
+ Definition HomFunctor (X:ec) : Functor ec V (ehom X).
+ refine {| fmor := @hom_covariant X |}.
+ intros.
+ unfold hom_covariant.
+ apply comp_respects; try reflexivity.
+ apply comp_respects; try reflexivity.
+ apply fmor_respects; auto.
+ intros.
+ unfold hom_covariant.
+ apply (epic _ (iso_epic ((pmon_cancelr) (X ~~> a)))).
+ setoid_rewrite <- associativity.
+ setoid_rewrite <- associativity.
+ setoid_rewrite iso_comp1.
+ setoid_rewrite left_identity.
+ setoid_rewrite right_identity.
+ apply (@eright_identity).
+ intros.
+ symmetry.
+ apply hom_covariant_distributes.
+ Defined.
+
+ (*
+ Lemma undo_homfunctor `(f:a~~{ec}~~>b) : f ~~ eid _ >>> (HomFunctor a \ f).
simpl.
setoid_rewrite <- associativity.
unfold hom_contravariant.
set (@eqv_equivalence) as qmt.
apply qmt.
Qed.
-
+ *)
End RepresentableStructure.
-Opaque RepresentableFunctor.
-
-Structure MonoidalEnrichment :=
-{ me_enr : Enrichment
-; me_fobj : prod_obj me_enr me_enr -> me_enr
-; me_f : Functor (me_enr ×× me_enr) me_enr me_fobj
-; me_i : me_enr
-; me_mon : MonoidalCat me_enr me_fobj me_f me_i
-; me_mf : MonoidalFunctor me_mon (enr_v_mon me_enr) (RepresentableFunctor me_enr me_i)
-}.
-Coercion me_mon : MonoidalEnrichment >-> MonoidalCat.
-Coercion me_enr : MonoidalEnrichment >-> Enrichment.
+Opaque HomFunctor.
-(* an enrichment for which hom(I,-) is monoidal, full, faithful, and conservative *)
-Structure MonicMonoidalEnrichment :=
-{ ffme_enr : MonoidalEnrichment
-; ffme_mf_full : FullFunctor (RepresentableFunctor ffme_enr (me_i ffme_enr))
-; ffme_mf_faithful : FaithfulFunctor (RepresentableFunctor ffme_enr (me_i ffme_enr))
-; ffme_mf_conservative : ConservativeFunctor (RepresentableFunctor ffme_enr (me_i ffme_enr))
-}.
-Coercion ffme_enr : MonicMonoidalEnrichment >-> MonoidalEnrichment.
-Transparent RepresentableFunctor.