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.DecoratedMonad
Classes.Kleisli.DecoratedMonad
Adapters.CategoricalToKleisli.DecoratedMonad
Adapters.KleisliToCategorical.DecoratedMonad.Import Product.Notations.Import Kleisli.Monad.Notations.Import Kleisli.Comonad.Notations.Import Kleisli.DecoratedMonad.Notations.#[local] Generalizable VariableT W.(** * Categorical ~> Kleisli ~> Categorical *)(**********************************************************************)Moduledecorated_monad_categorical_kleisli_categorical.Context
`{mapT: Map T}
`{decT: Decorate W T}
`{joinT: Join T}
`{retT: Return T}
`{Monoid W}
`{! Categorical.DecoratedMonad.DecoratedMonad W T}.Definitionbindd': Bindd W T T :=
DerivedOperations.Bindd_Categorical W T.Definitionmap2: Map T :=
DerivedOperations.Map_Bindd W T T (Bindd_WTU := bindd').Definitiondec2: Decorate W T :=
DerivedOperations.Decorate_Bindd W T (Bindd_WTT := bindd').Definitionjoin2: Join T :=
DerivedOperations.Join_Bindd W T (Bindd_WTT := bindd').
mapT = map2
mapT = map2
mapT = DerivedOperations.Map_Bindd W T T
mapT =
(fun (AB : Type) (f : A -> B) =>
bindd (ret ∘ f ∘ extract))
mapT =
(fun (AB : Type) (f : A -> B) =>
bindd' A B (ret ∘ f ∘ extract))
mapT =
(fun (AB : Type) (f : A -> B) =>
DerivedOperations.Bindd_Categorical W T A B
(ret ∘ f ∘ extract))
mapT =
(fun (AB : Type) (f : A -> B) =>
join ∘ map (ret ∘ f ∘ extract) ∘ dec T)
A, B: Type f: A -> B
mapT A B f = join ∘ map (ret ∘ f ∘ extract) ∘ dec T
A, B: Type f: A -> B
mapT A B f =
join ∘ (map (ret ∘ f) ∘ map extract) ∘ dec T
A, B: Type f: A -> B
mapT A B f =
join ∘ map (ret ∘ f) ∘ map extract ∘ dec T
A, B: Type f: A -> B
mapT A B f =
join ∘ map (ret ∘ f) ∘ (map extract ∘ dec T)
A, B: Type f: A -> B
mapT A B f = join ∘ map (ret ∘ f) ∘ id
A, B: Type f: A -> B
mapT A B f = join ∘ (map ret ∘ map f) ∘ id
A, B: Type f: A -> B
mapT A B f = join ∘ map ret ∘ map f ∘ id
A, B: Type f: A -> B
mapT A B f = id ∘ map f ∘ id
reflexivity.Qed.
decT = dec2
decT = dec2
decT = DerivedOperations.Decorate_Bindd W T
decT = (funA : Type => bindd ret)
decT = (funA : Type => bindd' A (W * A) ret)
decT =
(funA : Type =>
DerivedOperations.Bindd_Categorical W T A (W * A) ret)
decT = (funA : Type => join ∘ map ret ∘ dec T)
A: Type
decT A = join ∘ map ret ∘ dec T
A: Type
decT A = id ∘ dec T
reflexivity.Qed.
joinT = join2
joinT = join2
joinT = DerivedOperations.Join_Bindd W T
joinT = (funA : Type => bindd extract)
joinT = (funA : Type => bindd' (T A) A extract)
joinT =
(funA : Type =>
DerivedOperations.Bindd_Categorical W T (T A) A
extract)
joinT = (funA : Type => join ∘ map extract ∘ dec T)
A: Type
joinT A = join ∘ map extract ∘ dec T
A: Type
joinT A = join ∘ (map extract ∘ dec T)
A: Type
joinT A = join ∘ id
reflexivity.Qed.Enddecorated_monad_categorical_kleisli_categorical.(** * Kleisli ~> Categorical ~> Kleisli *)(**********************************************************************)Moduledecorated_monad_kleisli_categorical_kleisli.Context
`{binddT: Bindd W T T}
`{retT: Return T}
`{Monoid W}
`{@Kleisli.DecoratedMonad.DecoratedMonad W T _ _ retT binddT}.Definitionmap': Map T :=
DerivedOperations.Map_Bindd W T T.Definitiondec': Decorate W T :=
DerivedOperations.Decorate_Bindd W T.Definitionjoin': Join T :=
DerivedOperations.Join_Bindd W T.Definitionbindd2: Bindd W T T :=
DerivedOperations.Bindd_Categorical W T
(Map_T := map') (Join_T := join') (Decorate_WT := dec').
binddT = bindd2
binddT = bindd2
binddT = DerivedOperations.Bindd_Categorical W T
binddT =
(fun (AB : Type) (f : W * A -> T B) =>
join ∘ map f ∘ dec T)
binddT =
(fun (AB : Type) (f : W * A -> T B) =>
DerivedOperations.Join_Bindd W T B
∘ DerivedOperations.Map_Bindd W T T (W * A) (T B) f
∘ DerivedOperations.Decorate_Bindd W T A)
binddT =
(fun (AB : Type) (f : W * A -> T B) =>
DerivedOperations.Join_Bindd W T B
∘ bindd (ret ∘ f ∘ extract)
∘ DerivedOperations.Decorate_Bindd W T A)
binddT =
(fun (AB : Type) (f : W * A -> T B) =>
bindd extract ∘ bindd (ret ∘ f ∘ extract)
∘ DerivedOperations.Decorate_Bindd W T A)
binddT =
(fun (AB : Type) (f : W * A -> T B) =>
bindd extract ∘ bindd (ret ∘ f ∘ extract) ∘ bindd ret)
A, B: Type f: W * A -> T B
binddT A B f =
bindd extract ∘ bindd (ret ∘ f ∘ extract) ∘ bindd ret
A, B: Type f: W * A -> T B
binddT A B f =
bindd extract ∘ bindd (ret ∘ f ∘ extract) ∘ bindd ret
A, B: Type f: W * A -> T B
binddT A B f =
bindd (extract ⋆5 ret ∘ f ∘ extract) ∘ bindd ret
A, B: Type f: W * A -> T B
binddT A B f =
bindd ((extract ⋆5 ret ∘ f ∘ extract) ⋆5 ret)