Proof using.
intros b l; elim l; simpl in |- *; auto.
intros tmp; case tmp.
intros a0 l0 H [H1| H1]; auto.
exists a0; auto.
case (H H1); intros a1 (H2, H3); exists a1; auto.
Qed.

(* Specifications: *)
Theorem in_map_fst_inv :
forall a (l : list (B * C)),
In a (map (fst (B:=_)) l) -> exists c : _, In (a, c) l.