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
  CategoricalToKleisli.DecoratedMonad
  CategoricalToKleisli.DecoratedFunctor (cobind_dec).

Import Product.Notations.
Import Kleisli.Monad.Notations.
Import Kleisli.DecoratedTraversableMonad.Notations.
Import Categorical.Monad.Notations.
Import Categorical.TraversableFunctor.Notations.
Import Strength.Notations.

#[local] Generalizable Variables W T G ϕ A B C.

#[local] Tactic Notation "bring" constr(x) "and" constr(y) "together" :=
  change (?f ∘ x ∘ y ∘ ?g) with (f ∘ (x ∘ y) ∘ g).

(** * Kleisli DTMs from Categorical DTMs *)
(**********************************************************************)

(** ** Derived Operations *)
(**********************************************************************)
Module DerivedOperations.

  #[export] Instance Binddt_Categorical
    (W: Type)
    (T: Type -> Type)
    `{Map T}
    `{Decorate W T}
    `{ApplicativeDist T}
    `{Join T}: Binddt W T T :=
  fun (G: Type -> Type) `{Map G} `{Pure G} `{Mult G} (A B: Type)
    (f: W * A -> G (T B)) =>
    map (F := G) join ∘ dist T G ∘ map f ∘ dec T.

End DerivedOperations.

(** ** Derived Instances *)
(**********************************************************************)
Module DerivedInstances.

  Import DerivedOperations.

  Section adapter.

    Context
      `{Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T}.

    Context
      (G1: Type -> Type)
      `{Map G1} `{Pure G1} `{Mult G1} `{! Applicative G1}
      (G2: Type -> Type)
      `{Map G2} `{Pure G2} `{Mult G2} `{! Applicative G2}.

    Definition kcompose_dtm_alt {A B C} :=
      fun `(g: W * B -> G2 (T C))
        `(f: W * A -> G1 (T B))
      => (map (F := G1) ((map (F := G2) (μ))
                          ∘ δ T G2
                          ∘ map (F := T) (g ∘ μ (T := (W ×)))
                          ∘ σ
                          ∘ map (F := (W ×)) (dec T)))
          ∘ σ
          ∘ cobind (W := (W ×)) f.

    
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type

forall (g : W * B -> G2 (T C)) (f : W * A -> G1 (T B)), g ⋆7 f = kcompose_dtm_alt g f
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type

forall (g : W * B -> G2 (T C)) (f : W * A -> G1 (T B)), g ⋆7 f = kcompose_dtm_alt g f
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type
g: W * B -> G2 (T C)
f: W * A -> G1 (T B)

g ⋆7 f = kcompose_dtm_alt g f
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type
g: W * B -> G2 (T C)
f: W * A -> G1 (T B)

(fun '(w, a) => map (binddt (preincr g w)) (f (w, a))) = kcompose_dtm_alt g f
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type
g: W * B -> G2 (T C)
f: W * A -> G1 (T B)

(fun '(w, a) => map (map (μ) ∘ δ T G2 ∘ map (preincr g w) ∘ dec T) (f (w, a))) = kcompose_dtm_alt g f
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type
g: W * B -> G2 (T C)
f: W * A -> G1 (T B)
w: W
a: A

map (map (μ) ∘ δ T G2 ∘ map (preincr g w) ∘ dec T) (f (w, a)) = kcompose_dtm_alt g f (w, a)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type
g: W * B -> G2 (T C)
f: W * A -> G1 (T B)
w: W
a: A

map (map (μ) ∘ δ T G2 ∘ map (preincr g w) ∘ dec T) (f (w, a)) = (map (map (μ) ∘ δ T G2 ∘ map (g ∘ μ) ∘ σ ∘ map (dec T)) ∘ σ ∘ cobind f) (w, a)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type
g: W * B -> G2 (T C)
f: W * A -> G1 (T B)
w: W
a: A

map (map (μ) ∘ δ T G2 ∘ map (preincr g w) ∘ dec T) (f (w, a)) = (map (map (μ) ∘ δ T G2 ∘ map (g ∘ μ) ∘ σ ∘ map (dec T)) ∘ σ) (cobind f (w, a))
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type
g: W * B -> G2 (T C)
f: W * A -> G1 (T B)
w: W
a: A

map (map (μ) ∘ δ T G2 ∘ map (preincr g w) ∘ dec T) (f (w, a)) = (map (map (μ) ∘ δ T G2 ∘ map (g ∘ μ) ∘ σ ∘ map (dec T)) ∘ σ) (w, f (w, a))
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type
g: W * B -> G2 (T C)
f: W * A -> G1 (T B)
w: W
a: A

map (map (μ) ∘ δ T G2 ∘ map (preincr g w) ∘ dec T) (f (w, a)) = map (map (μ) ∘ δ T G2 ∘ map (g ∘ μ) ∘ σ ∘ map (dec T)) (σ (w, f (w, a)))
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type
g: W * B -> G2 (T C)
f: W * A -> G1 (T B)
w: W
a: A

map (map (μ) ∘ δ T G2 ∘ map (preincr g w) ∘ dec T) (f (w, a)) = map (map (μ) ∘ δ T G2 ∘ map (g ∘ μ) ∘ σ ∘ map (dec T)) (map (pair w) (f (w, a)))
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type
g: W * B -> G2 (T C)
f: W * A -> G1 (T B)
w: W
a: A

map (map (μ) ∘ δ T G2 ∘ map (preincr g w) ∘ dec T) (f (w, a)) = (map (map (μ) ∘ δ T G2 ∘ map (g ∘ μ) ∘ σ ∘ map (dec T)) ∘ map (pair w)) (f (w, a))
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type
g: W * B -> G2 (T C)
f: W * A -> G1 (T B)
w: W
a: A

map (map (μ) ∘ δ T G2 ∘ map (preincr g w) ∘ dec T) (f (w, a)) = map (map (μ) ∘ δ T G2 ∘ map (g ∘ μ) ∘ σ ∘ map (dec T) ∘ pair w) (f (w, a))
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type
g: W * B -> G2 (T C)
f: W * A -> G1 (T B)
w: W
a: A

map (μ) ∘ δ T G2 ∘ map (preincr g w) ∘ dec T = map (μ) ∘ δ T G2 ∘ map (g ∘ μ) ∘ σ ∘ map (dec T) ∘ pair w
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type
g: W * B -> G2 (T C)
f: W * A -> G1 (T B)
w: W
a: A
t: T B

(map (μ) ∘ δ T G2 ∘ map (preincr g w) ∘ dec T) t = (map (μ) ∘ δ T G2 ∘ map (g ∘ μ) ∘ σ ∘ map (dec T) ∘ pair w) t
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type
g: W * B -> G2 (T C)
f: W * A -> G1 (T B)
w: W
a: A
t: T B

map (μ) (δ T G2 (map (preincr g w) (dec T t))) = map (μ) (δ T G2 (map (g ○ μ) (σ (map (dec T) (w, t)))))
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type
g: W * B -> G2 (T C)
f: W * A -> G1 (T B)
w: W
a: A
t: T B

map (μ) (δ T G2 (map (preincr g w) (dec T t))) = map (μ) (δ T G2 (map (g ○ μ) (map (pair (id w)) (dec T t))))
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type
g: W * B -> G2 (T C)
f: W * A -> G1 (T B)
w: W
a: A
t: T B

map (μ) ((δ T G2 ∘ map (preincr g w)) (dec T t)) = map (μ) (δ T G2 ((map (g ○ μ) ∘ map (pair (id w))) (dec T t)))
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type
g: W * B -> G2 (T C)
f: W * A -> G1 (T B)
w: W
a: A
t: T B

map (μ) (δ T G2 (map (preincr g w) (dec T t))) = map (μ) (δ T G2 (map (g ○ μ) (map (pair (id w)) (dec T t))))
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type
g: W * B -> G2 (T C)
f: W * A -> G1 (T B)
w: W
a: A
t: T B

map (μ) (δ T G2 (map (preincr g w) (dec T t))) = map (μ) (δ T G2 (map (g ○ μ) (map (pair (id w)) (dec T t))))
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type
g: W * B -> G2 (T C)
f: W * A -> G1 (T B)
w: W
a: A
t: T B

map (μ) (δ T G2 (map (preincr g w) (dec T t))) = map (μ) (δ T G2 ((map (g ○ μ) ∘ map (pair (id w))) (dec T t)))
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type
g: W * B -> G2 (T C)
f: W * A -> G1 (T B)
w: W
a: A
t: T B

map (μ) (δ T G2 (map (preincr g w) (dec T t))) = map (μ) (δ T G2 (map (g ○ μ ∘ pair (id w)) (dec T t)))
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type
g: W * B -> G2 (T C)
f: W * A -> G1 (T B)
w: W
a: A
t: T B

map (μ) (δ T G2 (map (preincr g w) (dec T t))) = map (μ) (δ T G2 (map (fun a : W * B => g (μ (id w, a))) (dec T t)))
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
A, B, C: Type
g: W * B -> G2 (T C)
f: W * A -> G1 (T B)
w: W
a: A
t: T B

preincr g w = (fun a : W * B => g (μ (id w, a)))
now ext [w' b]. Qed. End adapter. Section with_monad. Context `{Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T}.
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
A: Type

binddt (η ∘ extract) = id
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
A: Type

binddt (η ∘ extract) = id
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
A: Type

map (μ) ∘ δ T (fun A : Type => A) ∘ map (η ∘ extract) ∘ dec T = id
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
A: Type

μ ∘ δ T (fun A : Type => A) ∘ map (η ∘ extract) ∘ dec T = id
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
A: Type

μ ∘ id ∘ map (η ∘ extract) ∘ dec T = id
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
A: Type

μ ∘ map (η ∘ extract) ∘ dec T = id
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
A: Type

μ ∘ (map (η) ∘ map extract) ∘ dec T = id
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
A: Type

μ ∘ (map (η) ∘ (map extract ∘ dec T)) = id
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
A: Type

μ ∘ (map (η) ∘ id) = id
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
A: Type

μ ∘ map (η) ∘ id = id
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
A: Type

id ∘ id = id
reflexivity. Qed.
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T

forall (G : Type -> Type) (H5 : Map G) (H6 : Pure G) (H7 : Mult G), Applicative G -> forall (A B : Type) (f : W * A -> G (T B)), binddt f ∘ η = f ∘ η
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T

forall (G : Type -> Type) (H5 : Map G) (H6 : Pure G) (H7 : Mult G), Applicative G -> forall (A B : Type) (f : W * A -> G (T B)), binddt f ∘ η = f ∘ η
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G: Type -> Type
H5: Map G
H6: Pure G
H7: Mult G
Applicative0: Applicative G
A, B: Type
f: W * A -> G (T B)

binddt f ∘ η = f ∘ η
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G: Type -> Type
H5: Map G
H6: Pure G
H7: Mult G
Applicative0: Applicative G
A, B: Type
f: W * A -> G (T B)

map (μ) ∘ δ T G ∘ map f ∘ dec T ∘ η = f ∘ η
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G: Type -> Type
H5: Map G
H6: Pure G
H7: Mult G
Applicative0: Applicative G
A, B: Type
f: W * A -> G (T B)

map (μ) ∘ δ T G ∘ map f ∘ (dec T ∘ η) = f ∘ η
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G: Type -> Type
H5: Map G
H6: Pure G
H7: Mult G
Applicative0: Applicative G
A, B: Type
f: W * A -> G (T B)

map (μ) ∘ δ T G ∘ map f ∘ (η ∘ pair (monoid_unit W)) = f ∘ η
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G: Type -> Type
H5: Map G
H6: Pure G
H7: Mult G
Applicative0: Applicative G
A, B: Type
f: W * A -> G (T B)

map (μ) ∘ δ T G ∘ map f ∘ η ∘ pair (monoid_unit W) = f ∘ η
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G: Type -> Type
H5: Map G
H6: Pure G
H7: Mult G
Applicative0: Applicative G
A, B: Type
f: W * A -> G (T B)

map (μ) ∘ δ T G ∘ (map f ∘ η) ∘ pair (monoid_unit W) = f ∘ η
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G: Type -> Type
H5: Map G
H6: Pure G
H7: Mult G
Applicative0: Applicative G
A, B: Type
f: W * A -> G (T B)

map (μ) ∘ δ T G ∘ (η ∘ map f) ∘ pair (monoid_unit W) = f ∘ η
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G: Type -> Type
H5: Map G
H6: Pure G
H7: Mult G
Applicative0: Applicative G
A, B: Type
f: W * A -> G (T B)

map (μ) ∘ δ T G ∘ (η ∘ f) ∘ pair (monoid_unit W) = f ∘ η
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G: Type -> Type
H5: Map G
H6: Pure G
H7: Mult G
Applicative0: Applicative G
A, B: Type
f: W * A -> G (T B)

map (μ) ∘ δ T G ∘ η ∘ f ∘ pair (monoid_unit W) = f ∘ η
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G: Type -> Type
H5: Map G
H6: Pure G
H7: Mult G
Applicative0: Applicative G
A, B: Type
f: W * A -> G (T B)

map (μ) ∘ (δ T G ∘ η) ∘ f ∘ pair (monoid_unit W) = f ∘ η
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G: Type -> Type
H5: Map G
H6: Pure G
H7: Mult G
Applicative0: Applicative G
A, B: Type
f: W * A -> G (T B)

map (μ) ∘ map (η) ∘ f ∘ pair (monoid_unit W) = f ∘ η
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G: Type -> Type
H5: Map G
H6: Pure G
H7: Mult G
Applicative0: Applicative G
A, B: Type
f: W * A -> G (T B)

map (μ ∘ η) ∘ f ∘ pair (monoid_unit W) = f ∘ η
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G: Type -> Type
H5: Map G
H6: Pure G
H7: Mult G
Applicative0: Applicative G
A, B: Type
f: W * A -> G (T B)

map id ∘ f ∘ pair (monoid_unit W) = f ∘ η
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G: Type -> Type
H5: Map G
H6: Pure G
H7: Mult G
Applicative0: Applicative G
A, B: Type
f: W * A -> G (T B)

id ∘ f ∘ pair (monoid_unit W) = f ∘ η
reflexivity. Qed. Section binddt_binddt. Context (G1: Type -> Type) `{Map G1} `{Pure G1} `{Mult G1} `{! Applicative G1} (G2: Type -> Type) `{Map G2} `{Pure G2} `{Mult G2} `{! Applicative G2} `(g: W * B -> G2 (T C)) `(f: W * A -> G1 (T B)). #[local] Arguments map (F)%function_scope {Map} {A B}%type_scope f%function_scope _. #[local] Arguments dist F%function_scope {ApplicativeDist} G%function_scope {H H0 H1} (A)%type_scope _. #[local] Arguments dec {E}%type_scope F%function_scope {Decorate} (A)%type_scope _. #[local] Arguments join {T}%function_scope {Join} (A)%type_scope _.
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)

map G1 (binddt g) ∘ binddt f = binddt (g ⋆7 f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)

map G1 (binddt g) ∘ binddt f = binddt (g ⋆7 f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)

map G1 (binddt g) ∘ binddt f = binddt (kcompose_dtm_alt G1 G2 g f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)

map G1 (binddt g) ∘ binddt f = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
(* ********** *)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g ∘ dec T B) ∘ (map G1 (μ B) ∘ δ T G1 (T B) ∘ map T f ∘ dec T A) = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g ∘ dec T B) ∘ (map G1 (μ B) ∘ δ T G1 (T B) ∘ map T f ∘ dec T A) = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g ∘ dec T B) ∘ (map G1 (μ B) ∘ δ T G1 (T B) ∘ map T f ∘ dec T A) = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
(* Normalize associativity *)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g ∘ dec T B) ∘ map G1 (μ B) ∘ δ T G1 (T B) ∘ map T f ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
(* Bring together <<map G1 (dec T B)>> and <<map G1 (μ B)>> *)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map G1 (dec T B) ∘ map G1 (μ B) ∘ δ T G1 (T B) ∘ map T f ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ (map G1 (dec T B) ∘ map G1 (μ B)) ∘ δ T G1 (T B) ∘ map T f ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map G1 (dec T B ∘ μ B) ∘ δ T G1 (T B) ∘ map T f ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map G1 (μ (W * B) ∘ map T (shift T) ∘ dec T (T (W * B)) ∘ map T (dec T B)) ∘ δ T G1 (T B) ∘ map T f ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
(* Move <<dec T (T (W * B))>> towards <<dec T A>> *)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map G1 (μ (W * B) ∘ map T (shift T) ∘ (dec T (T (W * B)) ∘ map T (dec T B))) ∘ δ T G1 (T B) ∘ map T f ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map G1 (μ (W * B) ∘ map T (shift T) ∘ (map (T ○ prod W) (dec T B) ∘ dec T (T B))) ∘ δ T G1 (T B) ∘ map T f ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map G1 (μ (W * B) ∘ map T (shift T) ∘ map (T ○ prod W) (dec T B) ∘ dec T (T B)) ∘ δ T G1 (T B) ∘ map T f ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ (map G1 (μ (W * B) ∘ map T (shift T) ∘ map (T ○ prod W) (dec T B)) ∘ map G1 (dec T (T B))) ∘ δ T G1 (T B) ∘ map T f ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map G1 (μ (W * B) ∘ map T (shift T) ∘ map (T ○ prod W) (dec T B)) ∘ map G1 (dec T (T B)) ∘ δ T G1 (T B) ∘ map T f ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map G1 (μ (W * B) ∘ map T (shift T) ∘ map (T ○ prod W) (dec T B)) ∘ (map G1 (dec T (T B)) ∘ δ T G1 (T B)) ∘ map T f ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map G1 (μ (W * B) ∘ map T (shift T) ∘ map (T ○ prod W) (dec T B)) ∘ (δ T G1 (W * T B) ∘ map T (σ) ∘ dec T (G1 (T B))) ∘ map T f ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map G1 (μ (W * B) ∘ map T (shift T) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ dec T (G1 (T B)) ∘ map T f ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map G1 (μ (W * B) ∘ map T (shift T) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ (dec T (G1 (T B)) ∘ map T f) ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map G1 (μ (W * B) ∘ map T (shift T) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ (map (T ○ prod W) f ∘ dec T (W * A)) ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map G1 (μ (W * B) ∘ map T (shift T) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ (map (T ∘ prod W) f ∘ dec T (W * A)) ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map G1 (μ (W * B) ∘ map T (shift T) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ dec T (W * A) ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map G1 (μ (W * B) ∘ map T (shift T) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ (dec T (W * A) ∘ dec T A) = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
(* Change decorate-then-decorate into decorate-then-duplicate *)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map G1 (μ (W * B) ∘ map T (shift T) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ (map T cojoin ∘ dec T A) = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map G1 (μ (W * B) ∘ map T (shift T) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
(* Now move <<μ B>> towards <<μ C>> *)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map G1 (μ (W * B) ∘ map T (map T (uncurry incr) ∘ σ) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map G1 (μ (W * B) ∘ map T (map T (μ B) ∘ σ) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map G1 (μ (W * B) ∘ (map T (map T (μ B) ∘ σ) ∘ map (T ○ prod W) (dec T B))) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ (map G1 (μ (W * B)) ∘ map G1 (map T (map T (μ B) ∘ σ) ∘ map (T ○ prod W) (dec T B))) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map G1 (μ (W * B)) ∘ map G1 (map T (map T (μ B) ∘ σ) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g ∘ μ (W * B)) ∘ map G1 (map T (map T (μ B) ∘ σ) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ (map T g ∘ μ (W * B))) ∘ map G1 (map T (map T (μ B) ∘ σ) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ (μ (G2 (T C)) ∘ map (T ∘ T) g)) ∘ map G1 (map T (map T (μ B) ∘ σ) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ μ (G2 (T C)) ∘ map (T ∘ T) g) ∘ map G1 (map T (map T (μ B) ∘ σ) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ (δ T G2 (T C) ∘ μ (G2 (T C))) ∘ map (T ∘ T) g) ∘ map G1 (map T (map T (μ B) ∘ σ) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ (map G2 (μ (T C)) ∘ δ T G2 (T (T C)) ∘ map T (δ T G2 (T C))) ∘ map (T ∘ T) g) ∘ map G1 (map T (map T (μ B) ∘ σ) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ map G2 (μ (T C)) ∘ δ T G2 (T (T C)) ∘ map T (δ T G2 (T C)) ∘ map (T ∘ T) g) ∘ map G1 (map T (map T (μ B) ∘ σ) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C ∘ μ (T C)) ∘ δ T G2 (T (T C)) ∘ map T (δ T G2 (T C)) ∘ map (T ∘ T) g) ∘ map G1 (map T (map T (μ B) ∘ σ) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
(* Change map-join-then-join into join-then-join *)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C ∘ map T (μ C)) ∘ δ T G2 (T (T C)) ∘ map T (δ T G2 (T C)) ∘ map (T ∘ T) g) ∘ map G1 (map T (map T (μ B) ∘ σ) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
(* Now rearrange to match RHS *)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ map G2 (map T (μ C)) ∘ δ T G2 (T (T C)) ∘ map T (δ T G2 (T C)) ∘ map (T ∘ T) g) ∘ map G1 (map T (map T (μ B) ∘ σ) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C) ∘ (map G2 (map T (μ C)) ∘ δ T G2 (T (T C)) ∘ map T (δ T G2 (T C)) ∘ map (T ∘ T) g)) ∘ map G1 (map T (map T (μ B) ∘ σ) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map G1 (map G2 (μ C)) ∘ map G1 (map G2 (map T (μ C)) ∘ δ T G2 (T (T C)) ∘ map T (δ T G2 (T C)) ∘ map (T ∘ T) g) ∘ map G1 (map T (map T (μ B) ∘ σ) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (map G2 (map T (μ C)) ∘ δ T G2 (T (T C)) ∘ map T (δ T G2 (T C)) ∘ map (T ∘ T) g) ∘ map G1 (map T (map T (μ B) ∘ σ) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (map (G2 ∘ T) (μ C) ∘ δ T G2 (T (T C)) ∘ map T (δ T G2 (T C)) ∘ map (T ∘ T) g) ∘ map G1 (map T (map T (μ B) ∘ σ) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C) ∘ map (T ○ G2) (μ C) ∘ map T (δ T G2 (T C)) ∘ map (T ∘ T) g) ∘ map G1 (map T (map T (μ B) ∘ σ) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C) ∘ map T (map G2 (μ C)) ∘ map T (δ T G2 (T C)) ∘ map (T ∘ T) g) ∘ map G1 (map T (map T (μ B) ∘ σ) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C) ∘ (map T (map G2 (μ C)) ∘ map T (δ T G2 (T C))) ∘ map (T ∘ T) g) ∘ map G1 (map T (map T (μ B) ∘ σ) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C) ∘ map T (map G2 (μ C) ∘ δ T G2 (T C)) ∘ map (T ∘ T) g) ∘ map G1 (map T (map T (μ B) ∘ σ) ∘ map (T ○ prod W) (dec T B)) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C) ∘ map T (map G2 (μ C) ∘ δ T G2 (T C)) ∘ map (T ∘ T) g) ∘ map G1 (map T (map T (μ B) ∘ σ) ∘ map T (map (prod W) (dec T B))) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C) ∘ map T (map G2 (μ C) ∘ δ T G2 (T C)) ∘ map (T ∘ T) g) ∘ map G1 (map T (map T (μ B) ∘ σ ∘ map (prod W) (dec T B))) ∘ δ T G1 (W * T B) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C) ∘ map T (map G2 (μ C) ∘ δ T G2 (T C)) ∘ map (T ∘ T) g) ∘ (map G1 (map T (map T (μ B) ∘ σ ∘ map (prod W) (dec T B))) ∘ δ T G1 (W * T B)) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C) ∘ map T (map G2 (μ C) ∘ δ T G2 (T C)) ∘ map (T ∘ T) g) ∘ (map (G1 ○ T) (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ δ T G1 (W * T B)) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C) ∘ map T (map G2 (μ C) ∘ δ T G2 (T C)) ∘ map (T ∘ T) g) ∘ (δ T G1 (T (W * B)) ∘ map (T ○ G1) (map T (μ B) ∘ σ ∘ map (prod W) (dec T B))) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C) ∘ map T (map G2 (μ C) ∘ δ T G2 (T C)) ∘ map (T ∘ T) g) ∘ δ T G1 (T (W * B)) ∘ map (T ○ G1) (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C) ∘ map T (map G2 (μ C) ∘ δ T G2 (T C)) ∘ map T (map T g)) ∘ δ T G1 (T (W * B)) ∘ map (T ○ G1) (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C) ∘ (map T (map G2 (μ C) ∘ δ T G2 (T C)) ∘ map T (map T g))) ∘ δ T G1 (T (W * B)) ∘ map (T ○ G1) (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C) ∘ map T (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)) ∘ δ T G1 (T (W * B)) ∘ map (T ○ G1) (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ (map G1 (δ T G2 (T C)) ∘ map G1 (map T (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g))) ∘ δ T G1 (T (W * B)) ∘ map (T ○ G1) (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C)) ∘ map G1 (map T (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)) ∘ δ T G1 (T (W * B)) ∘ map (T ○ G1) (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C)) ∘ map (G1 ○ T) (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ δ T G1 (T (W * B)) ∘ map (T ○ G1) (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C)) ∘ (map (G1 ○ T) (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ δ T G1 (T (W * B))) ∘ map (T ○ G1) (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C)) ∘ (δ T G1 (G2 (T C)) ∘ map (T ○ G1) (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g)) ∘ map (T ○ G1) (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C)) ∘ map (T ○ G1) (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map (T ○ G1) (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C)) ∘ (map (T ○ G1) (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g) ∘ map (T ○ G1) (map T (μ B) ∘ σ ∘ map (prod W) (dec T B))) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C)) ∘ map (T ○ G1) (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g ∘ (map T (μ B) ∘ σ ∘ map (prod W) (dec T B))) ∘ map T (σ) ∘ map (T ∘ prod W) f ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C)) ∘ map (T ○ G1) (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g ∘ (map T (μ B) ∘ σ ∘ map (prod W) (dec T B))) ∘ map T (σ) ∘ map T (map (prod W) f) ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C)) ∘ map T (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g ∘ (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)))) ∘ map T (σ) ∘ map T (map (prod W) f) ∘ map T cojoin ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C)) ∘ map T (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g ∘ (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)))) ∘ map T (σ) ∘ (map T (map (prod W) f) ∘ map T cojoin) ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C)) ∘ map T (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g ∘ (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)))) ∘ map T (σ) ∘ map T (map (prod W) f ∘ cojoin) ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C)) ∘ map T (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g ∘ (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)))) ∘ (map T (σ) ∘ map T (map (prod W) f ∘ cojoin)) ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C)) ∘ map T (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g ∘ (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)))) ∘ map T (σ ∘ (map (prod W) f ∘ cojoin)) ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C)) ∘ (map T (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g ∘ (map T (μ B) ∘ σ ∘ map (prod W) (dec T B)))) ∘ map T (σ ∘ (map (prod W) f ∘ cojoin))) ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C)) ∘ map T (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g ∘ (map T (μ B) ∘ σ ∘ map (prod W) (dec T B))) ∘ (σ ∘ (map (prod W) f ∘ cojoin))) ∘ dec T A = binddt (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f)
(* ********** *)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C)) ∘ map T (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g ∘ (map T (μ B) ∘ σ ∘ map (prod W) (dec T B))) ∘ (σ ∘ (map (prod W) f ∘ cojoin))) ∘ dec T A = map (G1 ∘ G2) (μ C) ∘ δ T (G1 ∘ G2) (T C) ∘ map T (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f) ∘ dec T A
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C)) ∘ map T (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g ∘ (map T (μ B) ∘ σ ∘ map (prod W) (dec T B))) ∘ (σ ∘ (map (prod W) f ∘ cojoin))) ∘ dec T A = map (G1 ∘ G2) (μ C) ∘ (map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C))) ∘ map T (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f) ∘ dec T A
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C)) ∘ map T (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T g ∘ map T (μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ map (prod W) f ∘ cojoin) ∘ dec T A = map (G1 ∘ G2) (μ C) ∘ (map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C))) ∘ map T (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f) ∘ dec T A
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C)) ∘ map T (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ (map T g ∘ map T (μ B)) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ map (prod W) f ∘ cojoin) ∘ dec T A = map (G1 ∘ G2) (μ C) ∘ (map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C))) ∘ map T (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f) ∘ dec T A
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C)) ∘ map T (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ map (prod W) f ∘ cojoin) ∘ dec T A = map (G1 ∘ G2) (μ C) ∘ (map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C))) ∘ map T (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ cobind f) ∘ dec T A
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (G1 ∘ G2) (μ C) ∘ map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C)) ∘ map T (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ map (prod W) f ∘ cojoin) ∘ dec T A = map (G1 ∘ G2) (μ C) ∘ (map G1 (δ T G2 (T C)) ∘ δ T G1 (G2 (T C))) ∘ map T (map G1 (map G2 (μ C) ∘ δ T G2 (T C) ∘ map T (g ∘ μ B) ∘ σ ∘ map (prod W) (dec T B)) ∘ σ ∘ (map (prod W) f ∘ cojoin)) ∘ dec T A
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2
map (prod W) f ∘ cojoin = cobind f
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2

map (prod W) f ∘ cojoin = cobind f
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1: Type -> Type
H5: Map G1
H6: Pure G1
H7: Mult G1
Applicative0: Applicative G1
G2: Type -> Type
H8: Map G2
H9: Pure G2
H10: Mult G2
Applicative1: Applicative G2
B, C: Type
g: W * B -> G2 (T C)
A: Type
f: W * A -> G1 (T B)
H11: Functor G1
H12: Functor G2
w: W
a: A

(map (prod W) f ∘ cojoin) (w, a) = cobind f (w, a)
reflexivity. Qed. End binddt_binddt.
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T

forall (G1 G2 : Type -> Type) (H5 : Map G1) (H6 : Mult G1) (H7 : Pure G1) (H8 : Map G2) (H9 : Mult G2) (H10 : Pure G2) (ϕ : forall A : Type, G1 A -> G2 A), ApplicativeMorphism G1 G2 ϕ -> forall (A B : Type) (f : W * A -> G1 (T B)), ϕ (T B) ∘ binddt f = binddt (ϕ (T B) ∘ f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T

forall (G1 G2 : Type -> Type) (H5 : Map G1) (H6 : Mult G1) (H7 : Pure G1) (H8 : Map G2) (H9 : Mult G2) (H10 : Pure G2) (ϕ : forall A : Type, G1 A -> G2 A), ApplicativeMorphism G1 G2 ϕ -> forall (A B : Type) (f : W * A -> G1 (T B)), ϕ (T B) ∘ binddt f = binddt (ϕ (T B) ∘ f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1, G2: Type -> Type
H5: Map G1
H6: Mult G1
H7: Pure G1
H8: Map G2
H9: Mult G2
H10: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
morph: ApplicativeMorphism G1 G2 ϕ

forall (A B : Type) (f : W * A -> G1 (T B)), ϕ (T B) ∘ binddt f = binddt (ϕ (T B) ∘ f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1, G2: Type -> Type
H5: Map G1
H6: Mult G1
H7: Pure G1
H8: Map G2
H9: Mult G2
H10: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
morph: ApplicativeMorphism G1 G2 ϕ
A, B: Type
f: W * A -> G1 (T B)

ϕ (T B) ∘ binddt f = binddt (ϕ (T B) ∘ f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1, G2: Type -> Type
H5: Map G1
H6: Mult G1
H7: Pure G1
H8: Map G2
H9: Mult G2
H10: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
morph: ApplicativeMorphism G1 G2 ϕ
A, B: Type
f: W * A -> G1 (T B)

ϕ (T B) ∘ (map (μ) ∘ δ T G1 ∘ map f ∘ dec T) = map (μ) ∘ δ T G2 ∘ map (ϕ (T B) ∘ f) ∘ dec T
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1, G2: Type -> Type
H5: Map G1
H6: Mult G1
H7: Pure G1
H8: Map G2
H9: Mult G2
H10: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
morph: ApplicativeMorphism G1 G2 ϕ
A, B: Type
f: W * A -> G1 (T B)

ϕ (T B) ∘ map (μ) ∘ δ T G1 ∘ map f ∘ dec T = map (μ) ∘ δ T G2 ∘ map (ϕ (T B) ∘ f) ∘ dec T
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1, G2: Type -> Type
H5: Map G1
H6: Mult G1
H7: Pure G1
H8: Map G2
H9: Mult G2
H10: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
morph: ApplicativeMorphism G1 G2 ϕ
A, B: Type
f: W * A -> G1 (T B)

ϕ (T B) ∘ map (μ) ∘ δ T G1 ∘ map f = map (μ) ∘ δ T G2 ∘ map (ϕ (T B) ∘ f)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1, G2: Type -> Type
H5: Map G1
H6: Mult G1
H7: Pure G1
H8: Map G2
H9: Mult G2
H10: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
morph: ApplicativeMorphism G1 G2 ϕ
A, B: Type
f: W * A -> G1 (T B)

(fun a : T (W * A) => ϕ (T B) (map (μ) (δ T G1 (map f a)))) = (fun a : T (W * A) => map (μ) (δ T G2 (map (ϕ (T B) ○ f) a)))
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1, G2: Type -> Type
H5: Map G1
H6: Mult G1
H7: Pure G1
H8: Map G2
H9: Mult G2
H10: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
morph: ApplicativeMorphism G1 G2 ϕ
A, B: Type
f: W * A -> G1 (T B)
t: T (W * A)

ϕ (T B) (map (μ) (δ T G1 (map f t))) = map (μ) (δ T G2 (map (ϕ (T B) ○ f) t))
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1, G2: Type -> Type
H5: Map G1
H6: Mult G1
H7: Pure G1
H8: Map G2
H9: Mult G2
H10: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
morph: ApplicativeMorphism G1 G2 ϕ
A, B: Type
f: W * A -> G1 (T B)
t: T (W * A)

map (μ) (ϕ (T (T B)) (δ T G1 (map f t))) = map (μ) (δ T G2 (map (ϕ (T B) ○ f) t))
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1, G2: Type -> Type
H5: Map G1
H6: Mult G1
H7: Pure G1
H8: Map G2
H9: Mult G2
H10: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
morph: ApplicativeMorphism G1 G2 ϕ
A, B: Type
f: W * A -> G1 (T B)
t: T (W * A)

ϕ (T (T B)) (δ T G1 (map f t)) = δ T G2 (map (ϕ (T B) ○ f) t)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1, G2: Type -> Type
H5: Map G1
H6: Mult G1
H7: Pure G1
H8: Map G2
H9: Mult G2
H10: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
morph: ApplicativeMorphism G1 G2 ϕ
A, B: Type
f: W * A -> G1 (T B)
t: T (W * A)

(ϕ (T (T B)) ∘ δ T G1) (map f t) = δ T G2 (map (ϕ (T B) ○ f) t)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1, G2: Type -> Type
H5: Map G1
H6: Mult G1
H7: Pure G1
H8: Map G2
H9: Mult G2
H10: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
morph: ApplicativeMorphism G1 G2 ϕ
A, B: Type
f: W * A -> G1 (T B)
t: T (W * A)

(δ T G2 ∘ map (ϕ (T B))) (map f t) = δ T G2 (map (ϕ (T B) ○ f) t)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1, G2: Type -> Type
H5: Map G1
H6: Mult G1
H7: Pure G1
H8: Map G2
H9: Mult G2
H10: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
morph: ApplicativeMorphism G1 G2 ϕ
A, B: Type
f: W * A -> G1 (T B)
t: T (W * A)

δ T G2 (map (ϕ (T B)) (map f t)) = δ T G2 (map (ϕ (T B) ○ f) t)
W: Type
T: Type -> Type
op: Monoid_op W
unit0: Monoid_unit W
H: Map T
H0: Return T
H1: Join T
H2: Decorate W T
H3: ApplicativeDist T
H4: Categorical.DecoratedTraversableMonad.DecoratedTraversableMonad W T
G1, G2: Type -> Type
H5: Map G1
H6: Mult G1
H7: Pure G1
H8: Map G2
H9: Mult G2
H10: Pure G2
ϕ: forall A : Type, G1 A -> G2 A
morph: ApplicativeMorphism G1 G2 ϕ
A, B: Type
f: W * A -> G1 (T B)
t: T (W * A)

δ T G2 ((map (ϕ (T B)) ∘ map f) t) = δ T G2 (map (ϕ (T B) ○ f) t)
now rewrite (fun_map_map (F := T)). Qed. (** ** Typeclass Instances *) (******************************************************************) #[export] Instance: Kleisli.DecoratedTraversableMonad.DecoratedTraversableRightPreModule W T T := {| kdtm_binddt1 := @kdtm_binddt1_T; kdtm_binddt2 := @kdtm_binddt2_T; kdtm_morph := @kdtm_morph_T; |}. #[export] Instance: Kleisli.DecoratedTraversableMonad.DecoratedTraversableMonad W T := {| kdtm_binddt0 := @kdtm_binddt0_T; kdtm_monoid := dmon_monoid; |}. End with_monad. End DerivedInstances.