intros n l.
elim (non_empty n l).
intros h H; elim H; clear H.
intros t e.
rewrite e; simpl in |- *.
auto.
Qed.
Definition Hd (n : nat) (l : list (S n)) :=
let (a, P) return A := non_empty n l in a.

(* Specifications: *)
Lemma Non_empty_Hd :
forall (n : nat) (a : A) (l : list n), Hd n (cons n a l) = a.