(* END Tactics copied from ecm/Coqlib2.v *)

Ltac spec H :=
  match type of H with ?a -> _ =>
    let H1 := fresh in (assert (H1: a); [|generalize (H H1); clear H H1; intro H]) end.

(* Specifications: *)
Lemma f_equal_Some: forall A (x y: A), x=y -> Some x = Some y.
Lemma f_equal_prod: forall A B (x1 x2: A) (y1 y2: B), x1=x2 -> y1=y2 -> (x1,y1) = (x2,y2).
Lemma list_norepet_append_inv: forall (A : Set) (l1 l2 : list A), list_norepet (l1 ++ l2) -> list_norepet l1 /\ list_norepet l2 /\ list_disjoint l1 l2.