Qed.

(* Specifications: *)
Lemma v6_sort_dec : forall s s' : srt_v6, decide (s = s').
simple destruct s; simple destruct s'; intros; try (right; discriminate).
Theorem inv_wf : forall (e : env) (d : decl), wf (d :: e) -> wf e.
intros.
Lemma ecc_sort_dec : forall s s' : srt_ecc, decide (s = s').
simple destruct s; simple destruct s'; intros; try (right; discriminate).
Theorem inv_wf : forall (e : env) (d : decl), wf (d :: e) -> wf e.
intros.
Lemma hn_sort : forall (e : env) (s : sort), head_normal R e (Srt s).
red in |- *; intros.
Lemma hn_prod : forall (e : env) (A B : term), head_normal R e (Prod A B).
red in |- *; intros.
Theorem subst_naif : forall u v : term, {t : term | t = subst u v}.
intros; exists (subst u v); trivial.
Lemma lift_ref_ge :
forall k n p : nat, p <= n -> lift_rec k (Ref n) p = Ref (k + n).
Lemma lift_ref_lt :
forall k n p : nat, p > n -> lift_rec k (Ref n) p = Ref n.
Lemma subst_ref_lt :
forall (u : term) (n k : nat), k > n -> subst_rec u (Ref n) k = Ref n.
Lemma subst_ref_gt :
forall (u : term) (n k : nat),
n > k -> subst_rec u (Ref n) k = Ref (pred n).
Lemma subst_ref_eq :
forall (u : term) (n : nat), subst_rec u (Ref n) n = lift n u.
Lemma lift_rec0 : forall (M : term) (k : nat), lift_rec 0 M k = M.
Lemma lift0 : forall M : term, lift 0 M = M.
Proof fun M : term => lift_rec0 M 0.
Lemma simpl_lift_rec :
forall (M : term) (n k p i : nat),
i <= k + n ->
k <= i -> lift_rec p (lift_rec n M k) i = lift_rec (p + n) M k.
Lemma simpl_lift :
forall (M : term) (n : nat), lift (S n) M = lift 1 (lift n M).
Lemma permute_lift_rec :
forall (M : term) (n k p i : nat),
i <= k ->
lift_rec p (lift_rec n M k) i = lift_rec n (lift_rec p M i) (p + k).
Lemma permute_lift :
forall (M : term) (k : nat),
lift 1 (lift_rec 1 M k) = lift_rec 1 (lift 1 M) (S k).