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.DecoratedTraversableFunctor
  Classes.Kleisli.DecoratedTraversableFunctor
  Adapters.CategoricalToKleisli.DecoratedTraversableFunctor
  Adapters.KleisliToCategorical.DecoratedTraversableFunctor.

Import Product.Notations.
Import Functor.Notations.
Import Kleisli.DecoratedTraversableFunctor.Notations.

#[local] Generalizable Variable T.

(** * Categorical ~> Kleisli ~> Categorical *)
(**********************************************************************)
Module Roundtrip1.

  Context
    (E: Type)
    (T: Type -> Type)
    `{mapT: Map T}
    `{distT: ApplicativeDist T}
    `{decorateT: Decorate E T}
    `{! Categorical.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T}.

  #[local] Instance mapdt': Mapdt E T :=
    DerivedOperations.Mapdt_Categorical E T.

  Definition map2: Map T :=
    DerivedOperations.Map_Mapdt.
  Definition decorate2: Decorate E T :=
    DerivedOperations.Decorate_Mapdt E T.
  Definition dist2: ApplicativeDist T :=
    DerivedOperations.Dist_Mapdt E T.

  

mapT = map2

mapT = map2

mapT = DerivedOperations.Map_Mapdt

mapT = (fun (A B : Type) (f : A -> B) => mapdt (f ∘ extract))

mapT = (fun (A B : Type) (f : A -> B) => mapdt' (fun A0 : Type => A0) Map_I Pure_I Mult_I A B (f ∘ extract))

mapT = (fun (A B : Type) (f : A -> B) => DerivedOperations.Mapdt_Categorical E T (fun A0 : Type => A0) Map_I Pure_I Mult_I A B (f ∘ extract))

mapT = (fun (A B : Type) (f : A -> B) => dist T (fun A0 : Type => A0) ∘ map (f ∘ extract) ∘ dec T)
A, B: Type
f: A -> B

mapT A B f = dist T (fun A : Type => A) ∘ map (f ∘ extract) ∘ dec T
A, B: Type
f: A -> B

mapT A B f = id ∘ map (f ∘ extract) ∘ dec T
A, B: Type
f: A -> B

mapT A B f = id ∘ (map f ∘ map extract) ∘ dec T
A, B: Type
f: A -> B

mapT A B f = id ∘ (map f ∘ map extract ∘ dec T)
A, B: Type
f: A -> B

mapT A B f = id ∘ (map f ∘ (map extract ∘ dec T))
A, B: Type
f: A -> B

mapT A B f = id ∘ (map f ∘ id)
reflexivity. Qed.

distT = dist2

distT = dist2
G: Type -> Type
Hmap: Map G
Hpure: Pure G
Hmult: Mult G
u: Type

distT G Hmap Hpure Hmult u = dist2 G Hmap Hpure Hmult u
G: Type -> Type
Hmap: Map G
Hpure: Pure G
Hmult: Mult G
u: Type

distT G Hmap Hpure Hmult u = DerivedOperations.Dist_Mapdt E T G Hmap Hpure Hmult u
G: Type -> Type
Hmap: Map G
Hpure: Pure G
Hmult: Mult G
u: Type

distT G Hmap Hpure Hmult u = mapdt extract
G: Type -> Type
Hmap: Map G
Hpure: Pure G
Hmult: Mult G
u: Type

distT G Hmap Hpure Hmult u = mapdt' G Hmap Hpure Hmult (G u) u extract
G: Type -> Type
Hmap: Map G
Hpure: Pure G
Hmult: Mult G
u: Type

distT G Hmap Hpure Hmult u = DerivedOperations.Mapdt_Categorical E T G Hmap Hpure Hmult (G u) u extract
G: Type -> Type
Hmap: Map G
Hpure: Pure G
Hmult: Mult G
u: Type

distT G Hmap Hpure Hmult u = dist T G ∘ map extract ∘ dec T
G: Type -> Type
Hmap: Map G
Hpure: Pure G
Hmult: Mult G
u: Type

distT G Hmap Hpure Hmult u = dist T G ∘ (map extract ∘ dec T)
G: Type -> Type
Hmap: Map G
Hpure: Pure G
Hmult: Mult G
u: Type

distT G Hmap Hpure Hmult u = dist T G ∘ id
reflexivity. Qed.

decorateT = decorate2

decorateT = decorate2
A: Type

decorateT A = decorate2 A
A: Type

decorateT A = DerivedOperations.Decorate_Mapdt E T A
A: Type

decorateT A = mapdt id
A: Type

decorateT A = mapdt' (fun A : Type => A) Map_I Pure_I Mult_I A (E * A) id
A: Type

decorateT A = DerivedOperations.Mapdt_Categorical E T (fun A : Type => A) Map_I Pure_I Mult_I A (E * A) id
A: Type

decorateT A = dist T (fun A : Type => A) ∘ map id ∘ dec T
A: Type

decorateT A = id ∘ map id ∘ dec T
A: Type

decorateT A = id ∘ id ∘ dec T
reflexivity. Qed. End Roundtrip1. (** * Kleisli ~> Categorical ~> Kleisli *) (**********************************************************************) Module Roundtrip2. Context (E: Type) (T: Type -> Type) `{mapdtT: Mapdt E T} `{! Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T}. #[local] Instance map': Map T := DerivedOperations.Map_Mapdt. #[local] Instance dist': ApplicativeDist T := DerivedOperations.Dist_Mapdt E T. #[local] Instance decorate': Decorate E T := DerivedOperations.Decorate_Mapdt E T. Definition mapdt2: Mapdt E T := DerivedOperations.Mapdt_Categorical E T.

forall (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> mapdtT G Map_G Pure_G Mult_G = mapdt2 G Map_G Pure_G Mult_G

forall (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> mapdtT G Map_G Pure_G Mult_G = mapdt2 G Map_G Pure_G Mult_G
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G

mapdtT G Map_G Pure_G Mult_G = mapdt2 G Map_G Pure_G Mult_G
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: E * A -> G B

mapdtT G Map_G Pure_G Mult_G A B f = mapdt2 G Map_G Pure_G Mult_G A B f
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: E * A -> G B

mapdtT G Map_G Pure_G Mult_G A B f = DerivedOperations.Mapdt_Categorical E T G Map_G Pure_G Mult_G A B f
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: E * A -> G B

mapdtT G Map_G Pure_G Mult_G A B f = dist T G ∘ map f ∘ dec T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: E * A -> G B

mapdtT G Map_G Pure_G Mult_G A B f = dist T G ∘ map' (E * A) (G B) f ∘ dec T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: E * A -> G B

mapdtT G Map_G Pure_G Mult_G A B f = dist T G ∘ DerivedOperations.Map_Mapdt (E * A) (G B) f ∘ dec T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: E * A -> G B

mapdtT G Map_G Pure_G Mult_G A B f = dist T G ∘ mapdt (f ∘ extract) ∘ dec T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: E * A -> G B

mapdtT G Map_G Pure_G Mult_G A B f = dist' G Map_G Pure_G Mult_G B ∘ mapdt (f ∘ extract) ∘ dec T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: E * A -> G B

mapdtT G Map_G Pure_G Mult_G A B f = DerivedOperations.Dist_Mapdt E T G Map_G Pure_G Mult_G B ∘ mapdt (f ∘ extract) ∘ dec T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: E * A -> G B

mapdtT G Map_G Pure_G Mult_G A B f = mapdt extract ∘ mapdt (f ∘ extract) ∘ dec T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: E * A -> G B

mapdtT G Map_G Pure_G Mult_G A B f = mapdt extract ∘ mapdt (f ∘ extract) ∘ decorate' A
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: E * A -> G B

mapdtT G Map_G Pure_G Mult_G A B f = mapdt extract ∘ mapdt (f ∘ extract) ∘ DerivedOperations.Decorate_Mapdt E T A
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: E * A -> G B

mapdtT G Map_G Pure_G Mult_G A B f = mapdt extract ∘ mapdt (f ∘ extract) ∘ mapdt id
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: E * A -> G B

mapdtT G Map_G Pure_G Mult_G A B f = mapdt extract ∘ map f ∘ mapdt id
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: E * A -> G B

mapdtT G Map_G Pure_G Mult_G A B f = mapdt (extract ∘ map f) ∘ mapdt id
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: E * A -> G B

mapdtT G Map_G Pure_G Mult_G A B f = map (mapdt (extract ∘ map f)) ∘ mapdt id
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: E * A -> G B

mapdtT G Map_G Pure_G Mult_G A B f = mapdt (extract ∘ map f ⋆3 id)
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: E * A -> G B

mapdtT G Map_G Pure_G Mult_G A B f = mapdt (extract ∘ map f ⋆3 id)
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: E * A -> G B

mapdtT G Map_G Pure_G Mult_G A B f = mapdt (map f ∘ extract ⋆3 id)
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: E * A -> G B

mapdtT G Map_G Pure_G Mult_G A B f = mapdt (map (map f) ∘ id)
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f: E * A -> G B

mapdtT G Map_G Pure_G Mult_G A B f = mapdt (f ∘ id)
reflexivity. Qed. End Roundtrip2.