Definition beta_delta_rule := union_basic_rule beta_rule delta_rule.
Definition beta_delta := Rule beta_delta_rule.
Hint Unfold beta_delta: pts.
Section BD_Whnf.
Fixpoint whnf_bd (e : env) (t : term) {struct t} : Prop :=
match t with
| Ref n =>
match delta_reduce n e with
| inleft _ => False
| _ => True
end
| App u v => whnf_bd e u /\ (forall T t : term, u <> Abs T t)
| _ => True
end.
Hint Unfold whnf_bd: pts.

(* Specifications: *)
Lemma bd_red_whnf :
forall (e : env) (t u : term),
red beta_delta e t u -> whnf_bd e t -> whnf_bd e u.