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.TraversableFunctor
Classes.Kleisli.TraversableFunctor.#[local] Generalizable VariablesT G ϕ.(** * Kleisli Traversable Functors from Categorical Traversable Functors *)(**********************************************************************)(** ** Derived Operations *)(**********************************************************************)ModuleDerivedOperations.#[export] InstanceTraverse_Categorical
(T: Type -> Type)
`{Map_T: Map T}
`{Dist_T: ApplicativeDist T}:
Traverse T :=
fun (G: Type -> Type) `{Map G} `{Pure G} `{Mult G}
(A B: Type) (f: A -> G B) => dist T G ∘ map f.
T: Type -> Type Map_T: Map T Dist_T: ApplicativeDist T H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T
Compat_Map_Traverse T
T: Type -> Type Map_T: Map T Dist_T: ApplicativeDist T H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T
Compat_Map_Traverse T
T: Type -> Type Map_T: Map T Dist_T: ApplicativeDist T H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T
H = DerivedOperations.Map_Traverse T
T: Type -> Type Map_T: Map T Dist_T: ApplicativeDist T H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T
H = (fun (AB : Type) (f : A -> B) => traverse f)
T: Type -> Type Map_T: Map T Dist_T: ApplicativeDist T H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T A, B: Type f: A -> B
H A B f = traverse f
T: Type -> Type Map_T: Map T Dist_T: ApplicativeDist T H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T A, B: Type f: A -> B
H A B f =
Traverse_Categorical T (funA : Type => A) Map_I
Pure_I Mult_I A B f
T: Type -> Type Map_T: Map T Dist_T: ApplicativeDist T H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T A, B: Type f: A -> B
H A B f = dist T (funA : Type => A) ∘ map f
T: Type -> Type Map_T: Map T Dist_T: ApplicativeDist T H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T A, B: Type f: A -> B
F: Type -> Type Map_F: Map F Dist_F: ApplicativeDist F
Compat_Traverse_Categorical F
F: Type -> Type Map_F: Map F Dist_F: ApplicativeDist F
Compat_Traverse_Categorical F
reflexivity.Qed.
F: Type -> Type Traverse_F: Traverse F Map_F: Map F Dist_F: ApplicativeDist F Compat: Compat_Traverse_Categorical F
forall (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G) (AB : Type),
F A ->
forallf : A -> G B, traverse f = dist F G ∘ map f
F: Type -> Type Traverse_F: Traverse F Map_F: Map F Dist_F: ApplicativeDist F Compat: Compat_Traverse_Categorical F
forall (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G) (AB : Type),
F A ->
forallf : A -> G B, traverse f = dist F G ∘ map f
nowrewrite compat_traverse_categorical.Qed.(** ** Derived Laws *)(**********************************************************************)ModuleDerivedInstances.(* Alectryon doesn't like this Import CategoricalToKleisli.TraversableFunctor.DerivedOperations. *)Import DerivedOperations.Sectionwith_functor.Context
`{Categorical.TraversableFunctor.TraversableFunctor T}.
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T
forallA : Type, traverse id = id
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T
forallA : Type, traverse id = id
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T A: Type
traverse id = id
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T A: Type
Traverse_Categorical T (funA : Type => A) Map_I
Pure_I Mult_I A A id = id
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T A: Type
dist T (funA : Type => A) ∘ map id = id
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T A: Type t: T A
(dist T (funA : Type => A) ∘ map id) t = id t
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T A: Type t: T A
(id ∘ map id) t = id t
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T A: Type t: T A
(id ∘ id) t = id t
reflexivity.Qed.
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T
forall (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G),
Applicative G -> forallA : Type, traverse pure = pure
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T
forall (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G),
Applicative G -> forallA : Type, traverse pure = pure
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A: Type
traverse pure = pure
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A: Type
Traverse_Categorical T G Map_G Pure_G Mult_G A A pure =
pure
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A: Type
dist T G ∘ map pure = pure
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A: Type t: T A
(dist T G ∘ map pure) t = pure t
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
T G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H2: Applicative G A: Type t: T A
pure t = pure t
reflexivity.Qed.
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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
forall (ABC : Type) (g : B -> G2 C) (f : A -> G1 B),
map (traverse g) ∘ traverse f = traverse (map g ∘ f)
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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
forall (ABC : Type) (g : B -> G2 C) (f : A -> G1 B),
map (traverse g) ∘ traverse f = traverse (map g ∘ f)
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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 C f: A -> G1 B
map (traverse g) ∘ traverse f = traverse (map g ∘ f)
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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 C f: A -> G1 B
map
(Traverse_Categorical T G2 Map_G0 Pure_G0 Mult_G0 B
C g)
∘ Traverse_Categorical T G1 Map_G Pure_G Mult_G A B f =
Traverse_Categorical T (G1 ∘ G2) (Map_compose G1 G2)
(Pure_compose G1 G2) (Mult_compose G1 G2) A C
(map g ∘ f)
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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 C f: A -> G1 B
map (dist T G2 ∘ map g) ∘ (dist T G1 ∘ map f) =
dist T (G1 ∘ G2) ∘ map (map g ∘ f)
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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 C f: A -> G1 B
map (dist T G2 ∘ map g) ∘ (dist T G1 ∘ map f) =
map (dist T G2) ∘ dist T G1 ∘ map (map g ∘ f)
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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 C f: A -> G1 B
map (dist T G2 ∘ map g) ∘ dist T G1 ∘ map f =
map (dist T G2) ∘ dist T G1 ∘ map (map g ∘ f)
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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 C f: A -> G1 B
map (dist T G2 ∘ map g) ∘ dist T G1 ∘ map f =
map (dist T G2) ∘ dist T G1 ∘ (map (map g) ∘ map f)
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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 C f: A -> G1 B
map (dist T G2 ∘ map g) ∘ dist T G1 ∘ map f =
map (dist T G2) ∘ dist T G1 ∘ map (map g) ∘ map f
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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 C f: A -> G1 B
map (dist T G2 ∘ map g) ∘ dist T G1 ∘ map f =
map (dist T G2) ∘ (dist T G1 ∘ map (map g)) ∘ map f
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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 C f: A -> G1 B
map (dist T G2 ∘ map g) ∘ dist T G1 ∘ map f =
map (dist T G2) ∘ (dist T G1 ∘ map g) ∘ map f
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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 C f: A -> G1 B
map (dist T G2 ∘ map g) ∘ dist T G1 ∘ map f =
map (dist T G2) ∘ (map g ∘ dist T G1) ∘ map f
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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 C f: A -> G1 B
map (dist T G2 ∘ map g) ∘ dist T G1 ∘ map f =
map (dist T G2) ∘ (map (map g) ∘ dist T G1) ∘ map f
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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 C f: A -> G1 B
map (dist T G2 ∘ map g) ∘ dist T G1 ∘ map f =
map (dist T G2) ∘ map (map g) ∘ dist T G1 ∘ map f
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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 C f: A -> G1 B
map (dist T G2 ∘ map g) ∘ dist T G1 ∘ map f =
map (dist T G2) ∘ map (map g) ∘ dist T G1 ∘ map f
nowrewrite (fun_map_map (F := G1)).Qed.
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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 morph: ApplicativeMorphism G1 G2 ϕ
forall (AB : Type) (f : A -> G1 B),
ϕ (T B) ∘ traverse f = traverse (ϕ B ∘ f)
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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 morph: ApplicativeMorphism G1 G2 ϕ
forall (AB : Type) (f : A -> G1 B),
ϕ (T B) ∘ traverse f = traverse (ϕ B ∘ f)
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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 morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 B
ϕ (T B) ∘ traverse f = traverse (ϕ B ∘ f)
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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 morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 B
ϕ (T B) ∘ Traverse_Categorical T G1 H2 H4 H3 A B f =
Traverse_Categorical T G2 H5 H7 H6 A B (ϕ B ∘ f)
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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 morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 B
ϕ (T B) ∘ (dist T G1 ∘ map f) =
dist T G2 ∘ map (ϕ B ∘ f)
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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 morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 B
ϕ (T B) ∘ dist T G1 ∘ map f =
dist T G2 ∘ map (ϕ B ∘ f)
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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 morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 B
dist T G2 ∘ map (ϕ B) ∘ map f =
dist T G2 ∘ map (ϕ B ∘ f)
T: Type -> Type H: Map T H0: ApplicativeDist T H1: Categorical.TraversableFunctor.TraversableFunctor
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 morph: ApplicativeMorphism G1 G2 ϕ A, B: Type f: A -> G1 B
dist T G2 ∘ (map (ϕ B) ∘ map f) =
dist T G2 ∘ map (ϕ B ∘ f)