Remark maxLemma :
forall a b c d : nat, a <= b -> c <= d -> max a c <= max b d.
Remark maxLemma2 :
forall a b : list nat, fold_right max 0 a <= fold_right max 0 (a ++ b).
Remark maxLemma3 :
forall a b : list nat, fold_right max 0 b <= fold_right max 0 (a ++ b).
Remark maxApp :
forall a b : list nat,
{fold_right max 0 (a ++ b) = fold_right max 0 a} +
{fold_right max 0 (a ++ b) = fold_right max 0 b}.

(* Specifications: *)
Lemma boundSubTerm :
forall (t : fol.Term L) (v : nat) (s : fol.Term L),
codeTerm (substituteTerm L t v s) <=
ReplaceTermTerm (codeTerm t)
(fold_right max 0 (codeTerm s :: freeVarTerm L t)).
Lemma boundSubTerms :
forall (n : nat) (ts : fol.Terms L n) (v : nat) (s : fol.Term L),
codeTerms L codeF n (substituteTerms L n ts v s) <=
ReplaceTermsTerm (codeTerms L codeF n ts)
(fold_right max 0 (codeTerm s :: freeVarTerms L n ts)).
Lemma ReplaceTermTermSub :
forall (t : fol.Term L) (v w s2 : nat),
ReplaceTermTerm (codeTerm (substituteTerm L t v (var w))) s2 =
ReplaceTermTerm (codeTerm t) s2.
Lemma ReplaceTermsTermSub :
forall (n : nat) (ts : fol.Terms L n) (v w s2 : nat),
ReplaceTermsTerm (codeTerms L codeF n (substituteTerms L n ts v (var w))) s2 =
ReplaceTermsTerm (codeTerms L codeF n ts) s2.