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
Adapters.CategoricalToKleisli.TraversableFunctor.Import Kleisli.TraversableMonad.Notations.#[local] Generalizable VariablesT G ϕ.(** * Kleisli Traversable Monads from Categorical Traversable Monads *)(**********************************************************************)(** ** Operation *)(**********************************************************************)ModuleDerivedOperations.#[export] InstanceBindt_Categorical
(T: Type -> Type)
`{Map_T: Map T} `{Join_T: Join T}
`{Dist_T: ApplicativeDist T}
: Bindt T T | 1000
:= fun (G: Type -> Type) ___ (AB: Type)
(f: A -> G (T B)) =>
map (F := G) join ∘ dist T G ∘ map (F := T) f.EndDerivedOperations.(** ** Derived Laws *)(**********************************************************************)ModuleDerivedInstances.Import DerivedOperations.Sectionwith_monad.Context
`{Categorical.TraversableMonad.TraversableMonad T}.(** *** Identity law *)(******************************************************************)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T
forallA : Type, bindt ret = id
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T
forallA : Type, bindt ret = id
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T A: Type
bindt ret = id
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T A: Type
Bindt_Categorical T (funA : Type => A) Map_I Pure_I
Mult_I A A ret = id
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T A: Type
map join ∘ dist T (funA : Type => A) ∘ map ret = id
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T A: Type
join ∘ dist T (funA : Type => A) ∘ map ret = id
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T A: Type
join ∘ id ∘ map ret = id
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T A: Type
join ∘ map ret = id
nowrewrite (mon_join_map_ret (T := T)).Qed.(** *** Composition law *)(******************************************************************)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.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 ->
forall (ABC : Type) (g : B -> G2 (T C))
(f : A -> G1 (T B)),
map (bindt g) ∘ bindt f = bindt (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.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 ->
forall (ABC : Type) (g : B -> G2 (T C))
(f : A -> G1 (T B)),
map (bindt g) ∘ bindt f = bindt (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (bindt g) ∘ bindt f = bindt (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map
(Bindt_Categorical T G2 Map_G0 Pure_G0 Mult_G0 B C g)
∘ Bindt_Categorical T G1 Map_G Pure_G Mult_G A B f =
Bindt_Categorical T (G1 ∘ G2) (Map_compose G1 G2)
(Pure_compose G1 G2) (Mult_compose G1 G2) A C
(g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (map join ∘ dist T G2 ∘ map g) ∘ map join
∘ dist T G1 ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (map join ∘ dist T G2 ∘ map g ∘ join) ∘ dist T G1
∘ map f = map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (map join ∘ dist T G2 ∘ (map g ∘ join))
∘ dist T G1 ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (map join ∘ dist T G2 ∘ (join ∘ map g))
∘ dist T G1 ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (map join ∘ dist T G2 ∘ join ∘ map g) ∘ dist T G1
∘ map f = map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (map join ∘ (dist T G2 ∘ join) ∘ map g)
∘ dist T G1 ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map
(map join ∘ (map join ∘ dist T G2 ∘ map (dist T G2))
∘ map g) ∘ dist T G1 ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map
(map join ∘ (map join ∘ dist T G2) ∘ map (dist T G2)
∘ map g) ∘ dist T G1 ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map
(map join ∘ map join ∘ dist T G2 ∘ map (dist T G2)
∘ map g) ∘ dist T G1 ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map
(map (join ∘ join) ∘ dist T G2 ∘ map (dist T G2)
∘ map g) ∘ dist T G1 ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map
(map (join ∘ map join) ∘ dist T G2 ∘ map (dist T G2)
∘ map g) ∘ dist T G1 ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map
(map (join ∘ map join) ∘ dist T G2 ∘ map (dist T G2))
∘ map (map g) ∘ dist T G1 ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map
(map (join ∘ map join) ∘ dist T G2 ∘ map (dist T G2))
∘ (map (map g) ∘ dist T G1) ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map
(map (join ∘ map join) ∘ dist T G2 ∘ map (dist T G2))
∘ (map (map g) ∘ dist T G1) ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map
(map (join ∘ map join) ∘ dist T G2 ∘ map (dist T G2))
∘ (map (map g) ∘ dist T G1) ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map
(map (join ∘ map join) ∘ dist T G2 ∘ map (dist T G2))
∘ (dist T G1 ∘ map (map g)) ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map
(map (join ∘ map join) ∘ dist T G2 ∘ map (dist T G2))
∘ (dist T G1 ∘ map (map g)) ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map
(map (join ∘ map join) ∘ dist T G2 ∘ map (dist T G2))
∘ dist T G1 ∘ map (map g) ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (map (join ∘ map join) ∘ dist T G2)
∘ map (map (dist T G2)) ∘ dist T G1 ∘ map (map g)
∘ map f = map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (map (join ∘ map join) ∘ dist T G2)
∘ (map (map (dist T G2)) ∘ dist T G1) ∘ map (map g)
∘ map f = map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
(* unfold_ops @Dist_compose. *)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (map (join ∘ map join)) ∘ map (dist T G2)
∘ (map (map (dist T G2)) ∘ dist T G1) ∘ map (map g)
∘ map f = map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (map (join ∘ map join)) ∘ map (dist T G2)
∘ map (map (dist T G2)) ∘ dist T G1 ∘ map (map g)
∘ map f = map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (map (join ∘ map join)) ∘ map (dist T G2)
∘ (map (map (dist T G2)) ∘ dist T G1) ∘ map (map g)
∘ map f = map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (map (join ∘ map join)) ∘ map (dist T G2)
∘ (map (dist T G2) ∘ dist T G1) ∘ map (map g) ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
(* reassociate -> near (dist T G1). *)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (map (join ∘ map join)) ∘ map (dist T G2)
∘ (map (dist T G2) ∘ dist T G1) ∘ map (map g) ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (map (join ∘ map join)) ∘ map (dist T G2)
∘ (dist T G1 ∘ map (dist T G2)) ∘ map (map g) ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (map (join ∘ map join)) ∘ map (dist T G2)
∘ (dist T G1 ∘ map (dist T G2)) ∘ map (map g) ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (map (join ∘ map join)) ∘ map (dist T G2)
∘ dist T G1 ∘ map (dist T G2) ∘ map (map g) ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (map (join ∘ map join))
∘ (map (dist T G2) ∘ dist T G1) ∘ map (dist T G2)
∘ map (map g) ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (map (join ∘ map join)) ∘ dist T (G1 ∘ G2)
∘ map (dist T G2) ∘ map (map g) ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (join ∘ map join) ∘ dist T (G1 ∘ G2)
∘ map (dist T G2) ∘ map (map g) ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map join ∘ map (map join) ∘ dist T (G1 ∘ G2)
∘ map (dist T G2) ∘ map (map g) ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map join ∘ (map (map join) ∘ dist T (G1 ∘ G2))
∘ map (dist T G2) ∘ map (map g) ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map join ∘ (map join ∘ dist T (G1 ∘ G2))
∘ map (dist T G2) ∘ map (map g) ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map join ∘ (map join ∘ dist T (G1 ∘ G2))
∘ map (dist T G2) ∘ map (map g) ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map join ∘ (dist T (G1 ∘ G2) ∘ map join)
∘ map (dist T G2) ∘ map (map g) ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map join ∘ dist T (G1 ∘ G2) ∘ map join
∘ map (dist T G2) ∘ map (map g) ∘ map f =
map join ∘ dist T (G1 ∘ G2) ∘ map (g ⋆6 f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
reflexivity.Qed.(** *** Unit law *)(******************************************************************)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T
forall (G1 : Type -> Type) (H4 : Map G1)
(H5 : Pure G1) (H6 : Mult G1),
Applicative G1 ->
forall (AB : Type) (f : A -> G1 (T B)),
bindt f ∘ ret = f
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T
forall (G1 : Type -> Type) (H4 : Map G1)
(H5 : Pure G1) (H6 : Mult G1),
Applicative G1 ->
forall (AB : Type) (f : A -> G1 (T B)),
bindt f ∘ ret = f
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type H4: Map G1 H5: Pure G1 H6: Mult G1 Applicative0: Applicative G1 A, B: Type f: A -> G1 (T B)
bindt f ∘ ret = f
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type H4: Map G1 H5: Pure G1 H6: Mult G1 Applicative0: Applicative G1 A, B: Type f: A -> G1 (T B)
map join ∘ dist T G1 ∘ map f ∘ ret = f
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type H4: Map G1 H5: Pure G1 H6: Mult G1 Applicative0: Applicative G1 A, B: Type f: A -> G1 (T B)
map join ∘ dist T G1 ∘ (map f ∘ ret) = f
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type H4: Map G1 H5: Pure G1 H6: Mult G1 Applicative0: Applicative G1 A, B: Type f: A -> G1 (T B)
map join ∘ dist T G1 ∘ (ret ∘ map f) = f
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type H4: Map G1 H5: Pure G1 H6: Mult G1 Applicative0: Applicative G1 A, B: Type f: A -> G1 (T B)
map join ∘ dist T G1 ∘ (ret ∘ f) = f
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type H4: Map G1 H5: Pure G1 H6: Mult G1 Applicative0: Applicative G1 A, B: Type f: A -> G1 (T B)
map join ∘ (dist T G1 ∘ ret) ∘ f = f
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type H4: Map G1 H5: Pure G1 H6: Mult G1 Applicative0: Applicative G1 A, B: Type f: A -> G1 (T B)
map join ∘ map ret ∘ f = f
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type H4: Map G1 H5: Pure G1 H6: Mult G1 Applicative0: Applicative G1 A, B: Type f: A -> G1 (T B)
map (join ∘ ret) ∘ f = f
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type H4: Map G1 H5: Pure G1 H6: Mult G1 Applicative0: Applicative G1 A, B: Type f: A -> G1 (T B)
map id ∘ f = f
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type H4: Map G1 H5: Pure G1 H6: Mult G1 Applicative0: Applicative G1 A, B: Type f: A -> G1 (T B)
id ∘ f = f
reflexivity.Qed.(** *** Morphism law *)(******************************************************************)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T
forall (G1G2 : Type -> Type) (H4 : Map G1)
(H5 : Mult G1) (H6 : Pure G1) (H7 : Map G2)
(H8 : Mult G2) (H9 : Pure G2)
(ϕ : forallA : Type, G1 A -> G2 A),
ApplicativeMorphism G1 G2 ϕ ->
forall (AB : Type) (f : A -> G1 (T B)),
ϕ (T B) ∘ bindt f = bindt (ϕ (T B) ∘ f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T
forall (G1G2 : Type -> Type) (H4 : Map G1)
(H5 : Mult G1) (H6 : Pure G1) (H7 : Map G2)
(H8 : Mult G2) (H9 : Pure G2)
(ϕ : forallA : Type, G1 A -> G2 A),
ApplicativeMorphism G1 G2 ϕ ->
forall (AB : Type) (f : A -> G1 (T B)),
ϕ (T B) ∘ bindt f = bindt (ϕ (T B) ∘ f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1, G2: Type -> Type H4: Map G1 H5: Mult G1 H6: Pure G1 H7: Map G2 H8: Mult G2 H9: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ
forall (AB : Type) (f : A -> G1 (T B)),
ϕ (T B) ∘ bindt f = bindt (ϕ (T B) ∘ f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1, G2: Type -> Type H4: Map G1 H5: Mult G1 H6: Pure G1 H7: Map G2 H8: Mult G2 H9: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 (T B)
ϕ (T B) ∘ bindt f = bindt (ϕ (T B) ∘ f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1, G2: Type -> Type H4: Map G1 H5: Mult G1 H6: Pure G1 H7: Map G2 H8: Mult G2 H9: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 (T B)
ϕ (T B) ∘ (map join ∘ dist T G1 ∘ map f) =
map join ∘ dist T G2 ∘ map (ϕ (T B) ∘ f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1, G2: Type -> Type H4: Map G1 H5: Mult G1 H6: Pure G1 H7: Map G2 H8: Mult G2 H9: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 (T B)
ϕ (T B) ∘ map join ∘ dist T G1 ∘ map f =
map join ∘ dist T G2 ∘ map (ϕ (T B) ∘ f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1, G2: Type -> Type H4: Map G1 H5: Mult G1 H6: Pure G1 H7: Map G2 H8: Mult G2 H9: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 (T B)
(funa : T A =>
ϕ (T B) (map join (dist T G1 (map f a)))) =
(funa : T A =>
map join (dist T G2 (map (ϕ (T B) ○ f) a)))
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1, G2: Type -> Type H4: Map G1 H5: Mult G1 H6: Pure G1 H7: Map G2 H8: Mult G2 H9: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 (T B) a: T A
ϕ (T B) (map join (dist T G1 (map f a))) =
map join (dist T G2 (map (ϕ (T B) ○ f) a))
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1, G2: Type -> Type H4: Map G1 H5: Mult G1 H6: Pure G1 H7: Map G2 H8: Mult G2 H9: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 (T B) a: T A
map join (ϕ ((T ∘ T) B) (dist T G1 (map f a))) =
map join (dist T G2 (map (ϕ (T B) ○ f) a))
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1, G2: Type -> Type H4: Map G1 H5: Mult G1 H6: Pure G1 H7: Map G2 H8: Mult G2 H9: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 (T B) a: T A
map join (ϕ (T (T B)) (dist T G1 (map f a))) =
map join (dist T G2 (map (ϕ (T B) ○ f) a))
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1, G2: Type -> Type H4: Map G1 H5: Mult G1 H6: Pure G1 H7: Map G2 H8: Mult G2 H9: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 (T B) a: T A
map join ((ϕ (T (T B)) ∘ dist T G1) (map f a)) =
map join (dist T G2 (map (ϕ (T B) ○ f) a))
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1, G2: Type -> Type H4: Map G1 H5: Mult G1 H6: Pure G1 H7: Map G2 H8: Mult G2 H9: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 (T B) a: T A
map join ((dist T G2 ∘ map (ϕ (T B))) (map f a)) =
map join (dist T G2 (map (ϕ (T B) ○ f) a))
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1, G2: Type -> Type H4: Map G1 H5: Mult G1 H6: Pure G1 H7: Map G2 H8: Mult G2 H9: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 (T B) a: T A
map join (dist T G2 (map (ϕ (T B)) (map f a))) =
map join (dist T G2 (map (ϕ (T B) ○ f) a))
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1, G2: Type -> Type H4: Map G1 H5: Mult G1 H6: Pure G1 H7: Map G2 H8: Mult G2 H9: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 (T B) a: T A
map join (dist T G2 ((map (ϕ (T B)) ∘ map f) a)) =
map join (dist T G2 (map (ϕ (T B) ○ f) a))
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1, G2: Type -> Type H4: Map G1 H5: Mult G1 H6: Pure G1 H7: Map G2 H8: Mult G2 H9: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 (T B) a: T A
map join (dist T G2 (map (ϕ (T B) ∘ f) a)) =
map join (dist T G2 (map (ϕ (T B) ○ f) a))
reflexivity.Qed.(** *** Purity law *)(******************************************************************)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2
forall (AB : Type) (f : A -> G1 (T B)),
bindt (pure ∘ f) = pure ∘ bindt f
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2
forall (AB : Type) (f : A -> G1 (T B)),
bindt (pure ∘ f) = pure ∘ bindt f
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B: Type f: A -> G1 (T B)
bindt (pure ∘ f) = pure ∘ bindt f
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B: Type f: A -> G1 (T B)
map join ∘ dist T (G2 ∘ G1) ∘ map (pure ∘ f) =
pure ∘ (map join ∘ dist T G1 ∘ map f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B: Type f: A -> G1 (T B)
map join ∘ (dist T (G2 ∘ G1) ∘ map (pure ∘ f)) =
pure ∘ (map join ∘ dist T G1 ∘ map f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B: Type f: A -> G1 (T B)
map join ∘ (pure ∘ dist T G1 ∘ map f) =
pure ∘ (map join ∘ dist T G1 ∘ map f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B: Type f: A -> G1 (T B)
map join ∘ pure ∘ dist T G1 ∘ map f =
pure ∘ (map join ∘ dist T G1 ∘ map f)
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B: Type f: A -> G1 (T B)
map join ∘ pure ∘ dist T G1 ∘ map f =
pure ∘ map join ∘ dist T G1 ∘ map f
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B: Type f: A -> G1 (T B)
map join ∘ pure = pure ∘ map join
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B: Type f: A -> G1 (T B)
map (map join) ∘ pure = pure ∘ map join
T: Type -> Type H: Map T H0: Return T H1: Join T H2: ApplicativeDist T H3: Categorical.TraversableMonad.TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H4: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H5: Applicative G2 A, B: Type f: A -> G1 (T B) t: G1 (T (T B))
map (map join) (pure t) = pure (map join t)
nowrewrite app_pure_natural.Qed.(** ** Typeclass Instances *)(******************************************************************)#[export] InstanceTravMon_ToKleisli:
Kleisli.TraversableMonad.TraversableRightPreModule T T :=
{|ktm_bindt1 := @ktm_bindt1_T;
ktm_bindt2 := @ktm_bindt2_T;
ktm_morph := @ktm_morph_T;
|}.#[export] Instance:
Kleisli.TraversableMonad.TraversableMonad T :=
{| ktm_bindt0 := @ktm_bindt0_T;
|}.Endwith_monad.EndDerivedInstances.