(** [find] *)

    Fixpoint find (l:list A) : option A :=
      match l with
      | [] => None
      | x :: tl => if f x then Some x else find tl
      end.

(* Specifications: *)
Lemma find_some l x : find l = Some x -> In x l /\ f x = true.
Lemma find_none l : find l = None -> forall x, In x l -> f x = false.
Lemma filter_rev (l : list A) : filter (rev l) = rev (filter l).