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_dep L (X : L -> Type) (f : forall l, X l -> nat) (p : forall l, X l -> Type) : (forall l x, (forall l' y, f l' y < f l x -> p l' y) -> p l x) -> forall l x, p l x.