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.Kleisli.DecoratedTraversableFunctor
Classes.Coalgebraic.DecoratedTraversableFunctor
Functors.Early.Batch.Import Monoid.Notations.Import Applicative.Notations.Import Product.Notations.Import DecoratedTraversableFunctor.Notations.#[local] Generalizable VariablesE T G ϕ.(** * Coalgebraic DTFs to Kleisli DTFs *)(**********************************************************************)(** ** Derived Operations *)(**********************************************************************)ModuleDerivedOperations.#[export] InstanceMapdt_ToBatch3
(E: Type) (T: Type -> Type)
`{ToBatch3_ET: ToBatch3 E T}:
Mapdt E T := funG___ABf =>
(runBatch f ∘ toBatch3: T A -> G (T B)).EndDerivedOperations.ModuleDerivedInstances.Import DerivedOperations.Sectionwith_algebra.Context
`{Coalgebraic.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T}.(** ** <<⋆3>> as <<runBatch ∘ map runBatch ∘ double_batch3>> *)(******************************************************************)
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T
forall (G1 : Type -> Type) (Map_G : Map G1)
(Pure_G : Pure G1) (Mult_G : Mult G1),
Applicative G1 ->
forall (G2 : Type -> Type) (Map_G0 : Map G2)
(Pure_G0 : Pure G2) (Mult_G0 : Mult G2),
Applicative G2 ->
forall (ABC : Type) (g : E * B -> G2 C)
(f : E * A -> G1 B),
g ⋆3 f =
runBatch f ∘ map (runBatch g) ∘ double_batch3 C
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T
forall (G1 : Type -> Type) (Map_G : Map G1)
(Pure_G : Pure G1) (Mult_G : Mult G1),
Applicative G1 ->
forall (G2 : Type -> Type) (Map_G0 : Map G2)
(Pure_G0 : Pure G2) (Mult_G0 : Mult G2),
Applicative G2 ->
forall (ABC : Type) (g : E * B -> G2 C)
(f : E * A -> G1 B),
g ⋆3 f =
runBatch f ∘ map (runBatch g) ∘ double_batch3 C
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B
g ⋆3 f =
runBatch f ∘ map (runBatch g) ∘ double_batch3 C
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B e: E a: A
(g ⋆3 f) (e, a) =
(runBatch f ∘ map (runBatch g) ∘ double_batch3 C)
(e, a)
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B e: E a: A
(g ⋆3 f) (e, a) =
runBatch f (map (runBatch g) (double_batch3 C (e, a)))
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B e: E a: A
(g ⋆3 f) (e, a) =
runBatch f
(map (runBatch g)
(Step (Done (batch (E * B) C ∘ pair e)) (e, a)))
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B e: E a: A
(g ⋆3 f) (e, a) =
runBatch f
(Step
(map (compose (runBatch g))
(Done (batch (E * B) C ∘ pair e))) (e, a))
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B e: E a: A
(g ⋆3 f) (e, a) =
runBatch f
(Step
(Done (runBatch g ∘ (batch (E * B) C ∘ pair e)))
(e, a))
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B e: E a: A
(g ⋆3 f) (e, a) =
runBatch f
(Done (runBatch g ∘ (batch (E * B) C ∘ pair e))) <⋆>
f (e, a)
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B e: E a: A
(g ⋆3 f) (e, a) =
pure (runBatch g ∘ (batch (E * B) C ∘ pair e)) <⋆>
f (e, a)
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B e: E a: A
(g ⋆3 f) (e, a) =
map (runBatch g ∘ (batch (E * B) C ∘ pair e))
(f (e, a))
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B e: E a: A
(g ⋆3 f) (e, a) =
map (runBatch g ∘ batch (E * B) C ∘ pair e) (f (e, a))
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B e: E a: A
(g ⋆3 f) (e, a) = map (g ∘ pair e) (f (e, a))
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B e: E a: A
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T
forall (G1 : Type -> Type) (Map_G : Map G1)
(Pure_G : Pure G1) (Mult_G : Mult G1),
Applicative G1 ->
forall (G2 : Type -> Type) (Map_G0 : Map G2)
(Pure_G0 : Pure G2) (Mult_G0 : Mult G2),
Applicative G2 ->
forall (ABC : Type) (g : E * B -> G2 C)
(f : E * A -> G1 B),
map (mapdt g) ∘ mapdt f = mapdt (g ⋆3 f)
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T
forall (G1 : Type -> Type) (Map_G : Map G1)
(Pure_G : Pure G1) (Mult_G : Mult G1),
Applicative G1 ->
forall (G2 : Type -> Type) (Map_G0 : Map G2)
(Pure_G0 : Pure G2) (Mult_G0 : Mult G2),
Applicative G2 ->
forall (ABC : Type) (g : E * B -> G2 C)
(f : E * A -> G1 B),
map (mapdt g) ∘ mapdt f = mapdt (g ⋆3 f)
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B
map (mapdt g) ∘ mapdt f = mapdt (g ⋆3 f)
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B
map (runBatch g ∘ toBatch3) ∘ (runBatch f ∘ toBatch3) =
runBatch (g ⋆3 f) ∘ toBatch3
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B
map (runBatch g ∘ toBatch3) ∘ runBatch f ∘ toBatch3 =
runBatch (g ⋆3 f) ∘ toBatch3
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B
map (runBatch g) ∘ runBatch f
∘ (runBatch (double_batch3 C) ∘ toBatch3) =
runBatch (g ⋆3 f) ∘ toBatch3
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B
map (runBatch g) ∘ runBatch f
∘ runBatch (double_batch3 C) ∘ toBatch3 =
runBatch (g ⋆3 f) ∘ toBatch3
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B
runBatch f ∘ map (runBatch g)
∘ runBatch (double_batch3 C) ∘ toBatch3 =
runBatch (g ⋆3 f) ∘ toBatch3
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B
runBatch
(runBatch f ∘ map (runBatch g) ∘ double_batch3 C)
∘ toBatch3 = runBatch (g ⋆3 f) ∘ toBatch3
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H1: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H2: Applicative G2 A, B, C: Type g: E * B -> G2 C f: E * A -> G1 B
runBatch
(runBatch f ∘ map (runBatch g) ∘ double_batch3 C)
∘ toBatch3 =
runBatch
(runBatch f ∘ map (runBatch g) ∘ double_batch3 C)
∘ toBatch3
reflexivity.Qed.
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T
forall (G1G2 : Type -> Type) (H1 : Map G1)
(H2 : Mult G1) (H3 : Pure G1) (H4 : Map G2)
(H5 : Mult G2) (H6 : Pure G2)
(ϕ : forallA : Type, G1 A -> G2 A),
ApplicativeMorphism G1 G2 ϕ ->
forall (AB : Type) (f : E * A -> G1 B),
ϕ (T B) ∘ mapdt f = mapdt (ϕ B ∘ f)
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T
forall (G1G2 : Type -> Type) (H1 : Map G1)
(H2 : Mult G1) (H3 : Pure G1) (H4 : Map G2)
(H5 : Mult G2) (H6 : Pure G2)
(ϕ : forallA : Type, G1 A -> G2 A),
ApplicativeMorphism G1 G2 ϕ ->
forall (AB : Type) (f : E * A -> G1 B),
ϕ (T B) ∘ mapdt f = mapdt (ϕ B ∘ f)
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1, G2: Type -> Type H1: Map G1 H2: Mult G1 H3: Pure G1 H4: Map G2 H5: Mult G2 H6: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: E * A -> G1 B
ϕ (T B) ∘ mapdt f = mapdt (ϕ B ∘ f)
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1, G2: Type -> Type H1: Map G1 H2: Mult G1 H3: Pure G1 H4: Map G2 H5: Mult G2 H6: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: E * A -> G1 B t: T A
(ϕ (T B) ∘ mapdt f) t = mapdt (ϕ B ∘ f) t
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1, G2: Type -> Type H1: Map G1 H2: Mult G1 H3: Pure G1 H4: Map G2 H5: Mult G2 H6: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: E * A -> G1 B t: T A
(ϕ (T B) ∘ (runBatch f ∘ toBatch3)) t =
(runBatch (ϕ B ∘ f) ∘ toBatch3) t
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1, G2: Type -> Type H1: Map G1 H2: Mult G1 H3: Pure G1 H4: Map G2 H5: Mult G2 H6: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: E * A -> G1 B t: T A
(ϕ (T B) ∘ runBatch f ∘ toBatch3) t =
(runBatch (ϕ B ∘ f) ∘ toBatch3) t
E: Type T: Type -> Type H: ToBatch3 E T H0: DecoratedTraversableFunctor E T G1, G2: Type -> Type H1: Map G1 H2: Mult G1 H3: Pure G1 H4: Map G2 H5: Mult G2 H6: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: E * A -> G1 B t: T A
(runBatch (ϕ B ∘ f) ∘ toBatch3) t =
(runBatch (ϕ B ∘ f) ∘ toBatch3) t