1 (*********************************************************************************************************************************)
2 (* GeneralizedArrowFromReification: *)
4 (* Turn a generalized arrow into a reification *)
6 (*********************************************************************************************************************************)
8 Generalizable All Variables.
9 Require Import Preamble.
10 Require Import General.
11 Require Import Categories_ch1_3.
12 Require Import Functors_ch1_4.
13 Require Import Isomorphisms_ch1_5.
14 Require Import ProductCategories_ch1_6_1.
15 Require Import OppositeCategories_ch1_6_2.
16 Require Import Enrichment_ch2_8.
17 Require Import Subcategories_ch7_1.
18 Require Import NaturalTransformations_ch7_4.
19 Require Import NaturalIsomorphisms_ch7_5.
20 Require Import MonoidalCategories_ch7_8.
21 Require Import Coherence_ch7_8.
22 Require Import Enrichment_ch2_8.
23 Require Import RepresentableStructure_ch7_2.
24 Require Import Reification.
25 Require Import GeneralizedArrow.
27 Section GArrowFromReification.
29 Context (K:SurjectiveEnrichment) (C:MonicMonoidalEnrichment) (reification : Reification K C (me_i C)).
31 Fixpoint garrow_fobj_ vk : C :=
33 | T_Leaf None => me_i C
34 | T_Leaf (Some a) => match a with (a1,a2) => reification_r reification a1 a2 end
35 | t1,,t2 => me_f C (pair_obj (garrow_fobj_ t1) (garrow_fobj_ t2))
38 Definition garrow_fobj vk := garrow_fobj_ (projT1 (se_decomp K vk)).
40 Definition homset_tensor_iso
41 : forall vk:enr_v_mon K, (reification_rstar reification vk) ≅ ehom(ECategory:=C) (me_i C) (garrow_fobj vk).
44 set (se_decomp K vk) as sevk.
55 apply (ni_iso (reification_commutes reification e) e0).
59 apply (mf_id (reification_rstar reification)).
60 apply (mf_id (me_mf C)).
64 apply (ni_iso (mf_coherence (reification_rstar reification)) (pair_obj _ _)).
67 apply (ni_iso (mf_coherence (me_mf C)) (pair_obj _ _)).
69 apply (functors_preserve_isos (enr_v_f C) (a:=(pair_obj _ _))(b:=(pair_obj _ _))).
70 apply (iso_prod IHx1 IHx2).
73 Definition garrow_fobj' (vk:enr_v_mon K) : FullImage (RepresentableFunctor C (me_i C)).
74 exists (ehom(ECategory:=C) (me_i C) (garrow_fobj vk)).
75 abstract (exists (garrow_fobj vk); auto).
78 Definition step1_mor {a b}(f:a~~{enr_v_mon K}~~>b) : (garrow_fobj' a)~~{FullImage (RepresentableFunctor C (me_i C))}~~>(garrow_fobj' b).
79 exists (iso_backward (homset_tensor_iso a)
80 >>> reification_rstar reification \ f
81 >>> iso_forward (homset_tensor_iso b)).
85 Definition step1_functor : Functor (enr_v_mon K) (FullImage (RepresentableFunctor C (me_i C))) garrow_fobj'.
86 refine {| fmor := fun a b f => step1_mor f |}.
87 abstract (intros; unfold step1_mor; simpl;
88 apply comp_respects; try reflexivity;
89 apply comp_respects; try reflexivity;
90 apply fmor_respects; auto).
91 abstract (intros; unfold step1_mor; simpl;
92 setoid_rewrite fmor_preserves_id;
93 setoid_rewrite right_identity;
98 repeat setoid_rewrite <- associativity;
99 apply comp_respects; try reflexivity;
100 repeat setoid_rewrite associativity;
101 apply comp_respects; try reflexivity;
102 setoid_rewrite juggle2;
103 set (iso_comp1 (homset_tensor_iso b)) as qqq;
106 setoid_rewrite right_identity;
107 apply (fmor_preserves_comp reification)).
110 Definition step1_niso : reification ≃ step1_functor >>>> InclusionFunctor _ (FullImage (RepresentableFunctor C (me_i C))).
111 exists (fun c1 => homset_tensor_iso c1).
114 repeat setoid_rewrite <- associativity;
115 setoid_rewrite iso_comp1;
116 setoid_rewrite left_identity;
119 Opaque homset_tensor_iso.
121 Definition step2_functor := ff_functor_section_functor _ (ffme_mf_full C) (ffme_mf_faithful C).
123 Definition garrow_functor := step1_functor >>>> step2_functor.
125 Definition garrow_from_reification : GeneralizedArrow K C.
126 refine {| ga_functor := garrow_functor |}.
130 End GArrowFromReification.
131 Opaque homset_tensor_iso.