Definition sumF {X} `{Finite X} (f : X -> nat) : nat :=
list_sum (map f enum).
Definition sumFQ {X} `{Finite X} (f : X -> Q) : Q :=
Qsum(map f enum).

Lemma eval_monad_map {X Y} (m : dist X) (E : Y -> bool) (f : X -> Y) :
eval_dist (monad_map f m) E ==
eval_dist m (fun x => E (f x)).