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
Categories.TypeFamily
Classes.Monoid
Classes.Functor
Classes.Categorical.Applicative
Classes.Multisorted.Multifunctor
Functors.Writer.Import Categorical.Monad (Return, ret).Import TypeFamily.Notations.Import Product.Notations.Import Monoid.Notations.#[local] Generalizable VariablesA B C F G ϕ W T U.(** * Multisorted DTMs *)(**********************************************************************)SectionMultisortedDTM_typeclasses.Context
`{ix: Index}.(** ** Operations *)(********************************************************************)Sectionoperations.Context
(W: Type)
(T: K -> Type -> Type)
(U: Type -> Type).ClassMReturn :=
mret: forall (A: Type) (k: K), A -> T k A.ClassMBind :=
mbinddt: forall (F: Type -> Type) `{Map F} `{Pure F} `{Mult F} {A B: Type},
(forall (k: K), W * A -> F (T k B)) -> U A -> F (U B).Endoperations.(** ** Kleisli Composition *)(********************************************************************)Definitioncompose_dtm
{W: Type}
{T: K -> Type -> Type}
`{mn_op: Monoid_op W}
`{mn_unit: Monoid_unit W}
`{Map F} `{Mult F} `{Pure F}
`{Map G} `{Mult G} `{Pure G}
`{forallk, MBind W T (T k)}
{A B C: Type}
(g: forallk, W * B -> G (T k C))
(f: forallk, W * A -> F (T k B)): forallk, W * A -> F (G (T k C)) :=
fun (k: K) '(w, a) =>
map (F := F)
(mbinddt W T (T k) G (g ◻ allK (incr w))) (f k (w, a)).Infix"⋆dtm" := compose_dtm (at level40): tealeaves_scope.(** ** Typeclasses *)(********************************************************************)(** *** PreModules *)(********************************************************************)SectionPreModule.Context
(W: Type)
(T: K -> Type -> Type)
(U: Type -> Type)
`{! MReturn T}
`{! MBind W T U}
`{! forallk, MBind W T (T k)}
{mn_op: Monoid_op W}
{mn_unit: Monoid_unit W}.ClassMultiDecoratedTraversablePreModule :=
{ dtp_monoid :> Monoid W;
dtp_mbinddt_mret: forallA,
mbinddt W T U (funa => a) (mret T A ◻ allK extract) = @id (U A);
dtp_mbinddt_mbinddt: forall
(F: Type -> Type)
(G: Type -> Type)
`{Applicative F}
`{Applicative G}
`(g: forallk, W * B -> G (T k C))
`(f: forallk, W * A -> F (T k B)),
map (F := F) (mbinddt W T U G g) ∘ mbinddt W T U F f =
mbinddt W T U (F ∘ G) (g ⋆dtm f);
dtp_mbinddt_morphism: forall
(F: Type -> Type)
(G: Type -> Type)
`{ApplicativeMorphism F G ϕ}
`(f: forallk, W * A -> F (T k B)),
ϕ (U B) ∘ mbinddt W T U F f =
mbinddt W T U G ((funk => ϕ (T k B)) ◻ f);
}.EndPreModule.(** *** DTMs *)(********************************************************************)SectionDTM.Context
(W: Type)
(T: K -> Type -> Type)
`{! MReturn T}
`{! forallk, MBind W T (T k)}
{mn_op: Monoid_op W}
{mn_unit: Monoid_unit W}.ClassMultiDecoratedTraversableMonad :=
{ dtm_pre :> forallk, MultiDecoratedTraversablePreModule W T (T k);
dtm_mbinddt_comp_mret:
forallkF `{Applicative F}
`(f: forallk, W * A -> F (T k B)),
mbinddt W T (T k) F f ∘ mret T A k = f k ∘ pair Ƶ;
}.EndDTM.EndMultisortedDTM_typeclasses.Arguments mret {ix} _%function_scope {MReturn} {A}%type_scope _ _.Arguments mbinddt {ix} {W}%type_scope {T} (U)%function_scope {MBind} F%function_scope {H H0 H1} {A B}.#[local] Infix"⋆dtm" := compose_dtm (at level40): tealeaves_scope.(** ** Operation <<mapMret>> *)(********************************************************************)SectionmapMret.Context
`{ix: Index}
`{! MReturn T}.DefinitionmapMret
`{Map F} {A:Type}:
forall (k: K), F A -> F (T k A) :=
vec_apply (funk => map (A := A) (B := T k A)) (mret T).
ix: Index T: K -> Type -> Type MReturn0: MReturn T W, A, B: Type
forall (f : K -> W * A -> B) (k : K),
(mret T ◻ f) k = mret T k ∘ f k
ix: Index T: K -> Type -> Type MReturn0: MReturn T W, A, B: Type
forall (f : K -> W * A -> B) (k : K),
(mret T ◻ f) k = mret T k ∘ f k
reflexivity.Qed.
ix: Index T: K -> Type -> Type MReturn0: MReturn T W, A, B: Type F: Type -> Type Map_F: Map F H: Functor F
forall (f : K -> W * A -> F B) (k : K),
(mapMret ◻ f) k = map (mret T k) ∘ f k
ix: Index T: K -> Type -> Type MReturn0: MReturn T W, A, B: Type F: Type -> Type Map_F: Map F H: Functor F
forall (f : K -> W * A -> F B) (k : K),
(mapMret ◻ f) k = map (mret T k) ∘ f k
reflexivity.Qed.EndmapMret.(** ** Lemmas for Kleisli Composition *)(********************************************************************)Sectionmultisorted_dtm_kleisli_composition.Context
`{ix: Index}
{W: Type}
{T: K -> Type -> Type}
{U: Type -> Type}
`{! MReturn T}
`{! MBind W T U}
`{! forallk, MBind W T (T k)}
{mn_op: Monoid_op W}
{mn_unit: Monoid_unit W}.Context
`{Applicative G}
`{Applicative F}
`{! Monoid W}
{A B C: Type}
{g: forallk, W * B -> G (T k C)}.
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, W * A -> F (T k B)
forallw : W,
(funk : K => (g ⋆dtm f) k ∘ incr w) =
(funk : K => g k ∘ incr w)
⋆dtm (funk : K => f k ∘ incr w)
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, W * A -> F (T k B)
forallw : W,
(funk : K => (g ⋆dtm f) k ∘ incr w) =
(funk : K => g k ∘ incr w)
⋆dtm (funk : K => f k ∘ incr w)
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, W * A -> F (T k B) w: W
(funk : K => (g ⋆dtm f) k ∘ incr w) =
(funk : K => g k ∘ incr w)
⋆dtm (funk : K => f k ∘ incr w)
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, W * A -> F (T k B) w: W k: K w': W a: A
((g ⋆dtm f) k ∘ incr w) (w', a) =
((funk : K => g k ∘ incr w)
⋆dtm (funk : K => f k ∘ incr w)) k (w', a)
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, W * A -> F (T k B) w: W k: K w': W a: A
map (mbinddt (T k) G (g ◻ allK (incr (w ● w'))))
(f k (w ● w', a)) =
map
(mbinddt (T k) G
((funk : K => g k ∘ incr w) ◻ allK (incr w')))
((f k ∘ incr w) (w', a))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, W * A -> F (T k B) w: W k: K w': W a: A
g ◻ allK (incr (w ● w')) =
(funk : K => g k ∘ incr w) ◻ allK (incr w')
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, W * A -> F (T k B) w: W k: K w': W a: A j: K w'': W b: B
(g ◻ allK (incr (w ● w'))) j (w'', b) =
((funk : K => g k ∘ incr w) ◻ allK (incr w')) j
(w'', b)
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, W * A -> F (T k B) w: W k: K w': W a: A j: K w'': W b: B
g j (allK (incr (w ● w')) j (w'', b)) =
g j (incr w (allK (incr w') j (w'', b)))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, W * A -> F (T k B) w: W k: K w': W a: A j: K w'': W b: B
g j ((w ● w') ● w'', b) = g j (w ● (w' ● w''), b)
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, W * A -> F (T k B) w: W k: K w': W a: A j: K w'': W b: B
((w ● w') ● w'', b) = (w ● (w' ● w''), b)
nowrewrite monoid_assoc.Qed.
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, W * A -> F (T k B)
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, W * A -> F (T k B)
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, W * A -> F (T k B) w: W
g ⋆dtm f ◻ allK (incr w) =
(g ◻ allK (incr w)) ⋆dtm (f ◻ allK (incr w))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, W * A -> F (T k B) w: W k: K w': W a: A
(g ⋆dtm f ◻ allK (incr w)) k (w', a) =
((g ◻ allK (incr w)) ⋆dtm (f ◻ allK (incr w))) k
(w', a)
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, W * A -> F (T k B) w: W k: K w': W a: A
map (mbinddt (T k) G (g ◻ allK (incr (w ● w'))))
(f k (w ● w', a)) =
map
(mbinddt (T k) G
((g ◻ allK (incr w)) ◻ allK (incr w')))
((f ◻ allK (incr w)) k (w', a))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, W * A -> F (T k B) w: W k: K w': W a: A
g ◻ allK (incr (w ● w')) =
(g ◻ allK (incr w)) ◻ allK (incr w')
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, W * A -> F (T k B) w: W k: K w': W a: A j: K w'': W b: B
(g ◻ allK (incr (w ● w'))) j (w'', b) =
((g ◻ allK (incr w)) ◻ allK (incr w')) j (w'', b)
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, W * A -> F (T k B) w: W k: K w': W a: A j: K w'': W b: B
g j (allK (incr (w ● w')) j (w'', b)) =
g j (allK (incr w) j (allK (incr w') j (w'', b)))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, W * A -> F (T k B) w: W k: K w': W a: A j: K w'': W b: B
g j ((w ● w') ● w'', b) = g j (w ● (w' ● w''), b)
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, W * A -> F (T k B) w: W k: K w': W a: A j: K w'': W b: B
((w ● w') ● w'', b) = (w ● (w' ● w''), b)
nowrewrite monoid_assoc.Qed.Context
`{! MultiDecoratedTraversableMonad W T}.
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> B
g ⋆dtm (mret T ◻ f) =
(fun (k : K) '(w, a) => g k (w, f k (w, a)))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> B
g ⋆dtm (mret T ◻ f) =
(fun (k : K) '(w, a) => g k (w, f k (w, a)))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> B
g ⋆dtm (mret T ◻ f) =
(fun (k : K) '(w, a) => g k (w, f k (w, a)))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> B
(fun (k : K) '(w, a) =>
map (mbinddt (T k) G (g ◻ allK (incr w)))
((mret T ◻ f) k (w, a))) =
(fun (k : K) '(w, a) => g k (w, f k (w, a)))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> B k: K w: W a: A
map (mbinddt (T k) G (g ◻ allK (incr w)))
((mret T ◻ f) k (w, a)) = g k (w, f k (w, a))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> B k: K w: W a: A
mbinddt (T k) G (g ◻ allK (incr w))
((mret T ◻ f) k (w, a)) = g k (w, f k (w, a))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> B k: K w: W a: A
mbinddt (T k) G (g ◻ allK (incr w))
((mret T k ∘ f k) (w, a)) = g k (w, f k (w, a))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> B k: K w: W a: A
mbinddt (T k) G (g ◻ allK (incr w))
(mret T k (f k (w, a))) = g k (w, f k (w, a))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> B k: K w: W a: A
(mbinddt (T k) G (g ◻ allK (incr w)) ∘ mret T k)
(f k (w, a)) = g k (w, f k (w, a))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> B k: K w: W a: A
((g ◻ allK (incr w)) k ∘ pair Ƶ) (f k (w, a)) =
g k (w, f k (w, a))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> B k: K w: W a: A
(g k ∘ allK (incr w) k ∘ pair Ƶ) (f k (w, a)) =
g k (w, f k (w, a))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> B k: K w: W a: A
(g k ∘ (allK (incr w) k ∘ pair Ƶ)) (f k (w, a)) =
g k (w, f k (w, a))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> B k: K w: W a: A
(g k ∘ (incr w ∘ pair Ƶ)) (f k (w, a)) =
g k (w, f k (w, a))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> B k: K w: W a: A
(g k ∘ pair w) (f k (w, a)) = g k (w, f k (w, a))
reflexivity.Qed.
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> F B
g ⋆dtm (mapMret ◻ f) =
(fun (k : K) '(w, a) =>
map (g k ∘ pair w) (f k (w, a)))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> F B
g ⋆dtm (mapMret ◻ f) =
(fun (k : K) '(w, a) =>
map (g k ∘ pair w) (f k (w, a)))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> F B
g ⋆dtm (mapMret ◻ f) =
(fun (k : K) '(w, a) =>
map (g k ∘ pair w) (f k (w, a)))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> F B
(fun (k : K) '(w, a) =>
map (mbinddt (T k) G (g ◻ allK (incr w)))
((mapMret ◻ f) k (w, a))) =
(fun (k : K) '(w, a) =>
map (g k ∘ pair w) (f k (w, a)))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> F B k: K w: W a: A
map (mbinddt (T k) G (g ◻ allK (incr w)))
((mapMret ◻ f) k (w, a)) =
map (g k ∘ pair w) (f k (w, a))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> F B k: K w: W a: A
map (mbinddt (T k) G (g ◻ allK (incr w)))
((map (mret T k) ∘ f k) (w, a)) =
map (g k ∘ pair w) (f k (w, a))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> F B k: K w: W a: A
map (mbinddt (T k) G (g ◻ allK (incr w)))
(map (mret T k) (f k (w, a))) =
map (g k ○ pair w) (f k (w, a))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> F B k: K w: W a: A
(map (mbinddt (T k) G (g ◻ allK (incr w)))
∘ map (mret T k)) (f k (w, a)) =
map (g k ○ pair w) (f k (w, a))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> F B k: K w: W a: A
map (mbinddt (T k) G (g ◻ allK (incr w)) ∘ mret T k)
(f k (w, a)) = map (g k ○ pair w) (f k (w, a))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> F B k: K w: W a: A
map ((g ◻ allK (incr w)) k ∘ pair Ƶ) (f k (w, a)) =
map (g k ○ pair w) (f k (w, a))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> F B k: K w: W a: A
map (g k ∘ allK (incr w) k ∘ pair Ƶ) (f k (w, a)) =
map (g k ○ pair w) (f k (w, a))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> F B k: K w: W a: A
map (g k ∘ (allK (incr w) k ∘ pair Ƶ)) (f k (w, a)) =
map (g k ○ pair w) (f k (w, a))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> F B k: K w: W a: A
map (g k ∘ (incr w ∘ pair Ƶ)) (f k (w, a)) =
map (g k ○ pair w) (f k (w, a))
ix: Index W: Type T: K -> Type -> Type U: Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H0: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H1: Applicative F Monoid0: Monoid W A, B, C: Type g: forallk : K, W * B -> G (T k C) MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T f: K -> W * A -> F B k: K w: W a: A
map (g k ∘ pair w) (f k (w, a)) =
map (g k ○ pair w) (f k (w, a))
reflexivity.Qed.Endmultisorted_dtm_kleisli_composition.(** ** Purity Law *)(**********************************************************************)SectionDTM_laws.Context
(U: Type -> Type)
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T}.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (A : Type) (F : Type -> Type) (Map_G : Map F)
(Pure_G : Pure F) (Mult_G : Mult F),
Applicative F ->
(letp := funk : K => pure inletr := mret T inlete := allK extract in mbinddt U F ((p ◻ r) ◻ e)) =
pure
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (A : Type) (F : Type -> Type) (Map_G : Map F)
(Pure_G : Pure F) (Mult_G : Mult F),
Applicative F ->
(letp := funk : K => pure inletr := mret T inlete := allK extract in mbinddt U F ((p ◻ r) ◻ e)) =
pure
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F
(letp := funk : K => pure inletr := mret T inlete := allK extract in mbinddt U F ((p ◻ r) ◻ e)) =
pure
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F
mbinddt U F
(((funk : K => pure) ◻ mret T) ◻ allK extract) =
pure
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F
mbinddt U F
((funk : K => pure) ◻ (mret T ◻ allK extract)) =
pure
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F
pure
∘ mbinddt U (funx : Type => x)
(mret T ◻ allK extract) = pure
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F
pure ∘ id = pure
reflexivity.Qed.EndDTM_laws.(** * Derived Instances *)(**********************************************************************)Sectionderived_operations.Context
(U: Type -> Type)
`{MultiDecoratedTraversablePreModule W T U}.(** ** Derived Multisorted Operations *)(********************************************************************)Sectiondefinitions.Context
{AB: Type}
(F: Type -> Type)
`{Map F} `{Mult F} `{Pure F}.Definitionmbindd (f: forallk, W * A -> T k B): U A -> U B :=
mbinddt U (funx => x) f.Definitionmmapdt (f: forall (k: K), W * A -> F B): U A -> F (U B) :=
mbinddt U F (mapMret (T := T) ◻ f).Definitionmbindt (f: forallk, A -> F (T k B)): U A -> F (U B) :=
mbinddt U F (f ◻ allK extract).Definitionmbind (f: forallk, A -> T k B): U A -> U B :=
mbindd (f ◻ allK extract).Definitionmmapd (f: forallk, W * A -> B): U A -> U B :=
mbindd (mret T ◻ f).Definitionmmapt (f: forallk, A -> F B): U A -> F (U B) :=
mmapdt (f ◻ allK extract).Definitionmmap (f: forallk, A -> B): U A -> U B :=
mmapd (f ◻ allK extract).Enddefinitions.(** ** Rewriting Rules *)(********************************************************************)Sectionspecial_cases.Context
{AB: Type}
(F: Type -> Type)
`{Map F} `{Mult F} `{Pure F}.(** *** Special cases of <<mbinddt>> *)(******************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: forallk : K, A -> F (T k B)
mbindt F f = mbinddt U F (f ◻ allK extract)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: forallk : K, A -> F (T k B)
mbindt F f = mbinddt U F (f ◻ allK extract)
reflexivity.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: W * A ~k~> T B
mbindd f = mbinddt U (funA : Type => A) f
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: W * A ~k~> T B
mbindd f = mbinddt U (funA : Type => A) f
reflexivity.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> W * A -> F B
mmapdt F f = mbinddt U F (mapMret ◻ f)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> W * A -> F B
mmapdt F f = mbinddt U F (mapMret ◻ f)
reflexivity.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: A ~k~> T B
mbind f =
mbinddt U (funA : Type => A) (f ◻ allK extract)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: A ~k~> T B
mbind f =
mbinddt U (funA : Type => A) (f ◻ allK extract)
reflexivity.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> W * A -> B
mmapd f = mbinddt U (funA : Type => A) (mret T ◻ f)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> W * A -> B
mmapd f = mbinddt U (funA : Type => A) (mret T ◻ f)
reflexivity.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> A -> F B
mmapt F f = mbinddt U F ((mapMret ◻ f) ◻ allK extract)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> A -> F B
mmapt F f = mbinddt U F ((mapMret ◻ f) ◻ allK extract)
reflexivity.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> A -> B
mmap f =
mbinddt U (funA : Type => A)
((mret T ◻ f) ◻ allK extract)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> A -> B
mmap f =
mbinddt U (funA : Type => A)
((mret T ◻ f) ◻ allK extract)
reflexivity.Qed.(** *** Special Cases of <<mbindt>> *)(******************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: A ~k~> T B
mbind f = mbindt (funA : Type => A) f
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: A ~k~> T B
mbind f = mbindt (funA : Type => A) f
reflexivity.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> A -> F B
mmapt F f = mbindt F (mapMret ◻ f)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> A -> F B
mmapt F f = mbindt F (mapMret ◻ f)
reflexivity.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> A -> B
mmap f = mbindt (funA : Type => A) (mret T ◻ f)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> A -> B
mmap f = mbindt (funA : Type => A) (mret T ◻ f)
reflexivity.Qed.(** *** Special Cases of <<mbindd>> *)(******************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: A ~k~> T B
mbind f = mbindd (f ◻ allK extract)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: A ~k~> T B
mbind f = mbindd (f ◻ allK extract)
reflexivity.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: W * A -k-> B
mmapd f = mbindd (mret T ◻ f)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: W * A -k-> B
mmapd f = mbindd (mret T ◻ f)
reflexivity.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: A -k-> B
mmap f = mbindd ((mret T ◻ f) ◻ allK extract)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: A -k-> B
mmap f = mbindd ((mret T ◻ f) ◻ allK extract)
reflexivity.Qed.(** *** Special Cases of <<mbindd>> *)(******************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> W * A -> B
mmapd f = mmapdt (funA : Type => A) f
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> W * A -> B
mmapd f = mmapdt (funA : Type => A) f
reflexivity.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> A -> B
mmap f = mmapdt (funA : Type => A) (f ◻ allK extract)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> A -> B
mmap f = mmapdt (funA : Type => A) (f ◻ allK extract)
reflexivity.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> A -> F B
mmapt F f = mmapdt F (f ◻ allK extract)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> A -> F B
mmapt F f = mmapdt F (f ◻ allK extract)
reflexivity.Qed.(** *** Special Cases of <<mmapt>> *)(******************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> A -> B
mmap f = mmapt (funA : Type => A) f
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> A -> B
mmap f = mmapt (funA : Type => A) f
reflexivity.Qed.(** *** Special Cases of <<mmapd>> *)(******************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> A -> B
mmap f = mmapd (f ◻ allK extract)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> A -> B
mmap f = mmapd (f ◻ allK extract)
reflexivity.Qed.(** *** Special Cases of <<mbind>> *)(******************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> A -> B
mmap f = mbind (mret T ◻ f)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U A, B: Type F: Type -> Type H1: Map F H2: Mult F H3: Pure F f: K -> A -> B
mmap f = mbind (mret T ◻ f)
reflexivity.Qed.Endspecial_cases.Endderived_operations.(** ** Composition Between <<mbinddt>> and Other Operations *)(** Compositions laws for compositions of the form <<mbinddt ∘ xxx>> or <<xxx ∘ mbinddt>> *)(**********************************************************************)Sectionderived_operations_composition.Context
(U: Type -> Type)
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T}
`{Applicative F}
`{Applicative G}
{A B C: Type}.(** *** <<mbinddt>> on the right *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : W * B ~k~> T C)
(f : forallk : K, W * A -> F (T k B)),
map (mbindd U g) ∘ mbinddt U F f =
mbinddt U F
(fun (k : K) '(w, a) =>
map (mbindd (T k) (g ◻ allK (incr w))) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : W * B ~k~> T C)
(f : forallk : K, W * A -> F (T k B)),
map (mbindd U g) ∘ mbinddt U F f =
mbinddt U F
(fun (k : K) '(w, a) =>
map (mbindd (T k) (g ◻ allK (incr w))) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: W * B ~k~> T C f: forallk : K, W * A -> F (T k B)
map (mbindd U g) ∘ mbinddt U F f =
mbinddt U F
(fun (k : K) '(w, a) =>
map (mbindd (T k) (g ◻ allK (incr w))) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: W * B ~k~> T C f: forallk : K, W * A -> F (T k B)
map (mbinddt U (funA : Type => A) g) ∘ mbinddt U F f =
mbinddt U F
(fun (k : K) '(w, a) =>
map (mbindd (T k) (g ◻ allK (incr w))) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: W * B ~k~> T C f: forallk : K, W * A -> F (T k B)
mbinddt U (F ∘ (funA : Type => A)) (g ⋆dtm f) =
mbinddt U F
(fun (k : K) '(w, a) =>
map (mbindd (T k) (g ◻ allK (incr w))) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: W * B ~k~> T C f: forallk : K, W * A -> F (T k B)
Mult_compose F (funA : Type => A) = Mult_G
nowerewrite Mult_compose_identity1.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : K -> W * B -> G C)
(f : forallk : K, W * A -> F (T k B)),
map (mmapdt U G g) ∘ mbinddt U F f =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) =>
map (mmapdt (T k) G (g ◻ allK (incr w)))
(f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : K -> W * B -> G C)
(f : forallk : K, W * A -> F (T k B)),
map (mmapdt U G g) ∘ mbinddt U F f =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) =>
map (mmapdt (T k) G (g ◻ allK (incr w)))
(f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> W * B -> G C f: forallk : K, W * A -> F (T k B)
map (mmapdt U G g) ∘ mbinddt U F f =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) =>
map (mmapdt (T k) G (g ◻ allK (incr w)))
(f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> W * B -> G C f: forallk : K, W * A -> F (T k B)
map (mbinddt U G (mapMret ◻ g)) ∘ mbinddt U F f =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) =>
map (mmapdt (T k) G (g ◻ allK (incr w)))
(f k (w, a)))
nowrewrite (dtp_mbinddt_mbinddt W T U F G).Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : forallk : K, B -> G (T k C))
(f : forallk : K, W * A -> F (T k B)),
map (mbindt U G g) ∘ mbinddt U F f =
mbinddt U (F ∘ G)
(funk : K => map (mbindt (T k) G g) ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : forallk : K, B -> G (T k C))
(f : forallk : K, W * A -> F (T k B)),
map (mbindt U G g) ∘ mbinddt U F f =
mbinddt U (F ∘ G)
(funk : K => map (mbindt (T k) G g) ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, B -> G (T k C) f: forallk : K, W * A -> F (T k B)
map (mbindt U G g) ∘ mbinddt U F f =
mbinddt U (F ∘ G)
(funk : K => map (mbindt (T k) G g) ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, B -> G (T k C) f: forallk : K, W * A -> F (T k B)
map (mbinddt U G (g ◻ allK extract)) ∘ mbinddt U F f =
mbinddt U (F ∘ G)
(funk : K => map (mbindt (T k) G g) ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, B -> G (T k C) f: forallk : K, W * A -> F (T k B)
mbinddt U (F ∘ G) ((g ◻ allK extract) ⋆dtm f) =
mbinddt U (F ∘ G)
(funk : K => map (mbindt (T k) G g) ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, B -> G (T k C) f: forallk : K, W * A -> F (T k B)
(g ◻ allK extract) ⋆dtm f =
(funk : K => map (mbindt (T k) G g) ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, B -> G (T k C) f: forallk : K, W * A -> F (T k B) k: K w: W a: A
((g ◻ allK extract) ⋆dtm f) k (w, a) =
(map (mbindt (T k) G g) ∘ f k) (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, B -> G (T k C) f: forallk : K, W * A -> F (T k B) k: K w: W a: A
map
(mbinddt (T k) G
((g ◻ allK extract) ◻ allK (incr w)))
(f k (w, a)) = map (mbindt (T k) G g) (f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, B -> G (T k C) f: forallk : K, W * A -> F (T k B) k: K w: W a: A
mbinddt (T k) G ((g ◻ allK extract) ◻ allK (incr w)) =
mbindt (T k) G g
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, B -> G (T k C) f: forallk : K, W * A -> F (T k B) k: K w: W a: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, B -> G (T k C) f: forallk : K, W * A -> F (T k B) k: K w: W a: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : B ~k~> T C)
(f : forallk : K, W * A -> F (T k B)),
map (mbind U g) ∘ mbinddt U F f =
mbinddt U F ((funk : K => map (mbind (T k) g)) ◻ f)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : B ~k~> T C)
(f : forallk : K, W * A -> F (T k B)),
map (mbind U g) ∘ mbinddt U F f =
mbinddt U F ((funk : K => map (mbind (T k) g)) ◻ f)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: B ~k~> T C f: forallk : K, W * A -> F (T k B)
map (mbind U g) ∘ mbinddt U F f =
mbinddt U F ((funk : K => map (mbind (T k) g)) ◻ f)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: B ~k~> T C f: forallk : K, W * A -> F (T k B)
map (mbinddt U (funA : Type => A) (g ◻ allK extract))
∘ mbinddt U F f =
mbinddt U F ((funk : K => map (mbind (T k) g)) ◻ f)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: B ~k~> T C f: forallk : K, W * A -> F (T k B)
mbinddt U (F ∘ (funA : Type => A))
((g ◻ allK extract) ⋆dtm f) =
mbinddt U F ((funk : K => map (mbind (T k) g)) ◻ f)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: B ~k~> T C f: forallk : K, W * A -> F (T k B)
Mult_compose F (funA : Type => A) = Mult_G
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: B ~k~> T C f: forallk : K, W * A -> F (T k B)
(g ◻ allK extract) ⋆dtm f =
(funk : K => map (mbind (T k) g)) ◻ f
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: B ~k~> T C f: forallk : K, W * A -> F (T k B)
Mult_compose F (funA : Type => A) = Mult_G
nowerewrite Mult_compose_identity1.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: B ~k~> T C f: forallk : K, W * A -> F (T k B)
(g ◻ allK extract) ⋆dtm f =
(funk : K => map (mbind (T k) g)) ◻ f
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: B ~k~> T C f: forallk : K, W * A -> F (T k B)
(fun (k : K) '(w, a) =>
map
(mbinddt (T k) (funA : Type => A)
((funk0 : K => g k0 ○ allK extract k0)
◻ allK (incr w))) (f k (w, a))) =
(funk : K => map (mbind (T k) g) ○ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: B ~k~> T C f: forallk : K, W * A -> F (T k B) k: K w: W a: A
map
(mbinddt (T k) (funA : Type => A)
((funk : K => g k ○ allK extract k)
◻ allK (incr w))) (f k (w, a)) =
map (mbind (T k) g) (f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: B ~k~> T C f: forallk : K, W * A -> F (T k B) k: K w: W a: A
mbinddt (T k) (funA : Type => A)
((funk : K => g k ○ allK extract k) ◻ allK (incr w)) =
mbind (T k) g
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: B ~k~> T C f: forallk : K, W * A -> F (T k B) k: K w: W a: A
mbinddt (T k) (funA : Type => A)
((funk : K => g k ○ allK extract k) ◻ allK (incr w)) =
mbinddt (T k) (funA : Type => A) (g ◻ allK extract)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: B ~k~> T C f: forallk : K, W * A -> F (T k B) k: K w: W a: A
(funk : K => g k ○ allK extract k) ◻ allK (incr w) =
g ◻ allK extract
now ext j [w2 b].Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : K -> W * B -> C)
(f : forallk : K, W * A -> F (T k B)),
map (mmapd U g) ∘ mbinddt U F f =
mbinddt U F
(fun (k : K) '(w, a) =>
map (mmapd (T k) (g ◻ allK (incr w))) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : K -> W * B -> C)
(f : forallk : K, W * A -> F (T k B)),
map (mmapd U g) ∘ mbinddt U F f =
mbinddt U F
(fun (k : K) '(w, a) =>
map (mmapd (T k) (g ◻ allK (incr w))) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> W * B -> C f: forallk : K, W * A -> F (T k B)
map (mmapd U g) ∘ mbinddt U F f =
mbinddt U F
(fun (k : K) '(w, a) =>
map (mmapd (T k) (g ◻ allK (incr w))) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> W * B -> C f: forallk : K, W * A -> F (T k B)
map (mbinddt U (funA : Type => A) (mret T ◻ g))
∘ mbinddt U F f =
mbinddt U F
(fun (k : K) '(w, a) =>
map (mmapd (T k) (g ◻ allK (incr w))) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> W * B -> C f: forallk : K, W * A -> F (T k B)
mbinddt U (F ∘ (funA : Type => A))
((mret T ◻ g) ⋆dtm f) =
mbinddt U F
(fun (k : K) '(w, a) =>
map (mmapd (T k) (g ◻ allK (incr w))) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> W * B -> C f: forallk : K, W * A -> F (T k B)
Mult_compose F (funA : Type => A) = Mult_G
nowerewrite Mult_compose_identity1.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : K -> B -> G C)
(f : forallk : K, W * A -> F (T k B)),
map (mmapt U G g) ∘ mbinddt U F f =
mbinddt U (F ∘ G)
(funk : K => map (mmapt (T k) G g) ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : K -> B -> G C)
(f : forallk : K, W * A -> F (T k B)),
map (mmapt U G g) ∘ mbinddt U F f =
mbinddt U (F ∘ G)
(funk : K => map (mmapt (T k) G g) ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> B -> G C f: forallk : K, W * A -> F (T k B)
map (mmapt U G g) ∘ mbinddt U F f =
mbinddt U (F ∘ G)
(funk : K => map (mmapt (T k) G g) ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> B -> G C f: forallk : K, W * A -> F (T k B)
map (mbinddt U G ((mapMret ◻ g) ◻ allK extract))
∘ mbinddt U F f =
mbinddt U (F ∘ G)
(funk : K => map (mmapt (T k) G g) ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> B -> G C f: forallk : K, W * A -> F (T k B)
mbinddt U (F ∘ G)
(((mapMret ◻ g) ◻ allK extract) ⋆dtm f) =
mbinddt U (F ∘ G)
(funk : K => map (mmapt (T k) G g) ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> B -> G C f: forallk : K, W * A -> F (T k B)
((mapMret ◻ g) ◻ allK extract) ⋆dtm f =
(funk : K => map (mmapt (T k) G g) ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> B -> G C f: forallk : K, W * A -> F (T k B) k: K w: W a: A
(((mapMret ◻ g) ◻ allK extract) ⋆dtm f) k (w, a) =
(map (mmapt (T k) G g) ∘ f k) (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> B -> G C f: forallk : K, W * A -> F (T k B) k: K w: W a: A
map
(mbinddt (T k) G
(((mapMret ◻ g) ◻ allK extract) ◻ allK (incr w)))
(f k (w, a)) = map (mmapt (T k) G g) (f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> B -> G C f: forallk : K, W * A -> F (T k B) k: K w: W a: A
mbinddt (T k) G
(((mapMret ◻ g) ◻ allK extract) ◻ allK (incr w)) =
mmapt (T k) G g
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> B -> G C f: forallk : K, W * A -> F (T k B) k: K w: W a: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> B -> G C f: forallk : K, W * A -> F (T k B) k: K w: W a: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : K -> B -> C)
(f : forallk : K, W * A -> F (T k B)),
map (mmap U g) ∘ mbinddt U F f =
mbinddt U F (funk : K => map (mmap (T k) g) ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : K -> B -> C)
(f : forallk : K, W * A -> F (T k B)),
map (mmap U g) ∘ mbinddt U F f =
mbinddt U F (funk : K => map (mmap (T k) g) ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> B -> C f: forallk : K, W * A -> F (T k B)
map (mmap U g) ∘ mbinddt U F f =
mbinddt U F (funk : K => map (mmap (T k) g) ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> B -> C f: forallk : K, W * A -> F (T k B)
map (mmapd U (g ◻ allK extract)) ∘ mbinddt U F f =
mbinddt U F
(funk : K =>
map (mmapd (T k) (g ◻ allK extract)) ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> B -> C f: forallk : K, W * A -> F (T k B)
mbinddt U F
(fun (k : K) '(w, a) =>
map
(mmapd (T k) ((g ◻ allK extract) ◻ allK (incr w)))
(f k (w, a))) =
mbinddt U F
(funk : K =>
map (mmapd (T k) (g ◻ allK extract)) ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> B -> C f: forallk : K, W * A -> F (T k B)
(fun (k : K) '(w, a) =>
map
(mmapd (T k) ((g ◻ allK extract) ◻ allK (incr w)))
(f k (w, a))) =
(funk : K =>
map (mmapd (T k) (g ◻ allK extract)) ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> B -> C f: forallk : K, W * A -> F (T k B) k: K w: W a: A
map (mmapd (T k) ((g ◻ allK extract) ◻ allK (incr w)))
(f k (w, a)) =
(map (mmapd (T k) (g ◻ allK extract)) ∘ f k) (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> B -> C f: forallk : K, W * A -> F (T k B) k: K w: W a: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> B -> C f: forallk : K, W * A -> F (T k B) k: K w: W a: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: K -> B -> C f: forallk : K, W * A -> F (T k B) k: K w: W a: A
now ext j [w2 b].Qed.(** *** <<mbinddt>> on the left *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : forallk : K, W * B -> G (T k C))
(f : W * A ~k~> T B),
mbinddt U G g ∘ mbindd U f =
mbinddt U G
(fun (k : K) '(w, a) =>
mbinddt (T k) G (g ◻ allK (incr w)) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : forallk : K, W * B -> G (T k C))
(f : W * A ~k~> T B),
mbinddt U G g ∘ mbindd U f =
mbinddt U G
(fun (k : K) '(w, a) =>
mbinddt (T k) G (g ◻ allK (incr w)) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: W * A ~k~> T B
mbinddt U G g ∘ mbindd U f =
mbinddt U G
(fun (k : K) '(w, a) =>
mbinddt (T k) G (g ◻ allK (incr w)) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: W * A ~k~> T B
mbinddt U G g ∘ mbinddt U (funA : Type => A) f =
mbinddt U G
(fun (k : K) '(w, a) =>
mbinddt (T k) G (g ◻ allK (incr w)) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: W * A ~k~> T B
map (mbinddt U G g) ∘ mbinddt U (funA : Type => A) f =
mbinddt U G
(fun (k : K) '(w, a) =>
mbinddt (T k) G (g ◻ allK (incr w)) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: W * A ~k~> T B
mbinddt U ((funA : Type => A) ∘ G) (g ⋆dtm f) =
mbinddt U G
(fun (k : K) '(w, a) =>
mbinddt (T k) G (g ◻ allK (incr w)) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: W * A ~k~> T B
Mult_compose (funA : Type => A) G = Mult_G0
nowrewrite (Mult_compose_identity2 G).Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : forallk : K, W * B -> G (T k C))
(f : K -> W * A -> F B),
map (mbinddt U G g) ∘ mmapdt U F f =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : forallk : K, W * B -> G (T k C))
(f : K -> W * A -> F B),
map (mbinddt U G g) ∘ mmapdt U F f =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> W * A -> F B
map (mbinddt U G g) ∘ mmapdt U F f =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> W * A -> F B
map (mbinddt U G g) ∘ mbinddt U F (mapMret ◻ f) =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> W * A -> F B
mbinddt U (F ∘ G) (g ⋆dtm (mapMret ◻ f)) =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> W * A -> F B
g ⋆dtm (mapMret ◻ f) =
(fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> W * A -> F B k: K w: W a: A
(g ⋆dtm (mapMret ◻ f)) k (w, a) =
map (g k ○ pair w) (f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> W * A -> F B k: K w: W a: A
map (mbinddt (T k) G (g ◻ allK (incr w)))
((mapMret ◻ f) k (w, a)) =
map (g k ○ pair w) (f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> W * A -> F B k: K w: W a: A
map (mbinddt (T k) G (g ◻ allK (incr w)))
((map (mret T k) ∘ f k) (w, a)) =
map (g k ○ pair w) (f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> W * A -> F B k: K w: W a: A
map (mbinddt (T k) G (g ◻ allK (incr w)))
(map (mret T k) (f k (w, a))) =
map (g k ○ pair w) (f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> W * A -> F B k: K w: W a: A
(map (mbinddt (T k) G (g ◻ allK (incr w)))
∘ map (mret T k)) (f k (w, a)) =
map (g k ○ pair w) (f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> W * A -> F B k: K w: W a: A
map (mbinddt (T k) G (g ◻ allK (incr w)) ∘ mret T k)
(f k (w, a)) = map (g k ○ pair w) (f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> W * A -> F B k: K w: W a: A
map ((g ◻ allK (incr w)) k ∘ pair Ƶ) (f k (w, a)) =
map (g k ○ pair w) (f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> W * A -> F B k: K w: W a: A
map (g k ∘ incr w ∘ pair Ƶ) (f k (w, a)) =
map (g k ○ pair w) (f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> W * A -> F B k: K w: W a: A
map (g k ∘ (incr w ∘ pair Ƶ)) (f k (w, a)) =
map (g k ○ pair w) (f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> W * A -> F B k: K w: W a: A
map (g k ∘ pair w) (f k (w, a)) =
map (g k ○ pair w) (f k (w, a))
reflexivity.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : forallk : K, W * B -> G (T k C))
(f : forallk : K, A -> F (T k B)),
map (mbinddt U G g) ∘ mbindt U F f =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) =>
map (mbinddt (T k) G (g ◻ allK (incr w))) (f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : forallk : K, W * B -> G (T k C))
(f : forallk : K, A -> F (T k B)),
map (mbinddt U G g) ∘ mbindt U F f =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) =>
map (mbinddt (T k) G (g ◻ allK (incr w))) (f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, A -> F (T k B)
map (mbinddt U G g) ∘ mbindt U F f =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) =>
map (mbinddt (T k) G (g ◻ allK (incr w))) (f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, A -> F (T k B)
map (mbinddt U G g) ∘ mbinddt U F (f ◻ allK extract) =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) =>
map (mbinddt (T k) G (g ◻ allK (incr w))) (f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: forallk : K, A -> F (T k B)
mbinddt U (F ∘ G) (g ⋆dtm (f ◻ allK extract)) =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) =>
map (mbinddt (T k) G (g ◻ allK (incr w))) (f k a))
reflexivity.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : forallk : K, W * B -> G (T k C))
(f : A ~k~> T B),
mbinddt U G g ∘ mbind U f =
mbinddt U G
(fun (k : K) '(w, a) =>
mbinddt (T k) G (g ◻ allK (incr w)) (f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : forallk : K, W * B -> G (T k C))
(f : A ~k~> T B),
mbinddt U G g ∘ mbind U f =
mbinddt U G
(fun (k : K) '(w, a) =>
mbinddt (T k) G (g ◻ allK (incr w)) (f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: A ~k~> T B
mbinddt U G g ∘ mbind U f =
mbinddt U G
(fun (k : K) '(w, a) =>
mbinddt (T k) G (g ◻ allK (incr w)) (f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: A ~k~> T B
mbinddt U G g
∘ mbinddt U (funA : Type => A) (f ◻ allK extract) =
mbinddt U G
(fun (k : K) '(w, a) =>
mbinddt (T k) G (g ◻ allK (incr w)) (f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: A ~k~> T B
map (mbinddt U G g)
∘ mbinddt U (funA : Type => A) (f ◻ allK extract) =
mbinddt U G
(fun (k : K) '(w, a) =>
mbinddt (T k) G (g ◻ allK (incr w)) (f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: A ~k~> T B
mbinddt U ((funA : Type => A) ∘ G)
(g ⋆dtm (f ◻ allK extract)) =
mbinddt U G
(fun (k : K) '(w, a) =>
mbinddt (T k) G (g ◻ allK (incr w)) (f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: A ~k~> T B
Mult_compose (funA : Type => A) G = Mult_G0
nowrewrite (Mult_compose_identity2 G).Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : forallk : K, W * B -> G (T k C))
(f : K -> W * A -> B),
mbinddt U G g ∘ mmapd U f =
mbinddt U G
(fun (k : K) '(w, a) => g k (w, f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : forallk : K, W * B -> G (T k C))
(f : K -> W * A -> B),
mbinddt U G g ∘ mmapd U f =
mbinddt U G
(fun (k : K) '(w, a) => g k (w, f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> W * A -> B
mbinddt U G g ∘ mmapd U f =
mbinddt U G
(fun (k : K) '(w, a) => g k (w, f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> W * A -> B
mbinddt U G g
∘ mbinddt U (funA : Type => A) (mret T ◻ f) =
mbinddt U G
(fun (k : K) '(w, a) => g k (w, f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> W * A -> B
map (mbinddt U G g)
∘ mbinddt U (funA : Type => A) (mret T ◻ f) =
mbinddt U G
(fun (k : K) '(w, a) => g k (w, f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> W * A -> B
mbinddt U ((funA : Type => A) ∘ G)
(g ⋆dtm (mret T ◻ f)) =
mbinddt U G
(fun (k : K) '(w, a) => g k (w, f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> W * A -> B
Mult_compose (funA : Type => A) G = Mult_G0
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> W * A -> B
g ⋆dtm (mret T ◻ f) =
(fun (k : K) '(w, a) => g k (w, f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> W * A -> B
g ⋆dtm (mret T ◻ f) =
(fun (k : K) '(w, a) => g k (w, f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> W * A -> B
(fun (k : K) '(w, a) => g k (w, f k (w, a))) =
(fun (k : K) '(w, a) => g k (w, f k (w, a)))
reflexivity.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : forallk : K, W * B -> G (T k C))
(f : K -> A -> F B),
map (mbinddt U G g) ∘ mmapt U F f =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) => map (g k ○ pair w) (f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : forallk : K, W * B -> G (T k C))
(f : K -> A -> F B),
map (mbinddt U G g) ∘ mmapt U F f =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) => map (g k ○ pair w) (f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> A -> F B
map (mbinddt U G g) ∘ mmapt U F f =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) => map (g k ○ pair w) (f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> A -> F B
map (mbinddt U G g) ∘ mmapdt U F (f ◻ allK extract) =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) => map (g k ○ pair w) (f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> A -> F B
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) =>
map (g k ○ pair w) ((f ◻ allK extract) k (w, a))) =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) => map (g k ○ pair w) (f k a))
reflexivity.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : forallk : K, W * B -> G (T k C))
(f : K -> A -> B),
mbinddt U G g ∘ mmap U f =
mbinddt U G (fun (k : K) '(w, a) => g k (w, f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type
forall (g : forallk : K, W * B -> G (T k C))
(f : K -> A -> B),
mbinddt U G g ∘ mmap U f =
mbinddt U G (fun (k : K) '(w, a) => g k (w, f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> A -> B
mbinddt U G g ∘ mmap U f =
mbinddt U G (fun (k : K) '(w, a) => g k (w, f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> A -> B
mbinddt U G g ∘ mmapd U (f ◻ allK extract) =
mbinddt U G (fun (k : K) '(w, a) => g k (w, f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G A, B, C: Type g: forallk : K, W * B -> G (T k C) f: K -> A -> B
mbinddt U G
(fun (k : K) '(w, a) =>
g k (w, (f ◻ allK extract) k (w, a))) =
mbinddt U G (fun (k : K) '(w, a) => g k (w, f k a))
reflexivity.Qed.Endderived_operations_composition.(** ** Composition between Derived Operations *)(** Composition laws involving one of <<mbindd>>/<<mmapdt>>/<<mbindt>> and another operation that is not a special cases. *)(**********************************************************************)Sectionmixed_composition_laws.Context
(U: Type -> Type)
(FG: Type -> Type)
`{Applicative F}
`{Applicative G}
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T} {A B C: Type}.(** *** <<mbindd>> *)(** Operations with traversals are not special cases of <<mbindd>>. *)(********************************************************************)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : W * B ~k~> T C) (f : K -> W * A -> F B),
map (mbindd U g) ∘ mmapdt U F f =
mbinddt U F
(fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a)))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : W * B ~k~> T C) (f : K -> W * A -> F B),
map (mbindd U g) ∘ mmapdt U F f =
mbinddt U F
(fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a)))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> W * A -> F B
map (mbindd U g) ∘ mmapdt U F f =
mbinddt U F
(fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a)))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> W * A -> F B
map (mbindd U g) ∘ mbinddt U F (mapMret ◻ f) =
mbinddt U F
(fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a)))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> W * A -> F B
map (mbinddt U (funA : Type => A) g)
∘ mbinddt U F (mapMret ◻ f) =
mbinddt U F
(fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a)))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> W * A -> F B
mbinddt U (F ∘ (funx : Type => x))
(g ⋆dtm (mapMret ◻ f)) =
mbinddt U F
(fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a)))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> W * A -> F B
mbinddt U (F ∘ (funx : Type => x))
(fun (k : K) '(w, a) =>
map (g k ∘ pair w) (f k (w, a))) =
mbinddt U F
(fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a)))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> W * A -> F B
mbinddt U (F ∘ (funx : Type => x))
(fun (k : K) '(w, a) =>
map (g k ∘ pair w) (f k (w, a))) =
mbinddt U F
(fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a)))
reflexivity.Qed.
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : W * B ~k~> T C)
(f : forallk : K, A -> F (T k B)),
map (mbindd U g) ∘ mbindt U F f =
mbinddt U F
(fun (k : K) '(w, a) =>
map (mbindd (T k) (g ◻ allK (incr w))) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : W * B ~k~> T C)
(f : forallk : K, A -> F (T k B)),
map (mbindd U g) ∘ mbindt U F f =
mbinddt U F
(fun (k : K) '(w, a) =>
map (mbindd (T k) (g ◻ allK (incr w))) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: forallk : K, A -> F (T k B)
map (mbindd U g) ∘ mbindt U F f =
mbinddt U F
(fun (k : K) '(w, a) =>
map (mbindd (T k) (g ◻ allK (incr w))) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: forallk : K, A -> F (T k B)
map (mbinddt U (funA : Type => A) g) ∘ mbindt U F f =
mbinddt U F
(fun (k : K) '(w, a) =>
map (mbindd (T k) (g ◻ allK (incr w))) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: forallk : K, A -> F (T k B)
map (mbinddt U (funA : Type => A) g)
∘ mbinddt U F (f ◻ allK extract) =
mbinddt U F
(fun (k : K) '(w, a) =>
map (mbindd (T k) (g ◻ allK (incr w))) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: forallk : K, A -> F (T k B)
mbinddt U (F ∘ (funx : Type => x))
(g ⋆dtm (f ◻ allK extract)) =
mbinddt U F
(fun (k : K) '(w, a) =>
map (mbindd (T k) (g ◻ allK (incr w))) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: forallk : K, A -> F (T k B)
mbinddt U (F ∘ (funx : Type => x))
(g ⋆dtm (f ◻ allK extract)) =
mbinddt U F
(fun (k : K) '(w, a) =>
map (mbindd (T k) (g ◻ allK (incr w))) (f k a))
reflexivity.Qed.
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : W * B ~k~> T C) (f : K -> A -> F B),
map (mbindd U g) ∘ mmapt U F f =
mbinddt U F
(fun (k : K) '(w, a) => map (g k ○ pair w) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : W * B ~k~> T C) (f : K -> A -> F B),
map (mbindd U g) ∘ mmapt U F f =
mbinddt U F
(fun (k : K) '(w, a) => map (g k ○ pair w) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> A -> F B
map (mbindd U g) ∘ mmapt U F f =
mbinddt U F
(fun (k : K) '(w, a) => map (g k ○ pair w) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> A -> F B
map (mbinddt U (funA : Type => A) g) ∘ mmapt U F f =
mbinddt U F
(fun (k : K) '(w, a) => map (g k ○ pair w) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> A -> F B
map (mbinddt U (funA : Type => A) g)
∘ mbinddt U F ((mapMret ◻ f) ◻ allK extract) =
mbinddt U F
(fun (k : K) '(w, a) => map (g k ○ pair w) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> A -> F B
mbinddt U (F ∘ (funx : Type => x))
(g ⋆dtm ((mapMret ◻ f) ◻ allK extract)) =
mbinddt U F
(fun (k : K) '(w, a) => map (g k ○ pair w) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> A -> F B
mbinddt U (F ∘ (funx : Type => x))
(g ⋆dtm (mapMret ◻ (f ◻ allK extract))) =
mbinddt U F
(fun (k : K) '(w, a) => map (g k ○ pair w) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> A -> F B
mbinddt U (F ∘ (funx : Type => x))
(fun (k : K) '(w, a) =>
map (g k ∘ pair w) ((f ◻ allK extract) k (w, a))) =
mbinddt U F
(fun (k : K) '(w, a) => map (g k ○ pair w) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> A -> F B
mbinddt U (F ∘ (funx : Type => x))
(fun (k : K) '(w, a) =>
map (g k ∘ pair w) ((f ◻ allK extract) k (w, a))) =
mbinddt U F
(fun (k : K) '(w, a) => map (g k ○ pair w) (f k a))
reflexivity.Qed.(* TODO Also need to put <<mmapt_mbindd>> somewhere. *)(** *** <<mmapdt>> *)(** Operations with joins are not special cases of <<mmapdt>>. *)(********************************************************************)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : K -> W * B -> G C) (f : W * A ~k~> T B),
mmapdt U G g ∘ mbindd U f =
mbinddt U G
(fun (k : K) '(w, a) =>
mmapdt (T k) G (g ◻ allK (incr w)) (f k (w, a)))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : K -> W * B -> G C) (f : W * A ~k~> T B),
mmapdt U G g ∘ mbindd U f =
mbinddt U G
(fun (k : K) '(w, a) =>
mmapdt (T k) G (g ◻ allK (incr w)) (f k (w, a)))
(* TODO *)Abort.
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : K -> W * B -> G C)
(f : forallk : K, A -> F (T k B)),
map (mmapdt U G g) ∘ mbindt U F f =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) =>
map (mmapdt (T k) G (g ◻ allK (incr w))) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : K -> W * B -> G C)
(f : forallk : K, A -> F (T k B)),
map (mmapdt U G g) ∘ mbindt U F f =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) =>
map (mmapdt (T k) G (g ◻ allK (incr w))) (f k a))
(* TODO *)Abort.
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : K -> W * B -> G C) (f : A ~k~> T B),
mmapdt U G g ∘ mbind U f =
mbinddt U G
(fun (k : K) '(w, a) =>
mmapdt (T k) G (g ◻ allK (incr w)) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : K -> W * B -> G C) (f : A ~k~> T B),
mmapdt U G g ∘ mbind U f =
mbinddt U G
(fun (k : K) '(w, a) =>
mmapdt (T k) G (g ◻ allK (incr w)) (f k a))
(* TODO *)Abort.(* TODO Also need to put <<mbind_mmapdt>> somewhere. *)(** *** <<mbindt>> *)(** Operations with decorations are not special cases of <<mbindt>>. *)(********************************************************************)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : forallk : K, B -> G (T k C))
(f : W * A ~k~> T B),
mbindt U G g ∘ mbindd U f =
mbinddt U G
(fun (k : K) '(w, a) =>
mbindt (T k) G g (f k (w, a)))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : forallk : K, B -> G (T k C))
(f : W * A ~k~> T B),
mbindt U G g ∘ mbindd U f =
mbinddt U G
(fun (k : K) '(w, a) =>
mbindt (T k) G g (f k (w, a)))
(* TODO *)Abort.
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : forallk : K, B -> G (T k C))
(f : K -> W * A -> F B),
map (mbindt U G g) ∘ mmapdt U F f =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) => map (g k) (f k (w, a)))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : forallk : K, B -> G (T k C))
(f : K -> W * A -> F B),
map (mbindt U G g) ∘ mmapdt U F f =
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) => map (g k) (f k (w, a)))
(* TODO *)Abort.(* TODO <<mbindt_mmapd>> *)(* TODO Also need to put <<mmapd_mbindt>> somewhere. *)Endmixed_composition_laws.(** ** Decorated Monad (<<mbindd>>) *)(**********************************************************************)Definitioncompose_dm
`{ix: Index}
{W: Type}
{T: K -> Type -> Type}
`{mn_op: Monoid_op W}
`{mn_unit: Monoid_unit W}
`{forallk, MBind W T (T k)}
{A B C: Type}
(g: forallk, W * B -> T k C)
(f: forallk, W * A -> T k B): forallk, W * A -> T k C :=
funk '(w, a) => mbindd (T k) (g ◻ allK (incr w)) (f k (w, a)).Infix"⋆dm" := compose_dm (at level40).SectionDecoratedMonad.Context
(U: Type -> Type)
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T} {A B C: Type}.(** *** Composition and identity law *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
mbindd U (mret T ◻ allK extract) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
mbindd U (mret T ◻ allK extract) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
mbindd U (mret T ◻ allK extract) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
mbinddt U (funA : Type => A) (mret T ◻ allK extract) =
id
nowrewrite <- (dtp_mbinddt_mret W T U).Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : W * B ~k~> T C) (f : W * A ~k~> T B),
mbindd U g ∘ mbindd U f =
mbindd U
(fun (k : K) '(w, a) =>
mbindd (T k) (g ◻ allK (incr w)) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : W * B ~k~> T C) (f : W * A ~k~> T B),
mbindd U g ∘ mbindd U f =
mbindd U
(fun (k : K) '(w, a) =>
mbindd (T k) (g ◻ allK (incr w)) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: W * A ~k~> T B
mbindd U g ∘ mbindd U f =
mbindd U
(fun (k : K) '(w, a) =>
mbindd (T k) (g ◻ allK (incr w)) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: W * A ~k~> T B
mbinddt U (funA : Type => A) g
∘ mbinddt U (funA : Type => A) f =
mbinddt U (funA : Type => A)
(fun (k : K) '(w, a) =>
mbindd (T k) (g ◻ allK (incr w)) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: W * A ~k~> T B
map (mbinddt U (funx : Type => x) g)
∘ mbinddt U (funx : Type => x) f =
mbinddt U (funA : Type => A)
(fun (k : K) '(w, a) =>
mbindd (T k) (g ◻ allK (incr w)) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: W * A ~k~> T B
mbinddt U ((funx : Type => x) ∘ (funx : Type => x))
(g ⋆dtm f) =
mbinddt U (funA : Type => A)
(fun (k : K) '(w, a) =>
mbindd (T k) (g ◻ allK (incr w)) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: W * A ~k~> T B
mbinddt U ((funx : Type => x) ∘ (funx : Type => x))
(g ⋆dtm f) =
mbinddt U (funA : Type => A)
(fun (k : K) '(w, a) =>
mbindd (T k) (g ◻ allK (incr w)) (f k (w, a)))
reflexivity.Qed.(** *** Right unit law for monads *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (k : K) (f : W * A ~k~> T B),
mbindd (T k) f ∘ mret T k = f k ∘ ret
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (k : K) (f : W * A ~k~> T B),
mbindd (T k) f ∘ mret T k = f k ∘ ret
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type k: K f: W * A ~k~> T B
mbindd (T k) f ∘ mret T k = f k ∘ ret
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type k: K f: W * A ~k~> T B
mbinddt (T k) (funA : Type => A) f ∘ mret T k =
f k ∘ ret
nowrewrite (dtm_mbinddt_comp_mret W T k (funA => A)).Qed.(** *** Composition with special cases on the right *)(** Composition with operations <<mbind>>/<<mmapd>>/<<mmap>> *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : W * B ~k~> T C) (f : A ~k~> T B),
mbindd U g ∘ mbind U f =
mbindd U
(fun (k : K) '(w, a) =>
mbindd (T k) (g ◻ allK (incr w)) (f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : W * B ~k~> T C) (f : A ~k~> T B),
mbindd U g ∘ mbind U f =
mbindd U
(fun (k : K) '(w, a) =>
mbindd (T k) (g ◻ allK (incr w)) (f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: A ~k~> T B
mbindd U g ∘ mbind U f =
mbindd U
(fun (k : K) '(w, a) =>
mbindd (T k) (g ◻ allK (incr w)) (f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: A ~k~> T B
mbindd U g ∘ mbindd U (f ◻ allK extract) =
mbindd U
(fun (k : K) '(w, a) =>
mbindd (T k) (g ◻ allK (incr w)) (f k a))
nowrewrite mbindd_mbindd.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : W * B ~k~> T C) (f : K -> W * A -> B),
mbindd U g ∘ mmapd U f =
mbindd U (fun (k : K) '(w, a) => g k (w, f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : W * B ~k~> T C) (f : K -> W * A -> B),
mbindd U g ∘ mmapd U f =
mbindd U (fun (k : K) '(w, a) => g k (w, f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> W * A -> B
mbindd U g ∘ mmapd U f =
mbindd U (fun (k : K) '(w, a) => g k (w, f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> W * A -> B
mbindd U g ∘ mbindd U (mret T ◻ f) =
mbindd U (fun (k : K) '(w, a) => g k (w, f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> W * A -> B
mbindd U
(fun (k : K) '(w, a) =>
mbindd (T k) (g ◻ allK (incr w))
((mret T ◻ f) k (w, a))) =
mbindd U (fun (k : K) '(w, a) => g k (w, f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> W * A -> B
(fun (k : K) '(w, a) =>
mbindd (T k) (g ◻ allK (incr w))
((mret T ◻ f) k (w, a))) =
(fun (k : K) '(w, a) => g k (w, f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> W * A -> B k: K w: W a: A
mbindd (T k) (g ◻ allK (incr w))
((mret T ◻ f) k (w, a)) = g k (w, f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> W * A -> B k: K w: W a: A
mbindd (T k) (funk : K => g k ○ allK (incr w) k)
(mret T k (f k (w, a))) = g k (w, f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> W * A -> B k: K w: W a: A
(mbindd (T k) (funk : K => g k ○ allK (incr w) k)
∘ mret T k) (f k (w, a)) =
(g k ∘ pair w) (f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> W * A -> B k: K w: W a: A
(mbinddt (T k) (funA : Type => A)
(funk : K => g k ○ allK (incr w) k) ∘ mret T k)
(f k (w, a)) = (g k ∘ pair w) (f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> W * A -> B k: K w: W a: A
(g k ○ allK (incr w) k ∘ pair Ƶ) (f k (w, a)) =
(g k ∘ pair w) (f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> W * A -> B k: K w: W a: A
g k (w ● Ƶ, f k (w, a)) = g k (w, f k (w, a))
now simpl_monoid.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : W * B ~k~> T C) (f : K -> A -> B),
mbindd U g ∘ mmap U f =
mbindd U (fun (k : K) '(w, a) => g k (w, f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : W * B ~k~> T C) (f : K -> A -> B),
mbindd U g ∘ mmap U f =
mbindd U (fun (k : K) '(w, a) => g k (w, f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> A -> B
mbindd U g ∘ mmap U f =
mbindd U (fun (k : K) '(w, a) => g k (w, f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: W * B ~k~> T C f: K -> A -> B
mbindd U g ∘ mmapd U (f ◻ allK extract) =
mbindd U (fun (k : K) '(w, a) => g k (w, f k a))
nowrewrite (mbindd_mmapd).Qed.(** *** Composition with special cases on the left *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : B ~k~> T C) (f : W * A ~k~> T B),
mbind U g ∘ mbindd U f =
mbindd U (funk : K => mbind (T k) g ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : B ~k~> T C) (f : W * A ~k~> T B),
mbind U g ∘ mbindd U f =
mbindd U (funk : K => mbind (T k) g ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: W * A ~k~> T B
mbind U g ∘ mbindd U f =
mbindd U (funk : K => mbind (T k) g ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: W * A ~k~> T B
mbindd U (g ◻ allK extract) ∘ mbindd U f =
mbindd U (funk : K => mbind (T k) g ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: W * A ~k~> T B
mbindd U
(fun (k : K) '(w, a) =>
mbindd (T k) ((g ◻ allK extract) ◻ allK (incr w))
(f k (w, a))) =
mbindd U (funk : K => mbind (T k) g ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: W * A ~k~> T B
(fun (k : K) '(w, a) =>
mbindd (T k) ((g ◻ allK extract) ◻ allK (incr w))
(f k (w, a))) = (funk : K => mbind (T k) g ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: W * A ~k~> T B k: K w: W a: A
mbindd (T k) ((g ◻ allK extract) ◻ allK (incr w))
(f k (w, a)) = (mbind (T k) g ∘ f k) (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: W * A ~k~> T B k: K w: W a: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: W * A ~k~> T B k: K w: W a: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : K -> W * B -> C) (f : W * A ~k~> T B),
mmapd U g ∘ mbindd U f =
mbindd U
(fun (k : K) '(w, a) =>
mmapd (T k) (g ◻ allK (incr w)) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : K -> W * B -> C) (f : W * A ~k~> T B),
mmapd U g ∘ mbindd U f =
mbindd U
(fun (k : K) '(w, a) =>
mmapd (T k) (g ◻ allK (incr w)) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> W * B -> C f: W * A ~k~> T B
mmapd U g ∘ mbindd U f =
mbindd U
(fun (k : K) '(w, a) =>
mmapd (T k) (g ◻ allK (incr w)) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> W * B -> C f: W * A ~k~> T B
mbindd U (mret T ◻ g) ∘ mbindd U f =
mbindd U
(fun (k : K) '(w, a) =>
mmapd (T k) (g ◻ allK (incr w)) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> W * B -> C f: W * A ~k~> T B
mbindd U
(fun (k : K) '(w, a) =>
mbindd (T k) ((mret T ◻ g) ◻ allK (incr w))
(f k (w, a))) =
mbindd U
(fun (k : K) '(w, a) =>
mmapd (T k) (g ◻ allK (incr w)) (f k (w, a)))
reflexivity.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : B ~k~> T C) (f : W * A ~k~> T B),
mbind U g ∘ mbindd U f =
mbindd U (funk : K => mbind (T k) g ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : B ~k~> T C) (f : W * A ~k~> T B),
mbind U g ∘ mbindd U f =
mbindd U (funk : K => mbind (T k) g ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: W * A ~k~> T B
mbind U g ∘ mbindd U f =
mbindd U (funk : K => mbind (T k) g ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: W * A ~k~> T B
mbindd U (g ◻ allK extract) ∘ mbindd U f =
mbindd U (funk : K => mbind (T k) g ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: W * A ~k~> T B
mbindd U
(fun (k : K) '(w, a) =>
mbindd (T k) ((g ◻ allK extract) ◻ allK (incr w))
(f k (w, a))) =
mbindd U (funk : K => mbind (T k) g ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: W * A ~k~> T B
(fun (k : K) '(w, a) =>
mbindd (T k) ((g ◻ allK extract) ◻ allK (incr w))
(f k (w, a))) = (funk : K => mbind (T k) g ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: W * A ~k~> T B k: K w: W a: A
mbindd (T k) ((g ◻ allK extract) ◻ allK (incr w))
(f k (w, a)) = (mbind (T k) g ∘ f k) (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: W * A ~k~> T B k: K w: W a: A
mbindd (T k) ((g ◻ allK extract) ◻ allK (incr w))
(f k (w, a)) = mbind (T k) g (f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: W * A ~k~> T B k: K w: W a: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: W * A ~k~> T B k: K w: W a: A
now ext j [w2 b].Qed.EndDecoratedMonad.(** ** Decorated Traversable Functor (<<mmapdt>>) *)(**********************************************************************)SectionDecoratedTraversable.Context
(U: Type -> Type)
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T} {A B C: Type}
`{Applicative F} `{Applicative G}.(** *** Composition and identity law *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
mmapdt U (funx : Type => x) (allK extract) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
mmapdt U (funx : Type => x) (allK extract) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
mmapdt U (funx : Type => x) (allK extract) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
mbinddt U (funx : Type => x) (mapMret ◻ allK extract) =
id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
mbinddt U (funx : Type => x) (mapMret ◻ allK extract) =
mbinddt U (funa : Type => a) (mret T ◻ allK extract)
reflexivity.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
forall (g : K -> W * B -> G C) (f : K -> W * A -> F B),
map (mmapdt U G g) ∘ mmapdt U F f =
mmapdt U (F ∘ G)
(fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
forall (g : K -> W * B -> G C) (f : K -> W * A -> F B),
map (mmapdt U G g) ∘ mmapdt U F f =
mmapdt U (F ∘ G)
(fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: K -> W * B -> G C f: K -> W * A -> F B
map (mmapdt U G g) ∘ mmapdt U F f =
mmapdt U (F ∘ G)
(fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: K -> W * B -> G C f: K -> W * A -> F B
map (mbinddt U G (mapMret ◻ g))
∘ mbinddt U F (mapMret ◻ f) =
mbinddt U (F ∘ G)
(mapMret
◻ (fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a))))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: K -> W * B -> G C f: K -> W * A -> F B
mbinddt U (F ∘ G) ((mapMret ◻ g) ⋆dtm (mapMret ◻ f)) =
mbinddt U (F ∘ G)
(mapMret
◻ (fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a))))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: K -> W * B -> G C f: K -> W * A -> F B
mbinddt U (F ∘ G)
(fun (k : K) '(w, a) =>
map
(mbinddt (T k) G ((mapMret ◻ g) ◻ allK (incr w)))
((mapMret ◻ f) k (w, a))) =
mbinddt U (F ∘ G)
(mapMret
◻ (fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a))))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: K -> W * B -> G C f: K -> W * A -> F B
(fun (k : K) '(w, a) =>
map (mbinddt (T k) G ((mapMret ◻ g) ◻ allK (incr w)))
((mapMret ◻ f) k (w, a))) =
mapMret
◻ (fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: K -> W * B -> G C f: K -> W * A -> F B k: K w: W a: A
map (mbinddt (T k) G ((mapMret ◻ g) ◻ allK (incr w)))
((mapMret ◻ f) k (w, a)) =
(mapMret
◻ (fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a)))) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: K -> W * B -> G C f: K -> W * A -> F B k: K w: W a: A
map
(mbinddt (T k) G
(fun (k : K) (a : W * B) =>
map (mret T k) (g k (incr w a))))
(map (mret T k) (f k (w, a))) =
map (mret T k) (map (g k ○ pair w) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: K -> W * B -> G C f: K -> W * A -> F B k: K w: W a: A
(map
(mbinddt (T k) G
(fun (k : K) (a : W * B) =>
map (mret T k) (g k (incr w a))))
∘ map (mret T k)) (f k (w, a)) =
(map (mret T k) ∘ map (g k ○ pair w)) (f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: K -> W * B -> G C f: K -> W * A -> F B k: K w: W a: A
map
(mbinddt (T k) G
(fun (k : K) (a : W * B) =>
map (mret T k) (g k (incr w a))) ∘ mret T k)
(f k (w, a)) =
(map (mret T k) ∘ map (g k ○ pair w)) (f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: K -> W * B -> G C f: K -> W * A -> F B k: K w: W a: A
map
(mbinddt (T k) G
(fun (k : K) (a : W * B) =>
map (mret T k) (g k (incr w a))) ∘ mret T k)
(f k (w, a)) =
(map (map (mret T k)) ∘ map (g k ○ pair w))
(f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: K -> W * B -> G C f: K -> W * A -> F B k: K w: W a: A
map
(mbinddt (T k) G
(fun (k : K) (a : W * B) =>
map (mret T k) (g k (incr w a))) ∘ mret T k)
(f k (w, a)) =
map (map (mret T k) ∘ (g k ○ pair w)) (f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: K -> W * B -> G C f: K -> W * A -> F B k: K w: W a: A
map
((funa : W * B => map (mret T k) (g k (incr w a)))
∘ pair Ƶ) (f k (w, a)) =
map (map (mret T k) ∘ (g k ○ pair w)) (f k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: K -> W * B -> G C f: K -> W * A -> F B k: K w: W a: A
(funa : W * B => map (mret T k) (g k (incr w a)))
∘ pair Ƶ = map (mret T k) ∘ (g k ○ pair w)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: K -> W * B -> G C f: K -> W * A -> F B k: K w: W a: A b: B
((funa : W * B => map (mret T k) (g k (incr w a)))
∘ pair Ƶ) b = (map (mret T k) ∘ (g k ○ pair w)) b
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: K -> W * B -> G C f: K -> W * A -> F B k: K w: W a: A b: B
map (mret T k) (g k (incr w (Ƶ, b))) =
map (mret T k) (g k (w, b))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: K -> W * B -> G C f: K -> W * A -> F B k: K w: W a: A b: B
map (mret T k) (g k ((incr w ∘ pair Ƶ) b)) =
map (mret T k) ((g k ∘ pair w) b)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: K -> W * B -> G C f: K -> W * A -> F B k: K w: W a: A b: B
map (mret T k) (g k (w, b)) =
map (mret T k) ((g k ∘ pair w) b)
now simpl_monoid.Qed.(** *** Composition with <<mret>> *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
forall (k : K) (f : K -> W * A -> F B),
mmapdt (T k) F f ∘ mret T k =
map (mret T k) ∘ f k ∘ pair Ƶ
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
forall (k : K) (f : K -> W * A -> F B),
mmapdt (T k) F f ∘ mret T k =
map (mret T k) ∘ f k ∘ pair Ƶ
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G k: K f: K -> W * A -> F B
mmapdt (T k) F f ∘ mret T k =
map (mret T k) ∘ f k ∘ pair Ƶ
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G k: K f: K -> W * A -> F B
mbinddt (T k) F (mapMret ◻ f) ∘ mret T k =
map (mret T k) ∘ f k ∘ pair Ƶ
nowrewrite (dtm_mbinddt_comp_mret W T k F).Qed.(** *** Purity *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
mmapdt U F (allK pure ◻ allK extract) = pure
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
mmapdt U F (allK pure ◻ allK extract) = pure
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
mmapdt U F (allK pure ◻ allK extract) = pure
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
mbinddt U F (mapMret ◻ (allK pure ◻ allK extract)) =
pure
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
mbinddt U F ((mapMret ◻ allK pure) ◻ allK extract) =
pure
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
mbinddt U F
(((funk : K => pure) ◻ mret T) ◻ allK extract) =
pure
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
(funk : K => pure) ◻ mret T = mapMret ◻ allK pure
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
mbinddt U F
(((funk : K => pure) ◻ mret T) ◻ allK extract) =
pure
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
mbinddt U F
((funk : K => pure) ◻ (mret T ◻ allK extract)) =
pure
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
pure
∘ mbinddt U (funx : Type => x)
(mret T ◻ allK extract) = pure
nowrewrite (dtp_mbinddt_mret W T U).
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
(funk : K => pure) ◻ mret T = mapMret ◻ allK pure
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
(funk : K => pure) ◻ mret T = mapMret ◻ allK pure
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
(funk : K => pure ∘ mret T k) =
(funk : K => mapMret k ∘ allK pure k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G k: K
pure ∘ mret T k = mapMret k ∘ allK pure k
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G k: K
pure ∘ mret T k =
vec_apply (funk : K => map) (mret T) k ∘ pure
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G k: K a: A
(pure ∘ mret T k) a =
(vec_apply (funk : K => map) (mret T) k ∘ pure) a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G k: K a: A
pure (mret T k a) =
vec_apply (funk : K => map) (mret T) k (pure a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G k: K a: A
map (mret T k) (pure a) =
vec_apply (funk : K => map) (mret T) k (pure a)
reflexivity.}Qed.(** *** Composition with special cases on the right *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
forall (g : K -> W * B -> G C) (f : K -> A -> F B),
map (mmapdt U G g) ∘ mmapt U F f =
mmapdt U (F ∘ G)
(fun (k : K) '(w, a) => map (g k ○ pair w) (f k a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
forall (g : K -> W * B -> G C) (f : K -> A -> F B),
map (mmapdt U G g) ∘ mmapt U F f =
mmapdt U (F ∘ G)
(fun (k : K) '(w, a) => map (g k ○ pair w) (f k a))
(* TODO *)Abort.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
forall (g : K -> W * B -> G C) (f : K -> W * A -> B),
mmapdt U G g ∘ mmapd U f =
mmapdt U G
(fun (k : K) '(w, a) => g k (w, f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
forall (g : K -> W * B -> G C) (f : K -> W * A -> B),
mmapdt U G g ∘ mmapd U f =
mmapdt U G
(fun (k : K) '(w, a) => g k (w, f k (w, a)))
(* TODO *)Abort.(* TODO <<mmapdt_mmap>> *)(** *** Composition with other operations on the left *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
forall (g : K -> W * B -> C) (f : K -> W * A -> F B),
map (mmapd U g) ∘ mmapdt U F f =
mmapdt U F
(fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
forall (g : K -> W * B -> C) (f : K -> W * A -> F B),
map (mmapd U g) ∘ mmapdt U F f =
mmapdt U F
(fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a)))
(* TODO *)Abort.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
forall (g : K -> B -> C) (f : K -> W * A -> F B),
map (mmap U g) ∘ mmapdt U F f =
mmapdt U F (funk : K => map (g k) ∘ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F G: Type -> Type Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
forall (g : K -> B -> C) (f : K -> W * A -> F B),
map (mmap U g) ∘ mmapdt U F f =
mmapdt U F (funk : K => map (g k) ∘ f k)
(* TODO *)Abort.(* TODO <<mmap_mmapdt>> *)EndDecoratedTraversable.(** ** Traversable Monad (<<mbindt>>) *)(**********************************************************************)SectionTraversableMonad.Context
(U: Type -> Type)
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T}
{A B C: Type}
(F G: Type -> Type)
`{Applicative F} `{Applicative G}.(** *** Composition and identity law *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
mbindt U (funx : Type => x) (mret T) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
mbindt U (funx : Type => x) (mret T) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
mbindt U (funx : Type => x) (mret T) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
mbinddt U (funx : Type => x) (mret T ◻ allK extract) =
id
nowrewrite (dtp_mbinddt_mret W T U).Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
forall (g : forallk : K, B -> G (T k C))
(f : forallk : K, A -> F (T k B)),
map (mbindt U G g) ∘ mbindt U F f =
mbindt U (F ∘ G)
(funk : K => map (mbindt (T k) G g) ○ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
forall (g : forallk : K, B -> G (T k C))
(f : forallk : K, A -> F (T k B)),
map (mbindt U G g) ∘ mbindt U F f =
mbindt U (F ∘ G)
(funk : K => map (mbindt (T k) G g) ○ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: forallk : K, B -> G (T k C) f: forallk : K, A -> F (T k B)
map (mbindt U G g) ∘ mbindt U F f =
mbindt U (F ∘ G)
(funk : K => map (mbindt (T k) G g) ○ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: forallk : K, B -> G (T k C) f: forallk : K, A -> F (T k B)
map (mbinddt U G (g ◻ allK extract))
∘ mbinddt U F (f ◻ allK extract) =
mbinddt U (F ∘ G)
((funk : K =>
map (mbinddt (T k) G (g ◻ allK extract)) ○ f k)
◻ allK extract)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: forallk : K, B -> G (T k C) f: forallk : K, A -> F (T k B)
mbinddt U (F ∘ G)
((g ◻ allK extract) ⋆dtm (f ◻ allK extract)) =
mbinddt U (F ∘ G)
((funk : K =>
map (mbinddt (T k) G (g ◻ allK extract)) ○ f k)
◻ allK extract)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: forallk : K, B -> G (T k C) f: forallk : K, A -> F (T k B)
(g ◻ allK extract) ⋆dtm (f ◻ allK extract) =
(funk : K =>
map (mbinddt (T k) G (g ◻ allK extract)) ○ f k)
◻ allK extract
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: forallk : K, B -> G (T k C) f: forallk : K, A -> F (T k B) k: K w: W a: A
((g ◻ allK extract) ⋆dtm (f ◻ allK extract)) k (w, a) =
((funk : K =>
map (mbinddt (T k) G (g ◻ allK extract)) ○ f k)
◻ allK extract) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: forallk : K, B -> G (T k C) f: forallk : K, A -> F (T k B) k: K w: W a: A
map
(mbinddt (T k) G
((funk : K => g k ○ allK extract k)
◻ allK (incr w))) (f k a) =
map
(mbinddt (T k) G (funk : K => g k ○ allK extract k))
(f k a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: forallk : K, B -> G (T k C) f: forallk : K, A -> F (T k B) k: K w: W a: A
(funk : K => g k ○ allK extract k) ◻ allK (incr w) =
(funk : K => g k ○ allK extract k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G g: forallk : K, B -> G (T k C) f: forallk : K, A -> F (T k B) k: K w: W a: A k2: K w2: W b: B
((funk : K => g k ○ allK extract k) ◻ allK (incr w))
k2 (w2, b) = g k2 (allK extract k2 (w2, b))
easy.Qed.(** *** Composition with <<mret>> *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
forall (k : K) (f : forallk0 : K, A -> F (T k0 B)),
mbindt (T k) F f ∘ mret T k = f k
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G
forall (k : K) (f : forallk0 : K, A -> F (T k0 B)),
mbindt (T k) F f ∘ mret T k = f k
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G k: K f: forallk : K, A -> F (T k B)
mbindt (T k) F f ∘ mret T k = f k
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H2: Applicative G k: K f: forallk : K, A -> F (T k B)
mbinddt (T k) F (f ◻ allK extract) ∘ mret T k = f k
nowrewrite (dtm_mbinddt_comp_mret W T k F).Qed.(** *** Purity *)(********************************************************************)(* TODO *)(** *** Composition with special cases on the right *)(********************************************************************)(* TODO *)(** *** Composition with special cases on the left *)(********************************************************************)(* TODO *)EndTraversableMonad.(** ** Heterogeneous Composition Laws *)(** Composition laws between one of <<mbind>>/<<mmapd>>/<<mmapt>> and another operation, neither of which is a special case of the other. *)(**********************************************************************)Sectionmixed_composition_laws2.Context
(U: Type -> Type)
(FG: Type -> Type)
`{Applicative F}
`{Applicative G}
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T} {A B C: Type}.(** *** <<mbind>> on the left *)(********************************************************************)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : B ~k~> T C) (f : K -> W * A -> B),
mbind U g ∘ mmapd U f = mbindd U (g ◻ f)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : B ~k~> T C) (f : K -> W * A -> B),
mbind U g ∘ mmapd U f = mbindd U (g ◻ f)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> W * A -> B
mbind U g ∘ mmapd U f = mbindd U (g ◻ f)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> W * A -> B
mbind U g ∘ mbindd U (mret T ◻ f) = mbindd U (g ◻ f)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> W * A -> B
mbindd U (g ◻ allK extract) ∘ mbindd U (mret T ◻ f) =
mbindd U (g ◻ f)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> W * A -> B
mbindd U
(fun (k : K) '(w, a) =>
mbindd (T k) ((g ◻ allK extract) ◻ allK (incr w))
((mret T ◻ f) k (w, a))) = mbindd U (g ◻ f)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> W * A -> B
(fun (k : K) '(w, a) =>
mbindd (T k) ((g ◻ allK extract) ◻ allK (incr w))
((mret T ◻ f) k (w, a))) = g ◻ f
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> W * A -> B k: K w: W a: A
mbindd (T k) ((g ◻ allK extract) ◻ allK (incr w))
((mret T ◻ f) k (w, a)) = (g ◻ f) k (w, a)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> W * A -> B k: K w: W a: A
mbindd (T k)
(fun (k : K) (a : W * B) =>
g k (allK extract k (allK (incr w) k a)))
(mret T k (f k (w, a))) = g k (f k (w, a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> W * A -> B k: K w: W a: A
(mbindd (T k)
(fun (k : K) (a : W * B) =>
g k (allK extract k (allK (incr w) k a)))
∘ mret T k) (f k (w, a)) = g k (f k (w, a))
nowrewrite (mbindd_comp_mret (T := T)).Qed.
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : B ~k~> T C) (f : K -> A -> F B),
map (mbind U g) ∘ mmapt U F f =
mbindt U F (funk : K => map (g k) ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : B ~k~> T C) (f : K -> A -> F B),
map (mbind U g) ∘ mmapt U F f =
mbindt U F (funk : K => map (g k) ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> A -> F B
map (mbind U g) ∘ mmapt U F f =
mbindt U F (funk : K => map (g k) ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> A -> F B
map (mbind U g) ∘ mbindt U F (mapMret ◻ f) =
mbindt U F (funk : K => map (g k) ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> A -> F B
map (mbindt U (funA : Type => A) g)
∘ mbindt U F (mapMret ◻ f) =
mbindt U F (funk : K => map (g k) ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> A -> F B
mbindt U (F ∘ (funA : Type => A))
(funk : K =>
map (mbindt (T k) (funA : Type => A) g)
○ (mapMret ◻ f) k) =
mbindt U F (funk : K => map (g k) ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> A -> F B
Mult_compose F (funA : Type => A) = Mult_G
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> A -> F B
(funk : K =>
map (mbindt (T k) (funA : Type => A) g)
○ (mapMret ◻ f) k) =
(funk : K => map (g k) ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> A -> F B
Mult_compose F (funA : Type => A) = Mult_G
nowrewrite (Mult_compose_identity1 F).
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> A -> F B
(funk : K =>
map (mbindt (T k) (funA : Type => A) g)
○ (mapMret ◻ f) k) = (funk : K => map (g k) ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> A -> F B k: K a: A
map (mbindt (T k) (funA : Type => A) g)
((mapMret ◻ f) k a) = (map (g k) ∘ f k) a
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> A -> F B k: K a: A
map (mbindt (T k) (funA : Type => A) g)
(map (mret T k) (f k a)) = map (g k) (f k a)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> A -> F B k: K a: A
(map (mbindt (T k) (funA : Type => A) g)
∘ map (mret T k)) (f k a) = map (g k) (f k a)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> A -> F B k: K a: A
map (mbindt (T k) (funA : Type => A) g ∘ mret T k)
(f k a) = map (g k) (f k a)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> A -> F B k: K a: A
mbindt (T k) (funA : Type => A) g ∘ mret T k = g k
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> A -> F B k: K a: A
mbind (T k) g ∘ mret T k = g k
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> A -> F B k: K a: A
mbindd (T k) (g ◻ allK extract) ∘ mret T k = g k
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: K -> A -> F B k: K a: A
(g ◻ allK extract) k ∘ ret = g k
reflexivity.Qed.(** *** <<mmapd>> on the left *)(********************************************************************)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : K -> W * B -> C) (f : A ~k~> T B),
mmapd U g ∘ mbind U f =
mbindd U
(fun (k : K) '(w, a) =>
mmapd (T k) (g ◻ allK (incr w)) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : K -> W * B -> C) (f : A ~k~> T B),
mmapd U g ∘ mbind U f =
mbindd U
(fun (k : K) '(w, a) =>
mmapd (T k) (g ◻ allK (incr w)) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> W * B -> C f: A ~k~> T B
mmapd U g ∘ mbind U f =
mbindd U
(fun (k : K) '(w, a) =>
mmapd (T k) (g ◻ allK (incr w)) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> W * B -> C f: A ~k~> T B
mbindd U (mret T ◻ g) ∘ mbind U f =
mbindd U
(fun (k : K) '(w, a) =>
mmapd (T k) (g ◻ allK (incr w)) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> W * B -> C f: A ~k~> T B
mbindd U (mret T ◻ g) ∘ mbindd U (f ◻ allK extract) =
mbindd U
(fun (k : K) '(w, a) =>
mmapd (T k) (g ◻ allK (incr w)) (f k a))
nowrewrite (mbindd_mbindd U).Qed.
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : K -> W * B -> C) (f : K -> A -> F B),
map (mmapd U g) ∘ mmapt U F f =
mmapdt U F
(fun (k : K) '(w, a) => map (g k ○ pair w) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : K -> W * B -> C) (f : K -> A -> F B),
map (mmapd U g) ∘ mmapt U F f =
mmapdt U F
(fun (k : K) '(w, a) => map (g k ○ pair w) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> W * B -> C f: K -> A -> F B
map (mmapd U g) ∘ mmapt U F f =
mmapdt U F
(fun (k : K) '(w, a) => map (g k ○ pair w) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> W * B -> C f: K -> A -> F B
map (mmapdt U (funA : Type => A) g) ∘ mmapt U F f =
mmapdt U F
(fun (k : K) '(w, a) => map (g k ○ pair w) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> W * B -> C f: K -> A -> F B
map (mmapdt U (funA : Type => A) g)
∘ mmapdt U F (f ◻ allK extract) =
mmapdt U F
(fun (k : K) '(w, a) => map (g k ○ pair w) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> W * B -> C f: K -> A -> F B
mmapdt U (F ∘ (funA : Type => A))
(fun (k : K) '(w, a) =>
map (g k ○ pair w) ((f ◻ allK extract) k (w, a))) =
mmapdt U F
(fun (k : K) '(w, a) => map (g k ○ pair w) (f k a))
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> W * B -> C f: K -> A -> F B
Mult_compose F (funA : Type => A) = Mult_G
nowrewrite (Mult_compose_identity1 F).Qed.(** *** <<mmapt>> on the left *)(********************************************************************)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : K -> B -> G C) (f : A ~k~> T B),
mmapt U G g ∘ mbind U f =
mbindt U G (funk : K => mmapt (T k) G g ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : K -> B -> G C) (f : A ~k~> T B),
mmapt U G g ∘ mbind U f =
mbindt U G (funk : K => mmapt (T k) G g ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> B -> G C f: A ~k~> T B
mmapt U G g ∘ mbind U f =
mbindt U G (funk : K => mmapt (T k) G g ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> B -> G C f: A ~k~> T B
mbindt U G (mapMret ◻ g) ∘ mbind U f =
mbindt U G (funk : K => mmapt (T k) G g ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> B -> G C f: A ~k~> T B
mbindt U G (mapMret ◻ g)
∘ mbindt U (funA : Type => A) f =
mbindt U G (funk : K => mmapt (T k) G g ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> B -> G C f: A ~k~> T B
mbindt U G (funk : K => map (mret T k) ∘ g k)
∘ mbindt U (funA : Type => A) f =
mbindt U G (funk : K => mmapt (T k) G g ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> B -> G C f: A ~k~> T B
map (mbindt U G (funk : K => map (mret T k) ∘ g k))
∘ mbindt U (funA : Type => A) f =
mbindt U G (funk : K => mmapt (T k) G g ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> B -> G C f: A ~k~> T B
mbindt U ((funA : Type => A) ∘ G)
(funk : K =>
map
(mbindt (T k) G
(funk0 : K => map (mret T k0) ∘ g k0)) ○
f k) =
mbindt U G (funk : K => mmapt (T k) G g ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> B -> G C f: A ~k~> T B
Mult_compose (funA : Type => A) G = Mult_G0
nowrewrite (Mult_compose_identity2 G).Qed.
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : K -> B -> G C) (f : A ~k~> T B),
mmapt U G g ∘ mbind U f =
mbindt U G (funk : K => mmapt (T k) G g ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : K -> B -> G C) (f : A ~k~> T B),
mmapt U G g ∘ mbind U f =
mbindt U G (funk : K => mmapt (T k) G g ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> B -> G C f: A ~k~> T B
mmapt U G g ∘ mbind U f =
mbindt U G (funk : K => mmapt (T k) G g ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> B -> G C f: A ~k~> T B
mbindt U G (mapMret ◻ g) ∘ mbind U f =
mbindt U G (funk : K => mmapt (T k) G g ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> B -> G C f: A ~k~> T B
mbindt U G (mapMret ◻ g)
∘ mbindt U (funA : Type => A) f =
mbindt U G (funk : K => mmapt (T k) G g ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> B -> G C f: A ~k~> T B
mbindt U G (funk : K => map (mret T k) ∘ g k)
∘ mbindt U (funA : Type => A) f =
mbindt U G (funk : K => mmapt (T k) G g ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> B -> G C f: A ~k~> T B
map (mbindt U G (funk : K => map (mret T k) ∘ g k))
∘ mbindt U (funA : Type => A) f =
mbindt U G (funk : K => mmapt (T k) G g ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> B -> G C f: A ~k~> T B
mbindt U ((funA : Type => A) ∘ G)
(funk : K =>
map
(mbindt (T k) G
(funk0 : K => map (mret T k0) ∘ g k0)) ○
f k) =
mbindt U G (funk : K => mmapt (T k) G g ∘ f k)
U, F, G: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H: Applicative F Map_G0: Map G Pure_G0: Pure G Mult_G0: Mult G H0: Applicative G ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H1: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H2: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> B -> G C f: A ~k~> T B
Mult_compose (funA : Type => A) G = Mult_G0
nowrewrite (Mult_compose_identity2 G).Qed.Endmixed_composition_laws2.(** ** Monad (<<mbind>>) *)(**********************************************************************)SectionMonad.Context
(U: Type -> Type)
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T}.(** *** Composition and identity law *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forallA : Type, mbind U (funk : K => mret T k) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forallA : Type, mbind U (funk : K => mret T k) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type
mbind U (funk : K => mret T k) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type
mbindd U ((funk : K => mret T k) ◻ allK extract) = id
nowrewrite <- (mbindd_id U).Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : B ~k~> T C) (f : A ~k~> T B),
mbind U g ∘ mbind U f =
mbind U (funk : K => mbind (T k) g ○ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : B ~k~> T C) (f : A ~k~> T B),
mbind U g ∘ mbind U f =
mbind U (funk : K => mbind (T k) g ○ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: A ~k~> T B
mbind U g ∘ mbind U f =
mbind U (funk : K => mbind (T k) g ○ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: A ~k~> T B
mbindd U (g ◻ allK extract)
∘ mbindd U (f ◻ allK extract) =
mbindd U
((funk : K => mbind (T k) g ○ f k) ◻ allK extract)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: A ~k~> T B
mbindd U
(fun (k : K) '(w, a) =>
mbindd (T k) ((g ◻ allK extract) ◻ allK (incr w))
((f ◻ allK extract) k (w, a))) =
mbindd U
((funk : K => mbind (T k) g ○ f k) ◻ allK extract)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: A ~k~> T B
mbindd U
(fun (k : K) '(w, a) =>
mbindd (T k)
(fun (k0 : K) (a0 : W * B) =>
g k0 (allK extract k0 (allK (incr w) k0 a0)))
(f k a)) =
mbindd U
(fun (k : K) (a : W * A) =>
mbind (T k) g (f k (allK extract k a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: A ~k~> T B
(fun (k : K) '(w, a) =>
mbindd (T k)
(fun (k0 : K) (a0 : W * B) =>
g k0 (allK extract k0 (allK (incr w) k0 a0)))
(f k a)) =
(fun (k : K) (a : W * A) =>
mbind (T k) g (f k (allK extract k a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: A ~k~> T B k: K w: W a: A
mbindd (T k)
(fun (k : K) (a : W * B) =>
g k (allK extract k (allK (incr w) k a))) (f k a) =
mbind (T k) g (f k (allK extract k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: A ~k~> T B k: K w: W a: A
mbindd (T k)
(fun (k : K) (a : W * B) =>
g k (allK extract k (allK (incr w) k a))) (f k a) =
mbindd (T k) (g ◻ allK extract)
(f k (allK extract k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: A ~k~> T B k: K w: W a: A
mbindd (T k)
(fun (k : K) (a : W * B) =>
g k (allK extract k (allK (incr w) k a))) (f k a) =
mbindd (T k) (g ◻ allK extract) (f k a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: B ~k~> T C f: A ~k~> T B k: K w: W a: A
(fun (k : K) (a : W * B) =>
g k (allK extract k (allK (incr w) k a))) =
g ◻ allK extract
now ext j [w2 b].Qed.(** *** Composition with <<mret>> *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type
forall (k : K) (f : A ~k~> T B) (a : A),
mbind (T k) f (mret T k a) = f k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type
forall (k : K) (f : A ~k~> T B) (a : A),
mbind (T k) f (mret T k a) = f k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type k: K f: A ~k~> T B a: A
mbind (T k) f (mret T k a) = f k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type k: K f: A ~k~> T B a: A
mbindd (T k) (f ◻ allK extract) (mret T k a) = f k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type k: K f: A ~k~> T B a: A
(mbindd (T k) (f ◻ allK extract) ∘ mret T k) a = f k a
nowrewrite mbindd_comp_mret.Qed.(* TODO <<mbind_mmap>> *)(* TODO <<mmap_mbind>> *)EndMonad.(** ** Decorated Functor (<<mmapd>>) *)(**********************************************************************)SectionDecoratedFunctor.Context
(U: Type -> Type)
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T}.(** *** Composition and identity law *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forallA : Type, mmapd U (allK extract) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forallA : Type, mmapd U (allK extract) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type
mmapd U (allK extract) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type
mmapdt U (funA : Type => A) (allK extract) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type
id = id
reflexivity.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : K -> W * B -> C) (f : K -> W * A -> B),
mmapd U g ∘ mmapd U f =
mmapd U (fun (k : K) '(w, a) => g k (w, f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : K -> W * B -> C) (f : K -> W * A -> B),
mmapd U g ∘ mmapd U f =
mmapd U (fun (k : K) '(w, a) => g k (w, f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> W * B -> C f: K -> W * A -> B
mmapd U g ∘ mmapd U f =
mmapd U (fun (k : K) '(w, a) => g k (w, f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> W * B -> C f: K -> W * A -> B
mmapdt U (funA : Type => A) g
∘ mmapdt U (funA : Type => A) f =
mmapdt U (funA : Type => A)
(fun (k : K) '(w, a) => g k (w, f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> W * B -> C f: K -> W * A -> B
map (mmapdt U (funA : Type => A) g)
∘ mmapdt U (funA : Type => A) f =
mmapdt U (funA : Type => A)
(fun (k : K) '(w, a) => g k (w, f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> W * B -> C f: K -> W * A -> B
mmapdt U ((funA : Type => A) ∘ (funA : Type => A))
(fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a))) =
mmapdt U (funA : Type => A)
(fun (k : K) '(w, a) => g k (w, f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> W * B -> C f: K -> W * A -> B
mmapdt U (funa : Type => a)
(fun (k : K) '(w, a) =>
map (g k ○ pair w) (f k (w, a))) =
mmapdt U (funA : Type => A)
(fun (k : K) '(w, a) => g k (w, f k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> W * B -> C f: K -> W * A -> B
Mult_compose (funA : Type => A) (funA : Type => A) =
Mult_I
nowrewrite (Mult_compose_identity1 (funA => A)).Qed.(** *** Composition with <<mret>> *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type
forall (k : K) (f : K -> W * A -> B) (a : A),
mmapd (T k) f (mret T k a) = mret T k (f k (Ƶ, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type
forall (k : K) (f : K -> W * A -> B) (a : A),
mmapd (T k) f (mret T k a) = mret T k (f k (Ƶ, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type k: K f: K -> W * A -> B a: A
mmapd (T k) f (mret T k a) = mret T k (f k (Ƶ, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type k: K f: K -> W * A -> B a: A
mmapdt (T k) (funA : Type => A) f (mret T k a) =
mret T k (f k (Ƶ, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type k: K f: K -> W * A -> B a: A
(mmapdt (T k) (funA : Type => A) f ∘ mret T k) a =
mret T k (f k (Ƶ, a))
nowrewrite (mmapdt_comp_mret (F := funA => A)).Qed.(* TODO <<mmapd_mmap>> *)(* TODO <<mmap_mmapd>> *)EndDecoratedFunctor.(** ** Traversable Functor (<<mmapt>>) *)(**********************************************************************)SectionTraversableFunctor.Context
(U: Type -> Type)
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T}.(** *** Composition and identity law *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forallA : Type,
mmapt U (funA0 : Type => A0) (allK id) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forallA : Type,
mmapt U (funA0 : Type => A0) (allK id) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type
mmapt U (funA : Type => A) (allK id) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type
mmapdt U (funA : Type => A) (allK id ◻ allK extract) =
id
nowrewrite <- (mbindt_id U).Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G),
Applicative G ->
forall (F : Type -> Type) (Map_G0 : Map F)
(Pure_G0 : Pure F) (Mult_G0 : Mult F),
Applicative F ->
forall (g : K -> B -> G C) (f : K -> A -> F B),
map (mmapt U G g) ∘ mmapt U F f =
mmapt U (F ∘ G) (funk : K => map (g k) ○ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G),
Applicative G ->
forall (F : Type -> Type) (Map_G0 : Map F)
(Pure_G0 : Pure F) (Mult_G0 : Mult F),
Applicative F ->
forall (g : K -> B -> G C) (f : K -> A -> F B),
map (mmapt U G g) ∘ mmapt U F f =
mmapt U (F ∘ G) (funk : K => map (g k) ○ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H1: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H2: Applicative F g: K -> B -> G C f: K -> A -> F B
map (mmapt U G g) ∘ mmapt U F f =
mmapt U (F ∘ G) (funk : K => map (g k) ○ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H1: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H2: Applicative F g: K -> B -> G C f: K -> A -> F B
map (mmapdt U G (g ◻ allK extract)) ∘ mmapt U F f =
mmapt U (F ∘ G) (funk : K => map (g k) ○ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H1: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H2: Applicative F g: K -> B -> G C f: K -> A -> F B
map (mmapdt U G (g ◻ allK extract))
∘ mmapdt U F (f ◻ allK extract) =
mmapt U (F ∘ G) (funk : K => map (g k) ○ f k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H1: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H2: Applicative F g: K -> B -> G C f: K -> A -> F B
map (mmapdt U G (g ◻ allK extract))
∘ mmapdt U F (f ◻ allK extract) =
mmapdt U (F ∘ G)
((funk : K => map (g k) ○ f k) ◻ allK extract)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H1: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H2: Applicative F g: K -> B -> G C f: K -> A -> F B
mmapdt U (F ∘ G)
(fun (k : K) '(w, a) =>
map ((g ◻ allK extract) k ○ pair w)
((f ◻ allK extract) k (w, a))) =
mmapdt U (F ∘ G)
((funk : K => map (g k) ○ f k) ◻ allK extract)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H1: Applicative G F: Type -> Type Map_G0: Map F Pure_G0: Pure F Mult_G0: Mult F H2: Applicative F g: K -> B -> G C f: K -> A -> F B
(fun (k : K) '(w, a) =>
map ((g ◻ allK extract) k ○ pair w)
((f ◻ allK extract) k (w, a))) =
(funk : K => map (g k) ○ f k) ◻ allK extract
now ext k [w a].Qed.(** *** Composition with <<mret>> *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type
forall (F : Type -> Type) (Map_G : Map F)
(Pure_G : Pure F) (Mult_G : Mult F),
Applicative F ->
forall (k : K) (f : K -> A -> F B) (a : A),
mmapt (T k) F f (mret T k a) = map (mret T k) (f k a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type
forall (F : Type -> Type) (Map_G : Map F)
(Pure_G : Pure F) (Mult_G : Mult F),
Applicative F ->
forall (k : K) (f : K -> A -> F B) (a : A),
mmapt (T k) F f (mret T k a) = map (mret T k) (f k a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F k: K f: K -> A -> F B a: A
mmapt (T k) F f (mret T k a) = map (mret T k) (f k a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F k: K f: K -> A -> F B a: A
mmapdt (T k) F (f ◻ allK extract) (mret T k a) =
map (mret T k) (f k a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type F: Type -> Type Map_G: Map F Pure_G: Pure F Mult_G: Mult F H1: Applicative F k: K f: K -> A -> F B a: A
(mmapdt (T k) F (f ◻ allK extract) ∘ mret T k) a =
map (mret T k) (f k a)
nowrewrite mmapdt_comp_mret.Qed.(* TODO <<mmapt_mmap>> *)(* TODO <<mmap_mmapt>> *)EndTraversableFunctor.(** ** Functor (<<mmap>>) *)(**********************************************************************)SectionFunctor.Context
(U: Type -> Type)
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T}.(** *** Composition and identity law *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forallA : Type, mmap U (allK id) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forallA : Type, mmap U (allK id) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type
mmap U (allK id) = id
apply (dtp_mbinddt_mret W T U).Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : K -> B -> C) (f : K -> A -> B),
mmap U g ∘ mmap U f = mmap U (g ◻ f)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type
forall (g : K -> B -> C) (f : K -> A -> B),
mmap U g ∘ mmap U f = mmap U (g ◻ f)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> B -> C f: K -> A -> B
mmap U g ∘ mmap U f = mmap U (g ◻ f)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> B -> C f: K -> A -> B
mmapd U (g ◻ allK extract)
∘ mmapd U (f ◻ allK extract) =
mmapd U ((g ◻ f) ◻ allK extract)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> B -> C f: K -> A -> B
mmapd U
(fun (k : K) '(w, a) =>
(g ◻ allK extract) k
(w, (f ◻ allK extract) k (w, a))) =
mmapd U ((g ◻ f) ◻ allK extract)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B, C: Type g: K -> B -> C f: K -> A -> B
(fun (k : K) '(w, a) =>
(g ◻ allK extract) k (w, (f ◻ allK extract) k (w, a))) =
(g ◻ f) ◻ allK extract
now ext k [w a].Qed.(** *** Composition with <<mret>> *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type
forall (f : K -> A -> B) (a : A) (k : K),
mmap (T k) f (mret T k a) = mret T k (f k a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type
forall (f : K -> A -> B) (a : A) (k : K),
mmap (T k) f (mret T k a) = mret T k (f k a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type f: K -> A -> B a: A k: K
mmap (T k) f (mret T k a) = mret T k (f k a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type f: K -> A -> B a: A k: K
mmapd (T k) (f ◻ allK extract) (mret T k a) =
mret T k (f k a)