fact: Definition UpdFromLaws pf1 pf2 pf3 : Monad := @mkMonad (fun A => X -> A × M) (fun A a x => ⟨a, e M⟩) (fun A B m f x => let mx := m x in let fx := f (nfst mx) (nsnd mx ⧕ x) in ⟨nfst fx, nsnd fx ⋅ nsnd mx⟩) pf1 pf2 pf3.
imports: Coq(ssreflect List) Mon(SPropBase SPropMonadicStructures Monoid)