red in |- *; red in |- *; intros.
inversion_clear H1.
elim H with u; auto with pts.
elim H0 with u; auto with pts.
Qed.
End Normal_Terms.
Section Ordres.
Variable R : red_rule.
Hypothesis stable : R_stable_env R.
Let stable_ctx := ctxt_stable _ stable.
Section Ordre_de_Normalisation.
Definition value := (env * term)%type.
Inductive subterm : value -> value -> Prop :=
| sbtrm_abs_l :
forall (e : env) (A M : term), subterm (e, A) (e, Abs A M)
| sbtrm_abs_r :
forall (e : env) (A A' M : term),
subterm (Ax A' :: e, M) (e, Abs A M)
| sbtrm_app_l :
forall (e : env) (u v : term), subterm (e, u) (e, App u v)
| sbtrm_app_r :
forall (e : env) (u v : term), subterm (e, v) (e, App u v)
| sbtrm_prod_l :
forall (e : env) (A B : term), subterm (e, A) (e, Prod A B)
| sbtrm_prod_r :
forall (e : env) (A A' B : term),
subterm (Ax A' :: e, B) (e, Prod A B).
Hint Resolve sbtrm_abs_l sbtrm_abs_r sbtrm_app_l sbtrm_app_r sbtrm_prod_l
sbtrm_prod_r: pts.

Lemma wf_subterm : well_founded subterm.
red in |- *.