intros n l0 l1 a.
generalize n; clear n.
elim l0; clear l0; simpl in |- *.
intros n nth.
right with n.
assumption.
intros a0 l0 ih_l0 n.
case n; clear n.
intros nth.
left.
rewrite (inv_nthO a0 (l0 ++ l1) a nth).
apply My_NthO.
intros n nth.
elim (ih_l0 n).
intros nth_l0.
left.
apply My_NthS; assumption.
intros n' nth_l1.
right with n'; assumption.
apply inv_nthS with a0; assumption.
Qed.
Inductive nth_split (a : B) (l : list B) : Set :=
Nth_Split_Intro :
forall l1 l2 : list B, l = l1 ++ a :: l2 -> nth_split a l.

(* Specifications: *)
Lemma my_nth_split :
forall (n : nat) (l : list B) (a : B), my_nth n l a -> nth_split a l.