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.TraversableMonad
Classes.Coalgebraic.TraversableMonad
Functors.Early.Batch.Import Batch.Notations.Import Applicative.Notations.Import TraversableMonad.Notations.#[local] Generalizable VariablesT G ϕ.(** * Kleisli Traversable Monad from Kleisli Traversable Monad *)(**********************************************************************)(** ** Derived Operation <<toBatch6>> *)(**********************************************************************)ModuleDerivedOperations.#[export] InstanceBindt_ToBatch6
(TU: Type -> Type) `{ToBatch6 T U}: Bindt T U :=
funG___ABf => runBatch (G := G) f (C := U B) ∘ toBatch6.EndDerivedOperations.ModuleDerivedInstances.Import DerivedOperations.Sectionwith_algebra.Context
`{Coalgebraic.TraversableMonad.TraversableMonad T}.(** ** <<⋆6>> as <<runBatch ∘ map runBatch ∘ double_batch6>> *)(******************************************************************)
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A, B, C: Type G1, G2: Type -> Type H2: Map G1 H3: Pure G1 H4: Mult G1 Applicative0: Applicative G1 H5: Map G2 H6: Pure G2 H7: Mult G2 Applicative1: Applicative G2 g: B -> G2 (T C) f: A -> G1 (T B)
g ⋆6 f = runBatch f ∘ map (runBatch g) ∘ double_batch6
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A, B, C: Type G1, G2: Type -> Type H2: Map G1 H3: Pure G1 H4: Mult G1 Applicative0: Applicative G1 H5: Map G2 H6: Pure G2 H7: Mult G2 Applicative1: Applicative G2 g: B -> G2 (T C) f: A -> G1 (T B)
g ⋆6 f = runBatch f ∘ map (runBatch g) ∘ double_batch6
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A, B, C: Type G1, G2: Type -> Type H2: Map G1 H3: Pure G1 H4: Mult G1 Applicative0: Applicative G1 H5: Map G2 H6: Pure G2 H7: Mult G2 Applicative1: Applicative G2 g: B -> G2 (T C) f: A -> G1 (T B) a: A
(g ⋆6 f) a =
(runBatch f ∘ map (runBatch g) ∘ double_batch6) a
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A, B, C: Type G1, G2: Type -> Type H2: Map G1 H3: Pure G1 H4: Mult G1 Applicative0: Applicative G1 H5: Map G2 H6: Pure G2 H7: Mult G2 Applicative1: Applicative G2 g: B -> G2 (T C) f: A -> G1 (T B) a: A
(g ⋆6 f) a =
runBatch f (map (runBatch g) (double_batch6 a))
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A, B, C: Type G1, G2: Type -> Type H2: Map G1 H3: Pure G1 H4: Mult G1 Applicative0: Applicative G1 H5: Map G2 H6: Pure G2 H7: Mult G2 Applicative1: Applicative G2 g: B -> G2 (T C) f: A -> G1 (T B) a: A
(g ⋆6 f) a =
runBatch f (map (runBatch g) (Done toBatch6 ⧆ a))
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A, B, C: Type G1, G2: Type -> Type H2: Map G1 H3: Pure G1 H4: Mult G1 Applicative0: Applicative G1 H5: Map G2 H6: Pure G2 H7: Mult G2 Applicative1: Applicative G2 g: B -> G2 (T C) f: A -> G1 (T B) a: A
(g ⋆6 f) a =
runBatch f
(map (compose (runBatch g)) (Done toBatch6) ⧆ a)
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A, B, C: Type G1, G2: Type -> Type H2: Map G1 H3: Pure G1 H4: Mult G1 Applicative0: Applicative G1 H5: Map G2 H6: Pure G2 H7: Mult G2 Applicative1: Applicative G2 g: B -> G2 (T C) f: A -> G1 (T B) a: A
(g ⋆6 f) a =
runBatch f (Done (runBatch g ∘ toBatch6) ⧆ a)
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A, B, C: Type G1, G2: Type -> Type H2: Map G1 H3: Pure G1 H4: Mult G1 Applicative0: Applicative G1 H5: Map G2 H6: Pure G2 H7: Mult G2 Applicative1: Applicative G2 g: B -> G2 (T C) f: A -> G1 (T B) a: A
(g ⋆6 f) a =
runBatch f (Done (runBatch g ∘ toBatch6)) <⋆> f a
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A, B, C: Type G1, G2: Type -> Type H2: Map G1 H3: Pure G1 H4: Mult G1 Applicative0: Applicative G1 H5: Map G2 H6: Pure G2 H7: Mult G2 Applicative1: Applicative G2 g: B -> G2 (T C) f: A -> G1 (T B) a: A
(g ⋆6 f) a = pure (runBatch g ∘ toBatch6) <⋆> f a
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A, B, C: Type G1, G2: Type -> Type H2: Map G1 H3: Pure G1 H4: Mult G1 Applicative0: Applicative G1 H5: Map G2 H6: Pure G2 H7: Mult G2 Applicative1: Applicative G2 g: B -> G2 (T C) f: A -> G1 (T B) a: A
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T
forall (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G),
Applicative G ->
forall (AB : Type) (f : A -> G (T B)),
bindt f ∘ ret = f
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T
forall (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G),
Applicative G ->
forall (AB : Type) (f : A -> G (T B)),
bindt f ∘ ret = f
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A, B: Type f: A -> G (T B)
bindt f ∘ ret = f
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A, B: Type f: A -> G (T B)
runBatch f ∘ toBatch6 ∘ ret = f
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A, B: Type f: A -> G (T B)
runBatch f ∘ (toBatch6 ∘ ret) = f
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A, B: Type f: A -> G (T B)
runBatch f ∘ batch A (T B) = f
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A, B: Type f: A -> G (T B)
f = f
reflexivity.Qed.
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T
forallA : Type, bindt ret = id
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T
forallA : Type, bindt ret = id
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A: Type
bindt ret = id
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A: Type
runBatch ret ∘ toBatch6 = id
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A: Type
runBatch ret = extract_Batch ∘ mapfst_Batch ret
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A: Type cut: runBatch ret = extract_Batch ∘ mapfst_Batch ret
runBatch ret ∘ toBatch6 = id
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A: Type
runBatch ret = extract_Batch ∘ mapfst_Batch ret
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A: Type
runBatch ret = extract_Batch ○ mapfst_Batch ret
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A: Type b: Batch A (T A) (T A)
runBatch ret b = extract_Batch (mapfst_Batch ret b)
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A, C: Type c: C
runBatch ret (Done c) =
extract_Batch (mapfst_Batch ret (Done c))
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A, C: Type b: Batch A (T A) (T A -> C) a: A IHb: runBatch ret b = extract_Batch (mapfst_Batch ret b)
runBatch ret (b ⧆ a) =
extract_Batch (mapfst_Batch ret (b ⧆ a))
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A, C: Type c: C
runBatch ret (Done c) =
extract_Batch (mapfst_Batch ret (Done c))
reflexivity.
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A, C: Type b: Batch A (T A) (T A -> C) a: A IHb: runBatch ret b = extract_Batch (mapfst_Batch ret b)
runBatch ret (b ⧆ a) =
extract_Batch (mapfst_Batch ret (b ⧆ a))
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A, C: Type b: Batch A (T A) (T A -> C) a: A IHb: runBatch ret b = extract_Batch (mapfst_Batch ret b)
runBatch ret b (ret a) =
extract_Batch (mapfst_Batch ret b) (ret a)
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A, C: Type b: Batch A (T A) (T A -> C) a: A IHb: runBatch ret b = extract_Batch (mapfst_Batch ret b)
extract_Batch (mapfst_Batch ret b) (ret a) =
extract_Batch (mapfst_Batch ret b) (ret a)
reflexivity.
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A: Type cut: runBatch ret = extract_Batch ∘ mapfst_Batch ret
runBatch ret ∘ toBatch6 = id
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A: Type cut: runBatch ret = extract_Batch ∘ mapfst_Batch ret
extract_Batch ∘ mapfst_Batch ret ∘ toBatch6 = id
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T A: Type cut: runBatch ret = extract_Batch ∘ mapfst_Batch ret
id = id
reflexivity.Qed.
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T
forall (G1 : Type -> Type) (Map_G : Map G1)
(Pure_G : Pure G1) (Mult_G : Mult G1),
Applicative G1 ->
forall (G2 : Type -> Type) (Map_G0 : Map G2)
(Pure_G0 : Pure G2) (Mult_G0 : Mult G2),
Applicative G2 ->
forall (ABC : Type) (g : B -> G2 (T C))
(f : A -> G1 (T B)),
map (bindt g) ∘ bindt f = bindt (g ⋆6 f)
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T
forall (G1 : Type -> Type) (Map_G : Map G1)
(Pure_G : Pure G1) (Mult_G : Mult G1),
Applicative G1 ->
forall (G2 : Type -> Type) (Map_G0 : Map G2)
(Pure_G0 : Pure G2) (Mult_G0 : Mult G2),
Applicative G2 ->
forall (ABC : Type) (g : B -> G2 (T C))
(f : A -> G1 (T B)),
map (bindt g) ∘ bindt f = bindt (g ⋆6 f)
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H2: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H3: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (bindt g) ∘ bindt f = bindt (g ⋆6 f)
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H2: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H3: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (runBatch g ∘ toBatch6) ∘ (runBatch f ∘ toBatch6) =
runBatch (g ⋆6 f) ∘ toBatch6
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H2: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H3: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (runBatch g ∘ toBatch6) ∘ runBatch f ∘ toBatch6 =
runBatch (g ⋆6 f) ∘ toBatch6
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H2: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H3: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H2: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H3: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H2: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H3: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H2: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H3: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H2: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H3: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H2: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H3: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
map (runBatch g) ∘ runBatch f
∘ (cojoin_Batch6 A B C ∘ toBatch6) =
runBatch (g ⋆6 f) ∘ toBatch6
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H2: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H3: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H2: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H3: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H2: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H3: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H2: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H3: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T G1: Type -> Type Map_G: Map G1 Pure_G: Pure G1 Mult_G: Mult G1 H2: Applicative G1 G2: Type -> Type Map_G0: Map G2 Pure_G0: Pure G2 Mult_G0: Mult G2 H3: Applicative G2 A, B, C: Type g: B -> G2 (T C) f: A -> G1 (T B)
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T
forall (G1G2 : Type -> Type) (H2 : Map G1)
(H3 : Mult G1) (H4 : Pure G1) (H5 : Map G2)
(H6 : Mult G2) (H7 : Pure G2)
(ϕ : forallA : Type, G1 A -> G2 A),
ApplicativeMorphism G1 G2 ϕ ->
forall (AB : Type) (f : A -> G1 (T B)),
ϕ (T B) ∘ bindt f = bindt (ϕ (T B) ∘ f)
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T
forall (G1G2 : Type -> Type) (H2 : Map G1)
(H3 : Mult G1) (H4 : Pure G1) (H5 : Map G2)
(H6 : Mult G2) (H7 : Pure G2)
(ϕ : forallA : Type, G1 A -> G2 A),
ApplicativeMorphism G1 G2 ϕ ->
forall (AB : Type) (f : A -> G1 (T B)),
ϕ (T B) ∘ bindt f = bindt (ϕ (T B) ∘ f)
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T G1, G2: Type -> Type H2: Map G1 H3: Mult G1 H4: Pure G1 H5: Map G2 H6: Mult G2 H7: Pure G2 ϕ: forallA : Type, G1 A -> G2 A H8: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 (T B)
ϕ (T B) ∘ bindt f = bindt (ϕ (T B) ∘ f)
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T G1, G2: Type -> Type H2: Map G1 H3: Mult G1 H4: Pure G1 H5: Map G2 H6: Mult G2 H7: Pure G2 ϕ: forallA : Type, G1 A -> G2 A H8: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 (T B)
ϕ (T B) ∘ (runBatch f ∘ toBatch6) =
runBatch (ϕ (T B) ∘ f) ∘ toBatch6
T: Type -> Type H: Return T H0: ToBatch6 T T H1: TraversableMonad T G1, G2: Type -> Type H2: Map G1 H3: Mult G1 H4: Pure G1 H5: Map G2 H6: Mult G2 H7: Pure G2 ϕ: forallA : Type, G1 A -> G2 A H8: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 (T B)
ϕ (T B) ∘ runBatch f ∘ toBatch6 =
runBatch (ϕ (T B) ∘ f) ∘ toBatch6