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.Kleisli.ContainerMonad
  Classes.Kleisli.TraversableMonad
  Classes.Kleisli.Theory.TraversableFunctor
  Classes.Kleisli.Theory.ContainerMonad.

Import Monoid.Notations.
Import Applicative.Notations.
Import TraversableFunctor.Notations.
Import TraversableMonad.Notations.
Import ContainerFunctor.Notations.
Import Subset.Notations.

#[local] Generalizable Variables U T G A B C ϕ M.
#[local] Arguments ret T%function_scope {Return} {A}%type_scope _.

Import Kleisli.TraversableMonad.DerivedInstances.

(** * Theory of Traversable Monads *)
(**********************************************************************)
Section traversable_monad_theory.

  Context
    `{ret_inst: Return T}
    `{Map_T_inst: Map T}
    `{Traverse_T_inst: Traverse T}
    `{Bind_T_inst: Bind T T}
    `{Bindt_T_inst: Bindt T T}
    `{ToSubset_T_inst: ToSubset T}
    `{! Compat_Map_Bindt T T}
    `{! Compat_Traverse_Bindt T T}
    `{! Compat_Bind_Bindt T T}
    `{! Compat_ToSubset_Traverse T}.

  Context
    `{Map_U_inst: Map U}
    `{Traverse_U_inst: Traverse U}
    `{Bind_U_inst: Bind T U}
    `{Bindt_U_inst: Bindt T U}
    `{ToSubset_U_inst: ToSubset U}
    `{! Compat_Map_Bindt T U}
    `{! Compat_Traverse_Bindt T U}
    `{! Compat_Bind_Bindt T U}
    `{! Compat_ToSubset_Traverse U}.

  Context
    `{Monad_inst: ! TraversableMonad T}
    `{Module_inst: ! TraversableRightPreModule T U}.

  (** ** <<mapReduce>> on Traversble Monads *)
  (********************************************************************)
  
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M

forall (B : Type) (g : B -> M) (A : Type) (f : A -> G (T B)), map (mapReduce g) ∘ bindt f = mapReduce (map (mapReduce g) ∘ f)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M

forall (B : Type) (g : B -> M) (A : Type) (f : A -> G (T B)), map (mapReduce g) ∘ bindt f = mapReduce (map (mapReduce g) ∘ f)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
B: Type
g: B -> M
A: Type
f: A -> G (T B)

map (mapReduce g) ∘ bindt f = mapReduce (map (mapReduce g) ∘ f)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
B: Type
g: B -> M
A: Type
f: A -> G (T B)

map (traverse g) ∘ bindt f = traverse (map (traverse g) ∘ f)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
B: Type
g: B -> M
A: Type
f: A -> G (T B)

bindt (map (traverse g) ∘ f) = traverse (map (traverse g) ∘ f)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
B: Type
g: B -> M
A: Type
f: A -> G (T B)

bindt (map (bindt (map (ret T) ∘ g)) ∘ f) = bindt (map (ret T) ∘ (map (bindt (map (ret T) ∘ g)) ∘ f))
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
B: Type
g: B -> M
A: Type
f: A -> G (T B)

bindt (map (bindt (map (ret T) ∘ g)) ∘ f) = bindt (map (ret T) ∘ map (bindt (map (ret T) ∘ g)) ∘ f)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
B: Type
g: B -> M
A: Type
f: A -> G (T B)

bindt (map (bindt ((fun t : const M False => t) ∘ g)) ∘ f) = bindt ((fun t : const (G M) False => t) ∘ map (bindt ((fun t : const M False => t) ∘ g)) ∘ f)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
B: Type
g: B -> M
A: Type
f: A -> G (T B)

bindt (map (bindt (id ∘ g)) ∘ f) = bindt (id ∘ map (bindt (id ∘ g)) ∘ f)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
B: Type
g: B -> M
A: Type
f: A -> G (T B)

bindt (map (bindt g) ∘ f) = bindt (map (bindt g) ∘ f)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
B: Type
g: B -> M
A: Type
f: A -> G (T B)

Map_compose G (const M) = (fun (X Y : Type) (_ : X -> Y) => id)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
B: Type
g: B -> M
A: Type
f: A -> G (T B)
Mult_compose G (const M) = Mult_const
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
B: Type
g: B -> M
A: Type
f: A -> G (T B)

Map_compose G (const M) = (fun (X Y : Type) (_ : X -> Y) => id)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
B: Type
g: B -> M
A: Type
f: A -> G (T B)
A', B': Type
f': A' -> B'

Map_compose G (const M) A' B' f' = id
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
B: Type
g: B -> M
A: Type
f: A -> G (T B)
A', B': Type
f': A' -> B'

map (map f') = id
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
B: Type
g: B -> M
A: Type
f: A -> G (T B)
A', B': Type
f': A' -> B'

map id = id
now rewrite (fun_map_id (F := G)).
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
B: Type
g: B -> M
A: Type
f: A -> G (T B)

Mult_compose G (const M) = Mult_const
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
B: Type
g: B -> M
A: Type
f: A -> G (T B)
A', B': Type
a: (G ∘ const M) A'
b: (G ∘ const M) B'

Mult_compose G (const M) A' B' (a, b) = Mult_const A' B' (a, b)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
B: Type
g: B -> M
A: Type
f: A -> G (T B)
A', B': Type
a: (G ∘ const M) A'
b: (G ∘ const M) B'

map mult (fst (a, b) ⊗ snd (a, b)) = a ● b
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
B: Type
g: B -> M
A: Type
f: A -> G (T B)
A', B': Type
a: G (const M A')
b: G (const M B')

map mult (fst (a, b) ⊗ snd (a, b)) = a ● b
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
B: Type
g: B -> M
A: Type
f: A -> G (T B)
A', B': Type
a, b: G M

map mult (fst (a, b) ⊗ snd (a, b)) = a ● b
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H: Applicative G
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
B: Type
g: B -> M
A: Type
f: A -> G (T B)
A', B': Type
a, b: G M

map mult (a ⊗ b) = a ● b
reflexivity. Qed.
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M

forall (B : Type) (g : B -> M) (A : Type) (f : A -> T B), mapReduce g ∘ bind f = mapReduce (mapReduce g ∘ f)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M

forall (B : Type) (g : B -> M) (A : Type) (f : A -> T B), mapReduce g ∘ bind f = mapReduce (mapReduce g ∘ f)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
B: Type
g: B -> M
A: Type
f: A -> T B

mapReduce g ∘ bind f = mapReduce (mapReduce g ∘ f)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
B: Type
g: B -> M
A: Type
f: A -> T B

traverse g ∘ bind f = traverse (traverse g ∘ f)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
B: Type
g: B -> M
A: Type
f: A -> T B

bindt (traverse g ∘ f) = traverse (traverse g ∘ f)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
B: Type
g: B -> M
A: Type
f: A -> T B

bindt (bindt (map (ret T) ∘ g) ∘ f) = traverse (bindt (map (ret T) ∘ g) ∘ f)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
B: Type
g: B -> M
A: Type
f: A -> T B

bindt (bindt (map (ret T) ∘ g) ∘ f) = bindt (map (ret T) ∘ (bindt (map (ret T) ∘ g) ∘ f))
reflexivity. Qed.
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M

forall (A : Type) (f : A -> M), mapReduce f ∘ ret T = f
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M

forall (A : Type) (f : A -> M), mapReduce f ∘ ret T = f
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
A: Type
f: A -> M

mapReduce f ∘ ret T = f
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
A: Type
f: A -> M

traverse f ∘ ret T = f
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
A: Type
f: A -> M

bindt (map (ret T) ∘ f) ∘ ret T = f
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
A: Type
f: A -> M

map (ret T) ∘ f = f
reflexivity. Qed. (** ** <<tolist>> on Traversable Monads *) (********************************************************************)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U

forall A : Type, tolist ∘ ret T = ret list
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U

forall A : Type, tolist ∘ ret T = ret list
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A: Type

tolist ∘ ret T = ret list
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A: Type

mapReduce (ret list) ∘ ret T = ret list
now rewrite mapReduce_ret. Qed.
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U

forall (A B : Type) (f : A -> T B), tolist ∘ bind f = bind (tolist ∘ f) ∘ tolist
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U

forall (A B : Type) (f : A -> T B), tolist ∘ bind f = bind (tolist ∘ f) ∘ tolist
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A, B: Type
f: A -> T B

tolist ∘ bind f = bind (tolist ∘ f) ∘ tolist
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A, B: Type
f: A -> T B

mapReduce (ret list) ∘ bind f = bind (mapReduce (ret list) ∘ f) ∘ mapReduce (ret list)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A, B: Type
f: A -> T B

mapReduce (mapReduce (ret list) ∘ f) = bind (mapReduce (ret list) ∘ f) ∘ mapReduce (ret list)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A, B: Type
f: A -> T B

mapReduce (mapReduce (ret list) ∘ f) = mapReduce (bind (mapReduce (ret list) ∘ f) ∘ ret list)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A, B: Type
f: A -> T B

mapReduce (mapReduce (ret list) ∘ f) = mapReduce (mapReduce (ret list) ∘ f)
reflexivity. Qed. (** ** <<tosubset>> on Traversable Monads *) (********************************************************************)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U

forall A : Type, tosubset ∘ ret T = ret subset
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U

forall A : Type, tosubset ∘ ret T = ret subset
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A: Type

tosubset ∘ ret T = ret subset
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A: Type

mapReduce (ret subset) ∘ ret T = ret subset
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A: Type

ret subset = ret subset
reflexivity. Qed.
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U

forall (A B : Type) (f : A -> T B), tosubset ∘ bind f = bind (tosubset ∘ f) ∘ tosubset
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U

forall (A B : Type) (f : A -> T B), tosubset ∘ bind f = bind (tosubset ∘ f) ∘ tosubset
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A, B: Type
f: A -> T B

tosubset ∘ bind f = bind (tosubset ∘ f) ∘ tosubset
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A, B: Type
f: A -> T B

mapReduce (ret subset) ∘ bind f = bind (tosubset ∘ f) ∘ tosubset
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A, B: Type
f: A -> T B

mapReduce (mapReduce (ret subset) ∘ f) = bind (tosubset ∘ f) ∘ tosubset
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A, B: Type
f: A -> T B

mapReduce (mapReduce (ret subset) ∘ f) = bind (tosubset ∘ f) ∘ mapReduce (ret subset)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A, B: Type
f: A -> T B

mapReduce (mapReduce (ret subset) ∘ f) = mapReduce (bind (tosubset ∘ f) ∘ ret subset)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A, B: Type
f: A -> T B

mapReduce (mapReduce (ret subset) ∘ f) = mapReduce (tosubset ∘ f)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A, B: Type
f: A -> T B

mapReduce (mapReduce (ret subset) ∘ f) = mapReduce (mapReduce (ret subset) ∘ f)
reflexivity. Qed. (** ** <<element_of>> on Traversable Monads *) (********************************************************************)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U

forall (A : Type) (a : A), element_of a ∘ ret T = {{a}}
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U

forall (A : Type) (a : A), element_of a ∘ ret T = {{a}}
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A: Type
a: A

element_of a ∘ ret T = {{a}}
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A: Type
a, a': A

(element_of a ∘ ret T) a' = {{a}} a'
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A: Type
a, a': A

tosubset (ret T a') a = {{a}} a'
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A: Type
a, a': A

(tosubset ∘ ret T) a' a = {{a}} a'
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A: Type
a, a': A

ret subset a' a = {{a}} a'
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A: Type
a, a': A

(a' = a) = (a = a')
now propext. Qed.
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U

forall (A B : Type) (f : A -> T B) (b : B), element_of b ∘ bind f = mapReduce (mapReduce {{b}} ∘ f)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U

forall (A B : Type) (f : A -> T B) (b : B), element_of b ∘ bind f = mapReduce (mapReduce {{b}} ∘ f)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A, B: Type
f: A -> T B
b: B

element_of b ∘ bind f = mapReduce (mapReduce {{b}} ∘ f)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A, B: Type
f: A -> T B
b: B

mapReduce {{b}} ∘ bind f = mapReduce (mapReduce {{b}} ∘ f)
T: Type -> Type
ret_inst: Return T
Map_T_inst: Map T
Traverse_T_inst: Traverse T
Bind_T_inst: Bind T T
Bindt_T_inst: Bindt T T
ToSubset_T_inst: ToSubset 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
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse 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
ToSubset_U_inst: ToSubset 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
Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U
Monad_inst: TraversableMonad T
Module_inst: TraversableRightPreModule T U
A, B: Type
f: A -> T B
b: B

mapReduce (mapReduce {{b}} ∘ f) = mapReduce (mapReduce {{b}} ∘ f)
reflexivity. Qed. End traversable_monad_theory.