Fixpoint LNN2LNT_term (t : fol.Term LNN) : Term :=
match t with
| fol.var v => var v
| apply f ts => apply LNT f (LNN2LNT_terms _ ts)
end
with LNN2LNT_terms (n : nat) (ts : fol.Terms LNN n) {struct ts} :
Terms n :=
match ts in (fol.Terms _ n0) return (Terms n0) with
| Tnil => Tnil LNT
| Tcons m s ss => Tcons LNT m (LNN2LNT_term s) (LNN2LNT_terms m ss)
end.
Definition LTFormula :=
existH 2 (equal (Plus (var 0) (Succ (var 2))) (var 1)).
Definition translateLT (ts : fol.Terms LNN (arity LNN (inl _ LT))) : Formula.
simpl in ts.
induction (consTerms _ _ ts).
induction x as (a, b).
induction (consTerms _ _ b).
induction x as (a0, b0).
set (x := LNN2LNT_term a) in *.
set (y := LNN2LNT_term a0) in *.
apply (subAllFormula LNT LTFormula).
intro.
induction H as [| H HrecH].
exact x.
induction H as [| H HrecH0].
exact y.
exact (var H).
Defined.

(* Specifications: *)
Lemma LNN2LNT_natToTerm :
forall n : nat, LNN2LNT_term (natToTermLNN n) = natToTerm n.
Lemma translateLT1 :
forall a a0 b0,
translateLT (Tcons LNN 1 a (Tcons LNN 0 a0 b0)) =
subAllFormula LNT LTFormula
(fun H : nat =>
nat_rec (fun _ : nat => fol.Term LNT) (LNN2LNT_term a)
(fun (H0 : nat) (_ : fol.Term LNT) =>
nat_rec (fun _ : nat => fol.Term LNT) (LNN2LNT_term a0)
(fun (H1 : nat) (_ : fol.Term LNT) => var H1) H0) H).