Require Import Undecidability.Synthetic.Definitions.
From Undecidability.L Require Import L Functions.Eval Util.L_facts.
Import L_Notations.
Definition HaltLclosed (s : {s : term | closed s}) := exists t, eval (proj1_sig s) t.
Lemma reduction : HaltL ⪯ HaltLclosed.
Proof.
unshelve eexists.
- intros s. exists (Eval (enc s)). unfold Eval. Lproc.
- cbn. intros s. unfold HaltL. split; intros (t & Ht).
+ eapply eval_converges. edestruct Eval_converges. eapply H.
eapply eval_iff in Ht. eauto.
+ setoid_rewrite eval_iff. eapply eval_converges.
eapply Eval_converges. eapply Seval.eval_converges. eauto.
Qed.