Fixpoint addForalls (m n : nat) (f : Formula) {struct n} : Formula :=
  match n with
  | O => f
  | S n' => forallH (n' + m) (addForalls m n' f)
  end.

Lemma subAddForallsNice : forall (n m : nat) (A : Formula) (v : nat) (s : Term), n + m <= v \/ v < m -> (forall v : nat, In v (freeVarTerm LNN s) -> n + m <= v \/ v < m) -> substituteFormula LNN (addForalls m n A) v s = addForalls m n (substituteFormula LNN A v s).