Inductive bd_par_red1 : env -> term -> term -> Prop :=
    | par_betad :
        forall (e : env) (M M' T : term),
        bd_par_red1 (Ax T :: e) M M' ->
        forall N N' : term,
        bd_par_red1 e N N' -> bd_par_red1 e (App (Abs T M) N) (subst N' M')
    | par_delta :
        forall (e : env) (d T N : term) (n : nat),
        bd_par_red1 e (lift (S n) d) N ->
        item (Def d T) e n -> bd_par_red1 e (Ref n) N
    | sort_par_red :
        forall (e : env) (s : sort), bd_par_red1 e (Srt s) (Srt s)
    | ref_par_red : forall (e : env) (n : nat), bd_par_red1 e (Ref n) (Ref n)
    | abs_par_red :
        forall (e : env) (M M' T T' : term),
        bd_par_red1 (Ax T' :: e) M M' ->
        bd_par_red1 e T T' -> bd_par_red1 e (Abs T M) (Abs T' M')
    | app_par_red :
        forall (e : env) (M M' : term),
        bd_par_red1 e M M' ->
        forall N N' : term,
        bd_par_red1 e N N' -> bd_par_red1 e (App M N) (App M' N')
    | prod_par_red :
        forall (e : env) (M M' : term),
        bd_par_red1 e M M' ->
        forall N N' : term,
        bd_par_red1 (Ax M' :: e) N N' ->
        bd_par_red1 e (Prod M N) (Prod M' N').Inductive bd_par_red1 : env -> term -> term -> Prop :=
    | par_betad :
        forall (e : env) (M M' T : term),
        bd_par_red1 (Ax T :: e) M M' ->
        forall N N' : term,
        bd_par_red1 e N N' -> bd_par_red1 e (App (Abs T M) N) (subst N' M')
    | par_delta :
        forall (e : env) (d T N : term) (n : nat),
        bd_par_red1 e (lift (S n) d) N ->
        item (Def d T) e n -> bd_par_red1 e (Ref n) N
    | sort_par_red :
        forall (e : env) (s : sort), bd_par_red1 e (Srt s) (Srt s)
    | ref_par_red : forall (e : env) (n : nat), bd_par_red1 e (Ref n) (Ref n)
    | abs_par_red :
        forall (e : env) (M M' T T' : term),
        bd_par_red1 (Ax T' :: e) M M' ->
        bd_par_red1 e T T' -> bd_par_red1 e (Abs T M) (Abs T' M')
    | app_par_red :
        forall (e : env) (M M' : term),
        bd_par_red1 e M M' ->
        forall N N' : term,
        bd_par_red1 e N N' -> bd_par_red1 e (App M N) (App M' N')
    | prod_par_red :
        forall (e : env) (M M' : term),
        bd_par_red1 e M M' ->
        forall N N' : term,
        bd_par_red1 (Ax M' :: e) N N' ->
        bd_par_red1 e (Prod M N) (Prod M' N').Inductive bd_par_red1 : env -> term -> term -> Prop :=
    | par_betad :
        forall (e : env) (M M' T : term),
        bd_par_red1 (Ax T :: e) M M' ->
        forall N N' : term,
        bd_par_red1 e N N' -> bd_par_red1 e (App (Abs T M) N) (subst N' M')
    | par_delta :
        forall (e : env) (d T N : term) (n : nat),
        bd_par_red1 e (lift (S n) d) N ->
        item (Def d T) e n -> bd_par_red1 e (Ref n) N
    | sort_par_red :
        forall (e : env) (s : sort), bd_par_red1 e (Srt s) (Srt s)
    | ref_par_red : forall (e : env) (n : nat), bd_par_red1 e (Ref n) (Ref n)
    | abs_par_red :
        forall (e : env) (M M' T T' : term),
        bd_par_red1 (Ax T' :: e) M M' ->
        bd_par_red1 e T T' -> bd_par_red1 e (Abs T M) (Abs T' M')
    | app_par_red :
        forall (e : env) (M M' : term),
        bd_par_red1 e M M' ->
        forall N N' : term,
        bd_par_red1 e N N' -> bd_par_red1 e (App M N) (App M' N')
    | prod_par_red :
        forall (e : env) (M M' : term),
        bd_par_red1 e M M' ->
        forall N N' : term,
        bd_par_red1 (Ax M' :: e) N N' ->
        bd_par_red1 e (Prod M N) (Prod M' N').Inductive bd_par_red1 : env -> term -> term -> Prop :=
    | par_betad :
        forall (e : env) (M M' T : term),
        bd_par_red1 (Ax T :: e) M M' ->
        forall N N' : term,
        bd_par_red1 e N N' -> bd_par_red1 e (App (Abs T M) N) (subst N' M')
    | par_delta :
        forall (e : env) (d T N : term) (n : nat),
        bd_par_red1 e (lift (S n) d) N ->
        item (Def d T) e n -> bd_par_red1 e (Ref n) N
    | sort_par_red :
        forall (e : env) (s : sort), bd_par_red1 e (Srt s) (Srt s)
    | ref_par_red : forall (e : env) (n : nat), bd_par_red1 e (Ref n) (Ref n)
    | abs_par_red :
        forall (e : env) (M M' T T' : term),
        bd_par_red1 (Ax T' :: e) M M' ->
        bd_par_red1 e T T' -> bd_par_red1 e (Abs T M) (Abs T' M')
    | app_par_red :
        forall (e : env) (M M' : term),
        bd_par_red1 e M M' ->
        forall N N' : term,
        bd_par_red1 e N N' -> bd_par_red1 e (App M N) (App M' N')
    | prod_par_red :
        forall (e : env) (M M' : term),
        bd_par_red1 e M M' ->
        forall N N' : term,
        bd_par_red1 (Ax M' :: e) N N' ->
        bd_par_red1 e (Prod M N) (Prod M' N').Inductive bd_par_red1 : env -> term -> term -> Prop :=
    | par_betad :
        forall (e : env) (M M' T : term),
        bd_par_red1 (Ax T :: e) M M' ->
        forall N N' : term,
        bd_par_red1 e N N' -> bd_par_red1 e (App (Abs T M) N) (subst N' M')
    | par_delta :
        forall (e : env) (d T N : term) (n : nat),
        bd_par_red1 e (lift (S n) d) N ->
        item (Def d T) e n -> bd_par_red1 e (Ref n) N
    | sort_par_red :
        forall (e : env) (s : sort), bd_par_red1 e (Srt s) (Srt s)
    | ref_par_red : forall (e : env) (n : nat), bd_par_red1 e (Ref n) (Ref n)
    | abs_par_red :
        forall (e : env) (M M' T T' : term),
        bd_par_red1 (Ax T' :: e) M M' ->
        bd_par_red1 e T T' -> bd_par_red1 e (Abs T M) (Abs T' M')
    | app_par_red :
        forall (e : env) (M M' : term),
        bd_par_red1 e M M' ->
        forall N N' : term,
        bd_par_red1 e N N' -> bd_par_red1 e (App M N) (App M' N')
    | prod_par_red :
        forall (e : env) (M M' : term),
        bd_par_red1 e M M' ->
        forall N N' : term,
        bd_par_red1 (Ax M' :: e) N N' ->
        bd_par_red1 e (Prod M N) (Prod M' N').Inductive bd_par_red1 : env -> term -> term -> Prop :=
    | par_betad :
        forall (e : env) (M M' T : term),
        bd_par_red1 (Ax T :: e) M M' ->
        forall N N' : term,
        bd_par_red1 e N N' -> bd_par_red1 e (App (Abs T M) N) (subst N' M')
    | par_delta :
        forall (e : env) (d T N : term) (n : nat),
        bd_par_red1 e (lift (S n) d) N ->
        item (Def d T) e n -> bd_par_red1 e (Ref n) N
    | sort_par_red :
        forall (e : env) (s : sort), bd_par_red1 e (Srt s) (Srt s)
    | ref_par_red : forall (e : env) (n : nat), bd_par_red1 e (Ref n) (Ref n)
    | abs_par_red :
        forall (e : env) (M M' T T' : term),
        bd_par_red1 (Ax T' :: e) M M' ->
        bd_par_red1 e T T' -> bd_par_red1 e (Abs T M) (Abs T' M')
    | app_par_red :
        forall (e : env) (M M' : term),
        bd_par_red1 e M M' ->
        forall N N' : term,
        bd_par_red1 e N N' -> bd_par_red1 e (App M N) (App M' N')
    | prod_par_red :
        forall (e : env) (M M' : term),
        bd_par_red1 e M M' ->
        forall N N' : term,
        bd_par_red1 (Ax M' :: e) N N' ->
        bd_par_red1 e (Prod M N) (Prod M' N').Inductive bd_par_red1 : env -> term -> term -> Prop :=
    | par_betad :
        forall (e : env) (M M' T : term),
        bd_par_red1 (Ax T :: e) M M' ->
        forall N N' : term,
        bd_par_red1 e N N' -> bd_par_red1 e (App (Abs T M) N) (subst N' M')
    | par_delta :
        forall (e : env) (d T N : term) (n : nat),
        bd_par_red1 e (lift (S n) d) N ->
        item (Def d T) e n -> bd_par_red1 e (Ref n) N
    | sort_par_red :
        forall (e : env) (s : sort), bd_par_red1 e (Srt s) (Srt s)
    | ref_par_red : forall (e : env) (n : nat), bd_par_red1 e (Ref n) (Ref n)
    | abs_par_red :
        forall (e : env) (M M' T T' : term),
        bd_par_red1 (Ax T' :: e) M M' ->
        bd_par_red1 e T T' -> bd_par_red1 e (Abs T M) (Abs T' M')
    | app_par_red :
        forall (e : env) (M M' : term),
        bd_par_red1 e M M' ->
        forall N N' : term,
        bd_par_red1 e N N' -> bd_par_red1 e (App M N) (App M' N')
    | prod_par_red :
        forall (e : env) (M M' : term),
        bd_par_red1 e M M' ->
        forall N N' : term,
        bd_par_red1 (Ax M' :: e) N N' ->
        bd_par_red1 e (Prod M N) (Prod M' N').Inductive bd_par_red1 : env -> term -> term -> Prop :=
    | par_betad :
        forall (e : env) (M M' T : term),
        bd_par_red1 (Ax T :: e) M M' ->
        forall N N' : term,
        bd_par_red1 e N N' -> bd_par_red1 e (App (Abs T M) N) (subst N' M')
    | par_delta :
        forall (e : env) (d T N : term) (n : nat),
        bd_par_red1 e (lift (S n) d) N ->
        item (Def d T) e n -> bd_par_red1 e (Ref n) N
    | sort_par_red :
        forall (e : env) (s : sort), bd_par_red1 e (Srt s) (Srt s)
    | ref_par_red : forall (e : env) (n : nat), bd_par_red1 e (Ref n) (Ref n)
    | abs_par_red :
        forall (e : env) (M M' T T' : term),
        bd_par_red1 (Ax T' :: e) M M' ->
        bd_par_red1 e T T' -> bd_par_red1 e (Abs T M) (Abs T' M')
    | app_par_red :
        forall (e : env) (M M' : term),
        bd_par_red1 e M M' ->
        forall N N' : term,
        bd_par_red1 e N N' -> bd_par_red1 e (App M N) (App M' N')
    | prod_par_red :
        forall (e : env) (M M' : term),
        bd_par_red1 e M M' ->
        forall N N' : term,
        bd_par_red1 (Ax M' :: e) N N' ->
        bd_par_red1 e (Prod M N) (Prod M' N').

(* Specifications: *)
Lemma refl_bd_par_red1 : forall (M : term) (e : env), bd_par_red1 e M M.
Lemma incl_bd_par_red1 : forall (e : env) (M N : term), ctxt beta_delta e M N -> bd_par_red1 e M N.
Lemma bd_par_red1_red : forall (e : env) (M N : term), bd_par_red1 e M N -> red beta_delta e M N.
Lemma bd_par_red1_stable_env : R_stable_env bd_par_red1.
Lemma bd_par_red1_lift : R_lift bd_par_red1.
Lemma bd_par_red1_subst_l : forall (t u : term) (g : env), bd_par_red1 g t u -> forall (v : term) (n : nat) (e : env), trunc n e g -> bd_par_red1 e (subst_rec t v n) (subst_rec u v n).
Lemma bd_par_red1_subst_rec : forall (d : decl) (x y t u : term) (e g : env), bd_par_red1 g x y -> bd_par_red1 e t u -> forall (n : nat) (f : env), sub_in_env g d x n e f -> bd_par_red1 f (subst_rec x t n) (subst_rec y u n).
Lemma bd_par_red1_subst : forall (e : env) (x y t u T : term), bd_par_red1 (Ax T :: e) t u -> bd_par_red1 e x y -> bd_par_red1 e (subst x t) (subst y u).
Lemma confluence_bd_par_red1 : confluent bd_par_red1.
Theorem church_rosser_beta_delta : church_rosser (ctxt beta_delta).
Lemma norm_bd_srt : forall (e : env) (s : sort), normal beta_delta e (Srt s).
Lemma norm_bd_prd : forall (e : env) (A B : term), normal beta_delta e (Prod A B).
Lemma bd_hn_sort : forall (e : env) (s : sort), head_normal beta_delta e (Srt s).
Lemma bd_hn_prod : forall (e : env) (A B : term), head_normal beta_delta e (Prod A B).
Lemma inv_prod_bd_conv : product_inversion (conv beta_delta).