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.Monad
Classes.Kleisli.Monad.Import Kleisli.Monad.Notations.(** * Kleisli Monads to Categorical Monads *)(**********************************************************************)(** ** Derived <<join>> Operation *)(**********************************************************************)ModuleDerivedOperations.#[export] InstanceJoin_Bind
(T : Type -> Type)
`{Return_T: Return T}
`{Bind_TT: Bind T T}: Join T :=
funA => bind (@id (T A)).EndDerivedOperations.(** ** Derived Categorical Laws *)(**********************************************************************)ModuleToCategorical.Sectionproofs.Context
(T : Type -> Type)
`{Classes.Kleisli.Monad.Monad T}.(* Alectyron doesn't like this Import KleisliToCategorical.Monad.DerivedOperations. *)Import DerivedOperations.Existing InstanceKleisli.Monad.DerivedOperations.Map_Bind.Existing InstanceKleisli.Monad.DerivedInstances.Functor_Monad.
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T
Natural (@ret T Return_T)
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T
Natural (@ret T Return_T)
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T
Functor (funA : Type => A)
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T
Functor T
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T
forall (AB : Type) (f : A -> B),
map f ∘ ret = ret ∘ map f
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T
Functor (funA : Type => A)
typeclasses eauto.
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T
Functor T
typeclasses eauto.
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T
forall (AB : Type) (f : A -> B),
map f ∘ ret = ret ∘ map f
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T A, B: Type f: A -> B
map f ∘ ret = ret ∘ map f
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T A, B: Type f: A -> B
bind (ret ∘ f) ∘ ret = ret ∘ map f
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T A, B: Type f: A -> B
bind (ret ∘ f) ∘ ret = ret ∘ f
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T A, B: Type f: A -> B
ret ∘ f = ret ∘ f
reflexivity.Qed.
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T
Natural (@join T (Join_Bind T))
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T
Natural (@join T (Join_Bind T))
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T
Functor (T ∘ T)
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T
Functor T
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T
forall (AB : Type) (f : A -> B),
map f ∘ join = join ∘ map f
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T
Functor (T ∘ T)
typeclasses eauto.
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T
Functor T
typeclasses eauto.
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T
forall (AB : Type) (f : A -> B),
map f ∘ join = join ∘ map f
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T A, B: Type f: A -> B
map f ∘ join = join ∘ map f
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T A, B: Type f: A -> B
map f ∘ join = join ∘ map (map f)
T: Type -> Type Return_T: Return T Bind_TT: Bind T T H: Monad T A, B: Type f: A -> B