Fixpoint ignoreParams (n m : nat) (f : naryFunc n) {struct m} :
naryFunc (m + n) :=
match m return (naryFunc (m + n)) with
| O => f
| S x => fun _ => ignoreParams n x f
end.
Definition projectionListPR (n m : nat) (p : m <= n) : PrimRecs n m.
intros.
induction m as [| m Hrecm].
exact (PRnil n).
assert (m < n).
apply lt_S_n.
apply le_lt_n_Sm.
apply p.
apply (PRcons _ m (projFunc _ _ H)).
apply Hrecm.
apply le_S_n.
apply le_S.
apply p.
Defined.
Definition projectionList (n m : nat) (p : m <= n) :
Vector.t (naryFunc n) m := evalPrimRecs n m (projectionListPR n m p).

(* Specifications: *)
Lemma projectionListInd :
forall (n m : nat) (p1 p2 : m <= n),
projectionList n m p1 = projectionList n m p2.
Lemma projectionListApplyParam :
forall (m n c : nat) (p1 : m <= n) (p2 : m <= S n),
extEqualVector _ _ (projectionList n m p1)
(evalOneParamList n m c (projectionList (S n) m p2)).
Lemma projectionListId :
forall (n : nat) (f : naryFunc n) (p : n <= n),
extEqual n f (evalComposeFunc n n (projectionList n n p) f).
Lemma ignoreParamsIsPR :
forall (n m : nat) (f : naryFunc n), isPR _ f -> isPR _ (ignoreParams n m f).