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))).