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).
Definition codeClose (f : nat) : nat :=
codeCloseList (codeNoDup (codeFreeVarFormula f)) f.

Lemma codeCloseCorrect :
forall f : Formula, codeClose (codeFormula f) = codeFormula (close L f).