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.Applicative
  Classes.Categorical.Monad (Return, ret).

#[local] Generalizable Variables U T G A B C D ϕ M f.

(** * Traversable Monads *)
(**********************************************************************)

(** ** The [bindt] operation *)
(**********************************************************************)
Class Bindt (T: Type -> Type) (U: Type -> Type) :=
  bindt:
    forall (G: Type -> Type)
      `{Map_G: Map G} `{Pure_G: Pure G} `{Mult_G: Mult G}
      (A B: Type), (A -> G (T B)) -> U A -> G (U B).

#[global] Arguments bindt {T U}%function_scope {Bindt} {G}%function_scope
  {Map_G Pure_G Mult_G} {A B}%type_scope _%function_scope _.

(** ** Kleisli Composition *)
(**********************************************************************)
Definition kc6
  `{Bindt T T}
  {A B C: Type}
  {G1 G2: Type -> Type}
  `{Map G1} `{Pure G1} `{Mult G1}
  `{Map G2} `{Pure G2} `{Mult G2}:
  (B -> G2 (T C)) ->
  (A -> G1 (T B)) ->
  (A -> G1 (G2 (T C))) :=
  fun g f => map (F := G1) (bindt g) ∘ f.

#[local] Infix "⋆6" := (kc6) (at level 60): tealeaves_scope.

(** ** Typeclass *)
(**********************************************************************)
Class TraversableRightPreModule (T: Type -> Type) (U: Type -> Type)
  `{Return_T: Return T}
  `{Bindt_TT: Bindt T T}
  `{Bindt_TU: Bindt T U} :=
  { ktm_bindt1: forall (A: Type),
      bindt (U := U) (G := fun A => A) (ret (T := T)) = @id (U A);
    ktm_bindt2:
    forall `{Applicative G1} `{Applicative G2} (A B C: Type)
      (g: B -> G2 (T C)) (f: A -> G1 (T B)),
      map (F := G1) (bindt g) ∘ bindt (U := U) f =
        bindt (U := U) (kc6 (G1 := G1) (G2 := G2) g f);
    ktm_morph:
    forall `{morphism: ApplicativeMorphism G1 G2 ϕ}
      (A B: Type) `(f: A -> G1 (T B)),
      ϕ (U B) ∘ bindt (U := U) f = bindt (ϕ (T B) ∘ f);
  }.

Class TraversableMonad (T: Type -> Type)
  `{Return_T: Return T}
  `{Bindt_TT: Bindt T T} :=
  { ktm_bindt0:
    forall `{Applicative G} (A B: Type) (f: A -> G (T B)),
      bindt f ∘ ret = f;
    ktm_premod :> TraversableRightPreModule T T;
  }.

Class TraversableRightModule (T U: Type -> Type)
  `{Return_T: Return T}
  `{Bindt_TT: Bindt T T}
  `{Bindt_TU: Bindt T U} :=
  { ktmod_monad :> TraversableMonad T;
    ktmod_premod :> TraversableRightPreModule T U;
  }.

#[local] Instance TraversableRightModule_TraversableMonad
  (T: Type -> Type)
  `{TraversableMonad_T: TraversableMonad T}:
  TraversableRightModule T T :=
  {| ktmod_premod := ktm_premod;
  |}.

(** ** Kleisli Category laws *)
(**********************************************************************)
Section Kleisli_composition.

  Context
    `{TraversableMonad T}
    `{Applicative G1}
    `{Applicative G2}
    `{Applicative G3}.

  
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3

forall (A B : Type) (g : A -> G2 (T B)), g ⋆6 ret = g
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3

forall (A B : Type) (g : A -> G2 (T B)), g ⋆6 ret = g
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3
A, B: Type
g: A -> G2 (T B)

g ⋆6 ret = g
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3
A, B: Type
g: A -> G2 (T B)

map (bindt g) ∘ ret = g
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3
A, B: Type
g: A -> G2 (T B)

bindt g ∘ ret = g
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3
A, B: Type
g: A -> G2 (T B)

g = g
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3

forall (A B : Type) (g : A -> G2 (T B)), g ⋆6 map ret = map g
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3

forall (A B : Type) (g : A -> G2 (T B)), g ⋆6 map ret = map g
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3
A, B: Type
g: A -> G2 (T B)

g ⋆6 map ret = map g
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3
A, B: Type
g: A -> G2 (T B)

map (bindt g) ∘ map ret = map g
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3
A, B: Type
g: A -> G2 (T B)

map (bindt g ∘ ret) = map g
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3
A, B: Type
g: A -> G2 (T B)

map g = map g
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3

forall (A B : Type) (f : A -> G1 (T B)), ret ⋆6 f = f
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3

forall (A B : Type) (f : A -> G1 (T B)), ret ⋆6 f = f
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3
A, B: Type
f: A -> G1 (T B)

ret ⋆6 f = f
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3
A, B: Type
f: A -> G1 (T B)

map (bindt ret) ∘ f = f
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3
A, B: Type
f: A -> G1 (T B)

map id ∘ f = f
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3
A, B: Type
f: A -> G1 (T B)

id ∘ f = f
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3

forall (C D : Type) (h : C -> G3 (T D)) (B : Type) (g : B -> G2 (T C)) (A : Type) (f : A -> G1 (T B)), h ⋆6 (g ⋆6 f) = (h ⋆6 g) ⋆6 f
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3

forall (C D : Type) (h : C -> G3 (T D)) (B : Type) (g : B -> G2 (T C)) (A : Type) (f : A -> G1 (T B)), h ⋆6 (g ⋆6 f) = (h ⋆6 g) ⋆6 f
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3
C, D: Type
h: C -> G3 (T D)
B: Type
g: B -> G2 (T C)
A: Type
f: A -> G1 (T B)

h ⋆6 (g ⋆6 f) = (h ⋆6 g) ⋆6 f
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3
C, D: Type
h: C -> G3 (T D)
B: Type
g: B -> G2 (T C)
A: Type
f: A -> G1 (T B)

map (bindt h) ∘ (map (bindt g) ∘ f) = map (bindt (map (bindt h) ∘ g)) ∘ f
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3
C, D: Type
h: C -> G3 (T D)
B: Type
g: B -> G2 (T C)
A: Type
f: A -> G1 (T B)

map (map (bindt h)) ∘ (map (bindt g) ∘ f) = map (bindt (map (bindt h) ∘ g)) ∘ f
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3
C, D: Type
h: C -> G3 (T D)
B: Type
g: B -> G2 (T C)
A: Type
f: A -> G1 (T B)

map (map (bindt h)) ∘ (map (bindt g) ∘ f) = map (bindt (map (bindt h) ∘ g)) ∘ f
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3
C, D: Type
h: C -> G3 (T D)
B: Type
g: B -> G2 (T C)
A: Type
f: A -> G1 (T B)
a: A

(map (map (bindt h)) ∘ (map (bindt g) ∘ f)) a = (map (bindt (map (bindt h) ∘ g)) ∘ f) a
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3
C, D: Type
h: C -> G3 (T D)
B: Type
g: B -> G2 (T C)
A: Type
f: A -> G1 (T B)
a: A

map (map (bindt h)) (map (bindt g) (f a)) = (map (bindt (map (bindt h) ∘ g)) ∘ f) a
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3
C, D: Type
h: C -> G3 (T D)
B: Type
g: B -> G2 (T C)
A: Type
f: A -> G1 (T B)
a: A

(map (map (bindt h)) ∘ map (bindt g)) (f a) = (map (bindt (map (bindt h) ∘ g)) ∘ f) a
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3
C, D: Type
h: C -> G3 (T D)
B: Type
g: B -> G2 (T C)
A: Type
f: A -> G1 (T B)
a: A

map (map (bindt h) ∘ bindt g) (f a) = (map (bindt (map (bindt h) ∘ g)) ∘ f) a
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3
C, D: Type
h: C -> G3 (T D)
B: Type
g: B -> G2 (T C)
A: Type
f: A -> G1 (T B)
a: A

map (bindt (h ⋆6 g)) (f a) = (map (bindt (map (bindt h) ∘ g)) ∘ f) a
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H0: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H1: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H2: Applicative G3
C, D: Type
h: C -> G3 (T D)
B: Type
g: B -> G2 (T C)
A: Type
f: A -> G1 (T B)
a: A

map (bindt (h ⋆6 g)) (f a) = map (bindt (map (bindt h) ∘ g)) (f a)
reflexivity. Qed. End Kleisli_composition. (** * Derived Structures *) (**********************************************************************) From Tealeaves.Classes.Kleisli Require Import TraversableFunctor Monad. (** ** Derived Operations *) (**********************************************************************) Module DerivedOperations. Section operations. Context (T U: Type -> Type) `{Return_T: Return T} `{Bindt_TU: Bindt T U}. #[export] Instance Map_Bindt: Map U := fun (A B: Type) (f: A -> B) => bindt (G := fun A => A) (ret (T := T) ∘ f). #[export] Instance Bind_Bindt: Bind T U := fun A B f => bindt (T := T) (G := fun A => A) f. #[export] Instance Traverse_Bindt: Traverse U := fun G _ _ _ A B f => bindt (map (F := G) (ret (T := T)) ∘ f). End operations. End DerivedOperations. Section compat_classes. Context (T U: Type -> Type) `{Return_T: Return T} `{Map_U: Map U} `{Traverse_U: Traverse U} `{Bind_TU: Bind T U} `{Bindt_TU: Bindt T U}. Class Compat_Map_Bindt: Prop := compat_map_bindt: Map_U = @DerivedOperations.Map_Bindt T U Return_T Bindt_TU. Class Compat_Bind_Bindt: Prop := compat_bind_bindt: @Bind_TU = @DerivedOperations.Bind_Bindt T U Bindt_TU. Class Compat_Traverse_Bindt: Prop := compat_traverse_bindt: forall (G: Type -> Type) `{Map_G: Map G} `{Pure_G: Pure G} `{Mult_G: Mult G} `{! Applicative G}, @Traverse_U G Map_G Pure_G Mult_G = @DerivedOperations.Traverse_Bindt T U Return_T Bindt_TU G Map_G Pure_G Mult_G. End compat_classes. Section compat_instances. Context `{Return_T: Return T} `{Bindt_TU: Bindt T U}.
T: Type -> Type
Return_T: Return T
U: Type -> Type
Bindt_TU: Bindt T U

Compat_Map_Bindt T U
T: Type -> Type
Return_T: Return T
U: Type -> Type
Bindt_TU: Bindt T U

Compat_Map_Bindt T U
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
U: Type -> Type
Bindt_TU: Bindt T U

Compat_Bind_Bindt T U
T: Type -> Type
Return_T: Return T
U: Type -> Type
Bindt_TU: Bindt T U

Compat_Bind_Bindt T U
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
U: Type -> Type
Bindt_TU: Bindt T U

Compat_Traverse_Bindt T U
T: Type -> Type
Return_T: Return T
U: Type -> Type
Bindt_TU: Bindt T U

Compat_Traverse_Bindt T U
T: Type -> Type
Return_T: Return T
U: Type -> Type
Bindt_TU: Bindt T U

forall (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> DerivedOperations.Traverse_Bindt T U G Map_G Pure_G Mult_G = DerivedOperations.Traverse_Bindt T U G Map_G Pure_G Mult_G
T: Type -> Type
Return_T: Return T
U: Type -> Type
Bindt_TU: Bindt T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
Applicative0: Applicative G

DerivedOperations.Traverse_Bindt T U G Map_G Pure_G Mult_G = DerivedOperations.Traverse_Bindt T U G Map_G Pure_G Mult_G
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
U: Type -> Type
Bindt_TU: Bindt T U
H: Map U
H0: Bind T U
Compat_Bind_Bindt0: Compat_Bind_Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U

Compat_Map_Bind T U
T: Type -> Type
Return_T: Return T
U: Type -> Type
Bindt_TU: Bindt T U
H: Map U
H0: Bind T U
Compat_Bind_Bindt0: Compat_Bind_Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U

Compat_Map_Bind T U
T: Type -> Type
Return_T: Return T
U: Type -> Type
Bindt_TU: Bindt T U
H: Map U
H0: Bind T U
Compat_Bind_Bindt0: Compat_Bind_Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U

H = DerivedOperations.Map_Bind T U
T: Type -> Type
Return_T: Return T
U: Type -> Type
Bindt_TU: Bindt T U
H: Map U
H0: Bind T U
Compat_Bind_Bindt0: Compat_Bind_Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U

DerivedOperations.Map_Bindt T U = DerivedOperations.Map_Bind T U
T: Type -> Type
Return_T: Return T
U: Type -> Type
Bindt_TU: Bindt T U
H: Map U
H0: Bind T U
Compat_Bind_Bindt0: Compat_Bind_Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U

DerivedOperations.Map_Bindt T U = (fun A B : Type => bind ○ compose ret)
T: Type -> Type
Return_T: Return T
U: Type -> Type
Bindt_TU: Bindt T U
H: Map U
H0: Bind T U
Compat_Bind_Bindt0: Compat_Bind_Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U

DerivedOperations.Map_Bindt T U = (fun A B : Type => DerivedOperations.Bind_Bindt T U A B ○ compose ret)
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
U: Type -> Type
Bindt_TU: Bindt T U
H: Map U
H0: Traverse U
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U

Compat_Map_Traverse U
T: Type -> Type
Return_T: Return T
U: Type -> Type
Bindt_TU: Bindt T U
H: Map U
H0: Traverse U
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U

Compat_Map_Traverse U
T: Type -> Type
Return_T: Return T
U: Type -> Type
Bindt_TU: Bindt T U
H: Map U
H0: Traverse U
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U

H = DerivedOperations.Map_Traverse U
T: Type -> Type
Return_T: Return T
U: Type -> Type
Bindt_TU: Bindt T U
H: Map U
H0: Traverse U
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U

DerivedOperations.Map_Bindt T U = DerivedOperations.Map_Traverse U
T: Type -> Type
Return_T: Return T
U: Type -> Type
Bindt_TU: Bindt T U
H: Map U
H0: Traverse U
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U

DerivedOperations.Map_Bindt T U = (fun (A B : Type) (f : A -> B) => traverse f)
T: Type -> Type
Return_T: Return T
U: Type -> Type
Bindt_TU: Bindt T U
H: Map U
H0: Traverse U
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U

DerivedOperations.Map_Bindt T U = DerivedOperations.Traverse_Bindt T U (fun A : Type => A) Map_I Pure_I Mult_I
reflexivity. Qed. End compat_instances. Section rewriting_laws. Context `{Return_T: Return T} `{Map_U: Map U} `{Traverse_U: Traverse U} `{Bind_TU: Bind T U} `{Bindt_TU: Bindt T U}.
T: Type -> Type
Return_T: Return T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
A, B: Type
f: A -> B

map f = bindt (ret ∘ f)
T: Type -> Type
Return_T: Return T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
A, B: Type
f: A -> B

map f = bindt (ret ∘ f)
T: Type -> Type
Return_T: Return T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
A, B: Type
f: A -> B

DerivedOperations.Map_Bindt T U A B f = bindt (ret ∘ f)
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Bind_Bindt0: Compat_Bind_Bindt T U
A, B: Type
f: A -> T B

bind f = bindt f
T: Type -> Type
Return_T: Return T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Bind_Bindt0: Compat_Bind_Bindt T U
A, B: Type
f: A -> T B

bind f = bindt f
T: Type -> Type
Return_T: Return T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Bind_Bindt0: Compat_Bind_Bindt T U
A, B: Type
f: A -> T B

DerivedOperations.Bind_Bindt T U A B f = bindt f
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
A, B: Type
f: A -> G B

traverse f = bindt (map ret ∘ f)
T: Type -> Type
Return_T: Return T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
A, B: Type
f: A -> G B

traverse f = bindt (map ret ∘ f)
T: Type -> Type
Return_T: Return T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
A, B: Type
f: A -> G B

DerivedOperations.Traverse_Bindt T U G Map_G Pure_G Mult_G A B f = bindt (map ret ∘ f)
reflexivity. Qed. End rewriting_laws. (** ** Composition with the Identity Applicative *) (**********************************************************************) Section traversable_monad_identity_applicative. Context `{TraversableRightModule T U}.
T, U: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
Bindt_TU: Bindt T U
H: TraversableRightModule T U

forall (A B : Type) (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> forall f : A -> G (T B), bindt f = bindt f
T, U: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
Bindt_TU: Bindt T U
H: TraversableRightModule T U

forall (A B : Type) (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> forall f : A -> G (T B), bindt f = bindt f
T, U: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
Bindt_TU: Bindt T U
H: TraversableRightModule T U
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
f: A -> G (T B)

bindt f = bindt f
T, U: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
Bindt_TU: Bindt T U
H: TraversableRightModule T U
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
f: A -> G (T B)

Mult_compose (fun A : Type => A) G = Mult_G
now rewrite (Mult_compose_identity2 G). Qed.
T, U: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
Bindt_TU: Bindt T U
H: TraversableRightModule T U

forall (A B : Type) (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> forall f : A -> G (T B), bindt f = bindt f
T, U: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
Bindt_TU: Bindt T U
H: TraversableRightModule T U

forall (A B : Type) (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> forall f : A -> G (T B), bindt f = bindt f
T, U: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
Bindt_TU: Bindt T U
H: TraversableRightModule T U
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
f: A -> G (T B)

bindt f = bindt f
T, U: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
Bindt_TU: Bindt T U
H: TraversableRightModule T U
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
f: A -> G (T B)

Mult_compose G (fun A : Type => A) = Mult_G
now rewrite (Mult_compose_identity1 G). Qed. End traversable_monad_identity_applicative. (** ** Derived Kleisli Composition Laws *) (**********************************************************************) Section traversable_monad_derived_kleisli_composition_laws. Context `{Return_T: Return T} `{Map_T: Map T} `{Traverse_T: Traverse T} `{Bind_T: Bind T T} `{Bindt_TT: Bindt T T} `{! Compat_Map_Bindt T T} `{! Compat_Traverse_Bindt T T} `{! Compat_Bind_Bindt T T} `{! TraversableMonad T}. Import Kleisli.Monad.Notations. Import Kleisli.TraversableFunctor.Notations. Context `{Applicative G1} `{Applicative G2} `{Applicative G3}. Context (A B C: Type). (** *** Homogeneous cases *) (********************************************************************)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> G2 C) (f : A -> G1 B), map ret ∘ g ⋆6 map ret ∘ f = map ret ∘ map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> G2 C) (f : A -> G1 B), map ret ∘ g ⋆6 map ret ∘ f = map ret ∘ map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 C
f: A -> G1 B

map ret ∘ g ⋆6 map ret ∘ f = map ret ∘ map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 C
f: A -> G1 B

map (bindt (map ret ∘ g)) ∘ (map ret ∘ f) = map ret ∘ map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 C
f: A -> G1 B

map (bindt (map ret ∘ g)) ∘ map ret ∘ f = map ret ∘ map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 C
f: A -> G1 B

map (bindt (map ret ∘ g) ∘ ret) ∘ f = map ret ∘ map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 C
f: A -> G1 B

map (bindt (map ret ∘ g) ∘ ret) ∘ f = map (map ret) ∘ map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 C
f: A -> G1 B

map (bindt (map ret ∘ g) ∘ ret) ∘ f = map (map ret) ∘ map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 C
f: A -> G1 B

map (bindt (map ret ∘ g) ∘ ret) ∘ f = map (map ret ∘ g) ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 C
f: A -> G1 B

map (map ret ∘ g) ∘ f = map (map ret ∘ g) ∘ f
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> T C) (f : A -> T B), g ⋆6 f = g ⋆ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> T C) (f : A -> T B), g ⋆6 f = g ⋆ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> T C
f: A -> T B

g ⋆6 f = g ⋆ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> T C
f: A -> T B

map (bindt g) ∘ f = bind g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> T C
f: A -> T B

map (bindt g) ∘ f = bindt g ∘ f
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> C) (f : A -> B), ret ∘ g ⋆6 ret ∘ f = ret ∘ g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> C) (f : A -> B), ret ∘ g ⋆6 ret ∘ f = ret ∘ g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> C
f: A -> B

ret ∘ g ⋆6 ret ∘ f = ret ∘ g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> C
f: A -> B

map (bindt (ret ∘ g)) ∘ (ret ∘ f) = ret ∘ g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> C
f: A -> B

map (bindt (ret ∘ g)) ∘ ret ∘ f = ret ∘ g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> C
f: A -> B

bindt (ret ∘ g) ∘ ret ∘ f = ret ∘ g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> C
f: A -> B

ret ∘ g ∘ f = ret ∘ g ∘ f
reflexivity. Qed. (** *** Heterogeneous cases *) (********************************************************************)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> G2 (T C)) (f : A -> T B), g ⋆6 f = bindt g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> G2 (T C)) (f : A -> T B), g ⋆6 f = bindt g ∘ f
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> G2 (T C)) (f : A -> G1 B), g ⋆6 map ret ∘ f = map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> G2 (T C)) (f : A -> G1 B), g ⋆6 map ret ∘ f = map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 (T C)
f: A -> G1 B

g ⋆6 map ret ∘ f = map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 (T C)
f: A -> G1 B

map (bindt g) ∘ (map ret ∘ f) = map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 (T C)
f: A -> G1 B

map (bindt g) ∘ map ret ∘ f = map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 (T C)
f: A -> G1 B

map (bindt g ∘ ret) ∘ f = map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 (T C)
f: A -> G1 B

map g ∘ f = map g ∘ f
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> G2 (T C)) (f : A -> B), g ⋆6 ret ∘ f = g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> G2 (T C)) (f : A -> B), g ⋆6 ret ∘ f = g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 (T C)
f: A -> B

g ⋆6 ret ∘ f = g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 (T C)
f: A -> B

map (bindt g) ∘ (ret ∘ f) = g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 (T C)
f: A -> B

map (bindt g) ∘ ret ∘ f = g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 (T C)
f: A -> B

bindt g ∘ ret ∘ f = g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 (T C)
f: A -> B

g ∘ f = g ∘ f
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> T C) (f : A -> G1 (T B)), g ⋆6 f = map (bind g) ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> T C) (f : A -> G1 (T B)), g ⋆6 f = map (bind g) ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> T C
f: A -> G1 (T B)

g ⋆6 f = map (bind g) ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> T C
f: A -> G1 (T B)

g ⋆6 f = map (bindt g) ∘ f
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> G2 C) (f : A -> G1 (T B)), map ret ∘ g ⋆6 f = map (traverse g) ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> G2 C) (f : A -> G1 (T B)), map ret ∘ g ⋆6 f = map (traverse g) ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 C
f: A -> G1 (T B)

map ret ∘ g ⋆6 f = map (traverse g) ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 C
f: A -> G1 (T B)

map ret ∘ g ⋆6 f = map (bindt (map ret ∘ g)) ∘ f
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> C) (f : A -> G1 (T B)), ret ∘ g ⋆6 f = map (map g) ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> C) (f : A -> G1 (T B)), ret ∘ g ⋆6 f = map (map g) ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> C
f: A -> G1 (T B)

ret ∘ g ⋆6 f = map (map g) ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> C
f: A -> G1 (T B)

ret ∘ g ⋆6 f = map (bindt (ret ∘ g)) ∘ f
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> T C) (f : A -> G1 B), g ⋆6 map ret ∘ f = map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> T C) (f : A -> G1 B), g ⋆6 map ret ∘ f = map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> T C
f: A -> G1 B

g ⋆6 map ret ∘ f = map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> T C
f: A -> G1 B

map (bindt g) ∘ (map ret ∘ f) = map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> T C
f: A -> G1 B

map (bindt g) ∘ map ret ∘ f = map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> T C
f: A -> G1 B

map (bindt g ∘ ret) ∘ f = map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> T C
f: A -> G1 B

map g ∘ f = map g ∘ f
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> G2 C) (f : A -> T B), map ret ∘ g ⋆6 f = traverse g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> G2 C) (f : A -> T B), map ret ∘ g ⋆6 f = traverse g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 C
f: A -> T B

map ret ∘ g ⋆6 f = traverse g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 C
f: A -> T B

map (bindt (map ret ∘ g)) ∘ f = traverse g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 C
f: A -> T B

map (bindt (map ret ∘ g)) ∘ f = bindt (map ret ∘ g) ∘ f
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> G2 C) (f : A -> B), map ret ∘ g ⋆6 ret ∘ f = map ret ∘ g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> G2 C) (f : A -> B), map ret ∘ g ⋆6 ret ∘ f = map ret ∘ g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 C
f: A -> B

map ret ∘ g ⋆6 ret ∘ f = map ret ∘ g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 C
f: A -> B

map (bindt (map ret ∘ g)) ∘ (ret ∘ f) = map ret ∘ g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 C
f: A -> B

map (bindt (map ret ∘ g)) ∘ ret ∘ f = map ret ∘ g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 C
f: A -> B

bindt (map ret ∘ g) ∘ ret ∘ f = map ret ∘ g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> G2 C
f: A -> B

map ret ∘ g ∘ f = map ret ∘ g ∘ f
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> C) (f : A -> G1 B), ret ∘ g ⋆6 map ret ∘ f = map ret ∘ map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> C) (f : A -> G1 B), ret ∘ g ⋆6 map ret ∘ f = map ret ∘ map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> C
f: A -> G1 B

ret ∘ g ⋆6 map ret ∘ f = map ret ∘ map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> C
f: A -> G1 B

map (bindt (ret ∘ g)) ∘ (map ret ∘ f) = map ret ∘ map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> C
f: A -> G1 B

map (bindt (ret ∘ g)) ∘ map ret ∘ f = map ret ∘ map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> C
f: A -> G1 B

map (bindt (ret ∘ g) ∘ ret) ∘ f = map ret ∘ map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> C
f: A -> G1 B

map (bindt (ret ∘ g) ∘ ret) ∘ f = map (ret ∘ g) ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> C
f: A -> G1 B

map (ret ∘ g) ∘ f = map (ret ∘ g) ∘ f
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> C) (f : A -> T B), ret ∘ g ⋆6 f = map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> C) (f : A -> T B), ret ∘ g ⋆6 f = map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> C
f: A -> T B

ret ∘ g ⋆6 f = map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> C
f: A -> T B

map (bindt (ret ∘ g)) ∘ f = map g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> C
f: A -> T B

map (bindt (ret ∘ g)) ∘ f = bindt (ret ∘ g) ∘ f
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> T C) (f : A -> B), g ⋆6 ret ∘ f = g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type

forall (g : B -> T C) (f : A -> B), g ⋆6 ret ∘ f = g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> T C
f: A -> B

g ⋆6 ret ∘ f = g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> T C
f: A -> B

map (bindt g) ∘ (ret ∘ f) = g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> T C
f: A -> B

map (bindt g) ∘ ret ∘ f = g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> T C
f: A -> B

bindt g ∘ ret ∘ f = g ∘ f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
G3: Type -> Type
Map_G1: Map G3
Pure_G1: Pure G3
Mult_G1: Mult G3
H1: Applicative G3
A, B, C: Type
g: B -> T C
f: A -> B

g ∘ f = g ∘ f
reflexivity. Qed. End traversable_monad_derived_kleisli_composition_laws. (** ** Derived Composition Laws *) (**********************************************************************) Section traversable_monad_derived_composition_laws. Import Kleisli.Monad.Notations. Import Kleisli.TraversableFunctor.Notations. Context `{Return_T: Return T} `{Map_T: Map T} `{Traverse_T: Traverse T} `{Bind_T: Bind T T} `{Bindt_TT: Bindt T T} `{! Compat_Map_Bindt T T} `{! Compat_Traverse_Bindt T T} `{! Compat_Bind_Bindt T T} `{! TraversableMonad T}. Context `{Map_U: Map U} `{Traverse_U: Traverse U} `{Bind_TU: Bind T U} `{Bindt_TU: Bindt T U} `{! Compat_Map_Bindt T U} `{! Compat_Traverse_Bindt T U} `{! Compat_Bind_Bindt T U} `{! TraversableRightPreModule T U}. Context `{Applicative G1} `{Applicative G2} (A B C: Type). (** *** Composition with <<traverse>> *) (********************************************************************)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall (g : B -> G2 C) (f : A -> G1 (T B)), map (traverse g) ∘ bindt f = bindt (map (traverse g) ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall (g : B -> G2 C) (f : A -> G1 (T B)), map (traverse g) ∘ bindt f = bindt (map (traverse g) ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 C
f: A -> G1 (T B)

map (traverse g) ∘ bindt f = bindt (map (traverse g) ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 C
f: A -> G1 (T B)

map (bindt (map ret ∘ g)) ∘ bindt f = bindt (map (traverse g) ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 C
f: A -> G1 (T B)

map (bindt (map ret ∘ g)) ∘ bindt f = bindt (map (bindt (map ret ∘ g)) ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 C
f: A -> G1 (T B)

bindt (map ret ∘ g ⋆6 f) = bindt (map (bindt (map ret ∘ g)) ∘ f)
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall (g : B -> G2 (T C)) (f : A -> G1 B), map (bindt g) ∘ traverse f = bindt (map g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall (g : B -> G2 (T C)) (f : A -> G1 B), map (bindt g) ∘ traverse f = bindt (map g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 (T C)
f: A -> G1 B

map (bindt g) ∘ traverse f = bindt (map g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 (T C)
f: A -> G1 B

map (bindt g) ∘ bindt (map ret ∘ f) = bindt (map g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 (T C)
f: A -> G1 B

bindt (g ⋆6 map ret ∘ f) = bindt (map g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 (T C)
f: A -> G1 B

bindt (map g ∘ f) = bindt (map g ∘ f)
reflexivity. Qed. (** *** Composition with <<bind>> *) (********************************************************************)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall (g : B -> T C) (f : A -> G1 (T B)), map (bind g) ∘ bindt f = bindt (map (bind g) ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall (g : B -> T C) (f : A -> G1 (T B)), map (bind g) ∘ bindt f = bindt (map (bind g) ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> T C
f: A -> G1 (T B)

map (bind g) ∘ bindt f = bindt (map (bind g) ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> T C
f: A -> G1 (T B)

map (bind g) ∘ bindt f = bindt (map (bindt g) ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> T C
f: A -> G1 (T B)

map (bindt g) ∘ bindt f = bindt (map (bindt g) ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> T C
f: A -> G1 (T B)

bindt (g ⋆6 f) = bindt (map (bindt g) ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> T C
f: A -> G1 (T B)

bindt (g ⋆6 f) = bindt (map (bindt g) ∘ f)
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall (g : B -> G2 (T C)) (f : A -> T B), bindt g ∘ bind f = bindt (bindt g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall (g : B -> G2 (T C)) (f : A -> T B), bindt g ∘ bind f = bindt (bindt g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 (T C)
f: A -> T B

bindt g ∘ bind f = bindt (bindt g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 (T C)
f: A -> T B

bindt g ∘ bindt f = bindt (bindt g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 (T C)
f: A -> T B

map (bindt g) ∘ bindt f = bindt (bindt g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 (T C)
f: A -> T B

bindt (g ⋆6 f) = bindt (bindt g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 (T C)
f: A -> T B

bindt (g ⋆6 f) = bindt (bindt g ∘ f)
reflexivity. Qed. (** *** Composition with <<map>> *) (********************************************************************)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall (g : B -> C) (f : A -> G1 (T B)), map (map g) ∘ bindt f = bindt (map (map g) ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall (g : B -> C) (f : A -> G1 (T B)), map (map g) ∘ bindt f = bindt (map (map g) ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> C
f: A -> G1 (T B)

map (map g) ∘ bindt f = bindt (map (map g) ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> C
f: A -> G1 (T B)

map (map g) ∘ bindt f = bindt (map (bindt (ret ∘ g)) ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> C
f: A -> G1 (T B)

map (bindt (ret ∘ g)) ∘ bindt f = bindt (map (bindt (ret ∘ g)) ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> C
f: A -> G1 (T B)

bindt (ret ∘ g ⋆6 f) = bindt (map (bindt (ret ∘ g)) ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> C
f: A -> G1 (T B)

bindt (ret ∘ g ⋆6 f) = bindt (map (bindt (ret ∘ g)) ∘ f)
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall (g : B -> G2 (T C)) (f : A -> B), bindt g ∘ map f = bindt (g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall (g : B -> G2 (T C)) (f : A -> B), bindt g ∘ map f = bindt (g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 (T C)
f: A -> B

bindt g ∘ map f = bindt (g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 (T C)
f: A -> B

bindt g ∘ bindt (ret ∘ f) = bindt (g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 (T C)
f: A -> B

map (bindt g) ∘ bindt (ret ∘ f) = bindt (g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 (T C)
f: A -> B

bindt (g ⋆6 ret ∘ f) = bindt (g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 (T C)
f: A -> B

bindt (g ⋆6 ret ∘ f) = bindt (g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 (T C)
f: A -> B

bindt (g ∘ f) = bindt (g ∘ f)
reflexivity. Qed. (** *** Composition between <<traverse>> and <<bind>> *) (********************************************************************)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall (g : B -> G2 C) (f : A -> T B), traverse g ∘ bind f = bindt (traverse g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall (g : B -> G2 C) (f : A -> T B), traverse g ∘ bind f = bindt (traverse g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 C
f: A -> T B

traverse g ∘ bind f = bindt (traverse g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 C
f: A -> T B

bindt (map ret ∘ g) ∘ bind f = bindt (traverse g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 C
f: A -> T B

bindt (map ret ∘ g) ∘ bindt f = bindt (traverse g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 C
f: A -> T B

map (bindt (map ret ∘ g)) ∘ bindt f = bindt (traverse g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 C
f: A -> T B

bindt (map ret ∘ g ⋆6 f) = bindt (traverse g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 C
f: A -> T B

bindt (map ret ∘ g ⋆6 f) = bindt (traverse g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 C
f: A -> T B

bindt (traverse g ∘ f) = bindt (traverse g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 C
f: A -> T B

bindt (bindt (map ret ∘ g) ∘ f) = bindt (bindt (map ret ∘ g) ∘ f)
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall (g : B -> T C) (f : A -> G1 B), map (bind g) ∘ traverse f = bindt (map g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall (g : B -> T C) (f : A -> G1 B), map (bind g) ∘ traverse f = bindt (map g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> T C
f: A -> G1 B

map (bind g) ∘ traverse f = bindt (map g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> T C
f: A -> G1 B

map (bind g) ∘ bindt (map ret ∘ f) = bindt (map g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> T C
f: A -> G1 B

map (bindt g) ∘ bindt (map ret ∘ f) = bindt (map g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> T C
f: A -> G1 B

bindt (g ⋆6 map ret ∘ f) = bindt (map g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> T C
f: A -> G1 B

bindt (g ⋆6 map ret ∘ f) = bindt (map g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> T C
f: A -> G1 B

bindt (map g ∘ f) = bindt (map g ∘ f)
reflexivity. Qed. (** ** Monad Laws *) (********************************************************************)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall (A B : Type) (f : A -> T B), bind f ∘ ret = f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall (A B : Type) (f : A -> T B), bind f ∘ ret = f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C, A0, B0: Type
f: A0 -> T B0

bind f ∘ ret = f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C, A0, B0: Type
f: A0 -> T B0

bindt f ∘ ret = f
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C, A0, B0: Type
f: A0 -> T B0

f = f
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall A : Type, bind ret = id
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall A : Type, bind ret = id
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C, A0: Type

bind ret = id
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C, A0: Type

bindt ret = id
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C, A0: Type

id = id
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall (g : B -> T C) (f : A -> T B), bind g ∘ bind f = bind (g ⋆ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall (g : B -> T C) (f : A -> T B), bind g ∘ bind f = bind (g ⋆ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> T C
f: A -> T B

bind g ∘ bind f = bind (g ⋆ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> T C
f: A -> T B

bindt g ∘ bindt f = bind (g ⋆ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> T C
f: A -> T B

map (bindt g) ∘ bindt f = bind (g ⋆ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> T C
f: A -> T B

map (bindt g) ∘ bindt f = bind (g ⋆ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> T C
f: A -> T B

bindt (g ⋆6 f) = bind (g ⋆ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> T C
f: A -> T B

bindt (g ⋆6 f) = bind (g ⋆ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> T C
f: A -> T B

bindt (g ⋆ f) = bind (g ⋆ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> T C
f: A -> T B

bindt (g ⋆ f) = bindt (g ⋆ f)
reflexivity. Qed. (** ** Traversable Laws *) (********************************************************************)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall A : Type, traverse id = id
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall A : Type, traverse id = id
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C, A0: Type

traverse id = id
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C, A0: Type

bindt (map ret ∘ id) = id
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C, A0: Type

bindt (map ret) = id
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C, A0: Type

bindt ret = id
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C, A0: Type

id = id
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall (g : B -> G2 C) (f : A -> G1 B), map (traverse g) ∘ traverse f = traverse (map g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall (g : B -> G2 C) (f : A -> G1 B), map (traverse g) ∘ traverse f = traverse (map g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 C
f: A -> G1 B

map (traverse g) ∘ traverse f = traverse (map g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 C
f: A -> G1 B

map (bindt (map ret ∘ g)) ∘ traverse f = traverse (map g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 C
f: A -> G1 B

map (bindt (map ret ∘ g)) ∘ bindt (map ret ∘ f) = traverse (map g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 C
f: A -> G1 B

bindt (map ret ∘ g ⋆6 map ret ∘ f) = traverse (map g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 C
f: A -> G1 B

bindt (map ret ∘ map g ∘ f) = traverse (map g ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 C
f: A -> G1 B

bindt (map ret ∘ map g ∘ f) = bindt (map ret ∘ (map g ∘ f))
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall ϕ : forall A : Type, G1 A -> G2 A, ApplicativeMorphism G1 G2 ϕ -> forall (A B : Type) (f : A -> G1 B), ϕ (U B) ∘ traverse f = traverse (ϕ B ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type

forall ϕ : forall A : Type, G1 A -> G2 A, ApplicativeMorphism G1 G2 ϕ -> forall (A B : Type) (f : A -> G1 B), ϕ (U B) ∘ traverse f = traverse (ϕ B ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
ϕ: forall A : Type, G1 A -> G2 A
ApplicativeMorphism0: ApplicativeMorphism G1 G2 ϕ
A0, B0: Type
f: A0 -> G1 B0

ϕ (U B0) ∘ traverse f = traverse (ϕ B0 ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
ϕ: forall A : Type, G1 A -> G2 A
ApplicativeMorphism0: ApplicativeMorphism G1 G2 ϕ
A0, B0: Type
f: A0 -> G1 B0
app1: Applicative G1
app2: Applicative G2

ϕ (U B0) ∘ traverse f = traverse (ϕ B0 ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
ϕ: forall A : Type, G1 A -> G2 A
ApplicativeMorphism0: ApplicativeMorphism G1 G2 ϕ
A0, B0: Type
f: A0 -> G1 B0
app1: Applicative G1
app2: Applicative G2

ϕ (U B0) ∘ bindt (map ret ∘ f) = traverse (ϕ B0 ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
ϕ: forall A : Type, G1 A -> G2 A
ApplicativeMorphism0: ApplicativeMorphism G1 G2 ϕ
A0, B0: Type
f: A0 -> G1 B0
app1: Applicative G1
app2: Applicative G2

ϕ (U B0) ∘ bindt (map ret ∘ f) = bindt (map ret ∘ (ϕ B0 ∘ f))
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
ϕ: forall A : Type, G1 A -> G2 A
ApplicativeMorphism0: ApplicativeMorphism G1 G2 ϕ
A0, B0: Type
f: A0 -> G1 B0
app1: Applicative G1
app2: Applicative G2

bindt (ϕ (T B0) ∘ (map ret ∘ f)) = bindt (map ret ∘ (ϕ B0 ∘ f))
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
ϕ: forall A : Type, G1 A -> G2 A
ApplicativeMorphism0: ApplicativeMorphism G1 G2 ϕ
A0, B0: Type
f: A0 -> G1 B0
app1: Applicative G1
app2: Applicative G2

bindt (ϕ (T B0) ∘ map ret ∘ f) = bindt (map ret ∘ (ϕ B0 ∘ f))
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_T: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U: Map U
Traverse_U: Traverse U
Bind_TU: Bind T U
Bindt_TU: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
ϕ: forall A : Type, G1 A -> G2 A
ApplicativeMorphism0: ApplicativeMorphism G1 G2 ϕ
A0, B0: Type
f: A0 -> G1 B0
app1: Applicative G1
app2: Applicative G2

bindt (map ret ∘ ϕ B0 ∘ f) = bindt (map ret ∘ (ϕ B0 ∘ f))
reflexivity. Qed. End traversable_monad_derived_composition_laws. (** ** Derived Typeclass Instances *) (**********************************************************************) Module DerivedInstances. Section instances. Context `{Return_T: Return T} `{Map_T: Map T} `{Traverse_T: Traverse T} `{Bind_TT: Bind T T} `{Bindt_TT: Bindt T T} `{! Compat_Map_Bindt T T} `{! Compat_Traverse_Bindt T T} `{! Compat_Bind_Bindt T T} `{! TraversableMonad T}.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_TT: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T

TraversableFunctor T
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_TT: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T

TraversableFunctor T
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_TT: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
A: Type

traverse id = id
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_TT: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 C
f: A -> G1 B
map (traverse g) ∘ traverse f = traverse (kc2 g f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_TT: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1, G2: Type -> Type
H: Map G1
H0: Mult G1
H1: Pure G1
H2: Map G2
H3: Mult G2
H4: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
morphism: ApplicativeMorphism G1 G2 ϕ
A, B: Type
f: A -> G1 B
ϕ (T B) ∘ traverse f = traverse (ϕ B ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_TT: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
A: Type

traverse id = id
apply traverse_id.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_TT: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 C
f: A -> G1 B

map (traverse g) ∘ traverse f = traverse (kc2 g f)
apply traverse_traverse.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_TT: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
G1, G2: Type -> Type
H: Map G1
H0: Mult G1
H1: Pure G1
H2: Map G2
H3: Mult G2
H4: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
morphism: ApplicativeMorphism G1 G2 ϕ
A, B: Type
f: A -> G1 B

ϕ (T B) ∘ traverse f = traverse (ϕ B ∘ f)
apply traverse_morphism. Qed. #[export] Instance RightPreModule_TraversableMonad: RightPreModule T T := {| kmod_bind1 := bind_id; kmod_bind2 := bind_bind; |}. #[export] Instance Monad_TraversableMonad: Monad T := {| kmon_bind0 := bind_ret; |}. #[local] Instance TraversableRightModule_TraversableMonad: TraversableRightModule T T := {| ktmod_monad := _; |}. (* #[export] Instance Functor_TraversableMonad: Functor T := DerivedInstances.Functor_TraversableFunctor. (* or DerivedInstances.Functor_Monad. *) *) Context `{Map_U_inst: Map U} `{Traverse_U_inst: Traverse U} `{Bind_U_inst: Bind T U} `{Bindt_U_inst: Bindt T U} `{! Compat_Map_Bindt T U} `{! Compat_Traverse_Bindt T U} `{! Compat_Bind_Bindt T U} `{! TraversableRightPreModule T U}.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_TT: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U_inst: Map U
Traverse_U_inst: Traverse U
Bind_U_inst: Bind T U
Bindt_U_inst: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U

TraversableFunctor U
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_TT: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U_inst: Map U
Traverse_U_inst: Traverse U
Bind_U_inst: Bind T U
Bindt_U_inst: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U

TraversableFunctor U
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_TT: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U_inst: Map U
Traverse_U_inst: Traverse U
Bind_U_inst: Bind T U
Bindt_U_inst: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
A: Type

traverse id = id
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_TT: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U_inst: Map U
Traverse_U_inst: Traverse U
Bind_U_inst: Bind T U
Bindt_U_inst: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 C
f: A -> G1 B
map (traverse g) ∘ traverse f = traverse (kc2 g f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_TT: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U_inst: Map U
Traverse_U_inst: Traverse U
Bind_U_inst: Bind T U
Bindt_U_inst: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1, G2: Type -> Type
H: Map G1
H0: Mult G1
H1: Pure G1
H2: Map G2
H3: Mult G2
H4: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
morphism: ApplicativeMorphism G1 G2 ϕ
A, B: Type
f: A -> G1 B
ϕ (U B) ∘ traverse f = traverse (ϕ B ∘ f)
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_TT: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U_inst: Map U
Traverse_U_inst: Traverse U
Bind_U_inst: Bind T U
Bindt_U_inst: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
A: Type

traverse id = id
apply traverse_id.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_TT: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U_inst: Map U
Traverse_U_inst: Traverse U
Bind_U_inst: Bind T U
Bindt_U_inst: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1: Type -> Type
Map_G: Map G1
Pure_G: Pure G1
Mult_G: Mult G1
H: Applicative G1
G2: Type -> Type
Map_G0: Map G2
Pure_G0: Pure G2
Mult_G0: Mult G2
H0: Applicative G2
A, B, C: Type
g: B -> G2 C
f: A -> G1 B

map (traverse g) ∘ traverse f = traverse (kc2 g f)
apply traverse_traverse.
T: Type -> Type
Return_T: Return T
Map_T: Map T
Traverse_T: Traverse T
Bind_TT: Bind T T
Bindt_TT: Bindt T T
Compat_Map_Bindt0: Compat_Map_Bindt T T
Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T
Compat_Bind_Bindt0: Compat_Bind_Bindt T T
TraversableMonad0: TraversableMonad T
U: Type -> Type
Map_U_inst: Map U
Traverse_U_inst: Traverse U
Bind_U_inst: Bind T U
Bindt_U_inst: Bindt T U
Compat_Map_Bindt1: Compat_Map_Bindt T U
Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U
Compat_Bind_Bindt1: Compat_Bind_Bindt T U
TraversableRightPreModule0: TraversableRightPreModule T U
G1, G2: Type -> Type
H: Map G1
H0: Mult G1
H1: Pure G1
H2: Map G2
H3: Mult G2
H4: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
morphism: ApplicativeMorphism G1 G2 ϕ
A, B: Type
f: A -> G1 B

ϕ (U B) ∘ traverse f = traverse (ϕ B ∘ f)
apply traverse_morphism. Qed. #[export] Instance RightPreModule_TraversableRightPreModule: RightPreModule T U := {| kmod_bind1 := bind_id; kmod_bind2 := bind_bind; |}. #[export] Instance RightModule_TraversableRightModule: RightModule T U := {| kmod_premod := _ |}. End instances. End DerivedInstances. (** * Notations *) (**********************************************************************) Module Notations. Infix "⋆6" := (kc6) (at level 60): tealeaves_scope. End Notations.