From Tealeaves Require Import Functor Classes.Categorical.DecoratedFunctor Classes.Kleisli.DecoratedFunctor Adapters.CategoricalToKleisli.DecoratedFunctor Adapters.KleisliToCategorical.DecoratedFunctor. Import Product.Notations. Import Functor.Notations. Import Comonad.Notations. #[local] Generalizable Variable T. (** * Categorical ~> Kleisli ~> Categorical *) (**********************************************************************) Section decorated_functor_categorical_kleisli_categorical. Context (E: Type) (T: Type -> Type) `{Map_T: Map T} `{Decorate_ET: Decorate E T} `{! Categorical.DecoratedFunctor.DecoratedFunctor E T}. Definition mapd': Mapd E T := DerivedOperations.Mapd_Categorical E T. Definition map2: Map T := DerivedOperations.Map_Mapd E T (Mapd_ET := mapd'). Definition dec2: Decorate E T := DerivedOperations.Decorate_Mapd E T (Mapd_ET := mapd').E: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E TMap_T = map2E: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E TMap_T = map2E: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E TMap_T = DerivedOperations.Map_Mapd E TE: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E TMap_T = (fun (A B : Type) (f : A -> B) => mapd (f ∘ extract))E: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E TMap_T = (fun (A B : Type) (f : A -> B) => mapd' A B (f ∘ extract))E: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E TMap_T = (fun (A B : Type) (f : A -> B) => DerivedOperations.Mapd_Categorical E T A B (f ∘ extract))E: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E TMap_T = (fun (A B : Type) (f : A -> B) => map (f ∘ extract) ∘ dec T)E: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E T
A, B: Type
f: A -> BMap_T A B f = map (f ∘ extract) ∘ dec TE: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E T
A, B: Type
f: A -> BMap_T A B f = map f ∘ map extract ∘ dec TE: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E T
A, B: Type
f: A -> BMap_T A B f = map f ∘ (map extract ∘ dec T)reflexivity. Qed.E: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E T
A, B: Type
f: A -> BMap_T A B f = map f ∘ idE: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E TDecorate_ET = dec2E: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E TDecorate_ET = dec2E: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E TDecorate_ET = DerivedOperations.Decorate_Mapd E TE: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E TDecorate_ET = (fun A : Type => mapd id)E: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E TDecorate_ET = (fun A : Type => mapd' A (E * A) id)E: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E TDecorate_ET = (fun A : Type => DerivedOperations.Mapd_Categorical E T A (E * A) id)E: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E TDecorate_ET = (fun A : Type => map id ∘ dec T)E: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E T
A: TypeDecorate_ET A = map id ∘ dec Treflexivity. Qed. End decorated_functor_categorical_kleisli_categorical. (** * Kleisli ~> Categorical ~> Kleisli *) (**********************************************************************) Section decorated_functor_kleisli_categorical_kleisli. Context (E: Type) (T: Type -> Type) `{Mapd_ET: Mapd E T} `{! Kleisli.DecoratedFunctor.DecoratedFunctor E T}. Definition map': Map T := DerivedOperations.Map_Mapd E T. Definition dec': Decorate E T := DerivedOperations.Decorate_Mapd E T. Definition mapd2: Mapd E T := DerivedOperations.Mapd_Categorical E T (Map_F := map') (Decorate_EF := dec').E: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E T
A: TypeDecorate_ET A = id ∘ dec TE: Type
T: Type -> Type
Mapd_ET: Mapd E T
H: DecoratedFunctor E TMapd_ET = mapd2E: Type
T: Type -> Type
Mapd_ET: Mapd E T
H: DecoratedFunctor E TMapd_ET = mapd2E: Type
T: Type -> Type
Mapd_ET: Mapd E T
H: DecoratedFunctor E TMapd_ET = DerivedOperations.Mapd_Categorical E TE: Type
T: Type -> Type
Mapd_ET: Mapd E T
H: DecoratedFunctor E TMapd_ET = (fun (A B : Type) (f : E * A -> B) => map f ∘ dec T)E: Type
T: Type -> Type
Mapd_ET: Mapd E T
H: DecoratedFunctor E TMapd_ET = (fun (A B : Type) (f : E * A -> B) => map' (E * A) B f ∘ dec T)E: Type
T: Type -> Type
Mapd_ET: Mapd E T
H: DecoratedFunctor E TMapd_ET = (fun (A B : Type) (f : E * A -> B) => DerivedOperations.Map_Mapd E T (E * A) B f ∘ dec T)E: Type
T: Type -> Type
Mapd_ET: Mapd E T
H: DecoratedFunctor E TMapd_ET = (fun (A B : Type) (f : E * A -> B) => mapd (f ∘ extract) ∘ dec T)E: Type
T: Type -> Type
Mapd_ET: Mapd E T
H: DecoratedFunctor E TMapd_ET = (fun (A B : Type) (f : E * A -> B) => mapd (f ∘ extract) ∘ dec' A)E: Type
T: Type -> Type
Mapd_ET: Mapd E T
H: DecoratedFunctor E TMapd_ET = (fun (A B : Type) (f : E * A -> B) => mapd (f ∘ extract) ∘ DerivedOperations.Decorate_Mapd E T A)E: Type
T: Type -> Type
Mapd_ET: Mapd E T
H: DecoratedFunctor E TMapd_ET = (fun (A B : Type) (f : E * A -> B) => mapd (f ∘ extract) ∘ mapd id)E: Type
T: Type -> Type
Mapd_ET: Mapd E T
H: DecoratedFunctor E T
A, B: Type
f: E * A -> BMapd_ET A B f = mapd (f ∘ extract) ∘ mapd idE: Type
T: Type -> Type
Mapd_ET: Mapd E T
H: DecoratedFunctor E T
A, B: Type
f: E * A -> BMapd_ET A B f = mapd (f ∘ extract) ∘ mapd idE: Type
T: Type -> Type
Mapd_ET: Mapd E T
H: DecoratedFunctor E T
A, B: Type
f: E * A -> BMapd_ET A B f = mapd (f ∘ extract ⋆1 id)reflexivity. Qed. End decorated_functor_kleisli_categorical_kleisli.E: Type
T: Type -> Type
Mapd_ET: Mapd E T
H: DecoratedFunctor E T
A, B: Type
f: E * A -> BMapd_ET A B f = mapd (f ∘ id)