Chapter 10 ⌦ in Number Theory

some of the details from these models and consider a programming language in which the (partial) recursive functions are represented by finite binary strings. These strings are just programs for a universal Turing machine (or universal lambda expression) and they take input in the form of a binary string then output another binary string or diverge (fail to halt). For convenience, we will often consider these inputs and outputs to encode tuples of positive integers. On top of this simplified picture of computation, we impose one restriction which is necessary for the development of algorithmic information theory (and hence ⌦). The set of strings that encode the recursive functions must be prefix-free. This means that no program can be an extension of another, and thus each program is said to be self-delimiting. As algorithmic information theory is intricately linked with communication as well as computation, this is quite a natural constraint—if you wish to use a permanent binary communication channel, then you need to know when the end of a message has been reached and this cannot be done if some messages are extensions of others. There are many prefix-free sets that one could choose and many recursive mappings between these and the recursive functions. These di↵erent choices of ‘programming language’ lead to di↵erent values of ⌦, but this does not matter much as almost all of its significant properties will remain the same regardless. However, to allow talk of ⌦ as a specific real number we will use the same language as Chaitin [3]. Now that we have explained what we mean by a programming language, we can give a quick overview of computability in terms of programs. A program computes a set of n-tuples if, when provided with input hx 1 , . , xni, it returns 1 if this is a member of the set and 0 otherwise. A program computes an infinite sequence if, when provided with input n, it returns the value of the n-th element in the sequence. A program computes a real, r, if it computes a sequence of rationals {rn} which converges to r and |r rn| < 1 2 n . These sets, sequences and reals that are computed by programs are said to be recursive. There are also many sets, sequences and reals that cannot be computed, but can be approximated in an important way. A program semi-computes a set of n-tuples if, when provided with input hx 1 , . , xni, it returns 1 if this is a member of the set and diverges otherwise. A program semi-computes 1For more details see Chaitin [3]. August 29, 2007 15:7 World Scientific Review Volume 9in x 6in book ⌦ in Number Theory 163 an infinite sequence of bits if, when provided with input n, it returns 1 if the n-th bit in the sequence is 1 and diverges otherwise. A program semicomputes a real, r, if, when provided with input n, it computes a rational number, rn, where {rn} converges to r from below. These sets, infinite bitstrings and reals that are semi-computed by programs are said to be recursively enumerable or r.e. There is an important point that needs to be made concerning reals and their representations. Each real number between 0 and 1 has a binary expansion: a binary point followed by an infinite sequence of bits that represents the real. Throughout this paper, we shall be making considerable use of the binary expansions of real numbers so it is important to point out an oddity in the definitions above: a real is recursive if and only if its binary expansion is recursive, but a real may be r.e. even if its binary expansion is not r.e. We shall thus take care to distinguish the weaker property of being an r.e. real from the stronger one of being a real whose binary expansion is r.e. An example of a real that is r.e. but not recursive is ⌧ : the real number between 0 and 1, whose k-th digit is 1 if the k-th program (in the usual lexical ordering of finite bitstrings) halts when given the empty string as input and 0 if the k-th program diverges. Equivalently: ⌧ = X