Proof using.
intros a l; elim l; simpl in |- *; auto.
intros H; case H; auto.
intros a0 l0 H [H0| H0].
exists l0; rewrite H0; auto.
case H; auto; intros l1 Hl1; exists (a0 :: l1).
apply permutation_trans with (a0 :: a :: l1); auto.
Qed.

Lemma permutation_cons_ex_aux :
forall (a : A) (l1 l2 : list A),
permutation l1 l2 ->
forall l11 l12 : list A,
l1 = l11 ++ a :: l12 ->
exists l3 : list A,
(exists l4 : list A,
l2 = l3 ++ a :: l4 /\ permutation (l11 ++ l12) (l3 ++ l4)).