Proof with try solveeq.
revert t; induction s; intros.
+ destruct t; [ | solveeq..].
transitivity (EqN (enc n) (enc n0)). solveeq. rewrite EqN_correct.
unfold term_eq_bool. destruct _. inv e.
now rewrite <- beq_nat_refl. assert (n <> n0) by firstorder congruence.
rewrite <- Nat.eqb_neq in H. now rewrite H.
+ destruct t; [ solveeq | | solveeq].
transitivity ((Eq (tenc s1) (tenc t1)) (Eq (tenc s2) (tenc t2)) F). solveeq.
rewrite IHs1, IHs2.
unfold term_eq_bool. destruct *; try congruence; solveeq.
+ destruct t; [ solveeq.. | ].
transitivity (Eq (tenc s) (tenc t)). solveeq.
rewrite IHs.
unfold term_eq_bool. destruct *; try congruence; solveeq.
Qed.

(* Specifications: *)
Lemma Eq_correct s t :
(s  = t -> Eq (tenc s) (tenc t) ≡ T )
/\ ( s <> t -> Eq (tenc s) (tenc t) ≡ F ).