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 bd_red_whnf : forall (e : env) (t u : term), red beta_delta e t u -> whnf_bd e t -> whnf_bd e u.