(** ** Self-interpreter *)
Definition U : term := Eval cbv in .\ "x"; !E !(C (H 1)) "x" !I !I.

(* Specifications: *)
Lemma U_rec s : U (tenc s) ≡ E (C (H (tenc s))) (tenc s) I I.
Lemma H_test s : test (H (tenc s)).
Lemma H_inv n s : satis ( H (tenc s) ) n -> eval n s <> None.
Lemma H_proc s : proc (H (tenc s)).
Lemma U_complete s t : s ▷ t -> U (tenc s) ▷ tenc t.
Lemma U_sound s : eva (U (tenc s)) -> eva s.
Proof with eauto.