Fixpoint varFormula (f : fol.Formula L) : list nat :=
  match f with
  | equal t s => freeVarTerm L t ++ freeVarTerm L s
  | atomic r ts => freeVarTerms L _ ts
  | impH A B => varFormula A ++ varFormula B
  | notH A => varFormula A
  | forallH v A => v :: varFormula A
  end.

Lemma ReplaceFormulaTermSub : forall (f : fol.Formula L) (v w s2 : nat), ReplaceFormulaTerm (codeFormula (substituteFormula L f v (var w))) s2 = ReplaceFormulaTerm (codeFormula f) s2.