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)).