Section Beta_Whnf.
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.
Hint Unfold whnf_beta: pts.
simple induction 1; simpl in |- *; intros; auto with arith pts.
generalize H1.
elim H0; simpl in |- *; auto with arith pts.
simple induction 1; simpl in |- *; intros.
inversion_clear H3.
elim H5 with T M; auto with arith pts.
intros.
inversion_clear H4.
split; auto with arith pts.
red in |- *; intros.
generalize H5.
inversion_clear H4 in H2.
generalize H6.
inversion_clear H2; simpl in |- *; intros.
generalize H7.
inversion_clear H4; simpl in |- *; intros.
inversion_clear H4.
elim H9 with T0 M; auto with arith pts.
elim H2 with M t0; auto with arith pts.
elim H2 with T M; auto with arith pts.
Qed.

Lemma whnf_head_normal :
forall t : term, whnf_beta t -> forall e : env, head_normal beta e t.