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.DecoratedFunctor
Classes.Kleisli.DecoratedFunctor
Classes.Kleisli.Comonad (kc1, cobind)
CategoricalToKleisli.Comonad.#[local] Generalizable VariablesE F.Import Product.Notations.Import Kleisli.Comonad.Notations.(** * Categorical Decorated Functors to Kleisli Decorated Functors *)(**********************************************************************)(** ** Derived <<mapd>> Operation *)(**********************************************************************)ModuleDerivedOperations.#[export] InstanceMapd_Categorical
(E: Type)
(F: Type -> Type)
`{Map_F: Map F}
`{Decorate_EF: Decorate E F}: Mapd E F :=
funAB (f: E * A -> B) => map (F := F) f ∘ dec F.EndDerivedOperations.(** ** Compatibility Classes *)(**********************************************************************)ClassCompat_Mapd_Categorical
(E: Type)
(F: Type -> Type)
`{Map_F: Map F}
`{Decorate_EF: Decorate E F}
`{Mapd_F: Mapd E F} :=
compat_mapd_categorical:
Mapd_F = @DerivedOperations.Mapd_Categorical E F Map_F Decorate_EF.
E: Type F: Type -> Type Map_F: Map F Decorate_EF: Decorate E F Mapd_F: Mapd E F Map_F0: Map F Decorate_EF0: Decorate E F Mapd_F0: Mapd E F Compat: Compat_Mapd_Categorical E F
forall (AB : Type) (f : E * A -> B) (t : F A),
mapd f t = map f (dec F t)
E: Type F: Type -> Type Map_F: Map F Decorate_EF: Decorate E F Mapd_F: Mapd E F Map_F0: Map F Decorate_EF0: Decorate E F Mapd_F0: Mapd E F Compat: Compat_Mapd_Categorical E F
forall (AB : Type) (f : E * A -> B) (t : F A),
mapd f t = map f (dec F t)
nowrewrite compat_mapd_categorical.Qed.(** ** Interaction of <<dec>> with <<mapd>> *)(**********************************************************************)Sectiondecorate_after_mapd_reasoning.Context
(E: Type)
(T: Type -> Type)
`{Map_F: Map F}
`{Decorate_EF: Decorate E F}
`{Mapd_F: Mapd E F}
`{DecFun_EF: ! Categorical.DecoratedFunctor.DecoratedFunctor E F}
`{Compat: ! Compat_Mapd_Categorical E F}.Context {AB: Type} {f: E * A -> B} (t: F A).
E: Type T, F: Type -> Type Map_F: Map F Decorate_EF: Decorate E F Mapd_F: Mapd E F DecFun_EF: Categorical.DecoratedFunctor.DecoratedFunctor
E F Compat: Compat_Mapd_Categorical E F A, B: Type f: E * A -> B t: F A
dec F (mapd f t) = mapd (map f) (dec F t)
E: Type T, F: Type -> Type Map_F: Map F Decorate_EF: Decorate E F Mapd_F: Mapd E F DecFun_EF: Categorical.DecoratedFunctor.DecoratedFunctor
E F Compat: Compat_Mapd_Categorical E F A, B: Type f: E * A -> B t: F A
dec F (mapd f t) = mapd (map f) (dec F t)
E: Type T, F: Type -> Type Map_F: Map F Decorate_EF: Decorate E F Mapd_F: Mapd E F DecFun_EF: Categorical.DecoratedFunctor.DecoratedFunctor
E F Compat: Compat_Mapd_Categorical E F A, B: Type f: E * A -> B t: F A
dec F (mapd f t) = mapd (map f) (dec F t)
E: Type T, F: Type -> Type Map_F: Map F Decorate_EF: Decorate E F Mapd_F: Mapd E F DecFun_EF: Categorical.DecoratedFunctor.DecoratedFunctor
E F Compat: Compat_Mapd_Categorical E F A, B: Type f: E * A -> B t: F A
dec F (map f (dec F t)) = mapd (map f) (dec F t)
E: Type T, F: Type -> Type Map_F: Map F Decorate_EF: Decorate E F Mapd_F: Mapd E F DecFun_EF: Categorical.DecoratedFunctor.DecoratedFunctor
E F Compat: Compat_Mapd_Categorical E F A, B: Type f: E * A -> B t: F A
(dec F ∘ map f) (dec F t) = mapd (map f) (dec F t)
E: Type T, F: Type -> Type Map_F: Map F Decorate_EF: Decorate E F Mapd_F: Mapd E F DecFun_EF: Categorical.DecoratedFunctor.DecoratedFunctor
E F Compat: Compat_Mapd_Categorical E F A, B: Type f: E * A -> B t: F A dfun_functor: Functor F dfun_dec_natural: Natural (@dec E F Decorate_EF) dfun_dec_dec: forallA : Type,
dec F ∘ dec F = map cojoin ∘ dec F dfun_dec_extract: forallA : Type,
map extract ∘ dec F = id
(dec F ∘ map f) (dec F t) = mapd (map f) (dec F t)
E: Type T, F: Type -> Type Map_F: Map F Decorate_EF: Decorate E F Mapd_F: Mapd E F DecFun_EF: Categorical.DecoratedFunctor.DecoratedFunctor
E F Compat: Compat_Mapd_Categorical E F A, B: Type f: E * A -> B t: F A dfun_functor: Functor F dfun_dec_natural: Natural (@dec E F Decorate_EF) dfun_dec_dec: forallA : Type,
dec F ∘ dec F = map cojoin ∘ dec F dfun_dec_extract: forallA : Type,
map extract ∘ dec F = id
(map f ∘ dec F) (dec F t) = mapd (map f) (dec F t)
E: Type T, F: Type -> Type Map_F: Map F Decorate_EF: Decorate E F Mapd_F: Mapd E F DecFun_EF: Categorical.DecoratedFunctor.DecoratedFunctor
E F Compat: Compat_Mapd_Categorical E F A, B: Type f: E * A -> B t: F A dfun_functor: Functor F dfun_dec_natural: Natural (@dec E F Decorate_EF) dfun_dec_dec: forallA : Type,
dec F ∘ dec F = map cojoin ∘ dec F dfun_dec_extract: forallA : Type,
map extract ∘ dec F = id
map f (dec F (dec F t)) = mapd (map f) (dec F t)
E: Type T, F: Type -> Type Map_F: Map F Decorate_EF: Decorate E F Mapd_F: Mapd E F DecFun_EF: Categorical.DecoratedFunctor.DecoratedFunctor
E F Compat: Compat_Mapd_Categorical E F A, B: Type f: E * A -> B t: F A dfun_functor: Functor F dfun_dec_natural: Natural (@dec E F Decorate_EF) dfun_dec_dec: forallA : Type,
dec F ∘ dec F = map cojoin ∘ dec F dfun_dec_extract: forallA : Type,
map extract ∘ dec F = id
map f (dec F (dec F t)) =
map (map f) (dec F (dec F t))
reflexivity.Qed.
E: Type T, F: Type -> Type Map_F: Map F Decorate_EF: Decorate E F Mapd_F: Mapd E F DecFun_EF: Categorical.DecoratedFunctor.DecoratedFunctor
E F Compat: Compat_Mapd_Categorical E F A, B: Type f: E * A -> B t: F A
dec F (mapd f t) = map (cobind f) (dec F t)
E: Type T, F: Type -> Type Map_F: Map F Decorate_EF: Decorate E F Mapd_F: Mapd E F DecFun_EF: Categorical.DecoratedFunctor.DecoratedFunctor
E F Compat: Compat_Mapd_Categorical E F A, B: Type f: E * A -> B t: F A
dec F (mapd f t) = map (cobind f) (dec F t)
E: Type T, F: Type -> Type Map_F: Map F Decorate_EF: Decorate E F Mapd_F: Mapd E F DecFun_EF: Categorical.DecoratedFunctor.DecoratedFunctor
E F Compat: Compat_Mapd_Categorical E F A, B: Type f: E * A -> B t: F A
dec F (mapd f t) = map (cobind f) (dec F t)
E: Type T, F: Type -> Type Map_F: Map F Decorate_EF: Decorate E F Mapd_F: Mapd E F DecFun_EF: Categorical.DecoratedFunctor.DecoratedFunctor
E F Compat: Compat_Mapd_Categorical E F A, B: Type f: E * A -> B t: F A
mapd (map f) (dec F t) = map (cobind f) (dec F t)
E: Type T, F: Type -> Type Map_F: Map F Decorate_EF: Decorate E F Mapd_F: Mapd E F DecFun_EF: Categorical.DecoratedFunctor.DecoratedFunctor
E F Compat: Compat_Mapd_Categorical E F A, B: Type f: E * A -> B t: F A
map (map f) (dec F (dec F t)) =
map (cobind f) (dec F t)
E: Type T, F: Type -> Type Map_F: Map F Decorate_EF: Decorate E F Mapd_F: Mapd E F DecFun_EF: Categorical.DecoratedFunctor.DecoratedFunctor
E F Compat: Compat_Mapd_Categorical E F A, B: Type f: E * A -> B t: F A
map (map f) ((dec F ∘ dec F) t) =
map (cobind f) (dec F t)
E: Type T, F: Type -> Type Map_F: Map F Decorate_EF: Decorate E F Mapd_F: Mapd E F DecFun_EF: Categorical.DecoratedFunctor.DecoratedFunctor
E F Compat: Compat_Mapd_Categorical E F A, B: Type f: E * A -> B t: F A
map (map f) ((map cojoin ∘ dec F) t) =
map (cobind f) (dec F t)
E: Type T, F: Type -> Type Map_F: Map F Decorate_EF: Decorate E F Mapd_F: Mapd E F DecFun_EF: Categorical.DecoratedFunctor.DecoratedFunctor
E F Compat: Compat_Mapd_Categorical E F A, B: Type f: E * A -> B t: F A
map (map f) (map cojoin (dec F t)) =
map (cobind f) (dec F t)
E: Type T, F: Type -> Type Map_F: Map F Decorate_EF: Decorate E F Mapd_F: Mapd E F DecFun_EF: Categorical.DecoratedFunctor.DecoratedFunctor
E F Compat: Compat_Mapd_Categorical E F A, B: Type f: E * A -> B t: F A
(map (map f) ∘ map cojoin) (dec F t) =
map (cobind f) (dec F t)
E: Type T, F: Type -> Type Map_F: Map F Decorate_EF: Decorate E F Mapd_F: Mapd E F DecFun_EF: Categorical.DecoratedFunctor.DecoratedFunctor
E F Compat: Compat_Mapd_Categorical E F A, B: Type f: E * A -> B t: F A
map (map f ∘ cojoin) (dec F t) =
map (cobind f) (dec F t)
E: Type T, F: Type -> Type Map_F: Map F Decorate_EF: Decorate E F Mapd_F: Mapd E F DecFun_EF: Categorical.DecoratedFunctor.DecoratedFunctor
E F Compat: Compat_Mapd_Categorical E F A, B: Type f: E * A -> B t: F A
map f ∘ cojoin = cobind f
now ext [e a].Qed.Enddecorate_after_mapd_reasoning.(** ** Derived co-Kleisli Laws *)(**********************************************************************)ModuleDerivedInstances.(* Alectryon doesn't like this Import CategoricalToKleisli.DecoratedFunctor.DerivedOperations. *)Import DerivedOperations.Import CategoricalToKleisli.Comonad.DerivedOperations.Sectionwith_functor.Context
(F: Type -> Type)
`{Classes.Categorical.DecoratedFunctor.DecoratedFunctor E F}.
F: Type -> Type E: Type H: Map F H0: Decorate E F H1: Categorical.DecoratedFunctor.DecoratedFunctor E F A: Type
mapd extract = id
F: Type -> Type E: Type H: Map F H0: Decorate E F H1: Categorical.DecoratedFunctor.DecoratedFunctor E F A: Type
mapd extract = id
F: Type -> Type E: Type H: Map F H0: Decorate E F H1: Categorical.DecoratedFunctor.DecoratedFunctor E F A: Type
mapd extract = id
F: Type -> Type E: Type H: Map F H0: Decorate E F H1: Categorical.DecoratedFunctor.DecoratedFunctor E F A: Type
Mapd_Categorical E F A A extract = id
F: Type -> Type E: Type H: Map F H0: Decorate E F H1: Categorical.DecoratedFunctor.DecoratedFunctor E F A: Type
map extract ∘ dec F = id
F: Type -> Type E: Type H: Map F H0: Decorate E F H1: Categorical.DecoratedFunctor.DecoratedFunctor E F A: Type
id = id
reflexivity.Qed.
F: Type -> Type E: Type H: Map F H0: Decorate E F H1: Categorical.DecoratedFunctor.DecoratedFunctor E F A, B, C: Type g: E * B -> C f: E * A -> B
mapd g ∘ mapd f = mapd (g ⋆1 f)
F: Type -> Type E: Type H: Map F H0: Decorate E F H1: Categorical.DecoratedFunctor.DecoratedFunctor E F A, B, C: Type g: E * B -> C f: E * A -> B
mapd g ∘ mapd f = mapd (g ⋆1 f)
F: Type -> Type E: Type H: Map F H0: Decorate E F H1: Categorical.DecoratedFunctor.DecoratedFunctor E F A, B, C: Type g: E * B -> C f: E * A -> B
map g ∘ dec F ∘ (map f ∘ dec F) = map (g ⋆1 f) ∘ dec F
F: Type -> Type E: Type H: Map F H0: Decorate E F H1: Categorical.DecoratedFunctor.DecoratedFunctor E F A, B, C: Type g: E * B -> C f: E * A -> B
map g ∘ dec F ∘ map f ∘ dec F = map (g ⋆1 f) ∘ dec F
F: Type -> Type E: Type H: Map F H0: Decorate E F H1: Categorical.DecoratedFunctor.DecoratedFunctor E F A, B, C: Type g: E * B -> C f: E * A -> B
map g ∘ (dec F ∘ map f) ∘ dec F = map (g ⋆1 f) ∘ dec F
F: Type -> Type E: Type H: Map F H0: Decorate E F H1: Categorical.DecoratedFunctor.DecoratedFunctor E F A, B, C: Type g: E * B -> C f: E * A -> B
map g ∘ (map f ∘ dec F) ∘ dec F = map (g ⋆1 f) ∘ dec F
F: Type -> Type E: Type H: Map F H0: Decorate E F H1: Categorical.DecoratedFunctor.DecoratedFunctor E F A, B, C: Type g: E * B -> C f: E * A -> B
map g ∘ map f ∘ dec F ∘ dec F = map (g ⋆1 f) ∘ dec F
F: Type -> Type E: Type H: Map F H0: Decorate E F H1: Categorical.DecoratedFunctor.DecoratedFunctor E F A, B, C: Type g: E * B -> C f: E * A -> B
map g ∘ map (map_snd f) ∘ dec F ∘ dec F =
map (g ⋆1 f) ∘ dec F
F: Type -> Type E: Type H: Map F H0: Decorate E F H1: Categorical.DecoratedFunctor.DecoratedFunctor E F A, B, C: Type g: E * B -> C f: E * A -> B
map (g ∘ map_snd f) ∘ dec F ∘ dec F =
map (g ⋆1 f) ∘ dec F
F: Type -> Type E: Type H: Map F H0: Decorate E F H1: Categorical.DecoratedFunctor.DecoratedFunctor E F A, B, C: Type g: E * B -> C f: E * A -> B
map (g ∘ map_snd f) ∘ (dec F ∘ dec F) =
map (g ⋆1 f) ∘ dec F
F: Type -> Type E: Type H: Map F H0: Decorate E F H1: Categorical.DecoratedFunctor.DecoratedFunctor E F A, B, C: Type g: E * B -> C f: E * A -> B
map (g ∘ map_snd f) ∘ (map cojoin ∘ dec F) =
map (g ⋆1 f) ∘ dec F
F: Type -> Type E: Type H: Map F H0: Decorate E F H1: Categorical.DecoratedFunctor.DecoratedFunctor E F A, B, C: Type g: E * B -> C f: E * A -> B
map (g ∘ map_snd f) ∘ map cojoin ∘ dec F =
map (g ⋆1 f) ∘ dec F
F: Type -> Type E: Type H: Map F H0: Decorate E F H1: Categorical.DecoratedFunctor.DecoratedFunctor E F A, B, C: Type g: E * B -> C f: E * A -> B
map (g ∘ map_snd f ∘ cojoin) ∘ dec F =
map (g ⋆1 f) ∘ dec F
F: Type -> Type E: Type H: Map F H0: Decorate E F H1: Categorical.DecoratedFunctor.DecoratedFunctor E F A, B, C: Type g: E * B -> C f: E * A -> B
g ∘ map_snd f ∘ cojoin = g ⋆1 f
F: Type -> Type E: Type H: Map F H0: Decorate E F H1: Categorical.DecoratedFunctor.DecoratedFunctor E F A, B, C: Type g: E * B -> C f: E * A -> B e: E a: A
(g ∘ map_snd f ∘ cojoin) (e, a) = (g ⋆1 f) (e, a)
reflexivity.Qed.(** ** Typeclass Instance *)(******************************************************************)#[export] InstanceDecoratedFunctor:
Kleisli.DecoratedFunctor.DecoratedFunctor E F :=
{| kdf_mapd1 := @mapd_id;
kdf_mapd2 := @mapd_mapd
|}.Endwith_functor.EndDerivedInstances.(** ** Miscellaneous Properties *)(**********************************************************************)SectionDecoratedFunctor_misc.Context
(T: Type -> Type)
`{Categorical.DecoratedFunctor.DecoratedFunctor E T}.
T: Type -> Type E: Type H: Map T H0: Decorate E T H1: Categorical.DecoratedFunctor.DecoratedFunctor E T A, B: Type
forallf : E * A -> B,
map (cobind f) ∘ dec T = dec T ∘ map f ∘ dec T
T: Type -> Type E: Type H: Map T H0: Decorate E T H1: Categorical.DecoratedFunctor.DecoratedFunctor E T A, B: Type
forallf : E * A -> B,
map (cobind f) ∘ dec T = dec T ∘ map f ∘ dec T
T: Type -> Type E: Type H: Map T H0: Decorate E T H1: Categorical.DecoratedFunctor.DecoratedFunctor E T A, B: Type f: E * A -> B
map (cobind f) ∘ dec T = dec T ∘ map f ∘ dec T
T: Type -> Type E: Type H: Map T H0: Decorate E T H1: Categorical.DecoratedFunctor.DecoratedFunctor E T A, B: Type f: E * A -> B
map (fun '(e, a) => (e, f (e, a))) ∘ dec T =
dec T ∘ map f ∘ dec T
T: Type -> Type E: Type H: Map T H0: Decorate E T H1: Categorical.DecoratedFunctor.DecoratedFunctor E T A, B: Type f: E * A -> B
map (fun '(e, a) => (e, f (e, a))) ∘ dec T =
map f ∘ dec T ∘ dec T
T: Type -> Type E: Type H: Map T H0: Decorate E T H1: Categorical.DecoratedFunctor.DecoratedFunctor E T A, B: Type f: E * A -> B
map (fun '(e, a) => (e, f (e, a))) ∘ dec T =
map (map f) ∘ dec T ∘ dec T
T: Type -> Type E: Type H: Map T H0: Decorate E T H1: Categorical.DecoratedFunctor.DecoratedFunctor E T A, B: Type f: E * A -> B
map (fun '(e, a) => (e, f (e, a))) ∘ dec T =
map (map f) ∘ (dec T ∘ dec T)
T: Type -> Type E: Type H: Map T H0: Decorate E T H1: Categorical.DecoratedFunctor.DecoratedFunctor E T A, B: Type f: E * A -> B
map (fun '(e, a) => (e, f (e, a))) ∘ dec T =
map (map f) ∘ (map cojoin ∘ dec T)
T: Type -> Type E: Type H: Map T H0: Decorate E T H1: Categorical.DecoratedFunctor.DecoratedFunctor E T A, B: Type f: E * A -> B
map (fun '(e, a) => (e, f (e, a))) ∘ dec T =
map (map f) ∘ map cojoin ∘ dec T
T: Type -> Type E: Type H: Map T H0: Decorate E T H1: Categorical.DecoratedFunctor.DecoratedFunctor E T A, B: Type f: E * A -> B
map (fun '(e, a) => (e, f (e, a))) ∘ dec T =
map (map f ∘ cojoin) ∘ dec T
T: Type -> Type E: Type H: Map T H0: Decorate E T H1: Categorical.DecoratedFunctor.DecoratedFunctor E T A, B: Type f: E * A -> B
map (fun '(e, a) => (e, f (e, a))) =
map (map f ∘ cojoin)
T: Type -> Type E: Type H: Map T H0: Decorate E T H1: Categorical.DecoratedFunctor.DecoratedFunctor E T A, B: Type f: E * A -> B