Remark codeTermFreeVar :
forall s : fol.Term L, fold_right max 0 (freeVarTerm L s) <= codeTerm s.
Remark maxVarFreeVar :
forall f : fol.Formula L,
fold_right max 0 (freeVarFormula L f) <= fold_right max 0 (varFormula f).
Remark maxSubTerm :
forall (t : fol.Term L) (v : nat) (s : fol.Term L),
fold_right max 0 (freeVarTerm L (substituteTerm L t v s)) <=
fold_right max 0 (freeVarTerm L s ++ freeVarTerm L t).
Remark maxSubTerms :
forall (n : nat) (ts : fol.Terms L n) (v : nat) (s : fol.Term L),
fold_right max 0 (freeVarTerms L n (substituteTerms L n ts v s)) <=
fold_right max 0 (freeVarTerm L s ++ freeVarTerms L n ts).
Definition pow3 : nat -> nat :=
nat_rec (fun _ => nat) 1 (fun _ rec : nat => rec + (rec + rec)).

(* Specifications: *)
Lemma pow3IsPR : isPR 1 pow3.
Lemma pow3Monotone : forall a b : nat, a <= b -> pow3 a <= pow3 b.
Lemma pow3Min : forall a : nat, 1 <= pow3 a.
Remark mapListLemma :
forall l : list nat, fold_right max 0 (map S l) <= S (fold_right max 0 l).