Fixpoint sem_rec1
(g h:BC)(v : bs)(vnl vsl : list bs) {struct v} :=
match v with
| nil => sem g vnl vsl
| _::v' => sem h (v::vnl) (sem_rec1 g h v' vnl vsl :: vsl)
end.

Lemma rec1_correct n s g h vnl vsl :
length vnl = S n ->
length vsl = s ->
sem (rec1 n s g h) vnl vsl =
sem_rec1 g h (hd nil vnl) (tl vnl) vsl.