Fixpoint whnf_beta (t : term) : Prop :=
    match t with
    | App u v => whnf_beta u /\ (forall T t : term, u <> Abs T t)
    | _ => True
    end.

(* Specifications: *)
Lemma beta_red_whnf : forall (e : env) (t u : term), red beta e t u -> whnf_beta t -> whnf_beta u.
Lemma whnf_head_normal : forall t : term, whnf_beta t -> forall e : env, head_normal beta e t.
Lemma whnf_app_list : forall (args : list term) (e : env) (t : term), whnf_beta t -> (forall A M : term, t <> Abs A M) -> head_normal beta e (app_list args t).