intros H_Sk. destruct (test_u n).
- intros. exists n.
rewrite H_rec, H0; eauto. split. solveeq. eauto.
- destruct (H_Sk) as (k & ?). exists k.
rewrite H_rec, H0; eauto. split. eapply evaluates_equiv. split; value.
transitivity (H (Succ (enc n)) u). solveeq.
rewrite Succ_correct. now eapply evaluates_equiv. firstorder.
Qed.

(* Specifications: *)
Lemma H_0_n n : test u -> ok n -> ok 0.
Definition C := lambda (H (enc 0) 0).
Lemma C_complete n : satis u n -> exists n, C u ▷ enc n /\ satis u n.
Lemma H_correct n k v : H (enc n) u ▷^k v -> exists n, satis u n.
Lemma C_sound : eva (C u) -> exists n, satis u n.
Proof with eauto.