Proof with auto.
intros.
unfold monoid_expec.
unfold expec.
rewrite comp_apply.
rewrite ne_tree.map_map.
assert (ext_eq
(INR ∘ (ms ∘ fst (A:=m) (B:=A)) ∘ map_fst (C:=A) (monoid_mult m g))
(INR ∘ plus (ms g) ∘ mult 1 ∘ (ms ∘ fst (A:=m) (B:=A)))).
intro.
unfold compose.
simpl.
rewrite (monoidHomo_mult mh).
simpl.
rewrite plus_0_r...
rewrite (ne_tree.map_ext H).
rewrite <- ne_tree.map_map.
cset (lin_nat 1 (ms g) (ne_tree.map (ms ∘ fst (A:=m) (B:=A)) t)).
rewrite comp_apply in H0.
rewrite H0.
repeat rewrite comp_apply.
simpl INR.
rewrite Rmult_1_l.
rewrite ne_tree.map_map...
Qed.

(* Specifications: *)
Lemma monoid_expec_bind_0_r (A B: Set)
(g: A -> MonoidMonadTrans.M m ne_tree_monad.ext B)
(gc: forall x, monoid_expec (g x) = 0)
(f: MonoidMonadTrans.M m ne_tree_monad.ext A):
monoid_expec (f >>= g) = monoid_expec f.