Global Instance Finite_prod {X Y} `{Finite X, Finite Y} : Finite (X * Y).
Definition indicate (b : bool) : Q :=
if b then 1 else 0.
Definition indicate_nat (b : bool) : nat :=
if b then 1 else O.

Lemma sum_dist_flat_map {X Y} (f : X -> list (Y * Q)) (xs : list X) :
sum_dist (flat_map f xs) ==
Qsum (map (fun x => sum_dist (f x)) xs).