Now, there is an interesting relation between primitive recursion over an ordering of type α<ε0 and the primitive recursive functionals of finite type. Here, ε0 is the fist ε ordinal, and primitive recursive functionals of finite type are Goedel's extension of Kleene's primitive recursion, where one allows the input and return type of a function to be another function (quite common nowadays in functional programming languages such as Haskell, Python and Scala). It is well-known that a function is α-recursive, for α<ε0, if and only if it is definable as a primitive recursive functional.
In this post we will look at part of one direction: how to replace α-recursion by higher-type primitive recursion. In particular, we will look at the construction given in Tait's paper "Constructive Reasoning" from 1968, where he shows how to replace a 2α-recursion, by an α-recursion together with one application of higher-type primitive recursion. We will be following this proof quite closely.
So let ≺ be a primitive recursive ordering of type α. Assume also that we have a standard primitive recursive one-to-one correspondence between natural numbers and finite sequences of natural numbers a↔⟨a0,…,a|a|−1⟩ such that a0>a1>…>a|a|−1.
Define a⊂b if and only if either
- |a|<|b| and ai=bi for all i<|a|, or
- there is a k<min with a_i \prec b_k
Then, note that if each a_i is in position \alpha_i in the ordering \prec , then a is in position 2^{\alpha_0} + 2^{\alpha_1} + \ldots + 2^{\alpha_{|a| - 1}} in the lexicographical ordering \subset . Hence the ordering \subset has type 2^\alpha .
Assume now \phi \colon \mathbb{N} \rightarrow (\mathbb{N} \rightarrow \mathbb{N}) is defined by 2^\alpha -recursion \phi(n) = \lambda i \subset n . F(i, \phi i) We will give a definition of \phi only using \alpha -recursion plus some extra primitive recursion of higher-type.
Given a = \langle a_0, \ldots, a_{|a| - 1} \rangle , let us define a^k = \langle a_0, \ldots, a_{k - 1} \rangle , i.e. the chopping of the sequence a after k elements.
The idea of the construction is quite simple. We just need to notice that for k < |n| we have that i \subset n^{k+1} if and only if either
- i \subseteq n^k , or
- |n| > k \wedge i^k \equiv n^k \wedge i_k \prec n_k
So we are essentially done. In the first case we compute by primitive recursion, whereas in the second case we compute by \alpha -recursion!
Formally, define a more general functional \Psi(k)(v)(n)(i) by primitive recursion on k (on a higher-type) \Psi(k) = {\huge\{} \begin{array}{ll} \lambda v \lambda n \lambda i . 0 & k = 0 \\ \chi(k, \Psi(k-1)) & k > 0 \end{array} where \chi(k, f)(v) is defined by \alpha -recursion on v as \chi(k, f)(v) = \lambda n \lambda i . {\huge\{} \begin{array}{ll} f(v)(n)(i) & i \subseteq n^k \\ F(i, \chi(k, f)(i_k)(i)) & i^k \equiv n^k \wedge i_k \prec v \end{array} with \chi(k, f)(v) = \lambda n \lambda i . 0 if i \not\subset n^{k+1} or k \geq |n| . By induction on k and \alpha -induction on v we can see that if k \leq |n| and k > 0 \rightarrow v = n_{k-1} then \Psi(k)(v)(n) = \lambda i \subset n^k . F(i, \phi i) Hence, we can define \phi(n) = {\huge\{} \begin{array}{ll} \Psi(|n|)(n_{|n| - 1})(n) & n > 0 \\ \lambda i . 0 & n = 0 \end{array}
10 comments:
world777 bet
aws solution architect training
azure solution architect certification
openshift certification
azure data engineer certification
World777 Login
Kheloyar
kundan jewellery
Indian traditional jewellery
Lotus365 id
Lotus365 Login
Lotus365 Login
Post a Comment