Definition wellFormedTermTerms : nat -> nat :=
  evalStrongRec 0
    (fun t recs : nat =>
     cPair
       (switchPR (cPairPi1 t)
          (charFunction 2 beq_nat (codeArityF (pred (cPairPi1 t)))
             (S (codeLength (cPairPi2 t))) *
           cPairPi2 (codeNth (t - S (cPairPi2 t)) recs)) 1)
       (switchPR t
          (cPairPi1 (codeNth (t - S (cPairPi1 (pred t))) recs) *
           cPairPi2 (codeNth (t - S (cPairPi2 (pred t))) recs)) 1)).Definition wellFormedTerm (t : nat) : nat := cPairPi1 (wellFormedTermTerms t).Definition wellFormedTerms (ts : nat) : nat :=
  cPairPi2 (wellFormedTermTerms ts).

(* Specifications: *)
Lemma lengthTerms : forall (n : nat) (ts : Terms n), codeLength (codeTerms L codeF n ts) = n.
Lemma wellFormedTermCorrect1 : forall t : Term, wellFormedTerm (codeTerm L codeF t) = 1.
Lemma wellFormedTermsCorrect1 : forall (n : nat) (ts : Terms n), wellFormedTerms (codeTerms L codeF n ts) = 1.