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.DecoratedTraversableFunctor
Classes.Categorical.Monad
Classes.Categorical.DecoratedMonad
Classes.Monoid
Categories.DecoratedFunctor
Categories.TraversableFunctor.#[local] Generalizable VariablesW T F U G X Y ϕ op zero.Import TraversableFunctor.Notations.Import Monad.Notations.Import Strength.Notations.Import Product.Notations.Import Monoid.Notations.#[local] Arguments map F%function_scope {Map}
{A B}%type_scope f%function_scope _.#[local] Arguments join T%function_scope {Join}
{A}%type_scope _.(** * Monoid Structure of Decorated Traversable Functors *)(**********************************************************************)SectionDecoratedTraversableFunctor_monoid.Context
`{@Monoid W op zero}.Sectionidentity.Existing InstanceDecoratedFunctor_zero.Existing InstanceTraversable_I.(** ** The Identity Functor is Decorated Traversable *)(******************************************************************)#[program] InstanceDecoratedTraversable_I:
DecoratedTraversableFunctor W (funA => A).Remove Hints DecoratedFunctor_zero: typeclass_instances.Endidentity.(** ** Decorated Traversable Functors are Closed under Composition *)(********************************************************************)Sectioncompose.#[local] Set Keyed Unification.Context
`{Monoid W}
(U T: Type -> Type)
`{DecoratedTraversableFunctor W T}
`{DecoratedTraversableFunctor W U}.(** Push the applicative wire underneath a <<shift>> operation *)
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U
forall (A : Type) (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G),
Applicative G ->
δ T G ∘ map T (σ) ∘ shift T =
map G (shift T) ∘ σ ∘ map (prod W) (δ T G ∘ map T (σ))
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U
forall (A : Type) (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G),
Applicative G ->
δ T G ∘ map T (σ) ∘ shift T =
map G (shift T) ∘ σ ∘ map (prod W) (δ T G ∘ map T (σ))
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G
δ T G ∘ map T (σ) ∘ shift T =
map G (shift T) ∘ σ ∘ map (prod W) (δ T G ∘ map T (σ))
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G
δ T G ∘ map T (σ) ∘ (map T (uncurry incr) ∘ σ) =
map G (map T (uncurry incr) ∘ σ) ∘ σ
∘ map (prod W) (δ T G ∘ map T (σ))
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
(δ T G ∘ map T (σ) ∘ (map T (uncurry incr) ∘ σ))
(w, t) =
(map G (map T (uncurry incr) ∘ σ) ∘ σ
∘ map (prod W) (δ T G ∘ map T (σ))) (w, t)
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
δ T G
(map T (σ) (map T (uncurry incr) (map T (pair w) t))) =
map G (map T (uncurry incr) ○ σ)
(map G (pair w) (δ T G (map T (σ) t)))
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
δ T G
(map T (σ)
((map T (uncurry incr) ∘ map T (pair w)) t)) =
map G (map T (uncurry incr) ○ σ)
(map G (pair w) (δ T G (map T (σ) t)))
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
δ T G (map T (σ) (map T (uncurry incr ∘ pair w) t)) =
map G (map T (uncurry incr) ○ σ)
(map G (pair w) (δ T G (map T (σ) t)))
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
δ T G ((map T (σ) ∘ map T (uncurry incr ∘ pair w)) t) =
map G (map T (uncurry incr) ○ σ)
(map G (pair w) (δ T G (map T (σ) t)))
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
δ T G (map T (σ ∘ (uncurry incr ∘ pair w)) t) =
map G (map T (uncurry incr) ○ σ)
(map G (pair w) (δ T G (map T (σ) t)))
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
δ T G (map T (σ ∘ (uncurry incr ∘ pair w)) t) =
(map G (map T (uncurry incr) ○ σ) ∘ map G (pair w))
(δ T G (map T (σ) t))
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
δ T G (map T (σ ∘ (uncurry incr ∘ pair w)) t) =
map G (map T (uncurry incr) ○ σ ∘ pair w)
(δ T G (map T (σ) t))
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
δ T G (map T (σ ∘ uncurry incr ∘ pair w) t) =
map G (map T (uncurry incr) ○ σ ∘ pair w)
(δ T G (map T (σ) t))
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
δ T G (map T (σ ∘ join (prod W) ∘ pair w) t) =
map G (map T (join (prod W)) ○ σ ∘ pair w)
(δ T G (map T (σ) t))
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
δ T G
(map T
(map G (join (prod W)) ∘ σ ∘ map (prod W) (σ)
∘ pair w) t) =
map G (map T (join (prod W)) ○ σ ∘ pair w)
(δ T G (map T (σ) t))
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
δ T G
((map T (map G (join (prod W)))
∘ map T (σ ∘ map (prod W) (σ) ∘ pair w)) t) =
map G (map T (join (prod W)) ○ σ ∘ pair w)
(δ T G (map T (σ) t))
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
δ T G
((map (T ∘ G) (join (prod W))
∘ map T (σ ∘ map (prod W) (σ) ∘ pair w)) t) =
map G (map T (join (prod W)) ○ σ ∘ pair w)
(δ T G (map T (σ) t))
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
(δ T G ∘ map (T ∘ G) (join (prod W)))
(map T (σ ∘ map (prod W) (σ) ∘ pair w) t) =
map G (map T (join (prod W)) ○ σ ∘ pair w)
(δ T G (map T (σ) t))
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
(map (G ○ T) (join (prod W)) ∘ δ T G)
(map T (σ ∘ map (prod W) (σ) ∘ pair w) t) =
map G (map T (join (prod W)) ○ σ ∘ pair w)
(δ T G (map T (σ) t))
(* now focus on the RHS *)
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
(map (G ○ T) (join (prod W)) ∘ δ T G)
(map T (σ ∘ map (prod W) (σ) ∘ pair w) t) =
map G (map T (join (prod W)) ○ σ ∘ pair w)
(δ T G (map T (σ) t))
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
(map (G ○ T) (join (prod W)) ∘ δ T G)
(map T (σ ∘ map (prod W) (σ) ∘ pair w) t) =
map G (map T (join (prod W)) ∘ (σ ∘ pair w))
(δ T G (map T (σ) t))
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
(map (G ○ T) (join (prod W)) ∘ δ T G)
(map T (σ ∘ map (prod W) (σ) ∘ pair w) t) =
map G (map T (join (prod W)) ∘ map T (pair w))
(δ T G (map T (σ) t))
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
(map (G ○ T) (join (prod W)) ∘ δ T G)
(map T (σ ∘ map (prod W) (σ) ∘ pair w) t) =
(map G (map T (join (prod W)))
∘ map G (map T (pair w))) (δ T G (map T (σ) t))
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
(map (G ○ T) (join (prod W)) ∘ δ T G)
(map T (σ ∘ map (prod W) (σ) ∘ pair w) t) =
(map G (map T (join (prod W)))
∘ map G (map T (pair w)) ∘ δ T G) (map T (σ) t)
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
(map (G ○ T) (join (prod W)) ∘ δ T G)
(map T (σ ∘ map (prod W) (σ) ∘ pair w) t) =
(map G (map T (join (prod W)))
∘ (map G (map T (pair w)) ∘ δ T G)) (map T (σ) t)
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
(map (G ○ T) (join (prod W)) ∘ δ T G)
(map T (σ ∘ map (prod W) (σ) ∘ pair w) t) =
(map (G ∘ T) (join (prod W))
∘ (δ T G ∘ map (T ○ G) (pair w))) (map T (σ) t)
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
map (G ○ T) (join (prod W))
(δ T G
(map T
(funa : W * G A =>
σ (map (prod W) (σ) (w, a))) t)) =
map (G ○ T) (join (prod W))
(δ T G (map (T ○ G) (pair w) (map T (σ) t)))
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G w: W t: T (W * G A)
map (G ○ T) (join (prod W))
(δ T G
(map T
(funa : W * G A =>
σ (map (prod W) (σ) (w, a))) t)) =
map (G ○ T) (join (prod W))
(δ T G ((map (T ○ G) (pair w) ∘ map T (σ)) t))
nowrewrite (fun_map_map (F := T)).Qed.(** Push the applicative wire underneath a <<dec (U∘T)>> operation *)
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U
forall (A : Type) (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G),
Applicative G ->
δ U G ∘ map U (σ ∘ map (prod W) (δ T G ∘ map T (σ)))
∘ (dec U ∘ map U (dec T)) =
map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U
forall (A : Type) (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G),
Applicative G ->
δ U G ∘ map U (σ ∘ map (prod W) (δ T G ∘ map T (σ)))
∘ (dec U ∘ map U (dec T)) =
map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G
δ U G ∘ map U (σ ∘ map (prod W) (δ T G ∘ map T (σ)))
∘ (dec U ∘ map U (dec T)) =
map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G
δ U G ∘ map U (σ ∘ map (prod W) (δ T G ∘ map T (σ)))
∘ (map (U ○ prod W) (dec T) ∘ dec U) =
map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G
δ U G
∘ (map U (σ ∘ map (prod W) (δ T G ∘ map T (σ)))
∘ map (U ○ prod W) (dec T)) ∘ dec U =
map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G
δ U G
∘ map U
(σ ∘ map (prod W) (δ T G ∘ map T (σ))
∘ map (prod W) (dec T)) ∘ dec U =
map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G
δ U G
∘ (map U
(σ
∘ (map (prod W) (δ T G ∘ map T (σ))
∘ map (prod W) (dec T))) ∘ dec U) =
map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G
δ U G
∘ (map U
(σ ∘ map (prod W) (δ T G ∘ map T (σ) ∘ dec T))
∘ dec U) =
map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G
δ U G
∘ (map U (σ ∘ map (prod W) (map G (dec T) ∘ δ T G))
∘ dec U) =
map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G
δ U G
∘ (map U (σ)
∘ map U (map (prod W) (map G (dec T) ∘ δ T G))
∘ dec U) =
map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G
δ U G
∘ (map U (σ)
∘ map (U ∘ prod W) (map G (dec T) ∘ δ T G) ∘ dec U) =
map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G
δ U G
∘ (map U (σ)
∘ (map (U ∘ prod W) (map G (dec T) ∘ δ T G) ∘ dec U)) =
map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G
δ U G
∘ (map U (σ) ∘ (dec U ∘ map U (map G (dec T) ∘ δ T G))) =
map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G
δ U G ∘ map U (σ) ∘ dec U
∘ map U (map G (dec T) ∘ δ T G) =
map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G
map G (dec U) ∘ δ U G ∘ map U (map G (dec T) ∘ δ T G) =
map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G
map G (dec U) ∘ δ U G
∘ (map U (map G (dec T)) ∘ map U (δ T G)) =
map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G
map G (dec U) ∘ δ U G ∘ map U (map G (dec T))
∘ map U (δ T G) =
map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G
map G (dec U) ∘ δ U G ∘ map (U ∘ G) (dec T)
∘ map U (δ T G) =
map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G
map G (dec U) ∘ (δ U G ∘ map (U ∘ G) (dec T))
∘ map U (δ T G) =
map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G
map G (dec U) ∘ (map (G ○ U) (dec T) ∘ δ U G)
∘ map U (δ T G) =
map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G
map G (dec U) ∘ map (G ○ U) (dec T) ∘ δ U G
∘ map U (δ T G) =
map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U A: Type G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G
map G (dec U ∘ map U (dec T)) ∘ δ U G ∘ map U (δ T G) =
map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G
reflexivity.Qed.
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U
forall (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G),
Applicative G ->
forallA : Type,
δ (U ∘ T) G ∘ map (U ∘ T) (σ) ∘ dec (U ∘ T) =
map G (dec (U ∘ T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U
forall (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G),
Applicative G ->
forallA : Type,
δ (U ∘ T) G ∘ map (U ∘ T) (σ) ∘ dec (U ∘ T) =
map G (dec (U ∘ T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G A: Type
δ (U ∘ T) G ∘ map (U ∘ T) (σ) ∘ dec (U ∘ T) =
map G (dec (U ∘ T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G A: Type
δ (U ∘ T) G ∘ (map (U ∘ T) (σ) ∘ dec (U ∘ T)) =
map G (dec (U ∘ T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G A: Type
δ (U ∘ T) G
∘ (map (U ∘ T) (σ)
∘ (map U (shift T) ∘ dec U ∘ map U (dec T))) =
map G (dec (U ∘ T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G A: Type
δ U G ∘ map U (δ T G)
∘ (map (U ∘ T) (σ)
∘ (map U (shift T) ∘ dec U ∘ map U (dec T))) =
map G (dec (U ∘ T)) ∘ δ (U ∘ T) G
(* bring <<strength G >> and <<shift T>> together*)
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G A: Type
δ U G ∘ map U (δ T G) ∘ map U (map T (σ) ∘ shift T)
∘ dec U ∘ map U (dec T) =
map G (dec (U ∘ T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G A: Type
δ U G ∘ (map U (δ T G) ∘ map U (map T (σ) ∘ shift T))
∘ dec U ∘ map U (dec T) =
map G (dec (U ∘ T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G A: Type
δ U G ∘ map U (δ T G ∘ (map T (σ) ∘ shift T)) ∘ dec U
∘ map U (dec T) = map G (dec (U ∘ T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G A: Type
δ U G ∘ map U (δ T G ∘ map T (σ) ∘ shift T) ∘ dec U
∘ map U (dec T) = map G (dec (U ∘ T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G A: Type
δ U G
∘ map U
(map G (shift T) ∘ σ
∘ map (prod W) (δ T G ∘ map T (σ))) ∘ dec U
∘ map U (dec T) = map G (dec (U ∘ T)) ∘ δ (U ∘ T) G
(* move <<δ U G>> under <<shift>> *)
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G A: Type
δ U G ∘ map U (map G (shift T))
∘ map U (σ ∘ map (prod W) (δ T G ∘ map T (σ))) ∘ dec U
∘ map U (dec T) = map G (dec (U ∘ T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G A: Type
δ U G ∘ map (U ∘ G) (shift T)
∘ map U (σ ∘ map (prod W) (δ T G ∘ map T (σ))) ∘ dec U
∘ map U (dec T) = map G (dec (U ∘ T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G A: Type
map (G ○ U) (shift T) ∘ δ U G
∘ map U (σ ∘ map (prod W) (δ T G ∘ map T (σ))) ∘ dec U
∘ map U (dec T) = map G (dec (U ∘ T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G A: Type
map (G ○ U) (shift T)
∘ (δ U G
∘ (map U (σ ∘ map (prod W) (δ T G ∘ map T (σ)))
∘ (dec U ∘ map U (dec T)))) =
map G (dec (U ∘ T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G A: Type
map (G ○ U) (shift T)
∘ (δ U G
∘ map U (σ ∘ map (prod W) (δ T G ∘ map T (σ)))
∘ (dec U ∘ map U (dec T))) =
map G (dec (U ∘ T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G A: Type
map (G ○ U) (shift T)
∘ (map G (dec U ∘ map U (dec T)) ∘ δ (U ∘ T) G) =
map G (dec (U ∘ T)) ∘ δ (U ∘ T) G
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H9: Applicative G A: Type
map (G ○ U) (shift T) ∘ map G (dec U ∘ map U (dec T))
∘ δ (U ∘ T) G = map G (dec (U ∘ T)) ∘ δ (U ∘ T) G
nowrewrite (fun_map_map (F := G)).Qed.(* TODO Investigate why DecoratedFunctor_compose solve the next instance automatically It seems like <<dtfun_decorated>> needs extra help here. It seems like it doesn't want to pick up on the Dist instance or something. *)
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U
DecoratedFunctor W (U ∘ T)
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U
DecoratedFunctor W (U ∘ T)
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U dtfun_decorated: DecoratedFunctor W T dtfun_traversable: TraversableFunctor T dtfun_compat: forall (G : Type -> Type)
(Map_G : Map G) (Pure_G : Pure G)
(Mult_G : Mult G),
Applicative G ->
forallA : Type,
δ T G ∘ map T (σ) ∘ dec T =
map G (dec T) ∘ δ T G
DecoratedFunctor W (U ∘ T)
W: Type op: Monoid_op W zero: Monoid_unit W H: Monoid W op0: Monoid_op W unit0: Monoid_unit W H0: Monoid W U, T: Type -> Type H1: Map T H2: Decorate W T H3: ApplicativeDist T H4: DecoratedTraversableFunctor W T H5: Map U H6: Decorate W U H7: ApplicativeDist U H8: DecoratedTraversableFunctor W U dtfun_decorated: DecoratedFunctor W T dtfun_traversable: TraversableFunctor T dtfun_compat: forall (G : Type -> Type)
(Map_G : Map G) (Pure_G : Pure G)
(Mult_G : Mult G),
Applicative G ->
forallA : Type,
δ T G ∘ map T (σ) ∘ dec T =
map G (dec T) ∘ δ T G dtfun_decorated0: DecoratedFunctor W U dtfun_traversable0: TraversableFunctor U dtfun_compat0: forall (G : Type -> Type)
(Map_G : Map G) (Pure_G : Pure G)
(Mult_G : Mult G),
Applicative G ->
forallA : Type,
δ U G ∘ map U (σ) ∘ dec U =
map G (dec U) ∘ δ U G
DecoratedFunctor W (U ∘ T)
apply DecoratedFunctor_compose.Qed.#[program, global] InstanceDecoratedTraversableFunctor_compose:
DecoratedTraversableFunctor W (U ∘ T) :=
{| dtfun_decorated := composition_is_decorated;
dtfun_compat := @dtfun_compat_compose;
|}.Endcompose.EndDecoratedTraversableFunctor_monoid.(** ** Null-Decorated Traversable Functors are Decorated Traversable *)(**********************************************************************)SectionTraversableFunctor_zero_DT.Context
(T: Type -> Type)
`{TraversableFunctor T}
`{Monoid W}.Existing InstanceDecorate_zero.Existing InstanceDecoratedFunctor_zero.
T: Type -> Type H: Map T H0: ApplicativeDist T H1: TraversableFunctor T W: Type op: Monoid_op W unit0: Monoid_unit W H2: Monoid W
forall (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G),
Applicative G ->
forallA : Type,
δ T G ∘ map T (σ) ∘ dec T = map G (dec T) ∘ δ T G
T: Type -> Type H: Map T H0: ApplicativeDist T H1: TraversableFunctor T W: Type op: Monoid_op W unit0: Monoid_unit W H2: Monoid W
forall (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G),
Applicative G ->
forallA : Type,
δ T G ∘ map T (σ) ∘ dec T = map G (dec T) ∘ δ T G
T: Type -> Type H: Map T H0: ApplicativeDist T H1: TraversableFunctor T W: Type op: Monoid_op W unit0: Monoid_unit W H2: Monoid W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H3: Applicative G A: Type
δ T G ∘ map T (σ) ∘ dec T = map G (dec T) ∘ δ T G
T: Type -> Type H: Map T H0: ApplicativeDist T H1: TraversableFunctor T W: Type op: Monoid_op W unit0: Monoid_unit W H2: Monoid W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H3: Applicative G A: Type
δ T G ∘ map T (σ) ∘ map T (pair Ƶ) =
map G (map T (pair Ƶ)) ∘ δ T G
T: Type -> Type H: Map T H0: ApplicativeDist T H1: TraversableFunctor T W: Type op: Monoid_op W unit0: Monoid_unit W H2: Monoid W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H3: Applicative G A: Type
δ T G ∘ (map T (σ) ∘ map T (pair Ƶ)) =
map G (map T (pair Ƶ)) ∘ δ T G
T: Type -> Type H: Map T H0: ApplicativeDist T H1: TraversableFunctor T W: Type op: Monoid_op W unit0: Monoid_unit W H2: Monoid W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H3: Applicative G A: Type
δ T G ∘ map T (σ ∘ pair Ƶ) =
map G (map T (pair Ƶ)) ∘ δ T G
T: Type -> Type H: Map T H0: ApplicativeDist T H1: TraversableFunctor T W: Type op: Monoid_op W unit0: Monoid_unit W H2: Monoid W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H3: Applicative G A: Type
δ T G ∘ map T (σ ∘ pair Ƶ) =
map (G ∘ T) (pair Ƶ) ∘ δ T G
T: Type -> Type H: Map T H0: ApplicativeDist T H1: TraversableFunctor T W: Type op: Monoid_op W unit0: Monoid_unit W H2: Monoid W G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H3: Applicative G A: Type
δ T G ∘ map T (σ ∘ pair Ƶ) =
δ T G ∘ map (T ○ G) (pair Ƶ)
now unfold_ops @Map_compose.Qed.InstanceDecoratedTraversableFunctor_zero:
DecoratedTraversableFunctor W T :=
{| dtfun_compat := @dtfun_compat_zero
|}.EndTraversableFunctor_zero_DT.(** ** Identity and Associativity Laws *)(* TODO *)(**********************************************************************)