(* substitution dans un environnement *)

  Inductive sub_in_env (g : env) (d1 : decl) (t : term) :
  nat -> env -> env -> Prop :=
    | sub_O : val_ok d1 t -> sub_in_env g d1 t 0 (d1 :: g) g
    | sub_S :
        forall (e f : env) (n : nat) (d : decl),
        sub_in_env g d1 t n e f ->
        sub_in_env g d1 t (S n) (d :: e) (subst_decl t d n :: f).(* substitution dans un environnement *)

  Inductive sub_in_env (g : env) (d1 : decl) (t : term) :
  nat -> env -> env -> Prop :=
    | sub_O : val_ok d1 t -> sub_in_env g d1 t 0 (d1 :: g) g
    | sub_S :
        forall (e f : env) (n : nat) (d : decl),
        sub_in_env g d1 t n e f ->
        sub_in_env g d1 t (S n) (d :: e) (subst_decl t d n :: f).(* substitution dans un environnement *)

  Inductive sub_in_env (g : env) (d1 : decl) (t : term) :
  nat -> env -> env -> Prop :=
    | sub_O : val_ok d1 t -> sub_in_env g d1 t 0 (d1 :: g) g
    | sub_S :
        forall (e f : env) (n : nat) (d : decl),
        sub_in_env g d1 t n e f ->
        sub_in_env g d1 t (S n) (d :: e) (subst_decl t d n :: f).

Lemma nth_sub_eq : forall (t : term) (d1 : decl) (n : nat) (g e f : env), sub_in_env g d1 t n e f -> forall d : decl, item d e n -> d1 = d.