(* Take a list and return tle list of all pairs of an element of the 
   list and the remaining list *) 
Fixpoint split_one (l : list A) : list (A * list A) :=
  match l with
  | nil => nil
  | a :: l1 =>
     (a, l1) :: map (fun p : A * list A => (fst p, a :: snd p)) (split_one l1)
  end.

Theorem split_one_permutation : forall (a : A) (l1 l2 : list A), In (a, l1) (split_one l2) -> permutation (a :: l1) l2.