Built with Alectryon, running Coq+SerAPI v8.16.0+0.16.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
From Tealeaves Require Import
Classes.Categorical.DecoratedTraversableMonad
Classes.Kleisli.DecoratedTraversableMonad
Classes.Categorical.Bimonad (bimonad_baton).Import Kleisli.DecoratedTraversableMonad.Notations.Import Kleisli.DecoratedMonad.Notations.Import Kleisli.TraversableMonad.Notations.Import Kleisli.Comonad.Notations.Import Product.Notations.Import Monoid.Notations.Import Functor.Notations.#[local] Generalizable VariablesT A B C.#[local] Arguments ret (T)%function_scope {Return}
(A)%type_scope _.#[local] Arguments join T%function_scope {Join}
{A}%type_scope _.#[local] Arguments map F%function_scope {Map}
{A B}%type_scope f%function_scope _.#[local] Arguments extract (W)%function_scope {Extract}
(A)%type_scope _.#[local] Arguments cojoin W%function_scope {Cojoin}
{A}%type_scope _.#[local] Arguments mapd {E}%type_scope T%function_scope {Mapd}
{A B}%type_scope _%function_scope _.#[local] Arguments mapdt {E}%type_scope T%function_scope {Mapdt}
G%function_scope {H H0 H1} {A B}%type_scope _%function_scope.#[local] Arguments bindd {W}%type_scope {T} (U)%function_scope {Bindd}
{A B}%type_scope _ _.#[local] Arguments traverse T%function_scope {Traverse}
G%function_scope {Map_G Pure_G Mult_G}
{A B}%type_scope _%function_scope _.(** * Categorical DTMs from Kleisli DTMs *)(**********************************************************************)(** ** Derived Operations *)(**********************************************************************)ModuleDerivedOperations.Sectionoperations.Context
(W: Type)
(T: Type -> Type)
`{Binddt W T T}
`{Return T}.#[export] InstanceJoin_Binddt: Join T :=
funA => binddt (G := funA => A) (A := T A) (extract (W ×) (T A)).#[export] InstanceDecorate_Binddt: Decorate W T :=
funA => binddt (G := funA => A) (ret T (W * A)).#[export] InstanceDist_Binddt: ApplicativeDist T :=
funG___A =>
binddt (T := T) (map G (ret T A) ∘ extract (W ×) (G A)).Endoperations.EndDerivedOperations.ModuleDerivedInstances.Sectionwith_monad.Context
(W: Type)
(T: Type -> Type)
`{Kleisli.DecoratedTraversableMonad.DecoratedTraversableMonad W T}.(* Alectryon doesn't like this Import KleisliToCategorical.DecoratedTraversableMonad.DerivedOperations. *)Import DerivedOperations.Import Kleisli.DecoratedTraversableMonad.DerivedOperations.Import Kleisli.DecoratedTraversableMonad.DerivedInstances.#[local] Tactic Notation"unfold_everything" :=
unfold_ops @Map_compose;
unfold_ops @Decorate_Binddt;
unfold_ops @Map_Binddt;
unfold_ops @Dist_Binddt;
unfold_ops @Join_Binddt.#[local] Tactic Notation"binddt_to_bindd" :=
rewrite <- bindd_to_binddt.#[local] Tactic Notation"mapdt_to_mapd" :=
rewrite <- mapd_to_mapdt.#[local] Tactic Notation"mapd_to_map" :=
rewrite <- map_to_mapd.(** ** Monad Instance *)(******************************************************************)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
Natural (ret T)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
Natural (ret T)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
Functor (funA : Type => A)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
Functor T
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forall (AB : Type) (f : A -> B),
map T f ∘ ret T A =
ret T B ∘ map (funA0 : Type => A0) f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
Functor (funA : Type => A)
typeclasses eauto.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
Functor T
typeclasses eauto.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forall (AB : Type) (f : A -> B),
map T f ∘ ret T A =
ret T B ∘ map (funA0 : Type => A0) f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A, B: Type f: A -> B
map T f ∘ ret T A =
ret T B ∘ map (funA : Type => A) f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A, B: Type f: A -> B
binddt (ret T B ∘ f ∘ extract (prod W) A) ∘ ret T A =
ret T B ∘ map (funA : Type => A) f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A, B: Type f: A -> B
ret T B ∘ f ∘ extract (prod W) A ∘ ret (prod W) A =
ret T B ∘ map (funA : Type => A) f
reflexivity.Qed.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
Natural (@join T (Join_Binddt W T))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
Natural (@join T (Join_Binddt W T))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
Functor (T ∘ T)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
Functor T
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forall (AB : Type) (f : A -> B),
map T f ∘ join T = join T ∘ map (T ∘ T) f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
Functor (T ∘ T)
typeclasses eauto.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
Functor T
typeclasses eauto.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forall (AB : Type) (f : A -> B),
map T f ∘ join T = join T ∘ map (T ∘ T) f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A, B: Type f: A -> B
map T f ∘ join T = join T ∘ map (T ∘ T) f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A, B: Type f: A -> B
map T f ∘ Join_Binddt W T A =
Join_Binddt W T B ∘ map (T ∘ T) f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A, B: Type f: A -> B
map T f ∘ binddt (extract (prod W) (T A)) =
binddt (extract (prod W) (T B)) ∘ map (T ∘ T) f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A, B: Type f: A -> B
map (funA : Type => A) (map T f)
∘ binddt (extract (prod W) (T A)) =
binddt (extract (prod W) (T B)) ∘ map (T ∘ T) f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A, B: Type f: A -> B
map (funA : Type => A) (map T f)
∘ binddt (extract (prod W) (T A)) =
binddt (extract (prod W) (T B)) ∘ map (T ∘ T) f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A, B: Type f: A -> B
binddt
(map (funA : Type => A) (map T f)
∘ extract (prod W) (T A)) =
binddt (extract (prod W) (T B)) ∘ map (T ∘ T) f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A, B: Type f: A -> B
binddt (map T f ∘ extract (prod W) (T A)) =
binddt (extract (prod W) (T B)) ∘ map (T ∘ T) f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A, B: Type f: A -> B
binddt (map T f ∘ extract (prod W) (T A)) =
binddt (extract (prod W) (T B)) ∘ map T (map T f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A, B: Type f: A -> B
binddt (map T f ∘ extract (prod W) (T A)) =
binddt
(extract (prod W) (T B) ∘ map (prod W) (map T f))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A, B: Type f: A -> B
binddt (map T f ∘ extract (prod W) (T A)) =
binddt
(map (funA : Type => A) (map T f)
∘ extract (prod W) (T A))
reflexivity.Qed.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forallA : Type, join T ∘ ret T (T A) = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forallA : Type, join T ∘ ret T (T A) = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
join T ∘ ret T (T A) = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
binddt (extract (prod W) (T A)) ∘ ret T (T A) = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
binddt (extract (prod W) (T A)) ∘ ret T (T A) = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
extract (prod W) (T A) ∘ ret (prod W) (T A) = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
id = id
reflexivity.Qed.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forallA : Type, join T ∘ map T (ret T A) = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forallA : Type, join T ∘ map T (ret T A) = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
join T ∘ map T (ret T A) = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
Join_Binddt W T A ∘ map T (ret T A) = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
binddt (extract (prod W) (T A)) ∘ map T (ret T A) = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (extract (prod W) (T A)) ∘ map T (ret T A) =
id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (extract (prod W) (T A)) ∘ map T (ret T A) =
id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T
(extract (prod W) (T A) ∘ map (prod W) (ret T A)) =
id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T
(map (funA : Type => A) (ret T A)
∘ extract (prod W) A) = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (ret T A ∘ extract (prod W) A) = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
id = id
reflexivity.Qed.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forallA : Type,
join T ∘ join T = join T ∘ map T (join T)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forallA : Type,
join T ∘ join T = join T ∘ map T (join T)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
join T ∘ join T = join T ∘ map T (join T)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
Join_Binddt W T A ∘ Join_Binddt W T (T A) =
Join_Binddt W T A ∘ map T (Join_Binddt W T A)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forallA : Type,
dec T ∘ dec T = map T (cojoin (prod W)) ∘ dec T
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forallA : Type,
dec T ∘ dec T = map T (cojoin (prod W)) ∘ dec T
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
dec T ∘ dec T = map T (cojoin (prod W)) ∘ dec T
(* LHS *)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
Decorate_Binddt W T (W * A) ∘ Decorate_Binddt W T A =
map T (cojoin (prod W)) ∘ dec T
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
binddt (ret T (W * (W * A))) ∘ binddt (ret T (W * A)) =
map T (cojoin (prod W)) ∘ dec T
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (ret T (W * (W * A)))
∘ bindd T (ret T (W * A)) =
map T (cojoin (prod W)) ∘ dec T
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (ret T (W * (W * A)))
∘ bindd T (ret T (W * A)) =
map T (cojoin (prod W)) ∘ dec T
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (ret T (W * (W * A)) ⋆5 ret T (W * A)) =
map T (cojoin (prod W)) ∘ dec T
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (ret T (W * (W * A)) ∘ id ⋆5 ret T (W * A)) =
map T (cojoin (prod W)) ∘ dec T
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T
(ret T (W * (W * A)) ∘ id ⋆5 ret T (W * A) ∘ id) =
map T (cojoin (prod W)) ∘ dec T
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (ret T (W * (W * A)) ∘ (id ⋆1 id)) =
map T (cojoin (prod W)) ∘ dec T
(* RHS *)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (ret T (W * (W * A)) ∘ (id ⋆1 id)) =
map T (cojoin (prod W)) ∘ Decorate_Binddt W T A
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (ret T (W * (W * A)) ∘ (id ⋆1 id)) =
map T (cojoin (prod W)) ∘ binddt (ret T (W * A))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (ret T (W * (W * A)) ∘ (id ⋆1 id)) =
map T (cojoin (prod W)) ∘ bindd T (ret T (W * A))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (ret T (W * (W * A)) ∘ (id ⋆1 id)) =
bindd T (map T (cojoin (prod W)) ∘ ret T (W * A))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (ret T (W * (W * A)) ∘ (id ⋆1 id)) =
bindd T
(ret T ((prod W ∘ prod W) A)
∘ map (funA : Type => A) (cojoin (prod W)))
reflexivity.Qed.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forallA : Type,
map T (extract (prod W) A) ∘ dec T = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forallA : Type,
map T (extract (prod W) A) ∘ dec T = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
map T (extract (prod W) A) ∘ dec T = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
map T (extract (prod W) A) ∘ Decorate_Binddt W T A =
id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
map T (extract (prod W) A) ∘ binddt (ret T (W * A)) =
id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
map T (extract (prod W) A) ∘ bindd T (ret T (W * A)) =
id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (map T (extract (prod W) A) ∘ ret T (W * A)) =
id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T
(ret T A
∘ map (funA : Type => A) (extract (prod W) A)) =
id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (ret T A ∘ extract (prod W) A) = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
id = id
reflexivity.Qed.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
Natural (@dec W T (Decorate_Binddt W T))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
Natural (@dec W T (Decorate_Binddt W T))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
Functor T
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
Functor (T ○ prod W)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forall (AB : Type) (f : A -> B),
map (T ○ prod W) f ∘ dec T = dec T ∘ map T f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
Functor T
typeclasses eauto.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
Functor (T ○ prod W)
typeclasses eauto.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forall (AB : Type) (f : A -> B),
map (T ○ prod W) f ∘ dec T = dec T ∘ map T f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A, B: Type f: A -> B
map (T ○ prod W) f ∘ dec T = dec T ∘ map T f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A, B: Type f: A -> B
map (T ○ prod W) f ∘ Decorate_Binddt W T A =
Decorate_Binddt W T B ∘ map T f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A, B: Type f: A -> B
map (T ○ prod W) f ∘ binddt (ret T (W * A)) =
binddt (ret T (W * B)) ∘ map T f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A, B: Type f: A -> B
map (T ○ prod W) f ∘ bindd T (ret T (W * A)) =
bindd T (ret T (W * B)) ∘ map T f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A, B: Type f: A -> B
map T (map (prod W) f) ∘ bindd T (ret T (W * A)) =
bindd T (ret T (W * B)) ∘ map T f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A, B: Type f: A -> B
bindd T (map T (map (prod W) f) ∘ ret T (W * A)) =
bindd T (ret T (W * B)) ∘ map T f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A, B: Type f: A -> B
bindd T
(ret T (W * B)
∘ map (funA : Type => A) (map (prod W) f)) =
bindd T (ret T (W * B)) ∘ map T f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A, B: Type f: A -> B
bindd T
(ret T (W * B)
∘ map (funA : Type => A) (map (prod W) f)) =
bindd T (ret T (W * B) ∘ map (prod W) f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forallA : Type,
dec T ∘ ret T A = ret T (W * A) ∘ pair Ƶ
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forallA : Type,
dec T ∘ ret T A = ret T (W * A) ∘ pair Ƶ
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
dec T ∘ ret T A = ret T (W * A) ∘ pair Ƶ
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
binddt (ret T (W * A)) ∘ ret T A =
ret T (W * A) ∘ pair Ƶ
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (ret T (W * A)) ∘ ret T A =
ret T (W * A) ∘ pair Ƶ
nowrewrite (kdm_bindd0 (T := T)).Qed.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forallA : Type,
dec T ∘ join T =
join T ∘ map T (shift T) ∘ dec T ∘ map T (dec T)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forallA : Type,
dec T ∘ join T =
join T ∘ map T (shift T) ∘ dec T ∘ map T (dec T)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
dec T ∘ join T =
join T ∘ map T (shift T) ∘ dec T ∘ map T (dec T)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
dec T ∘ join T =
join T ∘ map T (map T (uncurry incr) ∘ strength)
∘ dec T ∘ map T (dec T)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
dec T ∘ join T =
join T
∘ map T
(map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t)) ∘ dec T
∘ map T (dec T)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
dec T ∘ binddt (extract (prod W) (T A)) =
binddt (extract (prod W) (T (W * A)))
∘ map T
(map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t)) ∘ dec T
∘ map T (dec T)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
dec T ∘ bindd T (extract (prod W) (T A)) =
bindd T (extract (prod W) (T (W * A)))
∘ map T
(map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t)) ∘ dec T
∘ map T (dec T)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
binddt (ret T (W * A))
∘ bindd T (extract (prod W) (T A)) =
bindd T (extract (prod W) (T (W * A)))
∘ map T
(map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t))
∘ binddt (ret T (W * T (W * A)))
∘ map T (binddt (ret T (W * A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (ret T (W * A))
∘ bindd T (extract (prod W) (T A)) =
bindd T (extract (prod W) (T (W * A)))
∘ map T
(map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t))
∘ bindd T (ret T (W * T (W * A)))
∘ map T (bindd T (ret T (W * A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (ret T (W * A))
∘ bindd T (extract (prod W) (T A)) =
bindd T (extract (prod W) (T (W * A)))
∘ map T
(map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t))
∘ bindd T (ret T (W * T (W * A)))
∘ map T (bindd T (ret T (W * A)))
(* Fuse LHS *)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (ret T (W * A) ⋆5 extract (prod W) (T A)) =
bindd T (extract (prod W) (T (W * A)))
∘ map T
(map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t))
∘ bindd T (ret T (W * T (W * A)))
∘ map T (bindd T (ret T (W * A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (ret T (W * A) ⋆5 id ∘ extract (prod W) (T A)) =
bindd T (extract (prod W) (T (W * A)))
∘ map T
(map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t))
∘ bindd T (ret T (W * T (W * A)))
∘ map T (bindd T (ret T (W * A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T
((fun '(w, t) => bindd T (ret T (W * A) ⦿ w) t)
∘ map (prod W) id) =
bindd T (extract (prod W) (T (W * A)))
∘ map T
(map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t))
∘ bindd T (ret T (W * T (W * A)))
∘ map T (bindd T (ret T (W * A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T
((fun '(w, t) => bindd T (ret T (W * A) ⦿ w) t) ∘ id) =
bindd T (extract (prod W) (T (W * A)))
∘ map T
(map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t))
∘ bindd T (ret T (W * T (W * A)))
∘ map T (bindd T (ret T (W * A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (fun '(w, t) => bindd T (ret T (W * A) ⦿ w) t) =
bindd T (extract (prod W) (T (W * A)))
∘ map T
(map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t))
∘ bindd T (ret T (W * T (W * A)))
∘ map T (bindd T (ret T (W * A)))
(* Fuse RHS *)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (fun '(w, t) => bindd T (ret T (W * A) ⦿ w) t) =
bindd T (extract (prod W) (T (W * A)))
∘ bindd T
(ret T (T (W * A))
∘ (map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t))
∘ extract (prod W) (W * T (W * A)))
∘ bindd T (ret T (W * T (W * A)))
∘ map T (bindd T (ret T (W * A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (fun '(w, t) => bindd T (ret T (W * A) ⦿ w) t) =
bindd T
(extract (prod W) (T (W * A))
⋆5 ret T (T (W * A))
∘ (map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t))
∘ extract (prod W) (W * T (W * A)))
∘ bindd T (ret T (W * T (W * A)))
∘ map T (bindd T (ret T (W * A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (fun '(w, t) => bindd T (ret T (W * A) ⦿ w) t) =
bindd T
(extract (prod W) (T (W * A))
⋆5 ret T (T (W * A))
∘ (map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t)
∘ extract (prod W) (W * T (W * A))))
∘ bindd T (ret T (W * T (W * A)))
∘ map T (bindd T (ret T (W * A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (fun '(w, t) => bindd T (ret T (W * A) ⦿ w) t) =
bindd T
(extract (prod W) (T (W * A))
⋆1 map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t)
∘ extract (prod W) (W * T (W * A)))
∘ bindd T (ret T (W * T (W * A)))
∘ map T (bindd T (ret T (W * A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (fun '(w, t) => bindd T (ret T (W * A) ⦿ w) t) =
bindd T
(map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t)
∘ extract (prod W) (W * T (W * A)))
∘ bindd T (ret T (W * T (W * A)))
∘ map T (bindd T (ret T (W * A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (fun '(w, t) => bindd T (ret T (W * A) ⦿ w) t) =
bindd T
(map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t)
∘ extract (prod W) (W * T (W * A))
⋆5 ret T (W * T (W * A)))
∘ map T (bindd T (ret T (W * A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (fun '(w, t) => bindd T (ret T (W * A) ⦿ w) t) =
bindd T
(map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t)
∘ extract (prod W) (W * T (W * A))
⋆5 ret T (W * T (W * A)) ∘ id)
∘ map T (bindd T (ret T (W * A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (fun '(w, t) => bindd T (ret T (W * A) ⦿ w) t) =
bindd T
(map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t)
∘ extract (prod W) (W * T (W * A)) ⋆1 id)
∘ map T (bindd T (ret T (W * A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (fun '(w, t) => bindd T (ret T (W * A) ⦿ w) t) =
bindd T
(map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t) ∘ id)
∘ map T (bindd T (ret T (W * A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (fun '(w, t) => bindd T (ret T (W * A) ⦿ w) t) =
bindd T
(map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t))
∘ map T (bindd T (ret T (W * A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
bindd T (fun '(w, t) => bindd T (ret T (W * A) ⦿ w) t) =
bindd T
(map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t)
∘ map (prod W) (bindd T (ret T (W * A))))
(* Now compare inner functions *)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
(fun '(w, t) => bindd T (ret T (W * A) ⦿ w) t) =
map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t)
∘ map (prod W) (bindd T (ret T (W * A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type w: W t: T A
bindd T (ret T (W * A) ⦿ w) t =
(map T (uncurry incr)
∘ (fun '(a, t) => map T (pair a) t)
∘ map (prod W) (bindd T (ret T (W * A)))) (w, t)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type w: W t: T A
bindd T (ret T (W * A) ⦿ w) t =
map T (uncurry incr)
(map T (pair (id w)) (bindd T (ret T (W * A)) t))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type w: W t: T A
bindd T (ret T (W * A) ⦿ w) t =
(map T (uncurry incr) ∘ map T (pair (id w)))
(bindd T (ret T (W * A)) t)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type w: W t: T A
bindd T (ret T (W * A) ⦿ w) t =
map T (uncurry incr ∘ pair (id w))
(bindd T (ret T (W * A)) t)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type w: W t: T A
bindd T (ret T (W * A) ⦿ w) t =
(map T (uncurry incr ∘ pair (id w))
∘ bindd T (ret T (W * A))) t
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type w: W t: T A
bindd T (ret T (W * A) ⦿ w) t =
bindd T
(map T (uncurry incr ∘ pair (id w)) ∘ ret T (W * A))
t
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type w: W t: T A
bindd T (ret T (W * A) ⦿ w) t =
bindd T
(ret T (W * A)
∘ map (funA : Type => A)
(uncurry incr ∘ pair (id w))) t
reflexivity.Qed.#[export] Instance:
Categorical.DecoratedMonad.DecoratedMonad W T :=
{| dmon_ret := dmon_ret_;
dmon_join := dmon_join_;
|}.(** ** Traversable Functor instance *)(******************************************************************)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forall (G : Type -> Type) (H2 : Map G) (H3 : Pure G)
(H4 : Mult G),
Applicative G ->
Natural (@dist T (Dist_Binddt W T) G H2 H3 H4)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forall (G : Type -> Type) (H2 : Map G) (H3 : Pure G)
(H4 : Mult G),
Applicative G ->
Natural (@dist T (Dist_Binddt W T) G H2 H3 H4)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G
Natural (@dist T (Dist_Binddt W T) G H2 H3 H4)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b)
Natural (@dist T (Dist_Binddt W T) G H2 H3 H4)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b)
Functor (T ○ G)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b)
Functor (G ○ T)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b)
forall (AB : Type) (f : A -> B),
map (G ○ T) f ∘ dist T G = dist T G ∘ map (T ○ G) f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b)
Functor (T ○ G)
typeclasses eauto.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b)
Functor (G ○ T)
typeclasses eauto.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b)
forall (AB : Type) (f : A -> B),
map (G ○ T) f ∘ dist T G = dist T G ∘ map (T ○ G) f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b) A, B: Type f: A -> B
map (G ○ T) f ∘ dist T G = dist T G ∘ map (T ○ G) f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b) A, B: Type f: A -> B
map (G ○ T) f
∘ binddt (map G (ret T A) ∘ extract (prod W) (G A)) =
binddt (map G (ret T B) ∘ extract (prod W) (G B))
∘ map (T ○ G) f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b) A, B: Type f: A -> B
map G (map T f)
∘ binddt (map G (ret T A) ∘ extract (prod W) (G A)) =
binddt (map G (ret T B) ∘ extract (prod W) (G B))
∘ map (T ○ G) f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b) A, B: Type f: A -> B
binddt
(map G (map T f)
∘ (map G (ret T A) ∘ extract (prod W) (G A))) =
binddt (map G (ret T B) ∘ extract (prod W) (G B))
∘ map (T ○ G) f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b) A, B: Type f: A -> B
binddt
(map G (map T f) ∘ map G (ret T A)
∘ extract (prod W) (G A)) =
binddt (map G (ret T B) ∘ extract (prod W) (G B))
∘ map (T ○ G) f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b) A, B: Type f: A -> B
binddt
(map G (map T f ∘ ret T A) ∘ extract (prod W) (G A)) =
binddt (map G (ret T B) ∘ extract (prod W) (G B))
∘ map (T ○ G) f
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b) A, B: Type f: A -> B
binddt
(map G (ret T B ∘ map (funA : Type => A) f)
∘ extract (prod W) (G A)) =
binddt (map G (ret T B) ∘ extract (prod W) (G B))
∘ map (T ○ G) f
(* RHS *)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b) A, B: Type f: A -> B
binddt
(map G (ret T B ∘ map (funA : Type => A) f)
∘ extract (prod W) (G A)) =
binddt (map G (ret T B) ∘ extract (prod W) (G B))
∘ map T (map G f)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b) A, B: Type f: A -> B
binddt
(map G (ret T B ∘ map (funA : Type => A) f)
∘ extract (prod W) (G A)) =
binddt
(map G (ret T B) ∘ extract (prod W) (G B)
∘ map (prod W) (map G f))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b) A, B: Type f: A -> B
binddt
(map G (ret T B ∘ map (funA : Type => A) f)
∘ extract (prod W) (G A)) =
binddt
(map G (ret T B)
∘ (extract (prod W) (G B) ∘ map (prod W) (map G f)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b) A, B: Type f: A -> B
binddt
(map G (ret T B ∘ map (funA : Type => A) f)
∘ extract (prod W) (G A)) =
binddt
(map G (ret T B)
∘ (map (funA : Type => A) (map G f)
∘ extract (prod W) (G A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b) A, B: Type f: A -> B
binddt (map G (ret T B ∘ f) ∘ extract (prod W) (G A)) =
binddt
(map G (ret T B)
∘ (map G f ∘ extract (prod W) (G A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b) A, B: Type f: A -> B
binddt (map G (ret T B ∘ f) ∘ extract (prod W) (G A)) =
binddt
(map G (ret T B) ∘ map G f ∘ extract (prod W) (G A))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b) A, B: Type f: A -> B
binddt (map G (ret T B ∘ f) ∘ extract (prod W) (G A)) =
binddt (map G (ret T B ∘ f) ∘ extract (prod W) (G A))
reflexivity.Qed.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forall (G1G2 : Type -> Type) (H2 : Map G1)
(H4 : Mult G1) (H3 : Pure G1) (H5 : Map G2)
(H7 : Mult G2) (H6 : Pure G2) (ϕ : G1 ⇒ G2),
ApplicativeMorphism G1 G2 ϕ ->
forallA : Type,
dist T G2 ∘ map T (ϕ A) = ϕ (T A) ∘ dist T G1
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forall (G1G2 : Type -> Type) (H2 : Map G1)
(H4 : Mult G1) (H3 : Pure G1) (H5 : Map G2)
(H7 : Mult G2) (H6 : Pure G2) (ϕ : G1 ⇒ G2),
ApplicativeMorphism G1 G2 ϕ ->
forallA : Type,
dist T G2 ∘ map T (ϕ A) = ϕ (T A) ∘ dist T G1
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G1, G2: Type -> Type H2: Map G1 H4: Mult G1 H3: Pure G1 H5: Map G2 H7: Mult G2 H6: Pure G2 ϕ: G1 ⇒ G2 morph: ApplicativeMorphism G1 G2 ϕ appmor_app_F: Applicative G1 appmor_app_G: Applicative G2 appmor_natural: forall (AB : Type) (f : A -> B)
(x : G1 A),
ϕ B (map G1 f x) = map G2 f (ϕ A x) appmor_pure: forall (A : Type) (a : A),
ϕ A (pure a) = pure a appmor_mult: forall (AB : Type) (x : G1 A)
(y : G1 B),
ϕ (A * B) (mult (x, y)) =
mult (ϕ A x, ϕ B y) A: Type
dist T G2 ∘ map T (ϕ A) = ϕ (T A) ∘ dist T G1
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G1, G2: Type -> Type H2: Map G1 H4: Mult G1 H3: Pure G1 H5: Map G2 H7: Mult G2 H6: Pure G2 ϕ: G1 ⇒ G2 morph: ApplicativeMorphism G1 G2 ϕ appmor_app_F: Applicative G1 appmor_app_G: Applicative G2 appmor_natural: forall (AB : Type) (f : A -> B)
(x : G1 A),
ϕ B (map G1 f x) = map G2 f (ϕ A x) appmor_pure: forall (A : Type) (a : A),
ϕ A (pure a) = pure a appmor_mult: forall (AB : Type) (x : G1 A)
(y : G1 B),
ϕ (A * B) (mult (x, y)) =
mult (ϕ A x, ϕ B y) A: Type
binddt (map G2 (ret T A) ∘ extract (prod W) (G2 A))
∘ map T (ϕ A) =
ϕ (T A)
∘ binddt (map G1 (ret T A) ∘ extract (prod W) (G1 A))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G1, G2: Type -> Type H2: Map G1 H4: Mult G1 H3: Pure G1 H5: Map G2 H7: Mult G2 H6: Pure G2 ϕ: G1 ⇒ G2 morph: ApplicativeMorphism G1 G2 ϕ appmor_app_F: Applicative G1 appmor_app_G: Applicative G2 appmor_natural: forall (AB : Type) (f : A -> B)
(x : G1 A),
ϕ B (map G1 f x) = map G2 f (ϕ A x) appmor_pure: forall (A : Type) (a : A),
ϕ A (pure a) = pure a appmor_mult: forall (AB : Type) (x : G1 A)
(y : G1 B),
ϕ (A * B) (mult (x, y)) =
mult (ϕ A x, ϕ B y) A: Type
binddt
(map G2 (ret T A) ∘ extract (prod W) (G2 A)
∘ map (prod W) (ϕ A)) =
ϕ (T A)
∘ binddt (map G1 (ret T A) ∘ extract (prod W) (G1 A))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G1, G2: Type -> Type H2: Map G1 H4: Mult G1 H3: Pure G1 H5: Map G2 H7: Mult G2 H6: Pure G2 ϕ: G1 ⇒ G2 morph: ApplicativeMorphism G1 G2 ϕ appmor_app_F: Applicative G1 appmor_app_G: Applicative G2 appmor_natural: forall (AB : Type) (f : A -> B)
(x : G1 A),
ϕ B (map G1 f x) = map G2 f (ϕ A x) appmor_pure: forall (A : Type) (a : A),
ϕ A (pure a) = pure a appmor_mult: forall (AB : Type) (x : G1 A)
(y : G1 B),
ϕ (A * B) (mult (x, y)) =
mult (ϕ A x, ϕ B y) A: Type
binddt
(map G2 (ret T A) ∘ extract (prod W) (G2 A)
∘ map (prod W) (ϕ A)) =
binddt
(ϕ (T A)
∘ (map G1 (ret T A) ∘ extract (prod W) (G1 A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G1, G2: Type -> Type H2: Map G1 H4: Mult G1 H3: Pure G1 H5: Map G2 H7: Mult G2 H6: Pure G2 ϕ: G1 ⇒ G2 morph: ApplicativeMorphism G1 G2 ϕ appmor_app_F: Applicative G1 appmor_app_G: Applicative G2 appmor_natural: forall (AB : Type) (f : A -> B)
(x : G1 A),
ϕ B (map G1 f x) = map G2 f (ϕ A x) appmor_pure: forall (A : Type) (a : A),
ϕ A (pure a) = pure a appmor_mult: forall (AB : Type) (x : G1 A)
(y : G1 B),
ϕ (A * B) (mult (x, y)) =
mult (ϕ A x, ϕ B y) A: Type
binddt
(map G2 (ret T A)
∘ (extract (prod W) (G2 A) ∘ map (prod W) (ϕ A))) =
binddt
(ϕ (T A)
∘ (map G1 (ret T A) ∘ extract (prod W) (G1 A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G1, G2: Type -> Type H2: Map G1 H4: Mult G1 H3: Pure G1 H5: Map G2 H7: Mult G2 H6: Pure G2 ϕ: G1 ⇒ G2 morph: ApplicativeMorphism G1 G2 ϕ appmor_app_F: Applicative G1 appmor_app_G: Applicative G2 appmor_natural: forall (AB : Type) (f : A -> B)
(x : G1 A),
ϕ B (map G1 f x) = map G2 f (ϕ A x) appmor_pure: forall (A : Type) (a : A),
ϕ A (pure a) = pure a appmor_mult: forall (AB : Type) (x : G1 A)
(y : G1 B),
ϕ (A * B) (mult (x, y)) =
mult (ϕ A x, ϕ B y) A: Type
binddt
(map G2 (ret T A)
∘ (map (funA : Type => A) (ϕ A)
∘ extract (prod W) (G1 A))) =
binddt
(ϕ (T A)
∘ (map G1 (ret T A) ∘ extract (prod W) (G1 A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G1, G2: Type -> Type H2: Map G1 H4: Mult G1 H3: Pure G1 H5: Map G2 H7: Mult G2 H6: Pure G2 ϕ: G1 ⇒ G2 morph: ApplicativeMorphism G1 G2 ϕ appmor_app_F: Applicative G1 appmor_app_G: Applicative G2 appmor_natural: forall (AB : Type) (f : A -> B)
(x : G1 A),
ϕ B (map G1 f x) = map G2 f (ϕ A x) appmor_pure: forall (A : Type) (a : A),
ϕ A (pure a) = pure a appmor_mult: forall (AB : Type) (x : G1 A)
(y : G1 B),
ϕ (A * B) (mult (x, y)) =
mult (ϕ A x, ϕ B y) A: Type
binddt
(map G2 (ret T A) ∘ (ϕ A ∘ extract (prod W) (G1 A))) =
binddt
(ϕ (T A)
∘ (map G1 (ret T A) ∘ extract (prod W) (G1 A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G1, G2: Type -> Type H2: Map G1 H4: Mult G1 H3: Pure G1 H5: Map G2 H7: Mult G2 H6: Pure G2 ϕ: G1 ⇒ G2 morph: ApplicativeMorphism G1 G2 ϕ appmor_app_F: Applicative G1 appmor_app_G: Applicative G2 appmor_natural: forall (AB : Type) (f : A -> B)
(x : G1 A),
ϕ B (map G1 f x) = map G2 f (ϕ A x) appmor_pure: forall (A : Type) (a : A),
ϕ A (pure a) = pure a appmor_mult: forall (AB : Type) (x : G1 A)
(y : G1 B),
ϕ (A * B) (mult (x, y)) =
mult (ϕ A x, ϕ B y) A: Type
binddt
(map G2 (ret T A) ∘ ϕ A ∘ extract (prod W) (G1 A)) =
binddt
(ϕ (T A)
∘ (map G1 (ret T A) ∘ extract (prod W) (G1 A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G1, G2: Type -> Type H2: Map G1 H4: Mult G1 H3: Pure G1 H5: Map G2 H7: Mult G2 H6: Pure G2 ϕ: G1 ⇒ G2 morph: ApplicativeMorphism G1 G2 ϕ appmor_app_F: Applicative G1 appmor_app_G: Applicative G2 appmor_natural: forall (AB : Type) (f : A -> B)
(x : G1 A),
ϕ B (map G1 f x) = map G2 f (ϕ A x) appmor_pure: forall (A : Type) (a : A),
ϕ A (pure a) = pure a appmor_mult: forall (AB : Type) (x : G1 A)
(y : G1 B),
ϕ (A * B) (mult (x, y)) =
mult (ϕ A x, ϕ B y) A: Type
binddt
(ϕ (T A) ∘ map G1 (ret T A)
∘ extract (prod W) (G1 A)) =
binddt
(ϕ (T A)
∘ (map G1 (ret T A) ∘ extract (prod W) (G1 A)))
reflexivity.Qed.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forallA : Type, dist T (funA0 : Type => A0) = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forallA : Type, dist T (funA0 : Type => A0) = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
dist T (funA0 : Type => A0) = id
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T A: Type
binddt
(map (funA0 : Type => A0) (ret T A)
∘ extract (prod W) A) = id
apply (kdtm_binddt1).Qed.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forall (G1 : Type -> Type) (H2 : Map G1)
(H3 : Pure G1) (H4 : Mult G1),
Applicative G1 ->
forall (G2 : Type -> Type) (H6 : Map G2)
(H7 : Pure G2) (H8 : Mult G2),
Applicative G2 ->
forallA : Type,
dist T (G1 ∘ G2) = map G1 (dist T G2) ∘ dist T G1
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forall (G1 : Type -> Type) (H2 : Map G1)
(H3 : Pure G1) (H4 : Mult G1),
Applicative G1 ->
forall (G2 : Type -> Type) (H6 : Map G2)
(H7 : Pure G2) (H8 : Mult G2),
Applicative G2 ->
forallA : Type,
dist T (G1 ∘ G2) = map G1 (dist T G2) ∘ dist T G1
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G1: Type -> Type H2: Map G1 H3: Pure G1 H4: Mult G1 H0: Applicative G1 G2: Type -> Type H6: Map G2 H7: Pure G2 H8: Mult G2 H1: Applicative G2 A: Type
dist T (G1 ∘ G2) = map G1 (dist T G2) ∘ dist T G1
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G1: Type -> Type H2: Map G1 H3: Pure G1 H4: Mult G1 H0: Applicative G1 G2: Type -> Type H6: Map G2 H7: Pure G2 H8: Mult G2 H1: Applicative G2 A: Type
binddt
(map (G1 ∘ G2) (ret T A)
∘ extract (prod W) ((G1 ∘ G2) A)) =
map G1
(binddt (map G2 (ret T A) ∘ extract (prod W) (G2 A)))
∘ binddt
(map G1 (ret T (G2 A))
∘ extract (prod W) (G1 (G2 A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G1: Type -> Type H2: Map G1 H3: Pure G1 H4: Mult G1 H0: Applicative G1 G2: Type -> Type H6: Map G2 H7: Pure G2 H8: Mult G2 H1: Applicative G2 A: Type
binddt
(map (G1 ∘ G2) (ret T A)
∘ extract (prod W) ((G1 ∘ G2) A)) =
binddt
(map G2 (ret T A) ∘ extract (prod W) (G2 A)
⋆7 map G1 (ret T (G2 A))
∘ extract (prod W) (G1 (G2 A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G1: Type -> Type H2: Map G1 H3: Pure G1 H4: Mult G1 H0: Applicative G1 G2: Type -> Type H6: Map G2 H7: Pure G2 H8: Mult G2 H1: Applicative G2 A: Type
binddt
(map (G1 ∘ G2) (ret T A)
∘ extract (prod W) ((G1 ∘ G2) A)) =
binddt
(map G2 (ret T A) ∘ id ∘ extract (prod W) (G2 A)
⋆7 map G1 (ret T (G2 A))
∘ extract (prod W) (G1 (G2 A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G1: Type -> Type H2: Map G1 H3: Pure G1 H4: Mult G1 H0: Applicative G1 G2: Type -> Type H6: Map G2 H7: Pure G2 H8: Mult G2 H1: Applicative G2 A: Type
binddt
(map (G1 ∘ G2) (ret T A)
∘ extract (prod W) ((G1 ∘ G2) A)) =
binddt
(map G1 (traverse T G2 id)
∘ (map G1 (ret T (G2 A))
∘ extract (prod W) (G1 (G2 A))))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G1: Type -> Type H2: Map G1 H3: Pure G1 H4: Mult G1 H0: Applicative G1 G2: Type -> Type H6: Map G2 H7: Pure G2 H8: Mult G2 H1: Applicative G2 A: Type
binddt
(map (G1 ∘ G2) (ret T A)
∘ extract (prod W) ((G1 ∘ G2) A)) =
binddt
(map G1 (traverse T G2 id) ∘ map G1 (ret T (G2 A))
∘ extract (prod W) (G1 (G2 A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G1: Type -> Type H2: Map G1 H3: Pure G1 H4: Mult G1 H0: Applicative G1 G2: Type -> Type H6: Map G2 H7: Pure G2 H8: Mult G2 H1: Applicative G2 A: Type
binddt
(map (G1 ∘ G2) (ret T A)
∘ extract (prod W) ((G1 ∘ G2) A)) =
binddt
(map G1 (traverse T G2 id ∘ ret T (G2 A))
∘ extract (prod W) (G1 (G2 A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G1: Type -> Type H2: Map G1 H3: Pure G1 H4: Mult G1 H0: Applicative G1 G2: Type -> Type H6: Map G2 H7: Pure G2 H8: Mult G2 H1: Applicative G2 A: Type
binddt
(map (G1 ∘ G2) (ret T A)
∘ extract (prod W) ((G1 ∘ G2) A)) =
binddt
(map G1 (map G2 (ret T A) ∘ id)
∘ extract (prod W) (G1 (G2 A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forall (G : Type -> Type) (H3 : Map G) (H4 : Pure G)
(H5 : Mult G),
Applicative G ->
forallA : Type,
dist T G ∘ ret T (G A) = map G (ret T A)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forall (G : Type -> Type) (H3 : Map G) (H4 : Pure G)
(H5 : Mult G),
Applicative G ->
forallA : Type,
dist T G ∘ ret T (G A) = map G (ret T A)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H3: Map G H4: Pure G H5: Mult G H0: Applicative G A: Type
dist T G ∘ ret T (G A) = map G (ret T A)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H3: Map G H4: Pure G H5: Mult G H0: Applicative G A: Type
binddt (map G (ret T A) ∘ extract (prod W) (G A))
∘ ret T (G A) = map G (ret T A)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H3: Map G H4: Pure G H5: Mult G H0: Applicative G A: Type
map G (ret T A) ∘ extract (prod W) (G A)
∘ ret (prod W) (G A) = map G (ret T A)
reflexivity.Qed.
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forall (G : Type -> Type) (H3 : Map G) (H4 : Pure G)
(H5 : Mult G),
Applicative G ->
forallA : Type,
dist T G ∘ join T =
map G (join T) ∘ dist T G ∘ map T (dist T G)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forall (G : Type -> Type) (H3 : Map G) (H4 : Pure G)
(H5 : Mult G),
Applicative G ->
forallA : Type,
dist T G ∘ join T =
map G (join T) ∘ dist T G ∘ map T (dist T G)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H3: Map G H4: Pure G H5: Mult G Happ: Applicative G A: Type
dist T G ∘ join T =
map G (join T) ∘ dist T G ∘ map T (dist T G)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H3: Map G H4: Pure G H5: Mult G Happ: Applicative G A: Type
binddt (map G (ret T A) ∘ extract (prod W) (G A))
∘ binddt (extract (prod W) (T (G A))) =
map G (binddt (extract (prod W) (T A)))
∘ binddt
(map G (ret T (T A)) ∘ extract (prod W) (G (T A)))
∘ map T
(binddt (map G (ret T A) ∘ extract (prod W) (G A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H3: Map G H4: Pure G H5: Mult G Happ: Applicative G A: Type
mapdt T G (extract (prod W) (G A))
∘ binddt (extract (prod W) (T (G A))) =
map G (binddt (extract (prod W) (T A)))
∘ mapdt T G (extract (prod W) (G (T A)))
∘ map T (mapdt T G (extract (prod W) (G A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H3: Map G H4: Pure G H5: Mult G Happ: Applicative G A: Type
mapdt T G (extract (prod W) (G A))
∘ bindd T (extract (prod W) (T (G A))) =
map G (bindd T (extract (prod W) (T A)))
∘ mapdt T G (extract (prod W) (G (T A)))
∘ map T (mapdt T G (extract (prod W) (G A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H3: Map G H4: Pure G H5: Mult G Happ: Applicative G A: Type
mapdt T G (extract (prod W) (G A))
∘ bindd T (extract (prod W) (T (G A))) =
map G (bindd T (extract (prod W) (T A)))
∘ mapdt T G (extract (prod W) (G (T A)))
∘ map T (mapdt T G (extract (prod W) (G A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H3: Map G H4: Pure G H5: Mult G Happ: Applicative G A: Type
binddt
(fun '(w, a) =>
mapdt T G (extract (prod W) (G A) ⦿ w)
(extract (prod W) (T (G A)) (w, a))) =
map G (bindd T (extract (prod W) (T A)))
∘ mapdt T G (extract (prod W) (G (T A)))
∘ map T (mapdt T G (extract (prod W) (G A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H3: Map G H4: Pure G H5: Mult G Happ: Applicative G A: Type
binddt
(fun '(w, a) =>
mapdt T G (extract (prod W) (G A) ⦿ w)
(extract (prod W) (T (G A)) (w, a))) =
map G (bindd T (extract (prod W) (T A)))
∘ mapdt T G (extract (prod W) (G (T A)))
∘ map T (mapdt T G (extract (prod W) (G A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H3: Map G H4: Pure G H5: Mult G Happ: Applicative G A: Type
binddt
(fun '(w, a) =>
mapdt T G (extract (prod W) (G A) ⦿ w)
(extract (prod W) (T (G A)) (w, a))) =
binddt
(fun '(w, a) =>
map G (extract (prod W) (T A) ∘ pair w)
(extract (prod W) (G (T A)) (w, a)))
∘ map T (mapdt T G (extract (prod W) (G A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H3: Map G H4: Pure G H5: Mult G Happ: Applicative G A: Type
binddt
(fun '(w, a) =>
mapdt T G (extract (prod W) (G A) ⦿ w)
(extract (prod W) (T (G A)) (w, a))) =
binddt
((fun '(w, a) =>
map G (extract (prod W) (T A) ∘ pair w)
(extract (prod W) (G (T A)) (w, a)))
∘ map (prod W) (mapdt T G (extract (prod W) (G A))))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H3: Map G H4: Pure G H5: Mult G Happ: Applicative G A: Type
(fun '(w, a) =>
mapdt T G (extract (prod W) (G A) ⦿ w)
(extract (prod W) (T (G A)) (w, a))) =
(fun '(w, a) =>
map G (extract (prod W) (T A) ∘ pair w)
(extract (prod W) (G (T A)) (w, a)))
∘ map (prod W) (mapdt T G (extract (prod W) (G A)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H3: Map G H4: Pure G H5: Mult G Happ: Applicative G A: Type w: W a: T (G A)
mapdt T G (extract (prod W) (G A) ⦿ w)
(extract (prod W) (T (G A)) (w, a)) =
((fun '(w, a) =>
map G (extract (prod W) (T A) ∘ pair w)
(extract (prod W) (G (T A)) (w, a)))
∘ map (prod W) (mapdt T G (extract (prod W) (G A))))
(w, a)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H3: Map G H4: Pure G H5: Mult G Happ: Applicative G A: Type w: W a: T (G A)
mapdt T G (extract (prod W) (G A) ⦿ w)
(extract (prod W) (T (G A)) (w, a)) =
(let
'(w, a) :=
map (prod W) (mapdt T G (extract (prod W) (G A)))
(w, a) in
map G (extract (prod W) (T A) ○ pair w)
(extract (prod W) (G (T A)) (w, a)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H3: Map G H4: Pure G H5: Mult G Happ: Applicative G A: Type w: W a: T (G A)
mapdt T G (extract (prod W) (G A) ⦿ w) a =
map G (funa : T A => a)
(mapdt T G (extract (prod W) (G A)) a)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H3: Map G H4: Pure G H5: Mult G Happ: Applicative G A: Type w: W a: T (G A)
mapdt T G (extract (prod W) (G A) ⦿ w) a =
map G id (mapdt T G (extract (prod W) (G A)) a)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H3: Map G H4: Pure G H5: Mult G Happ: Applicative G A: Type w: W a: T (G A)
mapdt T G (extract (prod W) (G A) ⦿ w) a =
map G id (mapdt T G (extract (prod W) (G A)) a)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H3: Map G H4: Pure G H5: Mult G Happ: Applicative G A: Type w: W a: T (G A)
mapdt T G (extract (prod W) (G A) ⦿ w) a =
map G id (mapdt T G (extract (prod W) (G A)) a)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H3: Map G H4: Pure G H5: Mult G Happ: Applicative G A: Type w: W a: T (G A) app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b)
mapdt T G (extract (prod W) (G A) ⦿ w) a =
map G id (mapdt T G (extract (prod W) (G A)) a)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H3: Map G H4: Pure G H5: Mult G Happ: Applicative G A: Type w: W a: T (G A) app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b)
mapdt T G (extract (prod W) (G A) ⦿ w) a =
id (mapdt T G (extract (prod W) (G A)) a)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H3: Map G H4: Pure G H5: Mult G Happ: Applicative G A: Type w: W a: T (G A) app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b)
mapdt T G (extract (prod W) (G A)) a =
id (mapdt T G (extract (prod W) (G A)) a)
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forall (G : Type -> Type) (H2 : Map G) (H3 : Pure G)
(H4 : Mult G),
Applicative G ->
forallA : Type,
dist T G ∘ map T strength ∘ dec T =
map G (dec T) ∘ dist T G
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T
forall (G : Type -> Type) (H2 : Map G) (H3 : Pure G)
(H4 : Mult G),
Applicative G ->
forallA : Type,
dist T G ∘ map T strength ∘ dec T =
map G (dec T) ∘ dist T G
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G A: Type
dist T G ∘ map T strength ∘ dec T =
map G (dec T) ∘ dist T G
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G A: Type
binddt
(map G (ret T (W * A))
∘ extract (prod W) (G (W * A))) ∘ map T strength
∘ binddt (ret T (W * G A)) =
map G (binddt (ret T (W * A)))
∘ binddt (map G (ret T A) ∘ extract (prod W) (G A))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G A: Type
binddt
(map G (ret T (W * A))
∘ extract (prod W) (G (W * A))) ∘ map T strength
∘ binddt (ret T (W * G A) ∘ id) =
map G (binddt (ret T (W * A)))
∘ binddt (map G (ret T A) ∘ extract (prod W) (G A))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G A: Type
binddt
(map G (ret T (W * A))
∘ extract (prod W) (G (W * A))) ∘ map T strength
∘ mapd T id =
map G (binddt (ret T (W * A)))
∘ binddt (map G (ret T A) ∘ extract (prod W) (G A))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G A: Type
binddt
(map G (ret T (W * A))
∘ extract (prod W) (G (W * A))) ∘ map T strength
∘ mapd T id =
map G (bindd T (ret T (W * A)))
∘ binddt (map G (ret T A) ∘ extract (prod W) (G A))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G A: Type
binddt
(map G (ret T (W * A))
∘ extract (prod W) (G (W * A)))
∘ (map T strength ∘ mapd T id) =
map G (bindd T (ret T (W * A)))
∘ binddt (map G (ret T A) ∘ extract (prod W) (G A))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G A: Type
binddt
(map G (ret T (W * A))
∘ extract (prod W) (G (W * A)))
∘ mapd T (strength ∘ id) =
map G (bindd T (ret T (W * A)))
∘ binddt (map G (ret T A) ∘ extract (prod W) (G A))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G A: Type
mapdt T G (extract (prod W) (G (W * A)))
∘ mapd T (strength ∘ id) =
map G (bindd T (ret T (W * A)))
∘ mapdt T G (extract (prod W) (G A))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G A: Type
mapdt T G (id ∘ extract (prod W) (G (W * A)))
∘ mapd T (strength ∘ id) =
map G (bindd T (ret T (W * A)))
∘ mapdt T G (id ∘ extract (prod W) (G A))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G A: Type
mapdt T G
(id ∘ extract (prod W) (G (W * A)) ⋆1 strength ∘ id) =
map G (bindd T (ret T (W * A)))
∘ mapdt T G (id ∘ extract (prod W) (G A))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G A: Type
mapdt T G
(id ∘ extract (prod W) (G (W * A)) ⋆1 strength ∘ id) =
binddt
(fun '(w, a) =>
map G (ret T (W * A) ∘ pair w)
((id ∘ extract (prod W) (G A)) (w, a)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G A: Type
binddt
(map G (ret T (W * A))
∘ (id ∘ extract (prod W) (G (W * A))
⋆1 strength ∘ id)) =
binddt
(fun '(w, a) =>
map G (ret T (W * A) ∘ pair w)
((id ∘ extract (prod W) (G A)) (w, a)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G A: Type
binddt
(map G (ret T (W * A)) ∘ (id ∘ (strength ∘ id))) =
binddt
(fun '(w, a) =>
map G (ret T (W * A) ∘ pair w)
((id ∘ extract (prod W) (G A)) (w, a)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G A: Type
map G (ret T (W * A)) ∘ (id ∘ (strength ∘ id)) =
(fun '(w, a) =>
map G (ret T (W * A) ∘ pair w)
((id ∘ extract (prod W) (G A)) (w, a)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G A: Type w: W a: G A
(map G (ret T (W * A)) ∘ (id ∘ (strength ∘ id)))
(w, a) =
map G (ret T (W * A) ∘ pair w)
((id ∘ extract (prod W) (G A)) (w, a))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G A: Type w: W a: G A
map G (ret T (W * A)) (id (strength (id (w, a)))) =
map G (ret T (W * A) ○ pair w)
(id (extract (prod W) (G A) (w, a)))
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G A: Type w: W a: G A
map G (ret T (W * A)) (map G (pair w) a) =
map G (ret T (W * A) ○ pair w) a
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G A: Type w: W a: G A
(map G (ret T (W * A)) ∘ map G (pair w)) a =
map G (ret T (W * A) ○ pair w) a
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G A: Type w: W a: G A app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b)
(map G (ret T (W * A)) ∘ map G (pair w)) a =
map G (ret T (W * A) ○ pair w) a
W: Type T: Type -> Type op: Monoid_op W unit0: Monoid_unit W Return_inst: Return T Bindd_T_inst: Binddt W T T H: DecoratedTraversableMonad W T G: Type -> Type H2: Map G H3: Pure G H4: Mult G Happ: Applicative G A: Type w: W a: G A app_functor: Functor G app_pure_natural: forall (AB : Type) (f : A -> B)
(x : A),
map G f (pure x) = pure (f x) app_mult_natural: forall (ABCD : Type)
(f : A -> C) (g : B -> D)
(x : G A) (y : G B),
mult (map G f x, map G g y) =
map G (map_tensor f g)
(mult (x, y)) app_assoc: forall (ABC : Type) (x : G A)
(y : G B) (z : G C),
map G α (mult (mult (x, y), z)) =
mult (x, mult (y, z)) app_unital_l: forall (A : Type) (x : G A),
map G left_unitor (mult (pure tt, x)) =
x app_unital_r: forall (A : Type) (x : G A),
map G right_unitor (mult (x, pure tt)) =
x app_mult_pure: forall (AB : Type) (a : A) (b : B),
mult (pure a, pure b) = pure (a, b)
map G (ret T (W * A) ∘ pair w) a =
map G (ret T (W * A) ○ pair w) a
reflexivity.Qed.#[export] Instance:
Categorical.DecoratedTraversableFunctor.DecoratedTraversableFunctor W T :=
{| dtfun_compat := dtfun_compat_T;
|}.(** *** Decorated Traversable monad instance *)(******************************************************************)#[export] Instance:
Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T :=
ltac:(constructor; typeclasses eauto).Endwith_monad.EndDerivedInstances.