Fixpoint addInAllLocations(A : Type)(a : A)(ls : list A) :=
  match ls with
    | nil =>  (a :: nil) :: nil
    | a' :: ls' => 
      (a :: ls) :: map (fun x => a' :: x) (addInAllLocations a ls')
  end.Fixpoint getAllPermutations(A : Type)(ls : list A) :=
  match ls with
    | nil => nil :: nil
    | a :: ls' =>
      let perms' := getAllPermutations ls' in
        flatten (map (addInAllLocations a) perms')
  end.

Theorem getAllPermutations_not_nil : forall (A : Type)(ls : list A), getAllPermutations ls = nil -> False.