update to new coq-categories, base ND_Relation on inert sequences
[coq-hetmet.git] / src / ProgrammingLanguageArrow.v
1 (*********************************************************************************************************************************)
2 (* ProgrammingLanguageArrow                                                                                                      *)
3 (*                                                                                                                               *)
4 (*   Arrows in ProgrammingLanguages.                                                                                             *)
5 (*                                                                                                                               *)
6 (*********************************************************************************************************************************)
7
8 Generalizable All Variables.
9 Require Import Preamble.
10 Require Import General.
11 Require Import Categories_ch1_3.
12 Require Import InitialTerminal_ch2_2.
13 Require Import Functors_ch1_4.
14 Require Import Isomorphisms_ch1_5.
15 Require Import ProductCategories_ch1_6_1.
16 Require Import OppositeCategories_ch1_6_2.
17 Require Import Enrichment_ch2_8.
18 Require Import Subcategories_ch7_1.
19 Require Import NaturalTransformations_ch7_4.
20 Require Import NaturalIsomorphisms_ch7_5.
21 Require Import MonoidalCategories_ch7_8.
22 Require Import Coherence_ch7_8.
23 Require Import Enrichment_ch2_8.
24 Require Import RepresentableStructure_ch7_2.
25 Require Import FunctorCategories_ch7_7.
26
27 Require Import NaturalDeduction.
28 Require Import NaturalDeductionCategory.
29
30 Require Import ProgrammingLanguage.
31 Require Import ProgrammingLanguageGeneralizedArrow.
32 Require Import FreydCategories.
33
34 Require Import GeneralizedArrow.
35
36 Section ArrowInLanguage.
37
38   (* an Arrow In A Programming Language consists of... *)
39
40   (* a host language: *)
41   Context `(Host:ProgrammingLanguage).
42
43   (* ... for which Types(L) is cartesian: *)
44   Context {MF}(center_of_TypesL:MonoidalCat (TypesL _ _ Host) (fun x => (fst_obj _ _ x),,(snd_obj _ _ x)) MF []).
45
46   (* along with a monoidal subcategory of Z(Types(L)) *)
47   Context (VK:MonoidalSubCat center_of_TypesL).
48
49   (* a premonoidal category enriched in aforementioned full subcategory *)
50   Context (Kehom:center_of_TypesL -> center_of_TypesL -> @ob _ _ VK).
51
52   Context (KE:@ECategory (@ob _ _ VK) (@hom _ _ VK) VK _ VK
53                (mon_i (full_subcat_is_monoidal VK)) (full_subcat_is_monoidal VK) center_of_TypesL Kehom).
54
55   Context {kbo:center_of_TypesL -> center_of_TypesL -> center_of_TypesL}.
56
57   Context (kbc:@BinoidalCat center_of_TypesL _ (Underlying KE) kbo).
58
59   Check (@PreMonoidalCat)
60   Definition one' := @one _ _ _ (car_terminal(CartesianCat:=CC))
61   Context (K:@PreMonoidalCat _ _ KE kbo kbc ).
62   Context (CC:CartesianCat center_of_TypesL).
63
64   (*
65   Definition K_enrichment : Enrichment.
66     refine {| enr_c := KE |}.
67     Defined.
68   Context (K_surjective:SurjectiveEnrichment K_enrichment).
69     *)
70
71   Definition ArrowInProgrammingLanguage :=
72     @FreydCategory _ _ _ _ _ _ center_of_TypesL _ _ _ _ K.
73
74   Definition ArrowsAreGeneralizedArrows (arrow:ArrowInProgrammingLanguage) : GeneralizedArrow K_enrichment Host.
75     refine {| ga_functor_monoidal := inclusion_functor_monoidal VK |}.
76     Defined.
77
78 End GArrowInLanguage.