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.Categorical.TraversableMonad
  Classes.Kleisli.TraversableMonad
  Classes.Coalgebraic.TraversableMonad
  Adapters.CategoricalToKleisli.TraversableMonad
  Adapters.KleisliToCategorical.TraversableMonad
  Adapters.CoalgebraicToKleisli.TraversableMonad
  Adapters.KleisliToCoalgebraic.TraversableMonad.

Import Kleisli.TraversableMonad.Notations.
Import Functors.Early.Batch.

#[local] Generalizable Variables T.

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

  Context
    `{mapT: Map T}
    `{distT: ApplicativeDist T}
    `{joinT: Join T}
    `{Return T}
    `{! Categorical.TraversableMonad.TraversableMonad T}.

  Definition bindt':
    Bindt T T :=
    CategoricalToKleisli.TraversableMonad.DerivedOperations.Bindt_Categorical T.

  Definition map2: Map T :=
    DerivedOperations.Map_Bindt T T (Bindt_TU := bindt').

  Definition dist2: ApplicativeDist T :=
    DerivedOperations.Dist_Bindt T (Bindt_TT := bindt').

  Definition join2: Join T :=
    DerivedOperations.Join_Bindt T (Bindt_TT := bindt').

  

mapT = map2

mapT = map2
A, B: Type
f: A -> B

mapT A B f = map2 A B f
A, B: Type
f: A -> B

mapT A B f = DerivedOperations.Map_Bindt T T A B f
A, B: Type
f: A -> B

mapT A B f = bindt (ret ∘ f)
A, B: Type
f: A -> B

mapT A B f = bindt' (fun A : Type => A) Map_I Pure_I Mult_I A B (ret ∘ f)
A, B: Type
f: A -> B

mapT A B f = DerivedOperations.Bindt_Categorical T (fun A : Type => A) Map_I Pure_I Mult_I A B (ret ∘ f)
A, B: Type
f: A -> B

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

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

mapT A B f = join ∘ id ∘ map (ret ∘ f)
A, B: Type
f: A -> B

mapT A B f = join ∘ map (ret ∘ f)
A, B: Type
f: A -> B

mapT A B f = join ∘ (map ret ∘ map f)
A, B: Type
f: A -> B

mapT A B f = join ∘ map ret ∘ map f
A, B: Type
f: A -> B

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

forall (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> distT G Map_G Pure_G Mult_G = dist2 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 -> distT G Map_G Pure_G Mult_G = dist2 G Map_G Pure_G Mult_G
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G

distT G Map_G Pure_G Mult_G = dist2 G Map_G Pure_G Mult_G
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
A: Type

distT G Map_G Pure_G Mult_G A = dist2 G Map_G Pure_G Mult_G A
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
A: Type

distT G Map_G Pure_G Mult_G A = DerivedOperations.Dist_Bindt T G Map_G Pure_G Mult_G A
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
A: Type

distT G Map_G Pure_G Mult_G A = bindt (map ret)
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
A: Type

distT G Map_G Pure_G Mult_G A = bindt' G Map_G Pure_G Mult_G (G A) A (map ret)
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
A: Type

distT G Map_G Pure_G Mult_G A = DerivedOperations.Bindt_Categorical T G Map_G Pure_G Mult_G (G A) A (map ret)
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
A: Type

distT G Map_G Pure_G Mult_G A = map join ∘ dist T G ∘ map (map ret)
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
A: Type

distT G Map_G Pure_G Mult_G A = map join ∘ dist T G ∘ map ret
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
A: Type

distT G Map_G Pure_G Mult_G A = map join ∘ (dist T G ∘ map ret)
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
A: Type

distT G Map_G Pure_G Mult_G A = map join ∘ (dist T G ∘ map ret)
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
A: Type

distT G Map_G Pure_G Mult_G A = map join ∘ (map ret ∘ dist T G)
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
A: Type

distT G Map_G Pure_G Mult_G A = map join ∘ map ret ∘ dist T G
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
A: Type

distT G Map_G Pure_G Mult_G A = map join ∘ map (map ret) ∘ dist T G
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
A: Type

distT G Map_G Pure_G Mult_G A = map (join ∘ map ret) ∘ dist T G
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
A: Type

distT G Map_G Pure_G Mult_G A = map id ∘ dist T G
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
A: Type

distT G Map_G Pure_G Mult_G A = id ∘ dist T G
reflexivity. Qed.

joinT = join2

joinT = join2
A: Type

joinT A = join2 A
A: Type

joinT A = DerivedOperations.Join_Bindt T A
A: Type

joinT A = bindt id
A: Type

joinT A = bindt' (fun A : Type => A) Map_I Pure_I Mult_I (T A) A id
A: Type

joinT A = DerivedOperations.Bindt_Categorical T (fun A : Type => A) Map_I Pure_I Mult_I (T A) A id
A: Type

joinT A = map join ∘ dist T (fun A : Type => A) ∘ map id
A: Type

joinT A = map join ∘ dist T (fun A : Type => A) ∘ id
A: Type

joinT A = join ∘ dist T (fun A : Type => A) ∘ id
A: Type

joinT A = join ∘ id ∘ id
reflexivity. Qed. End Categorical_Kleisli_Categorical. (** * Kleisli ~> Categorical ~> Kleisli *) (**********************************************************************) Module Kleisli_Categorical_Kleisli. Context `{bindtT: Bindt T T} `{Return T} `{! Kleisli.TraversableMonad.TraversableMonad T}. Definition map': Map T := DerivedOperations.Map_Bindt T T. Definition dist': ApplicativeDist T := DerivedOperations.Dist_Bindt T. Definition join': Join T := DerivedOperations.Join_Bindt T. Definition bindt2: Bindt T T := DerivedOperations.Bindt_Categorical T (Map_T := map') (Join_T := join') (Dist_T := dist').

forall (A B : Type) (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> bindtT G Map_G Pure_G Mult_G A B = bindt2 G Map_G Pure_G Mult_G A B

forall (A B : Type) (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> bindtT G Map_G Pure_G Mult_G A B = bindt2 G Map_G Pure_G Mult_G A B
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G

bindtT G Map_G Pure_G Mult_G A B = bindt2 G Map_G Pure_G Mult_G A B
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = bindt2 G Map_G Pure_G Mult_G A B f
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = DerivedOperations.Bindt_Categorical T G Map_G Pure_G Mult_G A B f
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = map join ∘ dist T G ∘ map f
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = map (join' B) ∘ dist T G ∘ map f
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = map (DerivedOperations.Join_Bindt T B) ∘ dist T G ∘ map f
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = map (bindt id) ∘ dist T G ∘ map f
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = map (bindt id) ∘ dist' G Map_G Pure_G Mult_G (T B) ∘ map f
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = map (bindt id) ∘ DerivedOperations.Dist_Bindt T G Map_G Pure_G Mult_G (T B) ∘ map f
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = map (bindt id) ∘ bindt (map ret) ∘ map f
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = map (bindt id) ∘ bindt (map ret) ∘ map' A (G (T B)) f
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = map (bindt id) ∘ bindt (map ret) ∘ DerivedOperations.Map_Bindt T T A (G (T B)) f
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = map (bindt id) ∘ bindt (map ret) ∘ bindt (ret ∘ f)
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = map (bindt id) ∘ (bindt (map ret) ∘ bindt (ret ∘ f))
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = map (bindt id) ∘ (map (bindt (map ret)) ∘ bindt (ret ∘ f))
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = map (bindt id) ∘ (map (bindt (map ret)) ∘ bindt (ret ∘ f))
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = map (bindt id) ∘ bindt (map ret ⋆6 ret ∘ f)
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = map (bindt id) ∘ bindt (map (bindt (map ret)) ∘ (ret ∘ f))
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = map (bindt id) ∘ bindt (bindt (map ret) ∘ (ret ∘ f))
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = map (bindt id) ∘ bindt (bindt (map ret) ∘ ret ∘ f)
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = map (bindt id) ∘ bindt (map ret ∘ f)
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = map (bindt id) ∘ bindt (map ret ∘ f)
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = map (bindt id) ∘ bindt (map ret ∘ f)
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = map (bindt id) ∘ bindt (map ret ∘ f)
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = bindt (id ⋆6 map ret ∘ f)
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = bindt (id ⋆6 map ret ∘ f)
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = bindt (map (bindt id) ∘ (map ret ∘ f))
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = bindt (map (bindt id) ∘ map ret ∘ f)
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = bindt (map (bindt id ∘ ret) ∘ f)
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = bindt (map id ∘ f)
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = bindt (id ∘ f)
reflexivity. Qed. End Kleisli_Categorical_Kleisli. (** * Coalgebraic ~> Kleisli ~> Coalgebraic *) (**********************************************************************) Module Coalgebraic_Kleisli_Coalgebraic. Context `{toBatch6_T: ToBatch6 T T} `{Return T} `{! Coalgebraic.TraversableMonad.TraversableMonad T}. Definition bindt': Bindt T T := @DerivedOperations.Bindt_ToBatch6 T T toBatch6_T. Definition toBatch6_2: ToBatch6 T T := @DerivedOperations.ToBatch6_Bindt T T bindt'.

forall A B : Type, toBatch6_T A B = toBatch6_2 A B

forall A B : Type, toBatch6_T A B = toBatch6_2 A B
A, B: Type

toBatch6_T A B = toBatch6_2 A B
A, B: Type

toBatch6_T A B = DerivedOperations.ToBatch6_Bindt A B
A, B: Type

toBatch6_T A B = bindt (batch A (T B))
A, B: Type

toBatch6_T A B = bindt' (Batch A (T B)) Map_Batch Pure_Batch Mult_Batch A B (batch A (T B))
A, B: Type

toBatch6_T A B = DerivedOperations.Bindt_ToBatch6 T T (Batch A (T B)) Map_Batch Pure_Batch Mult_Batch A B (batch A (T B))
A, B: Type

toBatch6_T A B = runBatch (batch A (T B)) ∘ toBatch6
A, B: Type

toBatch6_T A B = id ∘ toBatch6
reflexivity. Qed. End Coalgebraic_Kleisli_Coalgebraic. (** * Kleisli ~> Coalgebraic ~> Kleisli *) (**********************************************************************) Module Kleisli_Coalgebraic_Kleisli. Context `{bindtT: Bindt T T} `{Return T} `{! Kleisli.TraversableMonad.TraversableMonad T}. Definition toBatch6': ToBatch6 T T := DerivedOperations.ToBatch6_Bindt. Definition bindt2: Bindt T T := DerivedOperations.Bindt_ToBatch6 T T (H := toBatch6').

forall (A B : Type) (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> bindtT G Map_G Pure_G Mult_G A B = bindt2 G Map_G Pure_G Mult_G A B

forall (A B : Type) (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> bindtT G Map_G Pure_G Mult_G A B = bindt2 G Map_G Pure_G Mult_G A B
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G

bindtT G Map_G Pure_G Mult_G A B = bindt2 G Map_G Pure_G Mult_G A B
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = bindt2 G Map_G Pure_G Mult_G A B f
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = DerivedOperations.Bindt_ToBatch6 T T G Map_G Pure_G Mult_G A B f
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = runBatch f ∘ toBatch6
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = runBatch f ∘ toBatch6' A B
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = runBatch f ∘ DerivedOperations.ToBatch6_Bindt A B
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = runBatch f ∘ bindt (batch A (T B))
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = bindt (runBatch f ∘ batch A (T B))
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H1: Applicative G
f: A -> G (T B)

bindtT G Map_G Pure_G Mult_G A B f = bindt f
reflexivity. Qed. End Kleisli_Coalgebraic_Kleisli.