Definition beta_delta_rule := union_basic_rule beta_rule delta_rule.Definition beta_delta := Rule beta_delta_rule.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.

Lemma whnf_bd_app_list : forall (args : list term) (e : env) (t : term), whnf_bd e t -> (forall A M : term, t <> Abs A M) -> head_normal beta_delta e (app_list args t).