proposition: Lemma forall_imset (aT rT : finType) (f : aT -> rT) (p : {pred aT}) (q : {pred rT}) : [forall x in [set f z | z in p], q x] = [forall x in p, q (f x)].
proof: Proof. apply/forall_inP/forall_inP=>[allQ x xp|]; first by apply: allQ; rewrite imset_f. by move => allQ ? /imsetP[z zp ->]; apply: allQ. Qed.
imports: Coq(Setoid Morphisms) mathcomp(all_ssreflect) GraphTheory(edone)