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
  Classes.Kleisli.DecoratedTraversableFunctor
  Classes.Categorical.DecoratedTraversableFunctor.

Import Comonad.Notations.
Import Product.Notations.

#[local] Generalizable Variables G ϕ.

(** * Categorical DTFs from Kleisli DTFs *)
(**********************************************************************)

(** ** Derived Operations *)
(**********************************************************************)
Module DerivedOperations.
  Section operations.

    Context
      (E: Type)
      (T: Type -> Type)
      `{Mapdt E T}.

    #[export] Instance Dist_Mapdt: ApplicativeDist T :=
      fun G _ _ _ A =>
        mapdt (T := T) (G := G) (extract (W := (E ×)) (A := G A)).

    #[export] Instance Decorate_Mapdt: Decorate E T :=
      fun A => mapdt (G := fun A => A) (@id (E * A)).

  End operations.
End DerivedOperations.

(** ** Derived Instances *)
(**********************************************************************)
Module DerivedInstances.

  (* Alectryon doesn't like this
     Import KleisliToCategorical.DecoratedTraversableFunctor.DerivedOperations.
   *)
  Import DerivedOperations.
  Import Kleisli.DecoratedTraversableFunctor.DerivedOperations.
  Import Kleisli.DecoratedTraversableFunctor.DerivedInstances.

  Section instances.

    Context
      (E: Type)
      (T: Type -> Type)
      `{Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T}.

    
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T

forall A : Type, dec T ∘ dec T = map cojoin ∘ dec T
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T

forall A : Type, dec T ∘ dec T = map cojoin ∘ dec T
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
A: Type

dec T ∘ dec T = map cojoin ∘ dec T
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
A: Type

mapdt id ∘ mapdt id = map cojoin ∘ mapdt id
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
A: Type

mapd id ∘ mapdt id = map cojoin ∘ mapdt id
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
A: Type

mapd id ∘ mapd id = map cojoin ∘ mapd id
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
A: Type

mapd (id ⋆1 id) = map cojoin ∘ mapd id
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
A: Type

mapd (id ⋆1 id) = mapd (cojoin ∘ id)
reflexivity. Qed.
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T

forall A : Type, map extract ∘ dec T = id
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T

forall A : Type, map extract ∘ dec T = id
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
A: Type

map extract ∘ dec T = id
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
A: Type

map extract ∘ mapdt id = id
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
A: Type

map extract ∘ mapd id = id
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
A: Type

mapd (extract ∘ id) = id
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
A: Type

mapd extract = id
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
A: Type

id = id
reflexivity. Qed.
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T

Natural (@dec E T (Decorate_Mapdt E T))
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T

Natural (@dec E T (Decorate_Mapdt E T))
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T

Functor T
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
Functor (T ○ prod E)
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
forall (A B : Type) (f : A -> B), map f ∘ dec T = dec T ∘ map f
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T

Functor T
typeclasses eauto.
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T

Functor (T ○ prod E)
typeclasses eauto.
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T

forall (A B : Type) (f : A -> B), map f ∘ dec T = dec T ∘ map f
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
A, B: Type
f: A -> B

map f ∘ dec T = dec T ∘ map f
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
A, B: Type
f: A -> B

map (map f) ∘ dec T = dec T ∘ map f
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
A, B: Type
f: A -> B

map (map f) ∘ mapdt id = mapdt id ∘ map f
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
A, B: Type
f: A -> B

map (map f) ∘ mapd id = mapdt id ∘ map f
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
A, B: Type
f: A -> B

map (map f) ∘ mapd id = mapd id ∘ map f
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
A, B: Type
f: A -> B

mapd (map f ∘ id) = mapd id ∘ map f
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
A, B: Type
f: A -> B

mapd (map f ∘ id) = mapd (id ∘ map f)
reflexivity. Qed. #[export] Instance DecoratedFunctor_Categorical_Kleisli: Categorical.DecoratedFunctor.DecoratedFunctor E T := {| dfun_dec_natural := dec_natural; dfun_dec_dec := dec_dec; dfun_dec_extract := dec_extract; |}. (** *** Traversable functor instance *) (******************************************************************)
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T

forall (G : Type -> Type) (H2 : Map G) (H3 : Pure G) (H4 : Mult G), Applicative G -> Natural (@dist T (Dist_Mapdt E T) G H2 H3 H4)
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T

forall (G : Type -> Type) (H2 : Map G) (H3 : Pure G) (H4 : Mult G), Applicative G -> Natural (@dist T (Dist_Mapdt E T) G H2 H3 H4)
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G

Natural (@dist T (Dist_Mapdt E T) G H2 H3 H4)
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G

Functor (T ○ G)
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G
Functor (G ○ T)
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G
forall (A B : Type) (f : A -> B), map f ∘ dist T G = dist T G ∘ map f
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G

Functor (T ○ G)
typeclasses eauto.
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G

Functor (G ○ T)
typeclasses eauto.
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G

forall (A B : Type) (f : A -> B), map f ∘ dist T G = dist T G ∘ map f
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G
A, B: Type
f: A -> B

map f ∘ dist T G = dist T G ∘ map f
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G
A, B: Type
f: A -> B

map (map f) ∘ dist T G = dist T G ∘ map (map f)
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G
A, B: Type
f: A -> B

map (map f) ∘ mapdt extract = mapdt extract ∘ map (map f)
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G
A, B: Type
f: A -> B

mapdt (map f ∘ extract) = mapdt extract ∘ map (map f)
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G
A, B: Type
f: A -> B

mapdt (map f ∘ extract) = mapdt (extract ∘ map (map f))
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G
A, B: Type
f: A -> B

mapdt (map f ∘ extract) = mapdt (map (map f) ∘ extract)
reflexivity. Qed.
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T

forall (G1 G2 : Type -> Type) (H1 : Map G1) (H2 : Mult G1) (H3 : Pure G1) (H4 : Map G2) (H5 : Mult G2) (H6 : Pure G2) (ϕ : forall A : Type, G1 A -> G2 A), ApplicativeMorphism G1 G2 ϕ -> forall A : Type, dist T G2 ∘ map (ϕ A) = ϕ (T A) ∘ dist T G1
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T

forall (G1 G2 : Type -> Type) (H1 : Map G1) (H2 : Mult G1) (H3 : Pure G1) (H4 : Map G2) (H5 : Mult G2) (H6 : Pure G2) (ϕ : forall A : Type, G1 A -> G2 A), ApplicativeMorphism G1 G2 ϕ -> forall A : Type, dist T G2 ∘ map (ϕ A) = ϕ (T A) ∘ dist T G1
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G1, G2: Type -> Type
H1: Map G1
H2: Mult G1
H3: Pure G1
H4: Map G2
H5: Mult G2
H6: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
H7: ApplicativeMorphism G1 G2 ϕ
A: Type

dist T G2 ∘ map (ϕ A) = ϕ (T A) ∘ dist T G1
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G1, G2: Type -> Type
H1: Map G1
H2: Mult G1
H3: Pure G1
H4: Map G2
H5: Mult G2
H6: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
H7: ApplicativeMorphism G1 G2 ϕ
A: Type

dist T G2 ∘ map (ϕ A) = ϕ (T A) ∘ dist T G1
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G1, G2: Type -> Type
H1: Map G1
H2: Mult G1
H3: Pure G1
H4: Map G2
H5: Mult G2
H6: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
H7: ApplicativeMorphism G1 G2 ϕ
A: Type

mapdt extract ∘ map (ϕ A) = ϕ (T A) ∘ mapdt extract
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G1, G2: Type -> Type
H1: Map G1
H2: Mult G1
H3: Pure G1
H4: Map G2
H5: Mult G2
H6: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
H7: ApplicativeMorphism G1 G2 ϕ
A: Type
app1: Applicative G1
app2: Applicative G2

mapdt extract ∘ map (ϕ A) = ϕ (T A) ∘ mapdt extract
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G1, G2: Type -> Type
H1: Map G1
H2: Mult G1
H3: Pure G1
H4: Map G2
H5: Mult G2
H6: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
H7: ApplicativeMorphism G1 G2 ϕ
A: Type
app1: Applicative G1
app2: Applicative G2

mapdt (extract ∘ map (ϕ A)) = ϕ (T A) ∘ mapdt extract
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G1, G2: Type -> Type
H1: Map G1
H2: Mult G1
H3: Pure G1
H4: Map G2
H5: Mult G2
H6: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
H7: ApplicativeMorphism G1 G2 ϕ
A: Type
app1: Applicative G1
app2: Applicative G2

mapdt (map (ϕ A) ∘ extract) = ϕ (T A) ∘ mapdt extract
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G1, G2: Type -> Type
H1: Map G1
H2: Mult G1
H3: Pure G1
H4: Map G2
H5: Mult G2
H6: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
H7: ApplicativeMorphism G1 G2 ϕ
A: Type
app1: Applicative G1
app2: Applicative G2

mapdt (map (ϕ A) ∘ extract) = mapdt (ϕ A ∘ extract)
reflexivity. Qed.
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T

forall A : Type, dist T (fun A0 : Type => A0) = id
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T

forall A : Type, dist T (fun A0 : Type => A0) = id
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
A: Type

dist T (fun A0 : Type => A0) = id
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
A: Type

mapdt extract = id
now rewrite (kdtf_mapdt1 (E := E) (T := T)). Qed. (* TODO Typeset this better *)
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T

forall (G1 : Type -> Type) (H2 : Map G1) (H3 : Pure G1) (H4 : Mult G1), Applicative G1 -> forall (G2 : Type -> Type) (H6 : Map G2) (H7 : Pure G2) (H8 : Mult G2), Applicative G2 -> forall A : Type, dist T (G1 ∘ G2) = map (dist T G2) ∘ dist T G1
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T

forall (G1 : Type -> Type) (H2 : Map G1) (H3 : Pure G1) (H4 : Mult G1), Applicative G1 -> forall (G2 : Type -> Type) (H6 : Map G2) (H7 : Pure G2) (H8 : Mult G2), Applicative G2 -> forall A : Type, dist T (G1 ∘ G2) = map (dist T G2) ∘ dist T G1
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G1: Type -> Type
H2: Map G1
H3: Pure G1
H4: Mult G1
H1: Applicative G1
G2: Type -> Type
H6: Map G2
H7: Pure G2
H8: Mult G2
H5: Applicative G2
A: Type

dist T (G1 ∘ G2) = map (dist T G2) ∘ dist T G1
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G1: Type -> Type
H2: Map G1
H3: Pure G1
H4: Mult G1
H1: Applicative G1
G2: Type -> Type
H6: Map G2
H7: Pure G2
H8: Mult G2
H5: Applicative G2
A: Type

mapdt extract = map (mapdt extract) ∘ mapdt extract
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G1: Type -> Type
H2: Map G1
H3: Pure G1
H4: Mult G1
H1: Applicative G1
G2: Type -> Type
H6: Map G2
H7: Pure G2
H8: Mult G2
H5: Applicative G2
A: Type

mapdt extract = mapdt (kc3 extract extract)
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G1: Type -> Type
H2: Map G1
H3: Pure G1
H4: Mult G1
H1: Applicative G1
G2: Type -> Type
H6: Map G2
H7: Pure G2
H8: Mult G2
H5: Applicative G2
A: Type

mapdt extract = mapdt (kc3 (id ∘ extract) extract)
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G1: Type -> Type
H2: Map G1
H3: Pure G1
H4: Mult G1
H1: Applicative G1
G2: Type -> Type
H6: Map G2
H7: Pure G2
H8: Mult G2
H5: Applicative G2
A: Type

mapdt extract = mapdt (map id ∘ extract)
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G1: Type -> Type
H2: Map G1
H3: Pure G1
H4: Mult G1
H1: Applicative G1
G2: Type -> Type
H6: Map G2
H7: Pure G2
H8: Mult G2
H5: Applicative G2
A: Type

mapdt extract = mapdt (id ∘ extract)
reflexivity. Qed. #[export] Instance TraversableFunctor_Categorical_DecoratedTraversableFunctor_Kleisli : Categorical.TraversableFunctor.TraversableFunctor T := {| dist_natural := dist_natural_T; dist_morph := @dist_morph_T; dist_unit := dist_unit_T; dist_linear := dist_linear_T; |}.
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T

forall (G : Type -> Type) (H2 : Map G) (H3 : Pure G) (H4 : Mult G), Applicative G -> forall A : Type, dist T G ∘ map strength ∘ dec T = map (dec T) ∘ dist T G
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T

forall (G : Type -> Type) (H2 : Map G) (H3 : Pure G) (H4 : Mult G), Applicative G -> forall A : Type, dist T G ∘ map strength ∘ dec T = map (dec T) ∘ dist T G
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G
A: Type

dist T G ∘ map strength ∘ dec T = map (dec T) ∘ dist T G
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G
A: Type

mapdt extract ∘ map strength ∘ dec T = map (dec T) ∘ mapdt extract
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G
A: Type

mapdt extract ∘ map strength ∘ mapdt id = map (mapdt id) ∘ mapdt extract
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G
A: Type

mapdt extract ∘ map strength ∘ mapd id = map (mapdt id) ∘ mapdt extract
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G
A: Type

mapdt extract ∘ (map strength ∘ mapd id) = map (mapdt id) ∘ mapdt extract
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G
A: Type

mapdt extract ∘ mapd (strength ∘ id) = map (mapdt id) ∘ mapdt extract
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G
A: Type

mapdt extract ∘ mapd (strength ∘ id) = map (mapd id) ∘ mapdt extract
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G
A: Type

mapdt (extract ⋆1 strength ∘ id) = map (mapd id) ∘ mapdt extract
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G
A: Type

mapdt (extract ⋆1 strength ∘ id) = mapdt (map id ∘ strength ∘ cobind extract)
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G
A: Type

mapdt (extract ⋆1 strength ∘ id) = mapdt (id ∘ strength ∘ cobind extract)
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G
A: Type

mapdt (extract ⋆1 strength ∘ id) = mapdt (id ∘ strength ∘ id)
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G
A: Type

mapdt (id ∘ extract ⋆1 strength ∘ id) = mapdt (id ∘ strength ∘ id)
E: Type
T: Type -> Type
H: Mapdt E T
H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T
G: Type -> Type
H2: Map G
H3: Pure G
H4: Mult G
H1: Applicative G
A: Type

mapdt (id ∘ (strength ∘ id)) = mapdt (id ∘ strength ∘ id)
reflexivity. Qed. (** ** Typeclass Instance *) (******************************************************************) #[export] Instance DecoratedTraversableFunctor_Categorical_Kleisli: Categorical.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T := {| dtfun_compat := dtfun_compat_T; |}. End instances. End DerivedInstances.