proposition: Lemma dom_by_cdom_by : (P `X V) `<< (P `X W) <-> cdom_by.
proof: Proof. split; [move/dominatesP => H | move=> H; apply/dominatesP]. - move=> a p_not_0; apply/dominatesP => b; move: (H (a, b)). rewrite fdist_prodE /= => H0 H1. move: H0; rewrite H1 -RmultE mulR0 => /(_ erefl)/eqP. by rewrite fdist_prodE mulR_eq0' /= (negbTE p_not_0) orFb => /eqP. - case=> a p_not_0 b; move: {H}(H a) => H. rewrite fdist_prodE /=. have [->|H1] := eqVneq (P a) 0; first by rewrite -RmultE mul0R. move: {H}(H H1) => /dominatesP ->; first by rewrite -RmultE mulR0. move/eqP : b; by rewrite fdist_prodE mulR_eq0' /= (negbTE H1) orFb => /eqP. Qed.
imports: mathcomp(all_ssreflect ssralg finset matrix) Reals mathcomp(Rstruct) ssrR realType_ext Reals_ext ssr_ext ssralg_ext logb ln_facts num_occ fdist entropy channel divergence types jtypes proba jfdist_cond