Require Vector.
Section close.
Variable L : Language.
Variable codeF : Functions L -> nat.
Variable codeR : Relations L -> nat.
Let Formula := Formula L.
Let codeFormula := codeFormula L codeF codeR.
Definition codeCloseList : nat -> nat -> nat :=
evalStrongRec 1
(fun l recs f : nat =>
switchPR l
(cPair 3
(cPair (cPairPi1 (pred l))
(codeNth (l - S (cPairPi2 (pred l))) recs))) f).

Lemma codeCloseListIsPR : isPR 2 codeCloseList.
Definition codeClose (f : nat) : nat :=
codeCloseList (codeNoDup (codeFreeVarFormula f)) f.