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.TraversableMonad
Classes.Kleisli.TraversableMonad
Classes.Kleisli.Monad.Import Kleisli.Monad.Notations.Import Kleisli.TraversableMonad.Notations.#[local] Generalizable VariablesT G ϕ.(** * Categorical Traversable Monads from Kleisli Traversable Monads *)(**********************************************************************)(** ** Derived Operations *)(**********************************************************************)ModuleDerivedOperations.Sectionoperations.Context
(T: Type -> Type)
`{Return_T: Return T}
`{Bindt_TT: Bindt T T}.#[export] InstanceDist_Bindt: ApplicativeDist T :=
funG___A => bindt (G := G) (map (F := G) ret).#[export] InstanceJoin_Bindt: Join T :=
funA => bindt (G := funA => A) id.Endoperations.EndDerivedOperations.(** * Derived Instances *)(**********************************************************************)ModuleDerivedInstances.Sectionwith_monad.Context
`{Kleisli.TraversableMonad.TraversableMonad T}.Import DerivedOperations.Import Kleisli.TraversableMonad.DerivedOperations.Import Kleisli.TraversableMonad.DerivedInstances.Import Kleisli.TraversableFunctor.DerivedInstances.(** ** Monad Instance *)(******************************************************************)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
Natural (@ret T Return_T)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
Natural (@ret T Return_T)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
Functor (funA : Type => A)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
Functor T
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
forall (AB : Type) (f : A -> B),
map f ∘ ret = ret ∘ map f
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
Functor (funA : Type => A)
typeclasses eauto.
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
Functor T
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T ktm_bindt0: forall (G : Type -> Type)
(Map_G : Map G) (Pure_G : Pure G)
(Mult_G : Mult G),
Applicative G ->
forall (AB : Type) (f : A -> G (T B)),
bindt f ∘ ret = f ktm_premod: TraversableRightPreModule T T
Functor T
typeclasses eauto.
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
forall (AB : Type) (f : A -> B),
map f ∘ ret = ret ∘ map f
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A, B: Type f: A -> B
map f ∘ ret = ret ∘ map f
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A, B: Type f: A -> B
bindt (ret ∘ f) ∘ ret = ret ∘ map f
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A, B: Type f: A -> B
ret ∘ f = ret ∘ map f
reflexivity.Qed.
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
Natural (@join T (Join_Bindt T))
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
Natural (@join T (Join_Bindt T))
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
Functor (T ∘ T)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
Functor T
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
forall (AB : Type) (f : A -> B),
map f ∘ join = join ∘ map f
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
Functor (T ∘ T)
typeclasses eauto.
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
Functor T
typeclasses eauto.
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
forall (AB : Type) (f : A -> B),
map f ∘ join = join ∘ map f
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A, B: Type f: A -> B
map f ∘ join = join ∘ map f
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A, B: Type f: A -> B
map f ∘ bindt id = bindt id ∘ map (map f)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A, B: Type f: A -> B
map f ∘ bind id = bindt id ∘ map (map f)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A, B: Type f: A -> B
map f ∘ bind id = bind id ∘ map (map f)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A, B: Type f: A -> B
map f ∘ bind id = bind id ∘ map (map f)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A, B: Type f: A -> B
bind (map f ∘ id) = bind id ∘ map (map f)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A, B: Type f: A -> B
bind (map f ∘ id) = bind (id ∘ map f)
reflexivity.Qed.
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
forallA : Type, join ∘ ret = id
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
forallA : Type, join ∘ ret = id
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
join ∘ ret = id
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
bindt id ∘ ret = id
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
bindt id ∘ ret = id
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
bind id ∘ ret = id
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
id = id
reflexivity.Qed.
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
forallA : Type, join ∘ map ret = id
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
forallA : Type, join ∘ map ret = id
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
join ∘ map ret = id
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
bindt id ∘ map ret = id
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
bind id ∘ map ret = id
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
bind id ∘ map ret = id
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
bind (id ∘ ret) = id
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
bind ret = id
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
id = id
reflexivity.Qed.
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
forallA : Type, join ∘ join = join ∘ map join
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
forallA : Type, join ∘ join = join ∘ map join
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
join ∘ join = join ∘ map join
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
bindt id ∘ bindt id = bindt id ∘ map (bindt id)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
bind id ∘ bindt id = bind id ∘ map (bind id)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
bind id ∘ bind id = bind id ∘ map (bind id)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
bind id ∘ bind id = bind id ∘ map (bind id)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
bind (id ⋆ id) = bind id ∘ map (bind id)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
forall (G : Type -> Type) (mapG : Map G)
(pureG : Pure G) (multG : Mult G),
Applicative G ->
Natural (@dist T (Dist_Bindt T) G mapG pureG multG)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
forall (G : Type -> Type) (mapG : Map G)
(pureG : Pure G) (multG : Mult G),
Applicative G ->
Natural (@dist T (Dist_Bindt T) G mapG pureG multG)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G: Type -> Type mapG: Map G pureG: Pure G multG: Mult G H0: Applicative G
Natural (@dist T (Dist_Bindt T) G mapG pureG multG)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G: Type -> Type mapG: Map G pureG: Pure G multG: Mult G H0: Applicative G
Functor (T ○ G)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G: Type -> Type mapG: Map G pureG: Pure G multG: Mult G H0: Applicative G
Functor (G ○ T)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G: Type -> Type mapG: Map G pureG: Pure G multG: Mult G H0: Applicative G
forall (AB : Type) (f : A -> B),
map f ∘ dist T G = dist T G ∘ map f
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G: Type -> Type mapG: Map G pureG: Pure G multG: Mult G H0: Applicative G
Functor (T ○ G)
typeclasses eauto.
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G: Type -> Type mapG: Map G pureG: Pure G multG: Mult G H0: Applicative G
Functor (G ○ T)
typeclasses eauto.
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G: Type -> Type mapG: Map G pureG: Pure G multG: Mult G H0: Applicative G
forall (AB : Type) (f : A -> B),
map f ∘ dist T G = dist T G ∘ map f
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G: Type -> Type mapG: Map G pureG: Pure G multG: Mult G H0: Applicative G A, B: Type f: A -> B
map f ∘ dist T G = dist T G ∘ map f
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G: Type -> Type mapG: Map G pureG: Pure G multG: Mult G H0: Applicative G A, B: Type f: A -> B
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G: Type -> Type mapG: Map G pureG: Pure G multG: Mult G H0: Applicative G A, B: Type f: A -> B
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G: Type -> Type mapG: Map G pureG: Pure G multG: Mult G H0: Applicative G A, B: Type f: A -> B
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G: Type -> Type mapG: Map G pureG: Pure G multG: Mult G H0: Applicative G A, B: Type f: A -> B
bindt (map (map f ∘ ret)) = bindt (map ret ∘ map f)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G: Type -> Type mapG: Map G pureG: Pure G multG: Mult G H0: Applicative G A, B: Type f: A -> B
bindt (map (map f ∘ ret)) = bindt (map (ret ∘ f))
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G: Type -> Type mapG: Map G pureG: Pure G multG: Mult G H0: Applicative G A, B: Type f: A -> B
bindt (map (ret ∘ map f)) = bindt (map (ret ∘ f))
reflexivity.Qed.
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
forall (G1G2 : Type -> Type) (H0 : Map G1)
(H1 : Mult G1) (H2 : Pure G1) (H3 : Map G2)
(H4 : Mult G2) (H5 : Pure G2)
(ϕ : forallA : Type, G1 A -> G2 A),
ApplicativeMorphism G1 G2 ϕ ->
forallA : Type,
dist T G2 ∘ map (ϕ A) = ϕ (T A) ∘ dist T G1
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
forall (G1G2 : Type -> Type) (H0 : Map G1)
(H1 : Mult G1) (H2 : Pure G1) (H3 : Map G2)
(H4 : Mult G2) (H5 : Pure G2)
(ϕ : forallA : Type, G1 A -> G2 A),
ApplicativeMorphism G1 G2 ϕ ->
forallA : Type,
dist T G2 ∘ map (ϕ A) = ϕ (T A) ∘ dist T G1
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G1, G2: Type -> Type H0: Map G1 H1: Mult G1 H2: Pure G1 H3: Map G2 H4: Mult G2 H5: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morphism: ApplicativeMorphism G1 G2 ϕ A: Type
dist T G2 ∘ map (ϕ A) = ϕ (T A) ∘ dist T G1
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G1, G2: Type -> Type H0: Map G1 H1: Mult G1 H2: Pure G1 H3: Map G2 H4: Mult G2 H5: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morphism: ApplicativeMorphism G1 G2 ϕ A: Type H6: Applicative G1
dist T G2 ∘ map (ϕ A) = ϕ (T A) ∘ dist T G1
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G1, G2: Type -> Type H0: Map G1 H1: Mult G1 H2: Pure G1 H3: Map G2 H4: Mult G2 H5: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morphism: ApplicativeMorphism G1 G2 ϕ A: Type H6: Applicative G1 H7: Applicative G2
dist T G2 ∘ map (ϕ A) = ϕ (T A) ∘ dist T G1
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G1, G2: Type -> Type H0: Map G1 H1: Mult G1 H2: Pure G1 H3: Map G2 H4: Mult G2 H5: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morphism: ApplicativeMorphism G1 G2 ϕ A: Type H6: Applicative G1 H7: Applicative G2
bindt (map ret) ∘ map (ϕ A) =
ϕ (T A) ∘ bindt (map ret)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G1, G2: Type -> Type H0: Map G1 H1: Mult G1 H2: Pure G1 H3: Map G2 H4: Mult G2 H5: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morphism: ApplicativeMorphism G1 G2 ϕ A: Type H6: Applicative G1 H7: Applicative G2
bindt (map ret ∘ ϕ A) = ϕ (T A) ∘ bindt (map ret)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G1, G2: Type -> Type H0: Map G1 H1: Mult G1 H2: Pure G1 H3: Map G2 H4: Mult G2 H5: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morphism: ApplicativeMorphism G1 G2 ϕ A: Type H6: Applicative G1 H7: Applicative G2
bindt (map ret ∘ ϕ A) = bindt (ϕ (T A) ∘ map ret)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G1, G2: Type -> Type H0: Map G1 H1: Mult G1 H2: Pure G1 H3: Map G2 H4: Mult G2 H5: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morphism: ApplicativeMorphism G1 G2 ϕ A: Type H6: Applicative G1 H7: Applicative G2 appmor_app_F: Applicative G1 appmor_app_G: Applicative G2 appmor_natural: forall (AB : Type) (f : A -> B)
(x : G1 A),
ϕ B (map f x) = map 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)
bindt (map ret ∘ ϕ A) = bindt (ϕ (T A) ∘ map ret)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G1, G2: Type -> Type H0: Map G1 H1: Mult G1 H2: Pure G1 H3: Map G2 H4: Mult G2 H5: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morphism: ApplicativeMorphism G1 G2 ϕ A: Type H6: Applicative G1 H7: Applicative G2 appmor_app_F: Applicative G1 appmor_app_G: Applicative G2 appmor_natural: forall (AB : Type) (f : A -> B)
(x : G1 A),
ϕ B (map f x) = map 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)
bindt (ϕ (T A) ∘ map ret) = bindt (ϕ (T A) ∘ map ret)
reflexivity.Qed.
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
forallA : Type, dist T (funA0 : Type => A0) = id
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
forallA : Type, dist T (funA0 : Type => A0) = id
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
dist T (funA0 : Type => A0) = id
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
bindt (map ret) = id
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
bindt ret = id
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T A: Type
id = id
reflexivity.Qed.
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
forall (G1 : Type -> Type) (Map_G : Map G1)
(Pure_G : Pure G1) (Mult_G : Mult G1),
Applicative G1 ->
forall (G2 : Type -> Type) (Map_G0 : Map G2)
(Pure_G0 : Pure G2) (Mult_G0 : Mult G2),
Applicative G2 ->
forallA : Type,
dist T (G1 ∘ G2) = map (dist T G2) ∘ dist T G1
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
forall (G1 : Type -> Type) (Map_G : Map G1)
(Pure_G : Pure G1) (Mult_G : Mult G1),
Applicative G1 ->
forall (G2 : Type -> Type) (Map_G0 : Map G2)
(Pure_G0 : Pure G2) (Mult_G0 : Mult G2),
Applicative G2 ->
forallA : Type,
dist T (G1 ∘ G2) = map (dist T G2) ∘ dist T G1
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 A: Type
dist T (G1 ∘ G2) = map (dist T G2) ∘ dist T G1
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 A: Type
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 A: Type
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 A: Type
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 A: Type
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 A: Type
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
forall (G : Type -> Type) (H3 : Map G) (H4 : Pure G)
(H5 : Mult G),
Applicative G ->
forallA : Type, dist T G ∘ ret = map ret
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
forall (G : Type -> Type) (H3 : Map G) (H4 : Pure G)
(H5 : Mult G),
Applicative G ->
forallA : Type, dist T G ∘ ret = map ret
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G: Type -> Type H3: Map G H4: Pure G H5: Mult G H0: Applicative G A: Type
dist T G ∘ ret = map ret
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G: Type -> Type H3: Map G H4: Pure G H5: Mult G H0: Applicative G A: Type
bindt (map ret) ∘ ret = map ret
rewrite (ktm_bindt0 (T := T)); auto.Qed.
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
forall (G : Type -> Type) (H3 : Map G) (H4 : Pure G)
(H5 : Mult G),
Applicative G ->
forallA : Type,
dist T G ∘ join = map join ∘ dist T G ∘ map (dist T G)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T
forall (G : Type -> Type) (H3 : Map G) (H4 : Pure G)
(H5 : Mult G),
Applicative G ->
forallA : Type,
dist T G ∘ join = map join ∘ dist T G ∘ map (dist T G)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G: Type -> Type H3: Map G H4: Pure G H5: Mult G H0: Applicative G A: Type
dist T G ∘ join = map join ∘ dist T G ∘ map (dist T G)
T: Type -> Type Return_T: Return T Bindt_TT: Bindt T T H: TraversableMonad T G: Type -> Type H3: Map G H4: Pure G H5: Mult G H0: Applicative G A: Type