From Undecidability.L Require Import Interpreter Encodings.
Definition test (u : term) := forall n, u (enc n) ▷ T \/ u (enc n) ▷ F.
Definition satis u n := u (enc n) ▷ T.
Hint Unfold test.
Section fix_u.
Variable u : term.
Hypothesis proc_u : proc u.
Hypothesis test_u : test u.
Definition H := rho (.\"H", "n", "u"; "u" "n" (.\ "_"; "n") (.\ "_"; "H" (!Succ "n") "u") !I).
Hint Unfold H : cbv.

(* Specifications: *)
Lemma H_rec n : H (enc n) u ≻^+ u (enc n) (lambda (enc n)) (lambda (H (Succ (enc n)) u)) I.
Definition ok n := exists k, H (enc n) u ▷ enc k /\ satis u k.
Lemma H_ok n : satis u n -> ok n.
Lemma H_n_Sn n : ok (S n) -> ok n.
Proof with eauto.