Built with Alectryon, running Coq+SerAPI v8.16.0+0.16.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.
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 T

Map_T = map2
E: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E T

Map_T = map2
E: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E T

Map_T = DerivedOperations.Map_Mapd E T
E: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E T

Map_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 T

Map_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 T

Map_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 T

Map_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 -> B

Map_T A B f = 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 -> B

Map_T A B f = map f ∘ map 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 -> B

Map_T A B f = map f ∘ (map 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 -> B

Map_T A B f = map f ∘ id
reflexivity. Qed.
E: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E T

Decorate_ET = dec2
E: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E T

Decorate_ET = dec2
E: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E T

Decorate_ET = DerivedOperations.Decorate_Mapd E T
E: Type
T: Type -> Type
Map_T: Map T
Decorate_ET: Decorate E T
H: Categorical.DecoratedFunctor.DecoratedFunctor E T

Decorate_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 T

Decorate_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 T

Decorate_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 T

Decorate_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: Type

Decorate_ET A = 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: Type

Decorate_ET A = id ∘ dec T
reflexivity. 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
Mapd_ET: Mapd E T
H: DecoratedFunctor E T

Mapd_ET = mapd2
E: Type
T: Type -> Type
Mapd_ET: Mapd E T
H: DecoratedFunctor E T

Mapd_ET = mapd2
E: Type
T: Type -> Type
Mapd_ET: Mapd E T
H: DecoratedFunctor E T

Mapd_ET = DerivedOperations.Mapd_Categorical E T
E: Type
T: Type -> Type
Mapd_ET: Mapd E T
H: DecoratedFunctor E T

Mapd_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 T

Mapd_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 T

Mapd_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 T

Mapd_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 T

Mapd_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 T

Mapd_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 T

Mapd_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 -> B

Mapd_ET A B f = 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 -> B

Mapd_ET A B f = 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 -> B

Mapd_ET A B f = mapd (f ∘ extract ⋆1 id)
E: Type
T: Type -> Type
Mapd_ET: Mapd E T
H: DecoratedFunctor E T
A, B: Type
f: E * A -> B

Mapd_ET A B f = mapd (f ∘ id)
reflexivity. Qed. End decorated_functor_kleisli_categorical_kleisli.