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.

(* Specifications: *)
Lemma LNN2LNT_or : forall a b : fol.Formula LNN, LNN2LNT_formula (fol.orH LNN a b) = orH (LNN2LNT_formula a) (LNN2LNT_formula b).
Lemma LNN2LNT_and : forall a b : fol.Formula LNN, LNN2LNT_formula (fol.andH LNN a b) = andH (LNN2LNT_formula a) (LNN2LNT_formula b).
Lemma LNN2LNT_iff : forall a b : fol.Formula LNN, LNN2LNT_formula (fol.iffH LNN a b) = iffH (LNN2LNT_formula a) (LNN2LNT_formula b).
Lemma LNN2LNT_exist : forall (v : nat) (a : fol.Formula LNN), LNN2LNT_formula (fol.existH LNN v a) = existH v (LNN2LNT_formula a).
Lemma LNN2LNT_freeVarTerm : forall t : fol.Term LNN, freeVarTerm LNT (LNN2LNT_term t) = freeVarTerm LNN t.
Lemma LNN2LNT_freeVarTerms : forall (n : nat) (ts : fol.Terms LNN n), freeVarTerms LNT n (LNN2LNT_terms n ts) = freeVarTerms LNN n ts.
Lemma LNN2LNT_freeVarFormula : forall (f : fol.Formula LNN) (v : nat), In v (freeVarFormula LNT (LNN2LNT_formula f)) <-> In v (freeVarFormula LNN f).
Lemma LNN2LNT_freeVarFormula1 : forall (f : fol.Formula LNN) (v : nat), In v (freeVarFormula LNT (LNN2LNT_formula f)) -> In v (freeVarFormula LNN f).
Lemma LNN2LNT_freeVarFormula2 : forall (f : fol.Formula LNN) (v : nat), In v (freeVarFormula LNN f) -> In v (freeVarFormula LNT (LNN2LNT_formula f)).
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).
Lemma LNN2LNT_subTerms : forall (n : nat) (ts : fol.Terms LNN n) (v : nat) (s : fol.Term LNN), LNN2LNT_terms n (substituteTerms LNN n ts v s) = substituteTerms LNT n (LNN2LNT_terms n ts) v (LNN2LNT_term s).
Lemma LNN2LNT_subFormula : forall (T : System) (f : fol.Formula LNN) (v : nat) (s : fol.Term LNN), SysPrf T (iffH (LNN2LNT_formula (substituteFormula LNN f v s)) (substituteFormula LNT (LNN2LNT_formula f) v (LNN2LNT_term s))).