fact: Record t := mk { f : [the functor of S \o T] ~> [the functor of T \o S] ; unit1 : IV (f \v (@ret S \h NId T)) = VI (NId T \h @ret S) ; unit2 : VI (f \v (NId S \h @ret T)) = IV (@ret T \h NId S) ; multiplication1 : AV (f \v (@join S \h NId T)) = (NId T \h @join S) \v VA ((f \h NId S) \v VA' (NId S \h f)) ; multiplication2 : AV' (f \v (NId S \h @join T)) = (@join T \h NId S) \v VA' ((NId T \h f) \v VA (f \h NId T)) }.
imports: mathcomp(all_ssreflect) HB(structures) monae_lib hierarchy monad_lib