Set Implicit Arguments.
Unset Strict Implicit.
Notation "x 'el' A" := (In x A) (at level 70).
Notation "A <<= B" := (incl A B) (at level 70).
Notation "| A |" := (length A) (at level 65).
Ltac inv H := inversion H; subst; try clear H.
(* *Some basic things concerning lists *)
Definition is_cons X (l : list X) :=
match l with
| [] => false
| _ => true
end.
(* *** Fresh symbols *)
Fixpoint fresh (l : list nat) :=
match l with
| [] => 0
| x :: l => S x + fresh l
end.

Lemma fresh_spec (a : nat) (l : list nat) : a el l -> fresh l <> a.