Fixpoint permute(ls : list A)(sigma : list nat) : list A :=
    match sigma with
      | nil => nil
      | n :: sigma' => 
        match (nth_error ls n) with
          | None => nil
          | Some a => a :: (permute ls sigma')
        end
  end.

Theorem shuffle_Permutation : forall (ls1 ls2 : list A), In ls2 (getSupport (shuffle ls1)) -> Permutation ls1 ls2.