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

Theorem map_ext_pred : forall (A B C : Set)(P : A -> B -> Prop)(lsa : list A)(lsb : list B)(f1 : A -> C)(f2 : B -> C), list_pred P lsa lsb -> (forall a b, P a b -> (f1 a) = (f2 b)) -> map f1 lsa = map f2 lsb.