Proof with auto with real.
revert f.
induction f.
rewrite (@monoid_expec_bind_det _ n)...
unfold ne_tree_monad.deterministic...
unfold monoid_expec in *.
rewrite MonoidMonadTrans.bind_toLower in *.
rewrite ne_tree_monad.bind_Node_one.
repeat rewrite expec_Node_one.
intros.
rewrite IHf...
unfold monoid_expec in *.
rewrite MonoidMonadTrans.bind_toLower in *.
rewrite expec_Node_cons.
rewrite expec_bind_cons.
intros.
rewrite IHf...
rewrite IHf0.
simpl ne_tree.head.
repeat rewrite S_INR.
rewrite (gc (ne_tree.head (ne_list.head l)) (ne_tree.head f))...
simpl.
unfold ne_tree_monad.C.
field...
apply ne_tree.InNode. apply ne_tree.InTail.
destruct l...
intros.
inversion_clear H. inversion_clear H0.
apply gc...
Qed.

(* Specifications: *)
Lemma monoid_expec_map_fst_monoid_mult (A: Set) (g: m) (t: MonoidMonadTrans.M m ne_tree_monad.ext A):
monoid_expec (ne_tree.map (map_fst (monoid_mult m g)) t) =
INR (ms g) + monoid_expec t.