Let listValues (f : naryFunc 2) (n : nat) : list nat.
intros.
induction n as [| n Hrecn].
exact nil.
exact (evalStrongRec _ f n :: Hrecn).
Defined.

(* Specifications: *)
Lemma evalStrongRecHelp1 :
forall (f : naryFunc 2) (n m : nat),
m < n -> codeNth (n - S m) (evalStrongRecHelp _ f n) = evalStrongRec _ f m.
Lemma evalStrongRecHelpParam :
forall (a n c : nat) (f : naryFunc (S (S (S a)))),
extEqual a (evalStrongRecHelp (S a) f n c)
(evalStrongRecHelp a (fun x y : nat => f x y c) n).
Lemma evalStrongRecHelp2 :
forall (a : nat) (f : naryFunc (S (S a))) (n m : nat),
m < n ->
extEqual _
(evalComposeFunc _ 1 (Vector.cons _ (evalStrongRecHelp _ f n) 0 (Vector.nil _))
(fun b : nat => codeNth (n - S m) b)) (evalStrongRec _ f m).
Lemma callIsPR :
forall g : nat -> nat,
isPR 1 g -> isPR 2 (fun a recs : nat => codeNth (a - S (g a)) recs).