Library DA


Definition Ex := R (lam (lam (lam (
   #0 #1 (lam I) (lam (#3 (Succ #2) #1)) I)))).

Lemma Ex_rec u n : proc uEx (enc n) u == u (enc n) (lam I) (lam ((lam (Ex #0)) (Succ (enc n)) u)) I.

Lemma Ex_correct_1 (u : term) n : proc uu (enc n) == trueconverges (Ex (enc n) u).

Definition n_decider u := proc u n, u (enc n) == true u (enc n) == false.

Lemma Ex_correct_3a (u : term) n : n_decider uconverges ( Ex (enc (S n)) u ) → converges ( Ex (enc n) u ).

Lemma Ex_correct_3 (u : term) n m : n_decider un mconverges ( Ex (enc n) u ) → converges ( Ex (enc m) u ).

Lemma Ex_correct_2 (u : term) n : n_decider uconverges (Ex (enc n) u) → n, u (enc n) == true.

Definition n_ldec P := u : term,
  proc u
  ( s : nat, P s u (enc s) == true ¬ P s u (enc s) == false).

Lemma DA_nat M :
  n_ldec Mlacc (fun _ n, M n).

Theorem DA M :
  ldec Mlacc (fun _ t, M t).