(** [find] *)

(* 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).
Fixpoint partition (l:list A) : list A * list A :=
match l with
| [] => ([], [])
| x :: tl => let (g,d) := partition tl in
if f x then (x::g,d) else (g,x::d)
end.