Proof with auto.
induction l...
intros.
simpl.
rewrite concat_map_nil...
intros.
simpl.
rewrite IHl.
apply Permutation_sym.
rewrite Permutation_concat_map_app.
rewrite concat_app...
Qed.
Instance map_eq_morphism A B: Proper (pointwise_relation _ eq ==> eq ==> eq) (@map A B).
Proof with auto.
repeat intro.
subst.
induction y0...
simpl.
congruence.
Qed.
Section splits_and_perms.
Context {T: Type}.
Fixpoint splits (l: list T): list (T * list T) :=
match l with
| nil => nil
| h :: t => (h, t) :: map (fun xy => (fst xy, h :: snd xy)) (splits t)
end.

(* Specifications: *)
Lemma length_splits l: length (splits l) = length l.
Proof with auto.