Fixpoint forNats(n : nat) :=
  match n with
      | 0 => nil
      | S n' =>
        cons n' (forNats n')
  end.

Theorem list_pred_combine_r : forall (A B C : Set) (P1 : A -> B -> Prop) (P2 : A -> C -> Prop) (lsa : list A) (lsb : list B) (lsc : list C), list_pred P1 lsa lsb -> list_pred P2 lsa lsc -> list_pred (fun a p => P1 a (fst p) /\ P2 a (snd p)) lsa (combine lsb lsc).