Built with Alectryon, running Coq+SerAPI v8.16.0+0.16.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
From Tealeaves Require Import
Classes.Categorical.DecoratedMonad
Classes.Kleisli.DecoratedMonad
CategoricalToKleisli.DecoratedFunctor (cobind_dec).#[local] Generalizable VariablesW T.Import Monoid.Notations.Import Product.Notations.Import Kleisli.DecoratedMonad.Notations.(** * Categorical Decorated Monad to Kleisli Decorated Monad *)(**********************************************************************)(** ** Derived <<bindd>> Operation *)(**********************************************************************)ModuleDerivedOperations.#[export] InstanceBindd_Categorical
(W: Type)
(T: Type -> Type)
`{Map_T: Map T}
`{Join_T: Join T}
`{Decorate_WT: Decorate W T}: Bindd W T T :=
funABf => join (T := T) ∘ map (F := T) f ∘ dec T.EndDerivedOperations.(** ** Derived Laws *)(**********************************************************************)ModuleDerivedInstances.(* Alectryon doesn't like this Import CategoricalToKleisli.DecoratedMonad.DerivedOperations. *)Import DerivedOperations.#[local] Generalizable VariablesA B C.Sectionwith_monad.Context
(T: Type -> Type)
`{Categorical.DecoratedMonad.DecoratedMonad W T}.(** *** Identity law *)(******************************************************************)
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T
forallA : Type, bindd (ret ∘ extract) = id
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T
forallA : Type, bindd (ret ∘ extract) = id
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A: Type
bindd (ret ∘ extract) = id
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A: Type
join ∘ map (ret ∘ extract) ∘ dec T = id
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A: Type
join ∘ (map ret ∘ map extract) ∘ dec T = id
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A: Type
join ∘ map ret ∘ map extract ∘ dec T = id
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A: Type
id ∘ map extract ∘ dec T = id
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A: Type
id ∘ (map extract ∘ dec T) = id
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A: Type
id ∘ id = id
reflexivity.Qed.(** *** Composition law *)(******************************************************************)
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T
forall (ABC : Type) (g : W * B -> T C)
(f : W * A -> T B),
bindd g ∘ bindd f = bindd (g ⋆5 f)
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T
forall (ABC : Type) (g : W * B -> T C)
(f : W * A -> T B),
bindd g ∘ bindd f = bindd (g ⋆5 f)
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
bindd g ∘ bindd f = bindd (g ⋆5 f)
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join ∘ map g ∘ dec T ∘ (join ∘ map f ∘ dec T) =
bindd (g ⋆5 f)
(* change (join T ∘ map T ?f) with (bind T f).*)
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join ∘ map g ∘ dec T ∘ join ∘ map f ∘ dec T =
bindd (g ⋆5 f)
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join ∘ map g ∘ (dec T ∘ join) ∘ map f ∘ dec T =
bindd (g ⋆5 f)
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join ∘ map g
∘ (join ∘ map (shift T) ∘ dec T ∘ map (dec T)) ∘ map f
∘ dec T = bindd (g ⋆5 f)
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join ∘ map g ∘ join ∘ map (shift T) ∘ dec T
∘ map (dec T) ∘ map f ∘ dec T = bindd (g ⋆5 f)
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join ∘ map g ∘ join ∘ map (shift T) ∘ dec T
∘ (map (dec T) ∘ map f) ∘ dec T = bindd (g ⋆5 f)
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join ∘ map g ∘ join ∘ map (shift T) ∘ dec T
∘ map (dec T ∘ f) ∘ dec T = bindd (g ⋆5 f)
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join ∘ map g ∘ join ∘ map (shift T)
∘ (dec T ∘ map (dec T ∘ f) ∘ dec T) = bindd (g ⋆5 f)
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join ∘ map g ∘ join ∘ map (shift T)
∘ (map (cobind (dec T ∘ f)) ∘ dec T) = bindd (g ⋆5 f)
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join ∘ map g ∘ join ∘ map (shift T)
∘ map (cobind (dec T ∘ f)) ∘ dec T = bindd (g ⋆5 f)
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join ∘ map g ∘ join
∘ (map (shift T) ∘ map (cobind (dec T ∘ f))) ∘ dec T =
bindd (g ⋆5 f)
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join ∘ map g ∘ join
∘ map (shift T ∘ cobind (dec T ∘ f)) ∘ dec T =
bindd (g ⋆5 f)
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join ∘ map g ∘ join
∘ map (shift T ∘ cobind (dec T ∘ f)) ∘ dec T =
join ∘ map (g ⋆5 f) ∘ dec T
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join
∘ (map g ∘ join ∘ map (shift T ∘ cobind (dec T ∘ f)))
∘ dec T = join ∘ map (g ⋆5 f) ∘ dec T
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join
∘ (map g ∘ join ∘ map (shift T ∘ cobind (dec T ∘ f))) =
join ∘ map (g ⋆5 f)
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join
∘ (map g ∘ join ∘ map (shift T ∘ cobind (dec T ∘ f))) =
join
∘ map
(fun '(w, a) =>
(join ∘ map (g ∘ incr w) ∘ dec T) (f (w, a)))
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join
∘ (join ∘ map g ∘ map (shift T ∘ cobind (dec T ∘ f))) =
join
∘ map
(fun '(w, a) =>
(join ∘ map (g ∘ incr w) ∘ dec T) (f (w, a)))
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join
∘ (join ∘ (map g ∘ map (shift T ∘ cobind (dec T ∘ f)))) =
join
∘ map
(fun '(w, a) =>
(join ∘ map (g ∘ incr w) ∘ dec T) (f (w, a)))
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join
∘ (join
∘ (map (map g) ∘ map (shift T ∘ cobind (dec T ∘ f)))) =
join
∘ map
(fun '(w, a) =>
(join ∘ map (g ∘ incr w) ∘ dec T) (f (w, a)))
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join
∘ (join
∘ (map (map g) ∘ map (shift T ∘ cobind (dec T ∘ f)))) =
join
∘ map
(fun '(w, a) =>
(join ∘ map (g ∘ incr w) ∘ dec T) (f (w, a)))
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join
∘ (join ∘ map (map g ∘ (shift T ∘ cobind (dec T ∘ f)))) =
join
∘ map
(fun '(w, a) =>
(join ∘ map (g ∘ incr w) ∘ dec T) (f (w, a)))
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join
∘ (join ∘ map (map g ∘ (shift T ∘ cobind (dec T ∘ f)))) =
join
∘ map
(join
∘ (fun '(w, a) =>
(map (g ∘ incr w) ∘ dec T) (f (w, a))))
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join ∘ join
∘ map (map g ∘ (shift T ∘ cobind (dec T ∘ f))) =
join
∘ map
(join
∘ (fun '(w, a) =>
(map (g ∘ incr w) ∘ dec T) (f (w, a))))
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join ∘ join
∘ map (map g ∘ (shift T ∘ cobind (dec T ∘ f))) =
join
∘ map
(join
∘ (fun '(w, a) =>
(map (g ∘ incr w) ∘ dec T) (f (w, a))))
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join ∘ map join
∘ map (map g ∘ (shift T ∘ cobind (dec T ∘ f))) =
join
∘ map
(join
∘ (fun '(w, a) =>
(map (g ∘ incr w) ∘ dec T) (f (w, a))))
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join ∘ map join
∘ map (map g ∘ (shift T ∘ cobind (dec T ∘ f))) =
join
∘ map
(join
∘ (fun '(w, a) =>
(map (g ∘ incr w) ∘ dec T) (f (w, a))))
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join
∘ (map join
∘ map (map g ∘ (shift T ∘ cobind (dec T ∘ f)))) =
join
∘ map
(join
∘ (fun '(w, a) =>
(map (g ∘ incr w) ∘ dec T) (f (w, a))))
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
map join
∘ map (map g ∘ (shift T ∘ cobind (dec T ∘ f))) =
map
(join
∘ (fun '(w, a) =>
(map (g ∘ incr w) ∘ dec T) (f (w, a))))
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
map join
∘ map (map g ∘ (shift T ∘ cobind (dec T ∘ f))) =
map
(join
∘ (fun '(w, a) =>
(map (g ∘ incr w) ∘ dec T) (f (w, a))))
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
map (join ∘ (map g ∘ (shift T ∘ cobind (dec T ∘ f)))) =
map
(join
∘ (fun '(w, a) =>
(map (g ∘ incr w) ∘ dec T) (f (w, a))))
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
join ∘ (map g ∘ (shift T ∘ cobind (dec T ∘ f))) =
join
∘ (fun '(w, a) =>
(map (g ∘ incr w) ∘ dec T) (f (w, a)))
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B
map g ∘ (shift T ∘ cobind (dec T ∘ f)) =
(fun '(w, a) => (map (g ∘ incr w) ∘ dec T) (f (w, a)))
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B w: W a: A
(map g ∘ (shift T ∘ cobind (dec T ∘ f))) (w, a) =
(map (g ∘ incr w) ∘ dec T) (f (w, a))
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B w: W a: A
map g
(map (uncurry incr)
(map (pair w) (dec T (f (w, a))))) =
map (g ○ incr w) (dec T (f (w, a)))
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B w: W a: A
map g
((map (uncurry incr) ∘ map (pair w))
(dec T (f (w, a)))) =
map (g ○ incr w) (dec T (f (w, a)))
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B w: W a: A
map g (map (uncurry incr ∘ pair w) (dec T (f (w, a)))) =
map (g ○ incr w) (dec T (f (w, a)))
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B w: W a: A
(map g ∘ map (uncurry incr ∘ pair w))
(dec T (f (w, a))) =
map (g ○ incr w) (dec T (f (w, a)))
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B, C: Type g: W * B -> T C f: W * A -> T B w: W a: A
reflexivity.Qed.(** *** Unit law *)(******************************************************************)
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B: Type f: W * A -> T B
bindd f ∘ ret = f ∘ pair Ƶ
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B: Type f: W * A -> T B
bindd f ∘ ret = f ∘ pair Ƶ
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B: Type f: W * A -> T B
bindd f ∘ ret = f ∘ pair Ƶ
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B: Type f: W * A -> T B
join ∘ map f ∘ dec T ∘ ret = f ∘ pair Ƶ
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B: Type f: W * A -> T B
join ∘ map f ∘ (dec T ∘ ret) = f ∘ pair Ƶ
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B: Type f: W * A -> T B
join ∘ map f ∘ (ret ∘ pair Ƶ) = f ∘ pair Ƶ
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B: Type f: W * A -> T B
join ∘ map f ∘ ret ∘ pair Ƶ = f ∘ pair Ƶ
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B: Type f: W * A -> T B
join ∘ (map f ∘ ret) ∘ pair Ƶ = f ∘ pair Ƶ
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B: Type f: W * A -> T B
join ∘ (ret ∘ map f) ∘ pair Ƶ = f ∘ pair Ƶ
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B: Type f: W * A -> T B
join ∘ ret ∘ map f ∘ pair Ƶ = f ∘ pair Ƶ
T: Type -> Type W: Type H: Map T H0: Return T H1: Join T H2: Decorate W T H3: Monoid_op W H4: Monoid_unit W H5: Categorical.DecoratedMonad.DecoratedMonad W T A, B: Type f: W * A -> T B
id ∘ map f ∘ pair Ƶ = f ∘ pair Ƶ
reflexivity.Qed.(** ** Typeclass Instances *)(**************************************************************** **)#[export] Instance:
Kleisli.DecoratedMonad.DecoratedRightPreModule W T T :=
{| kdmod_bindd1 := @bindd_id;
kdmod_bindd2 := @bindd_bindd;
|}.#[export] Instance:
Kleisli.DecoratedMonad.DecoratedMonad W T
:=
{| kdm_bindd0 := @bindd_comp_ret;
kdm_monoid := dmon_monoid;
|}.Endwith_monad.EndDerivedInstances.