Notation "[ s | p ∈ A ]" :=
  (map (fun p => s) A) (p pattern).Hint Extern 4 => 
match goal with
|[ H: ?x el nil |- _ ] => destruct H
end.(** ** Tactics *)
Ltac inv H := inversion H; subst; try clear H.

Lemma size_induction X (f : X -> nat) (p : X -> Type) : (forall x, (forall y, f y < f x -> p y) -> p x) -> forall x, p x.