Definition approx := (env * (term * list term))%type.Fixpoint app_list (args : list term) : term -> term :=
    fun t =>
    match args with
    | nil => t
    | hd :: tl => app_list tl (App t hd)
    end.Inductive beta : env -> term -> term -> Prop :=
      beta_intro :
        forall (e : env) (M N T : term), beta e (App (Abs T M) N) (subst N M).Inductive beta : env -> term -> term -> Prop :=
      beta_intro :
        forall (e : env) (M N T : term), beta e (App (Abs T M) N) (subst N M).

Lemma prod_beta_norm : forall (e : env) (A B : term), normal beta e (Prod A B).