(* 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.

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