Proof using.
intros l1 l2 H; elim H; clear H l1 l2; auto.
intros a l3 l4 H0 H1 b H2.
apply f_equal2 with (f := cons (A:=A)).
injection H2; auto.
apply permutation_nil_inv; auto.
injection H2; intros H3 H4; rewrite <- H3; auto.
apply permutation_sym; auto.
intros; discriminate.
Qed.

(* A permutation of the singleton list is the singleton list *)
Theorem permutation_one_inv :
forall (a : A) (l : list A), permutation (a :: nil) l -> l = a :: nil.