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
Functors.Early.Batch
Classes.Coalgebraic.TraversableFunctor
Classes.Kleisli.TraversableFunctor.Import Batch.Notations.Import Applicative.Notations.Import Kleisli.TraversableFunctor.Notations.#[local] Generalizable Variablesϕ T G A B C.(** * Categorical Traversable Monads from Kleisli Traversable Monads *)(**********************************************************************)(** ** Derived Operations *)(**********************************************************************)ModuleDerivedOperations.#[export] InstanceTraverse_ToBatch
(T: Type -> Type) `{ToBatch T}: Traverse T :=
funG___ABf =>
runBatch (G := G) f (C := T B) ∘ toBatch.EndDerivedOperations.ModuleDerivedInstances.Import DerivedOperations.Context
`{Coalgebraic.TraversableFunctor.TraversableFunctor T}.(** ** <<⋆2>> as <<runBatch ∘ map runBatch ∘ double_batch>> *)(********************************************************************)
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 (BC : Type) (g : B -> G2 C) (A : Type)
(f : A -> G1 B),
g ⋆2 f = runBatch f ∘ map (runBatch g) ∘ double_batch
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 (BC : Type) (g : B -> G2 C) (A : Type)
(f : A -> G1 B),
g ⋆2 f = runBatch f ∘ map (runBatch g) ∘ double_batch
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 B, C: Type g: B -> G2 C A: Type f: A -> G1 B
g ⋆2 f = runBatch f ∘ map (runBatch g) ∘ double_batch
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 B, C: Type g: B -> G2 C A: Type f: A -> G1 B a: A
(g ⋆2 f) a =
(runBatch f ∘ map (runBatch g) ∘ double_batch) a
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 B, C: Type g: B -> G2 C A: Type f: A -> G1 B a: A
(g ⋆2 f) a =
runBatch f (map (runBatch g) (double_batch a))
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 B, C: Type g: B -> G2 C A: Type f: A -> G1 B a: A
(g ⋆2 f) a =
runBatch f (map (runBatch g) (Done (batch B C) ⧆ a))
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 B, C: Type g: B -> G2 C A: Type f: A -> G1 B a: A
(g ⋆2 f) a =
runBatch f
(map (compose (runBatch g)) (Done (batch B C)) ⧆ a)
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 B, C: Type g: B -> G2 C A: Type f: A -> G1 B a: A
(g ⋆2 f) a =
runBatch f (Done (runBatch g ∘ batch B C) ⧆ a)
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 B, C: Type g: B -> G2 C A: Type f: A -> G1 B a: A
(g ⋆2 f) a = runBatch f (Done g ⧆ a)
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 B, C: Type g: B -> G2 C A: Type f: A -> G1 B a: A
(g ⋆2 f) a = runBatch f (Done g) <⋆> f a
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 B, C: Type g: B -> G2 C A: Type f: A -> G1 B a: A
(g ⋆2 f) a = pure g <⋆> f a
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 B, C: Type g: B -> G2 C A: Type f: A -> G1 B a: A
forall (G1 : Type -> Type) (Map_G : Map G1)
(Pure_G : Pure G1) (Mult_G : Mult G1),
Applicative G1 ->
forall (G2 : Type -> Type) (Map_G0 : Map G2)
(Pure_G0 : Pure G2) (Mult_G0 : Mult G2),
Applicative G2 ->
forall (ABC : Type) (g : B -> G2 C) (f : A -> G1 B),
map (traverse g) ∘ traverse f = traverse (g ⋆2 f)
forall (G1 : Type -> Type) (Map_G : Map G1)
(Pure_G : Pure G1) (Mult_G : Mult G1),
Applicative G1 ->
forall (G2 : Type -> Type) (Map_G0 : Map G2)
(Pure_G0 : Pure G2) (Mult_G0 : Mult G2),
Applicative G2 ->
forall (ABC : Type) (g : B -> G2 C) (f : A -> G1 B),
map (traverse g) ∘ traverse f = traverse (g ⋆2 f)
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 A, B, C: Type g: B -> G2 C f: A -> G1 B
map (traverse g) ∘ traverse f = traverse (g ⋆2 f)
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 A, B, C: Type g: B -> G2 C f: A -> G1 B
map (runBatch g ∘ toBatch) ∘ (runBatch f ∘ toBatch) =
runBatch (g ⋆2 f) ∘ toBatch
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 A, B, C: Type g: B -> G2 C f: A -> G1 B
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 A, B, C: Type g: B -> G2 C f: A -> G1 B
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 A, B, C: Type g: B -> G2 C f: A -> G1 B
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 A, B, C: Type g: B -> G2 C f: A -> G1 B
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 A, B, C: Type g: B -> G2 C f: A -> G1 B
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 A, B, C: Type g: B -> G2 C f: A -> G1 B
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 A, B, C: Type g: B -> G2 C f: A -> G1 B
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 A, B, C: Type g: B -> G2 C f: A -> G1 B
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 A, B, C: Type g: B -> G2 C f: A -> G1 B
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 A, B, C: Type g: B -> G2 C f: A -> G1 B
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 A, B, C: Type g: B -> G2 C f: A -> G1 B
G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H0: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H1: Applicative G2 A, B, C: Type g: B -> G2 C f: A -> G1 B
forall (G1G2 : Type -> Type) (H0 : Map G1)
(H1 : Mult G1) (H2 : Pure G1) (H3 : Map G2)
(H4 : Mult G2) (H5 : Pure G2)
(ϕ : forallA : Type, G1 A -> G2 A),
ApplicativeMorphism G1 G2 ϕ ->
forall (AB : Type) (f : A -> G1 B),
ϕ (T B) ∘ traverse f = traverse (ϕ B ∘ f)
forall (G1G2 : Type -> Type) (H0 : Map G1)
(H1 : Mult G1) (H2 : Pure G1) (H3 : Map G2)
(H4 : Mult G2) (H5 : Pure G2)
(ϕ : forallA : Type, G1 A -> G2 A),
ApplicativeMorphism G1 G2 ϕ ->
forall (AB : Type) (f : A -> G1 B),
ϕ (T B) ∘ traverse f = traverse (ϕ B ∘ f)
G1, G2: Type -> Type H0: Map G1 H1: Mult G1 H2: Pure G1 H3: Map G2 H4: Mult G2 H5: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morphism: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 B
ϕ (T B) ∘ traverse f = traverse (ϕ B ∘ f)
G1, G2: Type -> Type H0: Map G1 H1: Mult G1 H2: Pure G1 H3: Map G2 H4: Mult G2 H5: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morphism: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 B
ϕ (T B) ∘ (runBatch f ∘ toBatch) =
runBatch (ϕ B ∘ f) ∘ toBatch
G1, G2: Type -> Type H0: Map G1 H1: Mult G1 H2: Pure G1 H3: Map G2 H4: Mult G2 H5: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morphism: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 B
ϕ (T B) ∘ runBatch f ∘ toBatch =
runBatch (ϕ B ∘ f) ∘ toBatch
G1, G2: Type -> Type H0: Map G1 H1: Mult G1 H2: Pure G1 H3: Map G2 H4: Mult G2 H5: Pure G2 ϕ: forallA : Type, G1 A -> G2 A morphism: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 B
runBatch (ϕ B ∘ f) ∘ toBatch =
runBatch (ϕ B ∘ f) ∘ toBatch