intros l; elim l; simpl in |- *; auto.
intros a l0 H; apply f_equal2 with (f := cons (A:=A)); auto.
Qed.
(* Skip the first elements of a list *)
Fixpoint skip_n (l : list A) (n : nat) {struct n} :
list A :=
match n with
| O => l
| S n1 => match l with
| nil => nil
| a :: l1 => skip_n l1 n1
end
end.

Theorem skip_n_app1 :
forall (n : nat) (l1 l2 : list A),
length l1 <= n -> skip_n (l1 ++ l2) n = skip_n l2 (n - length l1).