proposition: Lemma imset_disjoint (A B : {pred aT}) : injective f -> [disjoint f @: A & f @: B] = [disjoint A & B].
proof: Proof. move=> inj_f; apply/pred0Pn/pred0Pn => /= [[_ /andP[/imsetP[x xA ->]] xB]|]. by exists x; rewrite xA -(mem_imset B x inj_f). by move=> [x /andP[xA xB]]; exists (f x); rewrite !mem_imset ?xA. Qed.
imports: HB(structures) mathcomp(ssreflect ssrbool ssrfun eqtype ssrnat div seq) mathcomp(choice fintype finfun bigop)