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.DecoratedFunctor
Classes.Kleisli.Monad
Classes.Kleisli.Comonad
Functors.Early.Writer.From Tealeaves Require Import
Classes.Categorical.Monad (join).Import Monoid.Notations.#[local] Generalizable VariablesW T U.(** * Decorated Monads *)(**********************************************************************)(** ** Operation <<bindd>> *)(**********************************************************************)ClassBindd (W: Type) (TU: Type -> Type):=
bindd: forall (AB: Type), (W * A -> T B) -> U A -> U B.#[global] Arguments bindd {W}%type_scope {T U}%function_scope
{Bindd} {A B}%type_scope.(** ** Kleisli Composition *)(**********************************************************************)Definitionkc5
{W: Type}
{T: Type -> Type}
`{Monoid_op_W: Monoid_op W}
`{Bindd_WTT: Bindd W T T}
{A B C: Type}:
(W * B -> T C) ->
(W * A -> T B) ->
(W * A -> T C) :=
fungf '(w, a) =>
@bindd W T T Bindd_WTT B C (g ⦿ w) (f (w, a)).#[local] Infix"⋆5" := (kc5) (at level60): tealeaves_scope.(** ** Typeclass *)(**********************************************************************)ClassDecoratedRightPreModule (W: Type) (TU: Type -> Type)
`{Monoid_op_W: Monoid_op W}
`{Return_T: Return T}
`{Bindd_WTT: Bindd W T T}
`{Bindd_WTU: Bindd W T U} :=
{ kdmod_bindd1:
forall (A: Type),
bindd (U := U) (ret ∘ extract (A := A)) = id;
kdmod_bindd2:
forall (ABC: Type) (g: W * B -> T C) (f: W * A -> T B),
bindd (U := U) g ∘ bindd f = bindd (g ⋆5 f);
}.ClassDecoratedMonad
(W: Type)
(T: Type -> Type)
`{Monoid_unit_W: Monoid_unit W}
`{Monoid_op_W: Monoid_op W}
`{Return_T: Return T}
`{Bindd_WTT: Bindd W T T} :=
{ kdm_monoid :> Monoid W;
kdm_premod :> DecoratedRightPreModule W T T;
kdm_bindd0: forall (AB: Type) (f: W * A -> T B),
bindd f ∘ ret = f ∘ ret;
}.ClassDecoratedRightModule
(W: Type)
(T: Type -> Type)
(U: Type -> Type)
`{Monoid_unit_W: Monoid_unit W}
`{Monoid_op_W: Monoid_op W}
`{Return_T: Return T}
`{Bindd_WTT: Bindd W T T}
`{Bindd_WTU: Bindd W T U}
:=
{ kdmod_monad :> DecoratedMonad W T;
kdmod_premod :> DecoratedRightPreModule W T U;
}.#[local] InstanceDecoratedRightModule_DecoratedMonad
(W: Type)
(T: Type -> Type)
`{DecoratedMonad_WT: DecoratedMonad W T}:
DecoratedRightModule W T T :=
{| kdmod_premod := kdm_premod;
|}.
W: Type T: Type -> Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T
forallA : Type, bindd (ret ∘ extract) = id
W: Type T: Type -> Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T
forallA : Type, bindd (ret ∘ extract) = id
apply kdmod_bindd1.Qed.
W: Type T: Type -> Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T
forall (ABC : Type) (g : W * B -> T C)
(f : W * A -> T B),
bindd g ∘ bindd f = bindd (g ⋆5 f)
W: Type T: Type -> Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T
forall (ABC : Type) (g : W * B -> T C)
(f : W * A -> T B),
bindd g ∘ bindd f = bindd (g ⋆5 f)
apply kdmod_bindd2.Qed.(** ** Kleisli Category Laws *)(**********************************************************************)Sectiondecorated_monad_kleisli_category.Context
(T: Type -> Type)
`{DecoratedMonad W T}.#[local] Generalizable VariablesA B C D.(** *** Interaction with [incr], [preincr] *)(********************************************************************)
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T
forall (BC : Type) (g : W * B -> T C) (A : Type)
(f : W * A -> T B) (w : W),
g ∘ incr w ⋆5 f ∘ incr w = (g ⋆5 f) ∘ incr w
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T
forall (BC : Type) (g : W * B -> T C) (A : Type)
(f : W * A -> T B) (w : W),
g ∘ incr w ⋆5 f ∘ incr w = (g ⋆5 f) ∘ incr w
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T B, C: Type g: W * B -> T C A: Type f: W * A -> T B w: W
g ∘ incr w ⋆5 f ∘ incr w = (g ⋆5 f) ∘ incr w
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T B, C: Type g: W * B -> T C A: Type f: W * A -> T B w: W
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T B, C: Type g: W * B -> T C A: Type f: W * A -> T B w, w': W a: A
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T B, C: Type g: W * B -> T C A: Type f: W * A -> T B w, w': W a: A
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T B, C: Type g: W * B -> T C A: Type f: W * A -> T B w, w': W a: A
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T B, C: Type g: W * B -> T C A: Type f: W * A -> T B w, w': W a: A
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T
forall (BC : Type) (g : W * B -> T C) (A : Type)
(f : W * A -> T B) (w : W),
(g ⋆5 f) ⦿ w = g ⦿ w ⋆5 f ⦿ w
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T
forall (BC : Type) (g : W * B -> T C) (A : Type)
(f : W * A -> T B) (w : W),
(g ⋆5 f) ⦿ w = g ⦿ w ⋆5 f ⦿ w
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T B, C: Type g: W * B -> T C A: Type f: W * A -> T B w: W
(g ⋆5 f) ⦿ w = g ⦿ w ⋆5 f ⦿ w
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T B, C: Type g: W * B -> T C A: Type f: W * A -> T B w: W
(g ⋆5 f) ∘ incr w = g ∘ incr w ⋆5 f ∘ incr w
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T B, C: Type g: W * B -> T C A: Type f: W * A -> T B w: W
(g ⋆5 f) ∘ incr w = (g ⋆5 f) ∘ incr w
reflexivity.Qed.(** *** Right identity law *)(********************************************************************)
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T B, C: Type
forallg : W * B -> T C, g ⋆5 ret ∘ extract = g
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T B, C: Type
forallg : W * B -> T C, g ⋆5 ret ∘ extract = g
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T B, C: Type g: W * B -> T C
g ⋆5 ret ∘ extract = g
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T B, C: Type g: W * B -> T C
(fun '(w, a) => bindd (g ⦿ w) ((ret ∘ extract) (w, a))) =
g
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T B, C: Type g: W * B -> T C w: W a: B
bindd (g ⦿ w) ((ret ∘ extract) (w, a)) = g (w, a)
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T B, C: Type g: W * B -> T C w: W a: B
bindd (g ⦿ w) (ret a) = g (w, a)
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T B, C: Type g: W * B -> T C w: W a: B
(bindd (g ⦿ w) ∘ ret) a = g (w, a)
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T B, C: Type g: W * B -> T C w: W a: B
(g ⦿ w ∘ ret) a = g (w, a)
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T B, C: Type g: W * B -> T C w: W a: B
(g ∘ pair w) a = g (w, a)
reflexivity.Qed.(** *** Left identity law *)(********************************************************************)
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T A, B: Type
forallf : W * A -> T B, ret ∘ extract ⋆5 f = f
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T A, B: Type
forallf : W * A -> T B, ret ∘ extract ⋆5 f = f
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T A, B: Type f: W * A -> T B
ret ∘ extract ⋆5 f = f
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T A, B: Type f: W * A -> T B
(fun '(w, a) => bindd ((ret ∘ extract) ⦿ w) (f (w, a))) =
f
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T A, B: Type f: W * A -> T B w: W a: A
bindd ((ret ∘ extract) ⦿ w) (f (w, a)) = f (w, a)
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T A, B: Type f: W * A -> T B w: W a: A
bindd (ret ∘ extract ⦿ w) (f (w, a)) = f (w, a)
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T A, B: Type f: W * A -> T B w: W a: A
bindd (ret ∘ extract) (f (w, a)) = f (w, a)
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T A, B: Type f: W * A -> T B w: W a: A
id (f (w, a)) = f (w, a)
reflexivity.Qed.(** *** Associativity law *)(********************************************************************)
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T A, B, C, D: Type
forall (h : W * C -> T D) (g : W * B -> T C)
(f : W * A -> T B), h ⋆5 (g ⋆5 f) = (h ⋆5 g) ⋆5 f
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T A, B, C, D: Type
forall (h : W * C -> T D) (g : W * B -> T C)
(f : W * A -> T B), h ⋆5 (g ⋆5 f) = (h ⋆5 g) ⋆5 f
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T A, B, C, D: Type h: W * C -> T D g: W * B -> T C f: W * A -> T B
h ⋆5 (g ⋆5 f) = (h ⋆5 g) ⋆5 f
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T A, B, C, D: Type h: W * C -> T D g: W * B -> T C f: W * A -> T B
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T A, B, C, D: Type h: W * C -> T D g: W * B -> T C f: W * A -> T B w: W a: A
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T A, B, C, D: Type h: W * C -> T D g: W * B -> T C f: W * A -> T B w: W a: A
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T A, B, C, D: Type h: W * C -> T D g: W * B -> T C f: W * A -> T B w: W a: A
bindd (h ⦿ w ⋆5 g ⦿ w) (f (w, a)) =
bindd ((fun '(w, a) => bindd (h ⦿ w) (g (w, a))) ⦿ w)
(f (w, a))
T: Type -> Type W: Type Monoid_unit_W: Monoid_unit W Monoid_op_W: Monoid_op W Return_T: Return T Bindd_WTT: Bindd W T T H: DecoratedMonad W T A, B, C, D: Type h: W * C -> T D g: W * B -> T C f: W * A -> T B w: W a: A
reflexivity.Qed.Enddecorated_monad_kleisli_category.(** ** Decorated Monad Homomorphisms *)(**********************************************************************)ClassDecoratedMonadHom
(W: Type)
(T: Type -> Type)
(U: Type -> Type)
`{Return T} `{Bindd W T T}
`{Return U} `{Bindd W U U}
(ϕ: forall (A: Type), T A -> U A) :=
{ kdm_hom_bind: forall (AB: Type) (f: W * A -> T B),
ϕ B ∘ @bindd W T T _ A B f = @bindd W U U _ A B (ϕ B ∘ f) ∘ ϕ A;
kdm_hom_ret: forall (A: Type),
ϕ A ∘ @ret T _ A = @ret U _ A;
}.ClassDecoratedRightModuleHom
(W: Type)
(T: Type -> Type)
(U: Type -> Type)
(V: Type -> Type)
`{Monoid_unit_W: Monoid_unit W}
`{Monoid_op_W: Monoid_op W}
`{Return_T: Return T}
`{Bindd_WTT: Bindd W T V}
`{Bindd_WTU: Bindd W T U}
(ϕ: forall (A: Type), U A -> V A) :=
{ kdmod_hom_bind: forall (AB: Type) (f: W * A -> T B),
ϕ B ∘ @bindd W T U _ A B f = @bindd W T V _ A B f ∘ ϕ A;
}.ClassParallelDecoratedRightModuleHom
(TT'UU': Type -> Type)
`{Return T}
`{Bindd W T U}
`{Bindd W T' U'}
(ψ: forall (A: Type), T A -> T' A)
(ϕ: forall (A: Type), U A -> U' A) :=
{ kdmod_parhom_bind: forall (AB: Type) (f: W * A -> T B),
ϕ B ∘ bindd f = bindd (ψ B ∘ f) ∘ ϕ A;
}.(** * Derived Structures *)(**********************************************************************)(** ** Derived Operations *)(**********************************************************************)ModuleDerivedOperations.Sectionoperations.Context
(W: Type)
(T: Type -> Type)
(U: Type -> Type)
`{Return_T: Return T}
`{Bindd_WTU: Bindd W T U}.#[export] InstanceMap_Bindd: Map U :=
funABf => bindd (ret ∘ f ∘ extract).#[export] InstanceBind_Bindd: Bind T U :=
funABf => bindd (f ∘ extract).#[export] InstanceMapd_Bindd: Mapd W U :=
funABf => bindd (ret ∘ f).Endoperations.EndDerivedOperations.Sectioncompatibility.Context
(W: Type)
(T: Type -> Type)
(U: Type -> Type)
`{Map_U: Map U}
`{Bind_TU: Bind T U}
`{Mapd_WU: Mapd W U}
`{Return_T: Return T}
`{Bindd_WTU: Bindd W T U}.ClassCompat_Map_Bindd: Prop :=
compat_map_bindd:
Map_U = @DerivedOperations.Map_Bindd W T U Return_T Bindd_WTU.ClassCompat_Mapd_Bindd: Prop :=
compat_mapd_bindd:
Mapd_WU = @DerivedOperations.Mapd_Bindd W T U Return_T Bindd_WTU.ClassCompat_Bind_Bindd: Prop :=
compat_bind_bindd:
Bind_TU = @DerivedOperations.Bind_Bindd W T U Bindd_WTU.Endcompatibility.Sectionself.Context
`{Return_T: Return T}
`{Bindd_WTU: Bindd W T U}.
T: Type -> Type Return_T: Return T W: Type U: Type -> Type Bindd_WTU: Bindd W T U
Compat_Map_Bindd W T U
T: Type -> Type Return_T: Return T W: Type U: Type -> Type Bindd_WTU: Bindd W T U
Compat_Map_Bindd W T U
reflexivity.Qed.
T: Type -> Type Return_T: Return T W: Type U: Type -> Type Bindd_WTU: Bindd W T U
Compat_Mapd_Bindd W T U
T: Type -> Type Return_T: Return T W: Type U: Type -> Type Bindd_WTU: Bindd W T U
Compat_Mapd_Bindd W T U
reflexivity.Qed.
T: Type -> Type Return_T: Return T W: Type U: Type -> Type Bindd_WTU: Bindd W T U
Compat_Bind_Bindd W T U
T: Type -> Type Return_T: Return T W: Type U: Type -> Type Bindd_WTU: Bindd W T U
Compat_Bind_Bindd W T U
reflexivity.Qed.
T: Type -> Type Return_T: Return T W: Type U: Type -> Type Bindd_WTU: Bindd W T U Map_U: Map U Bind_TU: Bind T U Compat_Bind_Bindd0: Compat_Bind_Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U
Compat_Map_Bind T U
T: Type -> Type Return_T: Return T W: Type U: Type -> Type Bindd_WTU: Bindd W T U Map_U: Map U Bind_TU: Bind T U Compat_Bind_Bindd0: Compat_Bind_Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U
Compat_Map_Bind T U
T: Type -> Type Return_T: Return T W: Type U: Type -> Type Bindd_WTU: Bindd W T U Map_U: Map U Bind_TU: Bind T U Compat_Bind_Bindd0: Compat_Bind_Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U
Map_U = DerivedOperations.Map_Bind T U
T: Type -> Type Return_T: Return T W: Type U: Type -> Type Bindd_WTU: Bindd W T U Map_U: Map U Bind_TU: Bind T U Compat_Bind_Bindd0: Compat_Bind_Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U
DerivedOperations.Map_Bindd W T U =
DerivedOperations.Map_Bind T U
T: Type -> Type Return_T: Return T W: Type U: Type -> Type Bindd_WTU: Bindd W T U Map_U: Map U Bind_TU: Bind T U Compat_Bind_Bindd0: Compat_Bind_Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U
DerivedOperations.Map_Bindd W T U =
DerivedOperations.Map_Bind T U
reflexivity.Qed.
T: Type -> Type Return_T: Return T W: Type U: Type -> Type Bindd_WTU: Bindd W T U Map_U: Map U Mapd_WU: Mapd W U Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U
Compat_Map_Mapd W U
T: Type -> Type Return_T: Return T W: Type U: Type -> Type Bindd_WTU: Bindd W T U Map_U: Map U Mapd_WU: Mapd W U Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U
Compat_Map_Mapd W U
T: Type -> Type Return_T: Return T W: Type U: Type -> Type Bindd_WTU: Bindd W T U Map_U: Map U Mapd_WU: Mapd W U Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U
Map_U = DerivedOperations.Map_Mapd W U
T: Type -> Type Return_T: Return T W: Type U: Type -> Type Bindd_WTU: Bindd W T U Map_U: Map U Mapd_WU: Mapd W U Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U
DerivedOperations.Map_Bindd W T U =
DerivedOperations.Map_Mapd W U
T: Type -> Type Return_T: Return T W: Type U: Type -> Type Bindd_WTU: Bindd W T U Map_U: Map U Mapd_WU: Mapd W U Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U
DerivedOperations.Map_Bindd W T U =
DerivedOperations.Map_Mapd W U
reflexivity.Qed.Endself.Sectioncompat_laws.#[local] Generalizable VariablesA B.Context
`{Map_U: Map U}
`{Bind_TU: Bind T U}
`{Mapd_WU: Mapd W U}
`{Return_T: Return T}
`{Bindd_WTU: Bindd W T U}.
U: Type -> Type Map_U: Map U T: Type -> Type Bind_TU: Bind T U W: Type Mapd_WU: Mapd W U Return_T: Return T Bindd_WTU: Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U A, B: Type f: A -> B
map f = bindd (ret ∘ f ∘ extract)
U: Type -> Type Map_U: Map U T: Type -> Type Bind_TU: Bind T U W: Type Mapd_WU: Mapd W U Return_T: Return T Bindd_WTU: Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U A, B: Type f: A -> B
map f = bindd (ret ∘ f ∘ extract)
U: Type -> Type Map_U: Map U T: Type -> Type Bind_TU: Bind T U W: Type Mapd_WU: Mapd W U Return_T: Return T Bindd_WTU: Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U A, B: Type f: A -> B
DerivedOperations.Map_Bindd W T U A B f =
bindd (ret ∘ f ∘ extract)
reflexivity.Qed.
U: Type -> Type Map_U: Map U T: Type -> Type Bind_TU: Bind T U W: Type Mapd_WU: Mapd W U Return_T: Return T Bindd_WTU: Bindd W T U Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T U A, B: Type f: W * A -> B
mapd f = bindd (ret ∘ f)
U: Type -> Type Map_U: Map U T: Type -> Type Bind_TU: Bind T U W: Type Mapd_WU: Mapd W U Return_T: Return T Bindd_WTU: Bindd W T U Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T U A, B: Type f: W * A -> B
mapd f = bindd (ret ∘ f)
U: Type -> Type Map_U: Map U T: Type -> Type Bind_TU: Bind T U W: Type Mapd_WU: Mapd W U Return_T: Return T Bindd_WTU: Bindd W T U Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T U A, B: Type f: W * A -> B
DerivedOperations.Mapd_Bindd W T U A B f =
bindd (ret ∘ f)
reflexivity.Qed.
U: Type -> Type Map_U: Map U T: Type -> Type Bind_TU: Bind T U W: Type Mapd_WU: Mapd W U Return_T: Return T Bindd_WTU: Bindd W T U Compat_Bind_Bindd0: Compat_Bind_Bindd W T U A, B: Type f: A -> T B
bind f = bindd (f ∘ extract)
U: Type -> Type Map_U: Map U T: Type -> Type Bind_TU: Bind T U W: Type Mapd_WU: Mapd W U Return_T: Return T Bindd_WTU: Bindd W T U Compat_Bind_Bindd0: Compat_Bind_Bindd W T U A, B: Type f: A -> T B
bind f = bindd (f ∘ extract)
U: Type -> Type Map_U: Map U T: Type -> Type Bind_TU: Bind T U W: Type Mapd_WU: Mapd W U Return_T: Return T Bindd_WTU: Bindd W T U Compat_Bind_Bindd0: Compat_Bind_Bindd W T U A, B: Type f: A -> T B
DerivedOperations.Bind_Bindd W T U A B f =
bindd (f ∘ extract)
reflexivity.Qed.
U: Type -> Type Map_U: Map U T: Type -> Type Bind_TU: Bind T U W: Type Mapd_WU: Mapd W U Return_T: Return T Bindd_WTU: Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U Compat_Bind_Bindd0: Compat_Bind_Bindd W T U
forall (AB : Type) (f : A -> B),
map f = bind (ret ∘ f)
U: Type -> Type Map_U: Map U T: Type -> Type Bind_TU: Bind T U W: Type Mapd_WU: Mapd W U Return_T: Return T Bindd_WTU: Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U Compat_Bind_Bindd0: Compat_Bind_Bindd W T U
forall (AB : Type) (f : A -> B),
map f = bind (ret ∘ f)
U: Type -> Type Map_U: Map U T: Type -> Type Bind_TU: Bind T U W: Type Mapd_WU: Mapd W U Return_T: Return T Bindd_WTU: Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U Compat_Bind_Bindd0: Compat_Bind_Bindd W T U A, B: Type f: A -> B
map f = bind (ret ∘ f)
U: Type -> Type Map_U: Map U T: Type -> Type Bind_TU: Bind T U W: Type Mapd_WU: Mapd W U Return_T: Return T Bindd_WTU: Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U Compat_Bind_Bindd0: Compat_Bind_Bindd W T U A, B: Type f: A -> B
bindd (ret ∘ f ∘ extract) = bind (ret ∘ f)
U: Type -> Type Map_U: Map U T: Type -> Type Bind_TU: Bind T U W: Type Mapd_WU: Mapd W U Return_T: Return T Bindd_WTU: Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U Compat_Bind_Bindd0: Compat_Bind_Bindd W T U A, B: Type f: A -> B
bindd (ret ∘ f ∘ extract) = bindd (ret ∘ f ∘ extract)
reflexivity.Qed.
U: Type -> Type Map_U: Map U T: Type -> Type Bind_TU: Bind T U W: Type Mapd_WU: Mapd W U Return_T: Return T Bindd_WTU: Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T U
forall (AB : Type) (f : A -> B),
map f = mapd (f ∘ extract)
U: Type -> Type Map_U: Map U T: Type -> Type Bind_TU: Bind T U W: Type Mapd_WU: Mapd W U Return_T: Return T Bindd_WTU: Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T U
forall (AB : Type) (f : A -> B),
map f = mapd (f ∘ extract)
U: Type -> Type Map_U: Map U T: Type -> Type Bind_TU: Bind T U W: Type Mapd_WU: Mapd W U Return_T: Return T Bindd_WTU: Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T U A, B: Type f: A -> B
map f = mapd (f ∘ extract)
U: Type -> Type Map_U: Map U T: Type -> Type Bind_TU: Bind T U W: Type Mapd_WU: Mapd W U Return_T: Return T Bindd_WTU: Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T U A, B: Type f: A -> B
bindd (ret ∘ f ∘ extract) = mapd (f ∘ extract)
U: Type -> Type Map_U: Map U T: Type -> Type Bind_TU: Bind T U W: Type Mapd_WU: Mapd W U Return_T: Return T Bindd_WTU: Bindd W T U Compat_Map_Bindd0: Compat_Map_Bindd W T U Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T U A, B: Type f: A -> B
reflexivity.Qed.Endcompat_laws.(** ** Derived Kleisli Composition Laws *)(**********************************************************************)Sectiondecorated_monad_derived_kleisli_laws.Import Kleisli.Monad.Notations.Import Kleisli.Comonad.Notations.#[local] Generalizable VariablesA B C.Context
`{Return_T: Return T}
`{Bindd_WTT: Bindd W T T}
`{Mapd_WT: Mapd W T}
`{Bind_TT: Bind T T}
`{Map_T: Map T}
`{op: Monoid_op W}
`{unit: Monoid_unit W}
`{! Compat_Map_Bindd W T T}
`{! Compat_Bind_Bindd W T T}
`{! Compat_Mapd_Bindd W T T}
`{! DecoratedMonad W T}.Context {ABC: Type}.(** *** Homogeneous cases *)(********************************************************************)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> C) (f : W * A -> B),
ret ∘ g ⋆5 ret ∘ f = ret ∘ (g ⋆1 f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> C) (f : W * A -> B),
ret ∘ g ⋆5 ret ∘ f = ret ∘ (g ⋆1 f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: W * A -> B
ret ∘ g ⋆5 ret ∘ f = ret ∘ (g ⋆1 f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: W * A -> B
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: W * A -> B w': W a: A
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: W * A -> B w': W a: A
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: W * A -> B w': W a: A
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: W * A -> B w': W a: A
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: W * A -> B w': W a: A
(ret ∘ g ∘ pair w') (f (w', a)) =
(ret ∘ (g ⋆1 f)) (w', a)
reflexivity.Qed.
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : B -> T C) (f : A -> T B),
g ∘ extract ⋆5 f ∘ extract = (g ⋆ f) ∘ extract
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : B -> T C) (f : A -> T B),
g ∘ extract ⋆5 f ∘ extract = (g ⋆ f) ∘ extract
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: A -> T B
g ∘ extract ⋆5 f ∘ extract = (g ⋆ f) ∘ extract
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: A -> T B
(fun '(w, a) =>
bindd ((g ∘ extract) ⦿ w) ((f ∘ extract) (w, a))) =
bind g ∘ f ∘ extract
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: A -> T B w: W a: A
bindd ((g ∘ extract) ⦿ w) ((f ∘ extract) (w, a)) =
(bind g ∘ f ∘ extract) (w, a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: A -> T B w: W a: A
bindd (g ∘ extract) ((f ∘ extract) (w, a)) =
(bind g ∘ f ∘ extract) (w, a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: A -> T B w: W a: A
bindd (g ∘ extract) ((f ∘ extract) (w, a)) =
(bindd (g ∘ extract) ∘ f ∘ extract) (w, a)
reflexivity.Qed.
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : B -> C) (f : A -> B),
ret ∘ g ∘ extract ⋆5 ret ∘ f ∘ extract =
ret ∘ g ∘ f ∘ extract
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : B -> C) (f : A -> B),
ret ∘ g ∘ extract ⋆5 ret ∘ f ∘ extract =
ret ∘ g ∘ f ∘ extract
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: A -> B
ret ∘ g ∘ extract ⋆5 ret ∘ f ∘ extract =
ret ∘ g ∘ f ∘ extract
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: A -> B
(fun '(w, a) =>
bindd ((ret ∘ g ∘ extract) ⦿ w)
((ret ∘ f ∘ extract) (w, a))) =
ret ∘ g ∘ f ∘ extract
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: A -> B w: W a: A
bindd ((ret ∘ g ∘ extract) ⦿ w)
((ret ∘ f ∘ extract) (w, a)) =
(ret ∘ g ∘ f ∘ extract) (w, a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: A -> B w: W a: A
bindd ((ret ∘ g ∘ extract) ⦿ w)
(ret (f (extract (w, a)))) =
(ret ∘ g ∘ f ∘ extract) (w, a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: A -> B w: W a: A
bindd ((ret ∘ g ∘ extract) ⦿ w) (ret (f a)) =
(ret ∘ g ∘ f ∘ extract) (w, a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: A -> B w: W a: A
(bindd ((ret ∘ g ∘ extract) ⦿ w) ∘ ret) (f a) =
(ret ∘ g ∘ f ∘ extract) (w, a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: A -> B w: W a: A
((ret ∘ g ∘ extract) ⦿ w ∘ ret) (f a) =
(ret ∘ g ∘ f ∘ extract) (w, a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: A -> B w: W a: A
(ret ∘ g ∘ extract ∘ ret) (f a) =
(ret ∘ g ∘ f ∘ extract) (w, a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> T C) (f : W * A -> B),
g ⋆5 ret ∘ f = g ⋆1 f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> T C) (f : W * A -> B),
g ⋆5 ret ∘ f = g ⋆1 f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> B
g ⋆5 ret ∘ f = g ⋆1 f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> B
(fun '(w, a) => bindd (g ⦿ w) ((ret ∘ f) (w, a))) =
g ∘ cobind f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> B w: W a: A
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> B w: W a: A
bindd (g ⦿ w) (ret (f (w, a))) = g (w, f (w, a))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> B w: W a: A
(bindd (g ⦿ w) ∘ ret) (f (w, a)) = g (w, f (w, a))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> B w: W a: A
(g ⦿ w ∘ ret) (f (w, a)) = g (w, f (w, a))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> B w: W a: A
(g ∘ pair w) (f (w, a)) = g (w, f (w, a))
reflexivity.Qed.
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> T C) (f : A -> T B),
g ⋆5 f ∘ extract =
(fun '(w, t) => bindd (g ⦿ w) t) ∘ map f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> T C) (f : A -> T B),
g ⋆5 f ∘ extract =
(fun '(w, t) => bindd (g ⦿ w) t) ∘ map f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: A -> T B
g ⋆5 f ∘ extract =
(fun '(w, t) => bindd (g ⦿ w) t) ∘ map f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: A -> T B w: W a: A
(g ⋆5 f ∘ extract) (w, a) =
((fun '(w, t) => bindd (g ⦿ w) t) ∘ map f) (w, a)
reflexivity.Qed.
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> T C) (f : A -> B),
g ⋆5 ret ∘ f ∘ extract = g ∘ map f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> T C) (f : A -> B),
g ⋆5 ret ∘ f ∘ extract = g ∘ map f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: A -> B
g ⋆5 ret ∘ f ∘ extract = g ∘ map f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: A -> B w: W a: A
(g ⋆5 ret ∘ f ∘ extract) (w, a) = (g ∘ map f) (w, a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: A -> B w: W a: A
bindd (g ⦿ w) ((ret ∘ f ∘ extract) (w, a)) =
(g ∘ map f) (w, a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: A -> B w: W a: A
bindd (g ⦿ w) (ret (f a)) = g (id w, f a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: A -> B w: W a: A
(bindd (g ⦿ w) ∘ ret) (f a) = (g ∘ pair (id w)) (f a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: A -> B w: W a: A
(g ⦿ w ∘ ret) (f a) = (g ∘ pair (id w)) (f a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: A -> B w: W a: A
(g ∘ pair w) (f a) = (g ∘ pair (id w)) (f a)
reflexivity.Qed.
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> C) (f : W * A -> T B),
ret ∘ g ⋆5 f =
(fun '(w, t) => mapd (g ⦿ w) (f (w, t)))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> C) (f : W * A -> T B),
ret ∘ g ⋆5 f =
(fun '(w, t) => mapd (g ⦿ w) (f (w, t)))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: W * A -> T B
ret ∘ g ⋆5 f =
(fun '(w, t) => mapd (g ⦿ w) (f (w, t)))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: W * A -> T B
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: W * A -> T B w: W a: A
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: W * A -> T B w: W a: A
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : B -> T C) (f : W * A -> T B),
g ∘ extract ⋆5 f = g ⋆ f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : B -> T C) (f : W * A -> T B),
g ∘ extract ⋆5 f = g ⋆ f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: W * A -> T B
g ∘ extract ⋆5 f = g ⋆ f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: W * A -> T B
(fun '(w, a) => bindd ((g ∘ extract) ⦿ w) (f (w, a))) =
bind g ∘ f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: W * A -> T B w: W a: A
bindd ((g ∘ extract) ⦿ w) (f (w, a)) =
(bind g ∘ f) (w, a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: W * A -> T B w: W a: A
bindd (g ∘ extract) (f (w, a)) = (bind g ∘ f) (w, a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: W * A -> T B w: W a: A
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : B -> C) (f : W * A -> T B),
ret ∘ g ∘ extract ⋆5 f = map g ∘ f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : B -> C) (f : W * A -> T B),
ret ∘ g ∘ extract ⋆5 f = map g ∘ f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: W * A -> T B
ret ∘ g ∘ extract ⋆5 f = map g ∘ f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: W * A -> T B w: W a: A
(ret ∘ g ∘ extract ⋆5 f) (w, a) = (map g ∘ f) (w, a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: W * A -> T B w: W a: A
bindd ((ret ∘ g ∘ extract) ⦿ w) (f (w, a)) =
(map g ∘ f) (w, a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: W * A -> T B w: W a: A
bindd (ret ∘ g ∘ extract) (f (w, a)) =
(map g ∘ f) (w, a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: W * A -> T B w: W a: A
bindd (ret ∘ g ∘ extract) (f (w, a)) =
(bindd (ret ∘ g ∘ extract) ∘ f) (w, a)
reflexivity.Qed.
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : B -> T C) (f : W * A -> B),
g ∘ extract ⋆5 ret ∘ f = g ∘ f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : B -> T C) (f : W * A -> B),
g ∘ extract ⋆5 ret ∘ f = g ∘ f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: W * A -> B
g ∘ extract ⋆5 ret ∘ f = g ∘ f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: W * A -> B
(fun '(w, a) =>
bindd ((g ∘ extract) ⦿ w) ((ret ∘ f) (w, a))) = g ∘ f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: W * A -> B w: W a: A
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: W * A -> B w: W a: A
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: W * A -> B w: W a: A
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: W * A -> B w: W a: A
((g ∘ extract) ⦿ w ∘ ret) (f (w, a)) = (g ∘ f) (w, a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: W * A -> B w: W a: A
(g ∘ extract ∘ ret) (f (w, a)) = (g ∘ f) (w, a)
reflexivity.Qed.
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> C) (f : A -> T B),
ret ∘ g ⋆5 f ∘ extract =
(fun '(w, a) => mapd (g ⦿ w) (f a))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> C) (f : A -> T B),
ret ∘ g ⋆5 f ∘ extract =
(fun '(w, a) => mapd (g ⦿ w) (f a))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: A -> T B
ret ∘ g ⋆5 f ∘ extract =
(fun '(w, a) => mapd (g ⦿ w) (f a))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: A -> T B
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: A -> T B w: W a: A
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: A -> T B w: W a: A
bindd ((ret ∘ g) ⦿ w) ((f ∘ extract) (w, a)) =
bindd (ret ∘ g ⦿ w) (f a)
reflexivity.Qed.
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : B -> C) (f : W * A -> B),
ret ∘ g ∘ extract ⋆5 ret ∘ f = ret ∘ g ∘ f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : B -> C) (f : W * A -> B),
ret ∘ g ∘ extract ⋆5 ret ∘ f = ret ∘ g ∘ f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: W * A -> B
ret ∘ g ∘ extract ⋆5 ret ∘ f = ret ∘ g ∘ f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: W * A -> B
(fun '(w, a) =>
bindd ((ret ∘ g ∘ extract) ⦿ w) ((ret ∘ f) (w, a))) =
ret ∘ g ∘ f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: W * A -> B w: W a: A
bindd ((ret ∘ g ∘ extract) ⦿ w) ((ret ∘ f) (w, a)) =
(ret ∘ g ∘ f) (w, a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: W * A -> B w: W a: A
bindd ((ret ∘ g ∘ extract) ⦿ w) (ret (f (w, a))) =
(ret ∘ g ∘ f) (w, a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: W * A -> B w: W a: A
(bindd ((ret ∘ g ∘ extract) ⦿ w) ∘ ret) (f (w, a)) =
(ret ∘ g ∘ f) (w, a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: W * A -> B w: W a: A
((ret ∘ g ∘ extract) ⦿ w ∘ ret) (f (w, a)) =
(ret ∘ g ∘ f) (w, a)
reflexivity.Qed.
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> C) (f : A -> B),
ret ∘ g ⋆5 ret ∘ f ∘ extract = ret ∘ g ∘ map f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> C) (f : A -> B),
ret ∘ g ⋆5 ret ∘ f ∘ extract = ret ∘ g ∘ map f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: A -> B
ret ∘ g ⋆5 ret ∘ f ∘ extract = ret ∘ g ∘ map f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: A -> B
(fun '(w, a) =>
bindd ((ret ∘ g) ⦿ w) ((ret ∘ f ∘ extract) (w, a))) =
ret ∘ g ∘ map f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: A -> B w: W a: A
bindd ((ret ∘ g) ⦿ w) ((ret ∘ f ∘ extract) (w, a)) =
(ret ∘ g ∘ map f) (w, a)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: A -> B w: W a: A
bindd ((ret ○ g) ⦿ w) (ret (f a)) =
ret (g (id w, f a))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: A -> B w: W a: A
(bindd ((ret ○ g) ⦿ w) ∘ ret) (f a) =
ret ((g ∘ pair (id w)) (f a))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: A -> B w: W a: A
((ret ○ g) ⦿ w ∘ ret) (f a) =
ret ((g ∘ pair (id w)) (f a))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: A -> B w: W a: A
((ret ○ g) ⦿ w) (ret (f a)) = ret (g (id w, f a))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: A -> B w: W a: A
((ret ○ g) ⦿ w ∘ ret) (f a) = ret (g (id w, f a))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T Mapd_WT: Mapd W T Bind_TT: Bind T T Map_T: Map T op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: A -> B w: W a: A
(ret ○ g ∘ pair w) (f a) = ret (g (id w, f a))
reflexivity.Qed.Enddecorated_monad_derived_kleisli_laws.(** ** Derived Composition Laws *)(**********************************************************************)Sectiondecorated_monad_derived_composition_laws.Import Kleisli.Monad.Notations.Import Kleisli.Comonad.Notations.Import Product.Notations.#[local] Generalizable VariablesA B C.Context
`{Return_T: Return T}
`{Bindd_WTT: Bindd W T T}
`{Bindd_WTU: Bindd W T U}
`{Mapd_WT: Mapd W T}
`{Mapd_WU: Mapd W U}
`{Bind_TT: Bind T T}
`{Bind_TU: Bind T U}
`{Map_T: Map T}
`{Map_U: Map U}
`{op: Monoid_op W}
`{unit: Monoid_unit W}
`{! Compat_Map_Bindd W T T}
`{! Compat_Bind_Bindd W T T}
`{! Compat_Mapd_Bindd W T T}
`{! Compat_Map_Bindd W T U}
`{! Compat_Bind_Bindd W T U}
`{! Compat_Mapd_Bindd W T U}
`{! DecoratedRightPreModule W T U}
`{! DecoratedMonad W T}.Context (ABC: Type).(** *** Homogeneous cases *)(********************************************************************)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> C) (f : W * A -> B),
mapd g ∘ mapd f = mapd (g ⋆1 f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> C) (f : W * A -> B),
mapd g ∘ mapd f = mapd (g ⋆1 f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: W * A -> B
mapd g ∘ mapd f = mapd (g ⋆1 f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: W * A -> B
bindd (ret ∘ g) ∘ mapd f = mapd (g ⋆1 f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: W * A -> B
bindd (ret ∘ g) ∘ bindd (ret ∘ f) = mapd (g ⋆1 f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: W * A -> B
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: W * A -> B
bindd (ret ∘ g ⋆5 ret ∘ f) = bindd (ret ∘ (g ⋆1 f))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: W * A -> B
bindd (ret ∘ (g ⋆1 f)) = bindd (ret ∘ (g ⋆1 f))
reflexivity.Qed.
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T 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 W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T 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 W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T 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 W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: A -> T B
bindd (g ∘ extract) ∘ bind f = bind (g ⋆ f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: A -> T B
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: A -> T B
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: A -> T B
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: A -> T B
reflexivity.Qed.(** *** Composition with <<bindd>> and <<bind>> *)(********************************************************************)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : B -> T C) (f : W * A -> T B),
bind g ∘ bindd f = bindd (g ⋆ f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : B -> T C) (f : W * A -> T B),
bind g ∘ bindd f = bindd (g ⋆ f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: W * A -> T B
bind g ∘ bindd f = bindd (g ⋆ f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: W * A -> T B
bindd (g ∘ extract) ∘ bindd f = bindd (g ⋆ f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: W * A -> T B
bindd (g ∘ extract ⋆5 f) = bindd (g ⋆ f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: W * A -> T B
bindd (g ⋆ f) = bindd (g ⋆ f)
reflexivity.Qed.
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> T C) (f : A -> T B),
bindd g ∘ bind f =
bindd ((fun '(w, t) => bindd (g ⦿ w) t) ∘ map f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> T C) (f : A -> T B),
bindd g ∘ bind f =
bindd ((fun '(w, t) => bindd (g ⦿ w) t) ∘ map f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: A -> T B
bindd g ∘ bind f =
bindd ((fun '(w, t) => bindd (g ⦿ w) t) ∘ map f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: A -> T B
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: A -> T B
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: A -> T B
reflexivity.Qed.(** *** Composition with <<bindd>> and <<mapd>> *)(********************************************************************)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> T C) (f : W * A -> B),
bindd g ∘ mapd f = bindd (g ⋆1 f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> T C) (f : W * A -> B),
bindd g ∘ mapd f = bindd (g ⋆1 f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> B
bindd g ∘ mapd f = bindd (g ⋆1 f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> B
bindd g ∘ bindd (ret ∘ f) = bindd (g ⋆1 f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> B
bindd (g ⋆5 ret ∘ f) = bindd (g ⋆1 f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> B
bindd (g ⋆1 f) = bindd (g ⋆1 f)
reflexivity.Qed.
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> C) (f : W * A -> T B),
mapd g ∘ bindd f =
bindd (fun '(w, t) => mapd (g ⦿ w) (f (w, t)))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> C) (f : W * A -> T B),
mapd g ∘ bindd f =
bindd (fun '(w, t) => mapd (g ⦿ w) (f (w, t)))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: W * A -> T B
mapd g ∘ bindd f =
bindd (fun '(w, t) => mapd (g ⦿ w) (f (w, t)))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: W * A -> T B
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: W * A -> T B
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: W * A -> T B
reflexivity.Qed.(** *** Composition with <<map>> *)(********************************************************************)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> T C) (f : A -> B),
bindd g ∘ map f = bindd (g ∘ map f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> T C) (f : A -> B),
bindd g ∘ map f = bindd (g ∘ map f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: A -> B
bindd g ∘ map f = bindd (g ∘ map f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: A -> B
bindd g ∘ bindd (ret ∘ f ∘ extract) =
bindd (g ∘ map f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: A -> B
bindd (g ⋆5 ret ∘ f ∘ extract) = bindd (g ∘ map f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> T C f: A -> B
bindd (g ∘ map f) = bindd (g ∘ map f)
reflexivity.Qed.
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : B -> C) (f : W * A -> T B),
map g ∘ bindd f = bindd (map g ∘ f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : B -> C) (f : W * A -> T B),
map g ∘ bindd f = bindd (map g ∘ f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: W * A -> T B
map g ∘ bindd f = bindd (map g ∘ f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: W * A -> T B
bindd (ret ∘ g ∘ extract) ∘ bindd f =
bindd (map g ∘ f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: W * A -> T B
bindd (ret ∘ g ∘ extract ⋆5 f) = bindd (map g ∘ f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> C f: W * A -> T B
bindd (map g ∘ f) = bindd (map g ∘ f)
reflexivity.Qed.(** *** Composition between <<mapd>> and <<bind>> *)(********************************************************************)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> C) (f : A -> T B),
mapd g ∘ bind f =
bindd (fun '(w, a) => mapd (g ⦿ w) (f a))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : W * B -> C) (f : A -> T B),
mapd g ∘ bind f =
bindd (fun '(w, a) => mapd (g ⦿ w) (f a))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: A -> T B
mapd g ∘ bind f =
bindd (fun '(w, a) => mapd (g ⦿ w) (f a))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: A -> T B
bindd (ret ∘ g) ∘ bind f =
bindd (fun '(w, a) => mapd (g ⦿ w) (f a))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: A -> T B
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: A -> T B
bindd (ret ∘ g ⋆5 f ∘ extract) =
bindd (fun '(w, a) => mapd (g ⦿ w) (f a))
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: W * B -> C f: A -> T B
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : B -> T C) (f : W * A -> B),
bind g ∘ mapd f = bindd (g ∘ f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forall (g : B -> T C) (f : W * A -> B),
bind g ∘ mapd f = bindd (g ∘ f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: W * A -> B
bind g ∘ mapd f = bindd (g ∘ f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: W * A -> B
bind g ∘ bindd (ret ∘ f) = bindd (g ∘ f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: W * A -> B
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: W * A -> B
bindd (g ∘ extract ⋆5 ret ∘ f) = bindd (g ∘ f)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type g: B -> T C f: W * A -> B
bindd (g ∘ f) = bindd (g ∘ f)
reflexivity.Qed.(** *** Composition with <<ret>> *)(********************************************************************)
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forallf : A -> T B, bind f ∘ ret = f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forallf : A -> T B, bind f ∘ ret = f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type f: A -> T B
bind f ∘ ret = f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type f: A -> T B
bindd (f ∘ extract) ∘ ret = f
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type f: A -> T B
f ∘ extract ∘ ret = f
reflexivity.Qed.
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forallf : W * A -> B, mapd f ∘ ret = ret ∘ f ∘ ret
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
forallf : W * A -> B, mapd f ∘ ret = ret ∘ f ∘ ret
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type f: W * A -> B
mapd f ∘ ret = ret ∘ f ∘ ret
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type f: W * A -> B
bindd (ret ∘ f) ∘ ret = ret ∘ f ∘ ret
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type f: W * A -> B
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
bind ret = id
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
bind ret = id
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
bind ret = id
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
bindd (ret ∘ extract) = id
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
id = id
reflexivity.Qed.
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
mapd extract = id
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
mapd extract = id
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
mapd extract = id
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
bindd (ret ∘ extract) = id
T: Type -> Type Return_T: Return T W: Type Bindd_WTT: Bindd W T T U: Type -> Type Bindd_WTU: Bindd W T U Mapd_WT: Mapd W T Mapd_WU: Mapd W U Bind_TT: Bind T T Bind_TU: Bind T U Map_T: Map T Map_U: Map U op: Monoid_op W unit: Monoid_unit W Compat_Map_Bindd0: Compat_Map_Bindd W T T Compat_Bind_Bindd0: Compat_Bind_Bindd W T T Compat_Mapd_Bindd0: Compat_Mapd_Bindd W T T Compat_Map_Bindd1: Compat_Map_Bindd W T U Compat_Bind_Bindd1: Compat_Bind_Bindd W T U Compat_Mapd_Bindd1: Compat_Mapd_Bindd W T U DecoratedRightPreModule0: DecoratedRightPreModule W T
U DecoratedMonad0: DecoratedMonad W T A, B, C: Type
id = id
reflexivity.Qed.Enddecorated_monad_derived_composition_laws.(** ** Derived Typeclass Instances *)(**********************************************************************)ModuleDerivedInstances.Sectiondecorated_monad_derivedinstances.Context
(W: Type)
(T: Type -> Type)
(U: Type -> Type)
`{Return_T: Return T}
`{Bindd_WTT: Bindd W T T}
`{Bindd_WTU: Bindd W T U}
`{Mapd_WT: Mapd W T}
`{Mapd_WU: Mapd W U}
`{Bind_TT: Bind T T}
`{Bind_TU: Bind T U}
`{Map_T: Map T}
`{Map_U: Map U}
`{op: Monoid_op W}
`{unit: Monoid_unit W}
`{! Compat_Map_Bindd W T T}
`{! Compat_Bind_Bindd W T T}
`{! Compat_Mapd_Bindd W T T}
`{! Compat_Map_Bindd W T U}
`{! Compat_Bind_Bindd W T U}
`{! Compat_Mapd_Bindd W T U}
`{! DecoratedRightPreModule W T U}
`{! DecoratedMonad W T}.#[local] Existing InstanceDecoratedRightModule_DecoratedMonad.#[export] InstanceRightPreModule_DecoratedRightPreModule:
RightPreModule T U :=
{| kmod_bind1 := bind_id;
kmod_bind2 := bind_bind;
|}.#[export] InstanceRightPreModule_DecoratedRightPreModule_Monad:
RightPreModule T T :=
{| kmod_bind1 := bind_id;
kmod_bind2 := bind_bind;
|}.#[export] InstanceMonad_DecoratedMonad:
Kleisli.Monad.Monad T :=
{| kmon_bind0 := bind_ret;
|}.#[export] InstanceDecoratedFunctor_DecoratedRightModule:
Kleisli.DecoratedFunctor.DecoratedFunctor W U :=
{| kdf_mapd1 := mapd_id;
kdf_mapd2 := mapd_mapd;
|}.Enddecorated_monad_derivedinstances.EndDerivedInstances.(** * Instance for Writer *)(**********************************************************************)Import Product.Notations.Sectiondecorated_functor_reader.Context {W: Type} `{Monoid W}.#[export] InstanceBindd_Writer: Bindd W (W ×) (W ×) :=
funABf => join (T := (W ×)) ∘ cobind f.(* This is local because exporting it leads to frequent typeclass resolution divergence for Monoid instances due to the circularity Monoid<-DecoratedMonad_Writer<-Monoid. *)
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W
DecoratedMonad W (prod W)
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W
DecoratedMonad W (prod W)
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W
Monoid W
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W
DecoratedRightPreModule W (prod W) (prod W)
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W
forall (AB : Type) (f : W * A -> W * B),
bindd f ∘ ret = f ∘ ret
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W
Monoid W
assumption.
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W
DecoratedRightPreModule W (prod W) (prod W)
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A: Type
join ∘ cobind (ret ∘ extract) = id
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A, B, C: Type g: W * B -> W * C f: W * A -> W * B
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A, B, C: Type g: W * B -> W * C f: W * A -> W * B w: W a: A
(join ∘ cobind g ∘ (join ∘ cobind f)) (w, a) =
(join ∘ cobind (g ⋆5 f)) (w, a)
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A, B, C: Type g: W * B -> W * C f: W * A -> W * B w: W a: A
(join ∘ cobind g ∘ (join ∘ cobind f)) (w, a) =
(join
∘ cobind (fun '(w, a) => bindd (g ⦿ w) (f (w, a))))
(w, a)
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A, B, C: Type g: W * B -> W * C f: W * A -> W * B w: W a: A
(map_fst (uncurry monoid_op) ○ α^-1
∘ (fun '(e, a) => (e, g (e, a)))
∘ (map_fst (uncurry monoid_op) ○ α^-1
∘ (fun '(e, a) => (e, f (e, a))))) (w, a) =
(map_fst (uncurry monoid_op) ○ α^-1
∘ (fun '(e, a) =>
(e,
let
'(w, a0) := (e, a) in bindd (g ⦿ w) (f (w, a0)))))
(w, a)
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A, B, C: Type g: W * B -> W * C f: W * A -> W * B w: W a: A
(map_fst (uncurry monoid_op) ○ α^-1
∘ (fun '(e, a) => (e, g (e, a)))
∘ (map_fst (uncurry monoid_op) ○ α^-1
∘ (fun '(e, a) => (e, f (e, a))))) (w, a) =
(map_fst (uncurry monoid_op) ○ α^-1
∘ (fun '(e, a) =>
(e,
(map_fst (uncurry monoid_op) ○ α^-1
∘ (fun '(e0, a0) => (e0, (g ⦿ e) (e0, a0))))
(f (e, a))))) (w, a)
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A, B, C: Type g: W * B -> W * C f: W * A -> W * B w: W a: A
map_fst (uncurry monoid_op)
(α^-1
(let
'(e, a) :=
map_fst (uncurry monoid_op)
(α^-1 (w, f (w, a))) in (e, g (e, a)))) =
map_fst (uncurry monoid_op)
(α^-1
(w,
map_fst (uncurry monoid_op)
(α^-1
(let
'(e, a) := f (w, a) in
(e,
(g ∘ (fun '(w1, a0) => (w ● w1, a0)))
(e, a))))))
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A, B, C: Type g: W * B -> W * C f: W * A -> W * B w: W a: A
(let (x, y) :=
α^-1
(let
'(e, a) :=
let (x, y) := α^-1 (w, f (w, a)) in
(uncurry monoid_op x, id y) in (e, g (e, a))) in
(uncurry monoid_op x, id y)) =
(let (x, y) :=
α^-1
(w,
let (x, y) :=
α^-1
(let
'(e, a) := f (w, a) in
(e,
(g ∘ (fun '(w1, a0) => (w ● w1, a0)))
(e, a))) in
(uncurry monoid_op x, id y)) in
(uncurry monoid_op x, id y))
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A, B, C: Type g: W * B -> W * C f: W * A -> W * B w: W a: A
(let (x, y) :=
let (x, p0) :=
let
'(e, a) :=
let (x, y) :=
let (y, z) := f (w, a) in (w, y, z) in
(let '(x0, y0) := x in x0 ● y0, id y) in
(e, g (e, a)) inlet (y, z) := p0 in (x, y, z) in
(let '(x0, y0) := x in x0 ● y0, id y)) =
(let (x, y) :=
let (y, z) :=
let (x, y) :=
let (x, p0) :=
let
'(e, a) := f (w, a) in
(e,
(g ∘ (fun '(w1, a0) => (w ● w1, a0)))
(e, a)) inlet (y, z) := p0 in (x, y, z) in
(let '(x0, y0) := x in x0 ● y0, id y) in
(w, y, z) in
(let '(x0, y0) := x in x0 ● y0, id y))
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A, B, C: Type g: W * B -> W * C f: W * A -> W * B w: W a: A
(let (x, y) :=
let (x, p0) :=
let
'(e, a) :=
let (x, y) :=
let (y, z) := f (w, a) in (w, y, z) in
(let '(x0, y0) := x in x0 ● y0, y) in
(e, g (e, a)) inlet (y, z) := p0 in (x, y, z) in
(let '(x0, y0) := x in x0 ● y0, y)) =
(let (x, y) :=
let (y, z) :=
let (x, y) :=
let (x, p0) :=
let '(e, a) := f (w, a) in (e, g (w ● e, a)) inlet (y, z) := p0 in (x, y, z) in
(let '(x0, y0) := x in x0 ● y0, y) in
(w, y, z) in
(let '(x0, y0) := x in x0 ● y0, y))
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A, B, C: Type g: W * B -> W * C f: W * A -> W * B w: W a: A w0: W b: B
(let (x, y) :=
let (y, z) := g (w ● w0, b) in (w ● w0, y, z) in
(let '(x0, y0) := x in x0 ● y0, y)) =
(let (x, y) :=
let (y, z) :=
let (x, y) :=
let (y, z) := g (w ● w0, b) in (w0, y, z) in
(let '(x0, y0) := x in x0 ● y0, y) in
(w, y, z) in
(let '(x0, y0) := x in x0 ● y0, y))
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A, B, C: Type g: W * B -> W * C f: W * A -> W * B w: W a: A w0: W b: B w1: W c: C
((w ● w0) ● w1, c) = (w ● (w0 ● w1), c)
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A, B, C: Type g: W * B -> W * C f: W * A -> W * B w: W a: A w0: W b: B w1: W c: C
(w ● (w0 ● w1), c) = (w ● (w0 ● w1), c)
reflexivity.
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W
forall (AB : Type) (f : W * A -> W * B),
bindd f ∘ ret = f ∘ ret
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A, B: Type f: W * A -> W * B
bindd f ∘ ret = f ∘ ret
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A, B: Type f: W * A -> W * B a: A
(bindd f ∘ ret) a = (f ∘ ret) a
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A, B: Type f: W * A -> W * B a: A
(bindd f ∘ (funa : A => (Ƶ, a))) a =
(f ∘ (funa : A => (Ƶ, a))) a
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A, B: Type f: W * A -> W * B a: A
(join ∘ cobind f ∘ (funa : A => (Ƶ, a))) a =
(f ∘ (funa : A => (Ƶ, a))) a
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A, B: Type f: W * A -> W * B a: A
(map_fst (uncurry monoid_op) ○ α^-1 ∘ cobind f
∘ (funa : A => (Ƶ, a))) a =
(f ∘ (funa : A => (Ƶ, a))) a
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A, B: Type f: W * A -> W * B a: A
map_fst (uncurry monoid_op) (α^-1 (cobind f (Ƶ, a))) =
f (Ƶ, a)
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A, B: Type f: W * A -> W * B a: A
map_fst (uncurry monoid_op)
(let (y, z) := f (Ƶ, a) in (Ƶ, y, z)) = f (Ƶ, a)
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A, B: Type f: W * A -> W * B a: A w: W b: B
map_fst (uncurry monoid_op) (Ƶ, w, b) = (w, b)
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A, B: Type f: W * A -> W * B a: A w: W b: B
(Ƶ ● w, id b) = (w, b)
W: Type op: Monoid_op W unit0: Monoid_unit W H: Monoid W A, B: Type f: W * A -> W * B a: A w: W b: B