Admitted. (* Higher-Order *)

(* Specifications: *)
Theorem dist_exists_or : forall (X:Type) (P Q : X -> Prop),
(exists x, P x \/ Q x) <-> (exists x, P x) \/ (exists x, Q x).
Lemma in_app_iff : forall A l l' (a:A),
In a (app l l') <-> In a l \/ In a l'.