Proof with auto.
intros.
apply (@Permuted_Permutation_map (T * list T) nat (fun x y => fst x = fst y /\ Permutation (snd x) (snd y))  (fun x => length (filter (p (fst x)) (snd x)))).
intros.
destruct H0.
destruct x. destruct y.
simpl in H0. subst.
simpl.
simpl in H1.
rewrite H1...
apply splits_permuted...
Qed.

(* Specifications: *)
Lemma perms_alt_perms T (l: list T): Permutation (perms l) (alt_perms l).
Proof with auto.