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 eval_bind {X Y} (m : dist X) (f : X -> dist Y) (E : Y -> bool) :
eval_dist (mbind m f) E ==
sigma_dist m (fun x q => q * eval_dist (f x) E).