Section defs.
Definition s_cst c : natfun 0 := fun _ x => x=c.
Definition s_zero  : natfun 1 := fun _ x => x=0.
Definition s_succ  : natfun 1 := fun v x => x=S (vec_head v).
Definition s_proj k (p : pos k) : natfun k := fun v x => vec_pos v p = x.
Variable k i : nat.
Implicit Types (f : natfun k) (g : natfun (S k)) (h : natfun (S (S k))) (gj : vec (natfun i) k).
Definition s_comp f gj : natfun i := fun v x => exists gl, f gl x /\ forall p, vec_pos gj p v (vec_pos gl p).
(* the recursor s_rec_r f h n v x <-> exists x0,...,xn,  f      v  x0, h (0##x0##v) x1, h (1##x1##v) x2, ... h (.##..##v) xn, and xn = x **)
Definition s_rec f h v := μ_rec (f (vec_tail v)) (fun x y => h (x##y##vec_tail v)) (vec_head v).

Theorem s_rec_eq f h v x : s_rec f h v x <-> exists s, f (vec_tail v) (s 0)
/\ s (vec_head v) = x
/\ forall i, i < vec_head v -> h (i##s i##vec_tail v) (s (S i)).