Fixpoint lm_to_ml {A:Type} (lm:list (monad A)) : monad (list A):=
match lm with
| [] => Mreturn []
| m::ms => m >>::(lm_to_ml ms)
end.

Lemma lm_to_ml_incl_incl {A B C:Type} mal f1 (f2 : A → list B) (g : A → list C) st:
(∀ st ma, ma ∈ mal → incl (flat_map f1 (f2 (snd (ma st)))) (g (snd (ma st)))) →
incl (flat_map f1 (concat (map f2 (snd (lm_to_ml mal st)))))
(concat (map g (snd (lm_to_ml mal st)))).