Inductive my_nth : nat -> list B -> B -> Prop :=
  | My_NthO : forall (l : list B) (a : B), my_nth 0 (a :: l) a
  | My_NthS :
      forall (n : nat) (l : list B) (b : B),
      my_nth n l b -> forall a : B, my_nth (S n) (a :: l) b.Inductive my_nth : nat -> list B -> B -> Prop :=
  | My_NthO : forall (l : list B) (a : B), my_nth 0 (a :: l) a
  | My_NthS :
      forall (n : nat) (l : list B) (b : B),
      my_nth n l b -> forall a : B, my_nth (S n) (a :: l) b.Inductive my_nth : nat -> list B -> B -> Prop :=
  | My_NthO : forall (l : list B) (a : B), my_nth 0 (a :: l) a
  | My_NthS :
      forall (n : nat) (l : list B) (b : B),
      my_nth n l b -> forall a : B, my_nth (S n) (a :: l) b.

(* Specifications: *)
Lemma inv_nth_nil : forall (n : nat) (a : B), my_nth n nil a -> False.
Lemma inv_nthO : forall (a : B) (l : list B) (b : B), my_nth 0 (a :: l) b -> a = b.
Lemma inv_nthS : forall (n : nat) (a : B) (l : list B) (b : B), my_nth (S n) (a :: l) b -> my_nth n l b.
Lemma my_nth_rec : forall P : nat -> list B -> B -> Set, (forall (l : list B) (a : B), P 0 (a :: l) a) -> (forall (n : nat) (l : list B) (b : B), my_nth n l b -> P n l b -> forall a : B, P (S n) (a :: l) b) -> forall (n : nat) (l : list B) (y : B), my_nth n l y -> P n l y.
Lemma nth_in : forall (n : nat) (l : list B) (a : B), my_nth n l a -> In a l.
Lemma nth_app0 : forall (n : nat) (l0 l1 : list B) (a : B), my_nth n l0 a -> my_nth n (l0 ++ l1) a.
Lemma nth_app1 : forall (n : nat) (l0 l1 : list B) (a : B), my_nth n l1 a -> my_nth (length l0 + n) (l0 ++ l1) a.