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 Export
  Classes.Categorical.TraversableFunctor
  Classes.Kleisli.TraversableFunctor
  Adapters.CategoricalToKleisli.TraversableFunctor
  Adapters.KleisliToCategorical.TraversableFunctor.

(** * Categorical ~> Kleisli ~> Categorical *)
(**********************************************************************)
Module traversable_functor_categorical_kleisli_categorical.

  Context
    (T: Type -> Type)
    `{mapT: Map T}
    `{distT: ApplicativeDist T}
    `{! Categorical.TraversableFunctor.TraversableFunctor T}.

  #[local] Instance traverse': Traverse T :=
    DerivedOperations.Traverse_Categorical T.

  Definition map2: Map T :=
    DerivedOperations.Map_Traverse T.
  Definition dist2: ApplicativeDist T :=
    DerivedOperations.Dist_Traverse T.

  

mapT = map2

mapT = map2

mapT = DerivedOperations.Map_Traverse T

mapT = (fun (A B : Type) (f : A -> B) => traverse f)

mapT = (fun (A B : Type) (f : A -> B) => traverse' (fun A0 : Type => A0) Map_I Pure_I Mult_I A B f)

mapT = (fun (A B : Type) (f : A -> B) => DerivedOperations.Traverse_Categorical T (fun A0 : Type => A0) Map_I Pure_I Mult_I A B f)

mapT = (fun A B : Type => compose (dist T (fun A0 : Type => A0)) ○ map)
A, B: Type
f: A -> B

mapT A B f = dist T (fun A : Type => A) ∘ map f
A, B: Type
f: A -> B

mapT A B f = id ∘ map f
reflexivity. Qed.

distT = dist2

distT = dist2

distT = DerivedOperations.Dist_Traverse T

distT = (fun (G : Type -> Type) (H : Map G) (H0 : Pure G) (H1 : Mult G) (A : Type) => traverse id)

distT = (fun (G : Type -> Type) (H : Map G) (H0 : Pure G) (H1 : Mult G) (A : Type) => traverse' G H H0 H1 (G A) A id)

distT = (fun (G : Type -> Type) (H : Map G) (H0 : Pure G) (H1 : Mult G) (A : Type) => DerivedOperations.Traverse_Categorical T G H H0 H1 (G A) A id)

distT = (fun (G : Type -> Type) (H : Map G) (H0 : Pure G) (H1 : Mult G) (A : Type) => dist T G ∘ map id)
G: Type -> Type
Hmap: Map G
Hpure: Pure G
Hmult: Mult G

distT G Hmap Hpure Hmult = (fun A : Type => dist T G ∘ map id)
G: Type -> Type
Hmap: Map G
Hpure: Pure G
Hmult: Mult G
A: Type

distT G Hmap Hpure Hmult A = dist T G ∘ map id
G: Type -> Type
Hmap: Map G
Hpure: Pure G
Hmult: Mult G
A: Type

distT G Hmap Hpure Hmult A = dist T G ∘ id
reflexivity. Qed. End traversable_functor_categorical_kleisli_categorical. (** * Kleisli ~> Categorical ~> Kleisli *) (**********************************************************************) Module traversable_functor_kleisli_categorical_kleisli. Context (T: Type -> Type) `{traverseT: Traverse T} `{@Classes.Kleisli.TraversableFunctor.TraversableFunctor T _}. Definition map': Map T := DerivedOperations.Map_Traverse T. Definition dist': ApplicativeDist T := DerivedOperations.Dist_Traverse T. Definition traverse2: Traverse T := DerivedOperations.Traverse_Categorical T (Map_T := map') (Dist_T := dist').

forall (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> traverseT G Map_G Pure_G Mult_G = traverse2 G Map_G Pure_G Mult_G

forall (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> traverseT G Map_G Pure_G Mult_G = traverse2 G Map_G Pure_G Mult_G
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G

traverseT G Map_G Pure_G Mult_G = traverse2 G Map_G Pure_G Mult_G
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G

traverseT G Map_G Pure_G Mult_G = DerivedOperations.Traverse_Categorical T G Map_G Pure_G Mult_G
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G

traverseT G Map_G Pure_G Mult_G = (fun A B : Type => compose (dist T G) ○ map)
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G

traverseT G Map_G Pure_G Mult_G = (fun A B : Type => compose (dist' G Map_G Pure_G Mult_G B) ○ map)
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G

traverseT G Map_G Pure_G Mult_G = (fun A B : Type => compose (DerivedOperations.Dist_Traverse T G Map_G Pure_G Mult_G B) ○ map)
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G

traverseT G Map_G Pure_G Mult_G = (fun A B : Type => compose (traverse id) ○ map)
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G

traverseT G Map_G Pure_G Mult_G = (fun A B : Type => compose (traverse id) ○ DerivedOperations.Map_Traverse T A (G B))
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: A -> G B

traverseT G Map_G Pure_G Mult_G A B f = traverse id ∘ DerivedOperations.Map_Traverse T A (G B) f
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: A -> G B

traverseT G Map_G Pure_G Mult_G A B f = traverse id ∘ traverse f
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: A -> G B

traverseT G Map_G Pure_G Mult_G A B f = map (traverse id) ∘ traverse f
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: A -> G B

traverseT G Map_G Pure_G Mult_G A B f = traverse (kc2 id f)
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: A -> G B

traverseT G Map_G Pure_G Mult_G A B f = traverse (kc2 id f)
reflexivity. Qed. End traversable_functor_kleisli_categorical_kleisli. (** * Coalgebraic ~> Kleisli ~> Coalgebraic (TODO) *) (**********************************************************************) (** * Kleisli ~> Coalgebraic ~> Kleisli (TODO) *) (**********************************************************************)