intros (u & proc_u & Hu).
assert (forall s, {v | u (tenc s) ▷ v}). {
intros. eapply computable_eva. destruct (Hu s). exists T. tauto.
exists F; tauto.
}
exists (fun s =>  let (v, _) := H s in if decision (v = T) then true else false).
intros. destruct _. decide (x = T).
- subst. firstorder. eapply decidable_spec; eauto.
- firstorder. congruence. exfalso. eapply decidable_spec; eauto.
destruct (Hu s) as [ [? [H4 ?] %evaluates_equiv] | []].
destruct T_equiv_F.
assert (x ≡ T) by now rewrite <- e, <- H4. eapply unique_normal_forms in H6. subst. congruence.
eapply evaluates_abst; eauto. value. firstorder using evaluates_equiv.
Qed.
Fixpoint unenc s :=
match s with
| lambda (lambda 1) => Some 0
| lambda (lambda (app 0 s)) => match unenc s with Some n => Some (S n) | x=>x end
| _ => None
end.

Lemma decode_correct t : (decode (tenc t)) = Some t.