Fixpoint LNN2LNT_formula (f : fol.Formula LNN) : Formula :=
  match f with
  | fol.equal t1 t2 => equal (LNN2LNT_term t1) (LNN2LNT_term t2)
  | atomic r ts =>
      match
        r as l return (fol.Terms LNN (arity LNN (inl _ l)) -> Formula)
      with
      | LT => fun t0 : fol.Terms LNN (arity LNN (inl _ LT)) => translateLT t0
      end ts
  | fol.impH A B => impH (LNN2LNT_formula A) (LNN2LNT_formula B)
  | fol.notH A => notH (LNN2LNT_formula A)
  | fol.forallH v A => forallH v (LNN2LNT_formula A)
  end.

Lemma LNN2LNT_subTerm : forall (t : fol.Term LNN) (v : nat) (s : fol.Term LNN), LNN2LNT_term (substituteTerm LNN t v s) = substituteTerm LNT (LNN2LNT_term t) v (LNN2LNT_term s).