intuition.
generalize (@getAllPermutations_pred _ _ (fun a b => nth_error ls b = Some a) ls (allNatsLt (length ls))) ; intros.
eapply list_pred_impl.
eapply H.
eapply allNats_nth_pred.
intuition.
eapply permute_nth_equiv.
trivial.
Qed.

Theorem list_pred_nth_exists :
forall (A B : Set)(P : A -> B -> Prop) lsa lsb,
list_pred P lsa lsb ->
forall n a,
nth_option lsa n = Some a -> exists b, nth_option lsb n = Some b /\ P a b.