Inductive beta_par_red1 : env -> term -> term -> Prop :=
    | par_beta :
        forall (e : env) (M M' T : term),
        beta_par_red1 (Ax T :: e) M M' ->
        forall N N' : term,
        beta_par_red1 e N N' ->
        beta_par_red1 e (App (Abs T M) N) (subst N' M')
    | sort_par_red_b :
        forall (e : env) (s : sort), beta_par_red1 e (Srt s) (Srt s)
    | ref_par_red_b :
        forall (e : env) (n : nat), beta_par_red1 e (Ref n) (Ref n)
    | abs_par_red_b :
        forall (e : env) (M M' T T' : term),
        beta_par_red1 (Ax T' :: e) M M' ->
        beta_par_red1 e T T' -> beta_par_red1 e (Abs T M) (Abs T' M')
    | app_par_red_b :
        forall (e : env) (M M' : term),
        beta_par_red1 e M M' ->
        forall N N' : term,
        beta_par_red1 e N N' -> beta_par_red1 e (App M N) (App M' N')
    | prod_par_red_b :
        forall (e : env) (M M' : term),
        beta_par_red1 e M M' ->
        forall N N' : term,
        beta_par_red1 (Ax M' :: e) N N' ->
        beta_par_red1 e (Prod M N) (Prod M' N').Inductive beta_par_red1 : env -> term -> term -> Prop :=
    | par_beta :
        forall (e : env) (M M' T : term),
        beta_par_red1 (Ax T :: e) M M' ->
        forall N N' : term,
        beta_par_red1 e N N' ->
        beta_par_red1 e (App (Abs T M) N) (subst N' M')
    | sort_par_red_b :
        forall (e : env) (s : sort), beta_par_red1 e (Srt s) (Srt s)
    | ref_par_red_b :
        forall (e : env) (n : nat), beta_par_red1 e (Ref n) (Ref n)
    | abs_par_red_b :
        forall (e : env) (M M' T T' : term),
        beta_par_red1 (Ax T' :: e) M M' ->
        beta_par_red1 e T T' -> beta_par_red1 e (Abs T M) (Abs T' M')
    | app_par_red_b :
        forall (e : env) (M M' : term),
        beta_par_red1 e M M' ->
        forall N N' : term,
        beta_par_red1 e N N' -> beta_par_red1 e (App M N) (App M' N')
    | prod_par_red_b :
        forall (e : env) (M M' : term),
        beta_par_red1 e M M' ->
        forall N N' : term,
        beta_par_red1 (Ax M' :: e) N N' ->
        beta_par_red1 e (Prod M N) (Prod M' N').Inductive beta_par_red1 : env -> term -> term -> Prop :=
    | par_beta :
        forall (e : env) (M M' T : term),
        beta_par_red1 (Ax T :: e) M M' ->
        forall N N' : term,
        beta_par_red1 e N N' ->
        beta_par_red1 e (App (Abs T M) N) (subst N' M')
    | sort_par_red_b :
        forall (e : env) (s : sort), beta_par_red1 e (Srt s) (Srt s)
    | ref_par_red_b :
        forall (e : env) (n : nat), beta_par_red1 e (Ref n) (Ref n)
    | abs_par_red_b :
        forall (e : env) (M M' T T' : term),
        beta_par_red1 (Ax T' :: e) M M' ->
        beta_par_red1 e T T' -> beta_par_red1 e (Abs T M) (Abs T' M')
    | app_par_red_b :
        forall (e : env) (M M' : term),
        beta_par_red1 e M M' ->
        forall N N' : term,
        beta_par_red1 e N N' -> beta_par_red1 e (App M N) (App M' N')
    | prod_par_red_b :
        forall (e : env) (M M' : term),
        beta_par_red1 e M M' ->
        forall N N' : term,
        beta_par_red1 (Ax M' :: e) N N' ->
        beta_par_red1 e (Prod M N) (Prod M' N').Inductive beta_par_red1 : env -> term -> term -> Prop :=
    | par_beta :
        forall (e : env) (M M' T : term),
        beta_par_red1 (Ax T :: e) M M' ->
        forall N N' : term,
        beta_par_red1 e N N' ->
        beta_par_red1 e (App (Abs T M) N) (subst N' M')
    | sort_par_red_b :
        forall (e : env) (s : sort), beta_par_red1 e (Srt s) (Srt s)
    | ref_par_red_b :
        forall (e : env) (n : nat), beta_par_red1 e (Ref n) (Ref n)
    | abs_par_red_b :
        forall (e : env) (M M' T T' : term),
        beta_par_red1 (Ax T' :: e) M M' ->
        beta_par_red1 e T T' -> beta_par_red1 e (Abs T M) (Abs T' M')
    | app_par_red_b :
        forall (e : env) (M M' : term),
        beta_par_red1 e M M' ->
        forall N N' : term,
        beta_par_red1 e N N' -> beta_par_red1 e (App M N) (App M' N')
    | prod_par_red_b :
        forall (e : env) (M M' : term),
        beta_par_red1 e M M' ->
        forall N N' : term,
        beta_par_red1 (Ax M' :: e) N N' ->
        beta_par_red1 e (Prod M N) (Prod M' N').Inductive beta_par_red1 : env -> term -> term -> Prop :=
    | par_beta :
        forall (e : env) (M M' T : term),
        beta_par_red1 (Ax T :: e) M M' ->
        forall N N' : term,
        beta_par_red1 e N N' ->
        beta_par_red1 e (App (Abs T M) N) (subst N' M')
    | sort_par_red_b :
        forall (e : env) (s : sort), beta_par_red1 e (Srt s) (Srt s)
    | ref_par_red_b :
        forall (e : env) (n : nat), beta_par_red1 e (Ref n) (Ref n)
    | abs_par_red_b :
        forall (e : env) (M M' T T' : term),
        beta_par_red1 (Ax T' :: e) M M' ->
        beta_par_red1 e T T' -> beta_par_red1 e (Abs T M) (Abs T' M')
    | app_par_red_b :
        forall (e : env) (M M' : term),
        beta_par_red1 e M M' ->
        forall N N' : term,
        beta_par_red1 e N N' -> beta_par_red1 e (App M N) (App M' N')
    | prod_par_red_b :
        forall (e : env) (M M' : term),
        beta_par_red1 e M M' ->
        forall N N' : term,
        beta_par_red1 (Ax M' :: e) N N' ->
        beta_par_red1 e (Prod M N) (Prod M' N').Inductive beta_par_red1 : env -> term -> term -> Prop :=
    | par_beta :
        forall (e : env) (M M' T : term),
        beta_par_red1 (Ax T :: e) M M' ->
        forall N N' : term,
        beta_par_red1 e N N' ->
        beta_par_red1 e (App (Abs T M) N) (subst N' M')
    | sort_par_red_b :
        forall (e : env) (s : sort), beta_par_red1 e (Srt s) (Srt s)
    | ref_par_red_b :
        forall (e : env) (n : nat), beta_par_red1 e (Ref n) (Ref n)
    | abs_par_red_b :
        forall (e : env) (M M' T T' : term),
        beta_par_red1 (Ax T' :: e) M M' ->
        beta_par_red1 e T T' -> beta_par_red1 e (Abs T M) (Abs T' M')
    | app_par_red_b :
        forall (e : env) (M M' : term),
        beta_par_red1 e M M' ->
        forall N N' : term,
        beta_par_red1 e N N' -> beta_par_red1 e (App M N) (App M' N')
    | prod_par_red_b :
        forall (e : env) (M M' : term),
        beta_par_red1 e M M' ->
        forall N N' : term,
        beta_par_red1 (Ax M' :: e) N N' ->
        beta_par_red1 e (Prod M N) (Prod M' N').Inductive beta_par_red1 : env -> term -> term -> Prop :=
    | par_beta :
        forall (e : env) (M M' T : term),
        beta_par_red1 (Ax T :: e) M M' ->
        forall N N' : term,
        beta_par_red1 e N N' ->
        beta_par_red1 e (App (Abs T M) N) (subst N' M')
    | sort_par_red_b :
        forall (e : env) (s : sort), beta_par_red1 e (Srt s) (Srt s)
    | ref_par_red_b :
        forall (e : env) (n : nat), beta_par_red1 e (Ref n) (Ref n)
    | abs_par_red_b :
        forall (e : env) (M M' T T' : term),
        beta_par_red1 (Ax T' :: e) M M' ->
        beta_par_red1 e T T' -> beta_par_red1 e (Abs T M) (Abs T' M')
    | app_par_red_b :
        forall (e : env) (M M' : term),
        beta_par_red1 e M M' ->
        forall N N' : term,
        beta_par_red1 e N N' -> beta_par_red1 e (App M N) (App M' N')
    | prod_par_red_b :
        forall (e : env) (M M' : term),
        beta_par_red1 e M M' ->
        forall N N' : term,
        beta_par_red1 (Ax M' :: e) N N' ->
        beta_par_red1 e (Prod M N) (Prod M' N').

(* Specifications: *)
Lemma refl_beta_par_red1 : forall (M : term) (e : env), beta_par_red1 e M M.
Lemma beta_red_par_red1 : forall (e : env) (M N : term), ctxt beta e M N -> beta_par_red1 e M N.
Lemma beta_par_red1_red : forall (e : env) (M N : term), beta_par_red1 e M N -> red beta e M N.
Lemma beta_par_red1_stable_env : R_stable_env beta_par_red1.
Lemma beta_par_red1_lift : R_lift beta_par_red1.
Lemma beta_par_red1_subst_l : forall (t u : term) (g : env), beta_par_red1 g t u -> forall (v : term) (n : nat) (e : env), trunc n e g -> beta_par_red1 e (subst_rec t v n) (subst_rec u v n).
Lemma beta_par_red1_subst_rec : forall (d : decl) (x y t u : term) (e g : env), beta_par_red1 g x y -> beta_par_red1 e t u -> forall (n : nat) (f : env), sub_in_env g d x n e f -> beta_par_red1 f (subst_rec x t n) (subst_rec y u n).
Lemma beta_par_red1_subst : forall (e : env) (x y t u T : term), beta_par_red1 (Ax T :: e) t u -> beta_par_red1 e x y -> beta_par_red1 e (subst x t) (subst y u).
Lemma confluence_beta_par_red1 : confluent beta_par_red1.
Theorem church_rosser_red : church_rosser (ctxt beta).
Lemma beta_hn_sort : forall (e : env) (s : sort), head_normal beta e (Srt s).
Lemma beta_hn_prod : forall (e : env) (A B : term), head_normal beta e (Prod A B).
Lemma inv_prod_beta_conv : product_inversion (conv beta).