Notes on Computable Analysis
- 176 Downloads
Abstract
Computable analysis has been part of computability theory since Turing’s original paper on the subject (Turing, Proc. London Math. Sc. 42:230–265, 1936). Nevertheless, it is difficult to locate basic results in this area. A first goal of this paper is to give some new simple proofs of fundamental classical results (highlighting the role of \({{\Pi }_{1}^{0}}\) classes). Naturally this paper cannot cover all aspects of computable analysis, but we hope that this gives the reader a completely self-contained ingress into this area. A second goal is to use tools from effective topology to analyse the Darboux property, particularly a result by Sierpiński, and the Blaschke Selection Theorem.
Keywords
Computable analysis Computable real Computable real-valued function Markov computable Borel computable Type II computable Darboux property Blaschke Selection Theorem Convex sets1 Introduction
To the authors’ knowledge, the first recorded example of a number known by approximation is \(\sqrt {2}\). An approximation of \(\sqrt {2}\) to six decimal places is contained on a preserved Babylonian clay tablet from the second millennium BC. It is reasonable to assume that Babylonian mathematicians had an algorithm for approximating \(\sqrt {2}\) to an arbitrary precision [30].
This indicates that early mathematicians realised that we can approximate a number without knowing the number in the same way that we know a rational number like \(\frac {1}{2}\). The fact that mathematics contains numbers which we only know indirectly through approximations has been a significant driver of mathematical development over the centuries. For example, Eudoxus’ theory of ratios was a rigorous response to the existence of irrational lengths in geometry [18]. The development of calculus is replete with approximation based methods and arguments.
The idea of understanding numbers by approximations culminated in the definition of a real number. In the early 19th century, the French mathematician Augustin-Louis Cauchy, defined a Cauchy sequence to be a sequence of rational numbers x_{1}, x_{2},… such that, for all 𝜖 > 0 there exists an n such that, if m > n, then |x_{n}−x_{m}| < 𝜖. In 1871, Georg Cantor used this concept to give a formal definition of a real number. Cantor identified the real numbers with Cauchy sequences of rational numbers.^{1}
Notice that this definition removes the idea of having a “method” for approximating a real number. Instead, a real number is simply defined to be an approximation by rational numbers. Computable analysis concentrates upon real numbers, and functions on the real numbers, that we can approximate using a computational method. This of course invites the question, what exactly is a computational method?
In his famous list of problems for the new century, David Hilbert conjectured in 1900 that mathematics was complete; he believed that there was a logic in which every true statement in the language of number theory should have a proof. It was in the early 1930s that number theory was proven incomplete by Kurt Gödel [31]. Also in the 1930s, the related result of the undecidability of first order logic was established through the work of Church, Kleene, and Turing. This was as a result of a mathematical “definition” of computation. An intuitive understanding of computability existed well before the 1930s, and moreover, the proofs given during this time were mostly constructive. Phrases such as ‘by finite means’ or ‘by constructive measures’ were relatively standard, but lacked any precise definition. Despite some argument about Church’s Thesis (see [27]), Alan Turing is widely regarded as formalizing these concepts in his 1936 paper ‘On Computable Numbers, with an Application to the Entscheidungsproblem’ [67]. Turing defined a primitive machine, now known as a Turing machine, and used it not only to solve the Entscheidungsproblem, but also to define the computable real numbers. Turing called a real number x computable if arbitrarily precise approximations of x could be computed by a machine. Or in other words, if there existed a computable Cauchy sequence of rational numbers with limit x.
Turing’s paper was influential for many reasons, particularly because before this time the foundations of computability were built upon the natural numbers (or finite strings), known as Type I objects. These objects are finitely describable, and therefore straightforward to work with. Real numbers, on the other hand, are infinite objects, and so they are not nearly as easy to conceptualise. Because the real numbers form the basis of analysis, by providing a neat and natural definition of the computable reals, Turing laid the foundation for a new branch of mathematics, known today as computable analysis.
Computable analysis would be extended and explored by many mathematicians in the following years, notably G. Ceitin [19], O. Demuth [24], R. Goodstein [32], S. Kleene [41, 42], G. Kreisel et al. [43, 45], B. Kushner [48], A. Markov [54, 55], V. Orevkov [58], H. Rice [61], E. Specker [65, 66] and I. Zaslavsky [73, 74].^{2} By around 1975, the development of the fundamentals of computable analysis was largely complete. A number of texts summarising the area appeared including those by M. Pour-El and J. Richards [59], and O. Aberth [1, 2].^{3}
In this paper, we take a fresh look at some of the original results of computable analysis. We aim to provide a new take on some of those early proofs, highlighting the role of \({{\Pi }_{1}^{0}}\) classes. As well as this, we focus on two important results in classical analysis: a property closely tied to the Intermediate value Theorem, known as the Darboux property, and a generalisation of the Bolzano-Weierstrass Theorem, referred to as the Blaschke Selection Theorem.
A function f has the Darboux property on an interval if, for every a and b in this interval where a < b, and every y between f(a) and f(b), there exists an x in [a, b] such that f(x) = y [22]. Unfortunately, once it has been established that every computable real-valued function is continuous, the Darboux property on its own becomes less interesting. What is interesting is a result by Sierpiński that states that every real-valued function \(f: \mathbb {R} \to \mathbb {R}\) is the pointwise limit of a sequence of Darboux functions [62]. This result is unusual and surprising, and we dedicate a large portion of this paper to discussing how difficult it is to compute such a sequence of functions. While the Intermediate value Theorem has been analysed, see for example Pour-El and Richards [59], and Aberth [1], the Darboux property, particularly the Sierpiński result, has not before been considered in this context.
The Blaschke Selection Theorem asserts that every infinite collection of closed, convex subsets in a bounded portion of \(\mathbb {R}^{n}\) contains an infinite subsequence that converges to a closed, convex, nonempty subset of this bounded portion of \(\mathbb {R}^{n}\) [6]. The Blaschke Selection Theorem is significant because it is related to one of the central theorems of classical analysis; that every bounded sequence of points in \(\mathbb {R}^{n}\) has a convergent subsequence [8]. Largely unstudied from a computability theoretic perspective, in this paper we explore how difficult it is to find Blaschke’s convergent subsequences. We are also interested in how difficult it is to determine if a set is not convex.
Section 3 introduces the relevant computable objects. The first section covers the computable reals while the second covers the computable real-valued functions. We discuss some of the different definitions that are available to us, including Markov, Borel and Type II computability, and justify our choices. Section 3 introduces a computable subset of \(\mathbb {R}^{n}\), utilising a particular type of distance function. We give a proof that the graph of a Type II computable function is computable on any interval, while the graph of a Markov computable function is upper semi-computable, but not necessarily computable, on any given interval.
Section 4 gives a straightforward treatment of the computability of the distance function for Type II computable functions. Whilst this is in the literature, it is not stated as clearly as it might be, e.g. Bravermann [15]. We also look at the distance function for Markov computable functions.
Section 5 is dedicated to the Darboux property, specifically the Sierpiński result. We consider how complex particular Darboux functions are, and the consequences this has on the complexity of the approximating Darboux sequences. Complexity is discussed in terms of effective Baire classes 1 and 2. We show that any Baire class 2 function is the limit of a sequence of Baire class 2 Darboux functions. We are also interested in the effect that restricting the domain and range of the function has on the complexity of the approximating Darboux sequences. So we explore the Darboux property defined only on rational-valued functions. It turns out that any computable rational function is a limit of a sequence of computable rational Darboux functions. The last section of Chapter 4 briefly looks at the consequences of requiring a sequence of Darboux function to uniformly, rather than pointwise, approximate a function. The Bruckner, Ceder and Weiss paper [17] mostly inspires this section.
Section 6 is dedicated to the Blaschke Selection Theorem. We begin by giving a proof of the Theorem, and then analyse this proof to show that 0^{″} is sufficient to find a convergent subsequence of any appropriate collection of closed convex sets, and to compute its limit. We also prove that 0^{′} is insufficient in the place of 0^{″}. Lastly, the final section of the chapter briefly looks into the complexity of convexity. We prove that 0^{′} is not sufficient to decide convexity in \(\mathbb {R}^{n}\), but that the set of indices of closed convex sets is co-computably enumerable over 0^{′}.
At the beginning of each chapter or section we will clearly identify all original results.
2 Prerequisites and Notation
We assume that the reader has some background in computability theory, but for those who are less familiar, we state some relevant definitions and results. For a brief introduction to computability, see Soare [64], or the introductory chapters of Downey and Hirschfeldt [27].
Let φ_{1}, φ_{2},… be a standard enumeration of the partial computable functions.
We will use \(\mathbb {N}\) and ω interchangeably. Cantor space is the collection of infinite binary sequences, 2^{ω}. Baire space is the collection of infinite ω sequences, ω^{ω}. The most important difference between these two spaces is that Cantor space is compact, while Baire space is not.
We call natural numbers, or equivalently finite (binary) strings, Type I objects. We call real numbers, or equivalently infinite (binary) strings, Type II objects.^{4} In general, Type n objects are sets of Type (n−1) objects.
One of the difficulties of computable analysis is dealing with Type II, rather than Type I, objects. Type I objects can be expressed finitely, and therefore, collections of Type I objects form sets. Type II objects, on the other hand, are infinite, and therefore, collections of Type II objects form classes. For this reason we also need to define \({{\Pi }_{1}^{0}}\), \({{\Sigma }_{1}^{0}}\)classes.^{5} We do this now.
A tree is a subset of 2^{ < ω} that is closed under initial segments. We call an infinite sequence P ∈ 2^{ω} a path through a tree T if for all σ≺P we have σ ∈ P. The collection of all paths in T is denoted [T].
Or equivalently, a subset of 2^{ω} is a \({{\Pi }_{1}^{0}}\) class if it is equal to [T] for some computable tree T. An example of a \({{\Pi }_{1}^{0}}\) class is any collection of separating sets {X:A⊆X and X ∩ B = ∅}, where A and B are disjoint c.e. sets.
\(\mathcal {C}\) is effectively closed if and only if \(\mathcal {C}\) is \({{\Pi }_{1}^{0}}\). A class \(\mathcal {C}\) is closed if its complement is open. A class \(\mathcal {C}\) is effectively closed if its complement is effectively open.
Almost all of computable analysis works because the reals are effectively second countable, meaning that they have a computable countable sense subset. This easily generalizes to more abstract spaces.
We define a computable metric space to be a separable, complete metric space (Polish metric space) \(\mathcal {X}=(X,d,Y)\) with metric d and countable dense subset Y such that, given 𝜖 and x, y ∈ Y in our space, there exists an algorithm that computes d(x, y) to within 𝜖. That is, there exists a computable function f(x, y, 𝜖) that outputs a value to within 𝜖 of d(x, y).
We call a point x in a metric space M an accumulation point of A ⊂ M if every neighbourhood of x has a point in A other than x.
Let \(X \subset \mathbb {R}^{n}\). Then we will denote by \(\overline {X}\) is the closure of X. Unless otherwise mentioned, we consider B(x, 𝜖) to be the open ball in the appropriate space, with center x and radius 𝜖.
3 First Attempts and Definitions
In this section we will shed some historical light on the definitions used in this paper. We begin with the computable real numbers. We give a new direct proof of Theorem 3.8, a result due to Kreisel, Lacombe and Shoenfield [45]. We also construct an original Markov computable function that cannot be extended to any continuous function on \(\mathbb {R}\) (Example 3.12).
3.1 Defining a Computable Real
Armed with the definition of a Cauchy sequence, it would now seem natural to us that a computable real should involve a Cauchy sequence converging in some algorithmic manner. In Cauchy’s time there existed no formal notion of computation. However, at the turn of the 20th century there was certainly an intuitive sense of what an algorithmic method was. For example, see the works of Dehn [23], Hermann [36], Kronecker [46], and von Mises [70].^{6}
I intentionally leave aside the practical length of operations, which can be shorter or longer; the essential point is that each operation can be executed in finite time with a safe method that is unambiguous.
While some students of history disagree about Borel’s intention, if our understanding is correct, his intuition, at least, seems reasonable; a real should be computable if we can, in finite time, give an approximation of it with arbitrary accuracy.
Another example of an apparent intuitive understanding of computation is the work of von Mises [70]. Von Mises gave a “definition” of a real number being “random” if it obeyed the law of large numbers on any “selected” subsequence. This definition was later formalised using computable functions (see Downey and Hirschfeldt [26]).
A sequence is computable if a circular-free machine can compute it. A number is computable if it differs by an integer from the number calculated by a circular-free machine.
Simply put, a real x is considered computable if there exists a Turing machine that, given no input, outputs a binary decimal expansion of x.
There is, however, a problem with this definition, as Turing later noted in his correction [68]. He believed that if we can compute a rational q_{i} for all i such that |x − q_{i}| < 2^{−i} (which he called the ‘intuitive requirement’), then x should also be considered computable in the context of his original definition, and vice versa.
We immediately have one direction; if we have a binary expansion of a real x, then the truncated binary expansion will provide a sufficient rational in the sense of the second definition. It is in the other direction that Turing noted a disparity. For example, suppose we have a sequence of rational numbers (q_{i})_{i} that approach x as above, and \(q_{1}=\frac {1}{2}, q_{2}=\frac {1}{2}, q_{3}=\frac {1}{2}, \dots \). Then we have no way of knowing what the first binary point of x should be, because our sequence may move above or below \(\frac {1}{2}\) at any stage.
To correct this non-uniformity, Turing goes on to modify the way he associates computable numbers with computable sequences. His solution is a formula that incorporate both concepts. The details, which we do not give here, can be found in [68].
We choose to consider reals as Cauchy sequences, where two reals are the same if they have equivalent Cauchy sequences. The natural effectivization is the following.
Definition 3.1
A Cauchy name for a real x is a sequence (x_{i})_{i} of rationals that converge rapidly to x. That is, for every k and j ≥ k, |x_{j}−x|<2^{−k}.
Definition 3.2
- 1.
A real number x is computable if it has a computable (rapidly converging) Cauchy name.
- 2.
Similarly, we call a sequence of real numbers (r_{i})_{i}computable if there exists a computable sequence of rationals (q_{i, k})_{i, k} such that for all i, (q_{i, k})_{k} is a computable Cauchy name for r_{i}.
We call the collection of all computable real numbers \(\mathbb {R}_{c}\). In general, if x is a computable real we will write a computable Cauchy name as (x_{i})_{i}.
3.1.1 Preliminary Facts and Computable Reals
We begin by mentioning that the definition we have given of a computable real could be replaced with a number of equivalent definitions. Hertling and Weihrauch give several alternate equivalent definitions in [13]. We chose Cauchy sequences as they were the most intuitive for this exposition. Considering this, the first thing to note about computable reals is that we can no longer computably decide equality, even for a fixed real like 0.
Theorem 3.3
(Folklore, implicit in Turing [67]) The following relations cannot be computably decided: x = y, x ≤ y.
Proof
Suppose to the contrary. Fix e. Define a computable sequence of rationals (x_{i})_{i} such that x_{i} represents the state of the e^{th} machine at stage i on input e. That is, x_{0}=0 and we let \(x_{i}=x_{i-1} + 0. \overbrace {00 {\dots } 00}^{i-1}1\) if φ_{e}(e)[i]↓ and \(x_{i}=x_{i-1} + 0. \overbrace {00 {\dots } 00}^{i-1}0\) otherwise. (x_{i})_{i} is a computable sequence of rationals, and we let x be the limit to this sequence. We then ask whether x = 0? If yes, then we know φ_{e}(e) does not halt, and if no it does. Contradiction. x ≤ y follows similarly. □
Notice that the complexity of equality is at worst 0^{′}; to decide if x = y, given respective Cauchy names (x_{i})_{i} and (y_{i})_{i}, simply ask whether (∀n)|x_{n}−y_{n}| < 2^{−(n−1)}.
Note, however, we can regard operations O on computable reals as computable if we can compute a Cauchy name for O(x, y) from ones for x and y. For example, we can compute the distance between two computable reals x and y.
Theorem 3.4
(Folklore) The following operations are computable: x+y, x−y, xy, if y≠0 then x÷y, if x>0 then exp(x) and log(x), sin(x), cos(x), tan−1(x), max(x,y), min(x,y) and\(\sqrt {x}\)as long as x≥0.
- 1.
- 2.
It is not enough that a real has a Cauchy name, one of these sequences must be computable for a real x to be considered computable.
- 3.
There are infinitely many distinct computable Cauchy names for any computable real, and no computable listing of every computable Cauchy name. If there were, we could diagonalize and arrive at a contradiction.
- 4.
While we cannot list every computable Cauchy name, we can build a computable tree in Baire space whose paths represent Cauchy names. We represent the rationals with Gödel numbers, and the n^{th} element in a branch represents the n^{th} term in a potential Cauchy sequence. We ‘kill’ a branch at stage (or height) n if the next element to be added is further than 2^{−m} away from element m for all m < n. Note that, while the tree may be computable, the paths need not be. We will use the fact that the Cauchy names form a \({{\Pi }^{0}_{1}}\) class later on.
3.1.2 Computable Metric Spaces
Recall that we defined a computable metric space to be a separable complete metric space (polish metric space) \(\mathcal {X}=(X,d,Y)\) with metric d and countable dense subset Y such that, given 𝜖 and x, y ∈ Y in our space, there exists an algorithm that computes d(x, y) to within 𝜖. Notice that \((\mathbb {R},d, \mathbb {R}_{c})\) is a computable metric space; in the separable complete metric space \((\mathbb {R},d)\), with the usual metric d, \(\mathbb {R}_{c}\) is a countable dense subset, and by Theorem 3.4, for any \(x,y \in \mathbb {R}_{c}\) we can compute d(x, y) = |x − y| to within 𝜖. This is the space we will usually be working in, however, we note in passing that the concept of a ‘computable real’ can be generalised to other computable metric spaces. Consider the following example.
Example 3.5
Let X be the collection of all real-valued functions \(f: [0,1] \to \mathbb {R}\). Define a metric d_{X}(f, g) = sup{|g(x)−f(x)|:x ∈ [0,1],f, g ∈ X}. Then the collection Y of all polynomials \(p: [0,1] \to \mathbb {R}\) is a countable dense subset of X. For any two polynomials p_{1}, p_{1}, we can compute d_{X}(p_{1}, p_{2}) to within 𝜖, hence (X, d_{X}, Y) is a computable metric space. We can then define a function f ∈ X to be ‘computable’ in this space if it is the limit of a fast converging sequence of polynomials in Y.
3.2 Defining a Computable Real-Valued Function
The initial approach to defining computable functions on reals concentrated on the computable reals. Here was Turing’s idea. If x is a computable real, then by definition, there must exist a machine φ_{e} that corresponds to a Cauchy name for x. Logically extending this idea, Turing defined a function \(f:\mathbb {R}_{c} \to \mathbb {R}_{c}\) to be computable if there exists a total computable function ψ such that ψ(e) is the index of a machine that corresponds to the Cauchy name of f(x). For a more formal classification, see Turing’s original paper [67]. Turing’s function essentially takes a method to compute x to a method to compute f(x). The Russian school later adopted and further developed this idea, and today Turing’s computable function is more commonly known as Markov computable.
Markov’s version of a computable function \(f: \mathbb {R}_{c} \to \mathbb {R}_{c}\) follows [54].
Let φ_{1}, φ_{2}… be a standard enumeration of the partial computable functions. We call \(e \in \mathbb {N}\) an index name of \(x\in \mathbb {R}_{c}\) if e is the index of the partial machine that computes a rational Cauchy name of x.
Definition 3.6
We call a function \(f: \mathbb {R}_{c} \to \mathbb {R}_{c}\)Markov computable if there exists a partial computable function \(\nu : \mathbb {N} \to \mathbb {N}\) such that, given any index name e of \(x \in \mathbb {R}_{c}\), v(e) exists, and is an index name of f(x)
We call the function \(\nu : \mathbb {N} \to \mathbb {N}\) the index function of f.
It turns out that the Turing-Markov definition (which we will now refer to as ‘Markov’) is not the only interpretation of the computable function \(f:\mathbb {R}_{c} \to \mathbb {R}_{c}\). Borel computability, which in contrast takes approximations (rather than methods) to approximations, is also a reasonable definition worth considering. In the introduction to this section, we mentioned the idea of using a finite number of bits of the Cauchy name of real x to give some approximation of f(x). Borel computability formalises this notion.^{8}
Definition 3.7
Let (x_{i})_{i} be a Cauchy name of x. We call a function \(f: \mathbb {R}_{c} \to \mathbb {R}_{c}\)Borel computable if there exists an oracle Turing Machine Φ such that, for all \(x \in \mathbb {R}_{c}\) and \(n \in \mathbb {N}\), \({\Phi }^{(x_{i})_{i}}(n)=q\), where q is rational and |q − f(x)| < 2^{−n}.
These natural intuitions coincide as we now see. The following theorem was originally proved by Kreisel, Lacombe and Shoenfield in 1959 [45], and later by Ceǐtin [19] in 1967. We give a new direct proof of this result that shows that Markov computable functions have a particular effective continuous property.
Theorem 3.8
(Kreisel, Lacombe, Shoenfield [45]) A function f is Markov computable if and only if it is Borel computable.
Proof
(⇐) Let \(f: \mathbb {R}_{c} \to \mathbb {R}_{c}\) be a Borel computable function and e the index name of a computable real x. The function f is Borel computable, so given the Cauchy name of x we have access to a Cauchy name (f(x)_{i})_{i} of f(x). Using the Recursion Theorem we can find the index name e^{′} of f(x).^{9} Define a function \(\nu :\mathbb {N} \to \mathbb {N}\) such that ν(e) = e^{′}. Then ν is a partial computable index function and so f is Markov computable.(⇒) This direction is not as straightforward. Initially, you may think to approach it in a similar manner to the backwards direction. However, if x is a computable real, but we do not have access to a computable Cauchy sequence converging to x, then there is no machine, and therefore no index, that outputs this particular approximation of x. This means we cannot find the index name of f(x) using ν.
We will prove that a Markov computable function f is Borel computable in a few steps. First we show that if a Markov computable function f is effectively continuous on \(\mathbb {R}_{c}\) then f is Borel computable. We then prove that there exists a unique c.e. set of open balls that ensures that every Markov computable function is effectively continuous. First, let us define what we mean by ‘effectively continuous’. □
Definition 3.9
Claim 1
If a Markov computable function \(f: \mathbb {R}_{c} \to \mathbb {R}_{c}\) is effectively continuous on \(\mathbb {R}_{c}\) then f is Borel computable.
Proof of claim 1
Let f be an effectively continuous Markov computable function. To prove our claim, we must show that, for any computable real \(x\in \mathbb {R}_{c}\) and \(n \in \mathbb {N}\), we can compute a n^{th} approximation, and therefore Cauchy name, of f(x).
Fix an arbitrary computable real a with (possibly noncomputable) Cauchy name (a_{i})_{i}. All we need to do is find \(b\in \mathbb {R}_{c}\) such that |f(b)−f(a)| < 2^{−(n+1)} and take the (n+1)^{th} approximation of f(b). If we call f(b)_{n+1} the (n+1)^{th} approximation of f(b), then f(b)_{n+1} will be within 2^{−n} of f(a), and so will act as a sufficient approximation of f(a). More precisely, |f(b)_{n+1}−f(a)| ≤ |f(b)_{n+1}−f(b)|+|f(b)−f(a)| < 2^{−(n+1)}+2^{−(n+1)} = 2^{−n}.
Because |q − a|<2^{−m} ≤ d(2^{−(n+1)},a), we have that |f(q)−f(a)| < 2^{−(n+1)}. Setting q = b, we are done.^{10} □
We now need to prove that a Markov computable function is in fact effectively continuous on \(\mathbb {R}_{c}\). We do this by showing that there exists a c.e. set W with the following properties.
- 1.
If the pair of open balls (b_{1}, b_{2})∈W, then for all computable real numbers x contained in b_{1}, f(x) is contained in b_{2}.
- 2.
If e is an index name of \(x \in \mathbb {R}_{c}\) and ν is the index function of f, then for all k there exists a k^{′} such that \((B(x_{k^{\prime }},2^{-k^{\prime }}),B(f(x)_{k},2^{-k})) \in W\). The rational f(x)_{k} is a computable k^{th} approximation of f(x), whose index name is ν(e) (and similarly for x_{k}).
Then if such a set W exists, f must be effectively continuous on \(\mathbb {R}_{c}\). This fact follows directly from the definition of W. However, the details are given below for completeness.
Suppose we had such a set W with Properties 1 and 2 above. We need to define a computable function d(2^{−m},x) for all \(x\in \mathbb {R}_{c}\) and \(m \in \mathbb {N}\) as given above. Fix \(a\in \mathbb {R}_{c}\) (we are given an index name of a, and hence have access to a computable Cauchy name of a) and \(n \in \mathbb {N}\). Let a_{1}, a_{2},… and f(a)_{1}, f(a)_{2},… be Cauchy names of a and f(a) respectively.
To define d(2^{−n},a), we wait for a particular pair (b_{1}, b_{2}) to be enumerated into W. We know that there exist Cauchy names a_{1}, a_{2},… and f(a)_{1}, f(a)_{2},… of a and f(a) respectively such that (b_{1}, b_{2})∈W where b_{2} = B(f(a)_{n+3},2^{−(n+3)}) and b_{1} = B(a_{k},2^{−k}) for some k by Property 2 of W.
When we observe such a pair, set d(2^{−n},a) = 2^{−(k+1)}.
Justification: if d(2^{−n},a) = 2^{−(k+1)} then |x − a| < d(2^{−n},a) if and only if x ∈ B(a,2^{−(k+1)}). But by Property 1 of W, if \(x \in b_{1} = B(a_{k}, 2^{-k}) \cap \mathbb {R}_{c}\) then f(x)∈b_{2} = B(f(a)_{n}+3,2^{−(n+3)}) ⊂ B(f(a),2^{−n}). Hence, if |x − a| < d(2^{−n},a) then |f(x)−f(a)| < 2^{−n}, and so f is effectively continuous.
Finally, we need only show W exists.
Claim 2
We can enumerate a c.e. set W as described above for any Markov computable function f.
Proof of claim 2
Note that the Recursion Theorem is used implicitly during this proof. In general we omit these details for simplicity. Let e_{1}, e_{2},… be a computable listing of indices corresponding to all possibly partial Cauchy sequences. That is, for any index i, the machine with index e_{i} copies the sequence output by φ_{i} until a stage where the sequence no longer looks Cauchy. If we observe a machine e_{i} outputting some rational that is too far away from the previously observed term in the sequence, we halt e_{i} on the last viable output forever. So every index in our list must correspond to a sequence that looks Cauchy at every stage, although some may be partial.
We now refine this list. Let \(\nu : \mathbb {N} \to \mathbb {N}\) be the index function of Markov computable function f. Recall that if e is the index of a partial machine that outputs a Cauchy name for real x, then ν(e) is the index of a partial machine that outputs a Cauchy name for real f(x). Build a new list of indices as follows; let e(i, k) represent the index of the machine that copies machine e_{i} on all outputs until a stage s is reached where the machine with index ν(e(i, k)) halts and outputs a viable k^{th} approximation to some rational (hopefully the image under f of whatever e_{i} represents). More precisely, copy \(\varphi _{e_{i}}\) on all outputs until we reach a stage s where \(\varphi _{\nu (e(i,k))}(k)[s]=r_{k} \in \mathbb {Q}\), and in preceding stages has output r_{1},…,r_{k−1}, where (∀j)(∀i)j < i < k,|r_{i}−r_{j}| < 2^{−j}. If this is observed, machine e(i, k) pauses. This machine will restart at a later stage if W does not meet the conditions given. Recall that, by stage s machine e(i, k) has output some finite sequence of rationals \(q_{1}, \dotsc ,q_{k^{\prime }}\) that appear to be Cauchy. We now enumerate the ball \((B(q_{k^{\prime }}, 2^{-k^{\prime }}), B(r_{k}, 2^{-k}))\) into W.
We claim that W is as defined above. Suppose that Property 1 does not hold. That is, there exists a pair \((b_{1}, b_{2}) =(B(q_{k^{\prime }}, 2^{-k^{\prime }}), B(r_{k}, 2^{-k})) \in W\) such that there is some \(a\in b_{1} \cap \mathbb {R}_{c}\), yet f(a)∉b_{2}. At some point we will enumerate a pair (b_{3}, b_{4}) into W such that b_{3} ∈ b_{1} but b_{2} ∩ b_{4} = ∅ (because a is a computable real). Suppose this occurs at stage s, and let e(i, k) and e(j, l) be the indices of machines that were responsible for (b_{1}, b_{2}) and (b_{3}, b_{4})’s enumeration into W respectively. Let \(\varphi _{e_{j}}\) be total, and output a Cauchy name of a. This means e(j, l) will be copying a true Cauchy name (see note on this later).
We now instruct the machine e(i, k) to copy the Cauchy name currently being copied by machine e(j, l). This is allowed because b_{3} ∈ b_{1}, and so e(i, k) will still output a viable Cauchy name. That is, suppose by this stage e(j, l) has copied rationals a_{1},…a_{m} in a Cauchy name of a. Assuming m > k^{′}, we instruct e(i, k) to copy the machine \(\varphi _{e_{j}}\) from this point onwards (if m < k^{′} just wait until we have seen the k^{′th} term in the Cauchy name of a and copy after that point). Then \(r_{1}, r_{2}, \dots r_{k^{\prime }}, a_{m}, a_{m+1} \dots \) is a Cauchy name of a and φ_{ν(e(i, k))}(k)[s] = r_{k} (by the Use Principle), but f(a)∉B(r_{k},2^{−k}).^{11} Since ν is an index function, we have a contradiction.
Note that we assume e(j, l) is copying a true Cauchy name of a. We cannot, of course, computably know whether the machine \(\varphi _{e_{j}}\) is total, but we know that such a machine exists, and that is sufficient.
And so 1 holds. 2 follows easily; every computable real has a Cauchy name represented by some index in our list, and hence the desired balls must be enumerated into W at some stage.
Therefore the c.e. set W exists as claimed, and this proves both the claim and the result. □
Henceforth, we will now use Borel and Markov computability interchangeably.
We remark that a lot of classical analysis can be analysed using Markov computability. This is the gist of the books of Aberth [1].
There is one further classical notion of computability on the computable reals.
Definition 3.10
We call a function \(f: \mathbb {R}_{c} \to \mathbb {R}_{c}\)Banach-Mazur computable (also known as sequentially computable) if f maps any given computable sequence (r_{i})_{i} of real numbers into a computable sequence of real numbers (f(r_{i}))_{i}.
Banach and Mazur developed this type of computability in the 1930s [4]. It does not seem very natural in our opinion and is known to be different to those given above. A function that is Markov computable must be Banach-Mazur computable, and while the converse holds in some cases, it is not true in general. See [39] for Hertling’s construction of a Banach-Mazur computable but not Markov computable function on \(\mathbb {R}_{c}\).^{12} Banach-Mazur computability is too general for our purposes because it characterises functions as computable even if they may not be computed in the typical sense; by a Turing Machine. This type of computability is not widely studied and does not play a large role in the theory.
Notice that all of these types of computability require the function in question to be continuous on its domain. This fact is unsurprising when you think about it, and will remain a requirement when we look at computable function defined on all of \(\mathbb {R}\). However, we will soon see that not every Markov/Borel computable function can be extended to even a continuous function on \(\mathbb {R}\), much less a computable one. And with this in mind, we move on to defining the computable real-valued function.
3.2.1 A Computable Function \(f: \mathbb {R} \to \mathbb {R}\)
We now reconsider the definition of a computable real-valued function. In the previous section, we restricted our attention to the computable reals. However, as all real values are Type II objects, it could be argued that it is more natural to consider a computable process as taking any representation of one Type II object to another (rather than just those that happen to be computable). Kleene first investigated this notion in 1952 [41]. He considered a ‘computable real-valued function’ to involve an effective procedure that takes any representation of a Type II object to a Type II object. Let us consider what that means.
Given an effectively converging Cauchy sequence in Baire space, we would like to map this sequence in some uniform way to another effectively converging Cauchy sequence. We give Kleene’s solution below.
Definition 3.11 (Kleene)
Let (x_{i})_{i} be a Cauchy name of x. We call a function \(f: \mathbb {R} \to \mathbb {R}\)Type II computable if there exists an oracle Turing Machine Φ such that, for all \(x \in \mathbb {R}\) and \(n \in \mathbb {N}\), we have \({\Phi }^{(x_{i})_{i}}(n)=q\), where q is rational and |q − f(x)| < 2^{−n}.
Notice that this definition is simply an extension of Borel computability, and that we now allow x to take any real value, rather that restricting x to \(\mathbb {R}_{c}\). We sometimes drop the ‘Type II’ and just call these functions computable.
There are a number of equivalent definitions scattered throughout the literature that we could have used in the place of Definition 2.11. For example, those provided by Lacombe [51, 52] and Grzegorczyk [35], who were also interested in the computable real-valued function around the same time as Kleene. Grzegorczyk and Lacombe wanted a definition that was as closely linked with classical analysis as possible. In 1955, they (independently) gave the following definition of a computable real-valued function; a function \(f: \mathbb {R} \to \mathbb {R}\) should be considered computable if it is both sequentially computable (f maps every computable sequence of points into a computable sequence of points - recall Banach-Mazur computable functions!) and effectively uniformly continuous (there is a computable function \(h: \mathbb {N} \to \mathbb {N}\) such that, for all x, y and all N, if we have \(|x-y| < \frac {1}{h(N)}\) then |f(x)−f(y)| < 2^{−n}).
From the analytical standpoint, this is a natural definition, due to the fact that knowledge of a real-valued function on a dense set of points and continuity is sufficient to determine it. Grzegorczyk and Lacombe simply effectivise these two conditions [59].
We could have used either of these definitions, or many of the others not stated here. However, in the effort to be as straight forward and consistent as possible, we have opted for Kleene’s Type II computable functions.
We now note a few interesting points about computable functions. First, the reader will notice that computable functions must be continuous over \(\mathbb {R}\). Continuity is a result of the very nature of the computable function, combined with the Use Principle. As a consequence, even simple functions like the a step function with a single step at 0 is not computable.
This last example raises an interesting question. What about extending Borel computable functions to computable functions? Is this always possible?
Obviously, based purely on domain differences, Markov (or Borel) and (Type II) computability are not the same. But what may not be as clear is that, even if we compare them with restricted or extended domains, these notions of computability remain (to some extent) distinct.
By a straightforward application of the Recursion Theorem, it is evident that any computable function restricted to \(\mathbb {R}_{c}\) must be Borel computable. The converse is not true in general. We will give an example of a Borel computable function that cannot be extended to a computable function. In fact, we give an example of a Borel computable function that cannot even be extended to any continuous function on \(\mathbb {R}\).
Example 3.12
We will build a function \(f: [0,1] \cap \mathbb {R}_{c} \to \mathbb {R}_{c}\) that is Borel computable, but cannot be extended to a continuous function on \(\mathbb {R}\). Consider a standard enumeration of partial computable machines \(\varphi _{e_{1}}, \varphi _{e_{2}}, \dots \) that appear Cauchy (recall we built such a sequence in the proof of Theorem 3.8, Claim 2). Note that we are only interested in computable reals in the unit intervals, so discard all machines that approximate values outside of this. Call the m^{th} term output by machine \(\varphi _{e_{n}}\) (if such a term exists) q_{m, n}. Notice that, partial or not, q_{m, n} is a 2^{−m} rational approximation of some computable real. We now define f by a sort of diagonalisation process. We essentially set f(x) = m for all \(x \in (q_{m,m}-2^{-m},q_{m,m}+2^{-m})\cap \mathbb {R}_{c}\) not yet defined.
- 1.
We have observed q_{m, m}
- 2.
There exists an \(x \in (q_{m,m}-2^{-m},q_{m,m}+2^{-m})\cap \mathbb {R}_{c}\) for which f(x) has not yet been defined
Declare f(x) = m for all x that satisfy 2.
Clearly f is Markov (or Borel) computable. The function f must be defined at every computable real by construction, so to decide f(x), simply wait until the Cauchy name of x is entirely contained in an interval f is defined on.
There is a section of the unit interval that f is not defined on at every stage. This means, for all n there exists \(x \in [0,1] \cap \mathbb {R}_{c}\) such that f(x) = n, i.e. on [0,1]f attains arbitrarily large values. The Extreme value Theorem asserts that if a function is continuous on a bounded interval, it must attain a maximum and minimum on that interval [9].^{13} Hence by the Extreme value Theorem, f cannot be extended to a continuous function on \(\mathbb {R}\). Consequently, f cannot be extended to a computable function. □
Note we could have given a similar example using \({{\Pi }_{1}^{0}}\) classes with no computable members.
Even though there exist Borel computable functions that are discontinuous almost everywhere on \(\mathbb {R}\), if we restrict our attention to Type II computable functions we can (perhaps surprisingly) compute their maximum and minimum on any interval.
The following result is an effectivisation of Bolzano’s Extreme value Theorem. It can be found in [59]. We give our own proof of this result.
Theorem 3.13
(Bolzano [9])(Extreme value Theorem) If a function\(f: \mathbb {R} \to \mathbb {R}\)is continuous on a closed interval [a,b], then f has both a maximum and minimum on [a,b].
Theorem 3.14
(Pour-El and Richards [59])^{14} Given a compact space X and a Type II computable function \(f:X\to \mathbb {R}\), max_{x∈X}f(x) is computable.
Proof
Once achieved, check the rational center point of every ball in the image of the cover of [a, b]. Find the one with the greatest y-coordinate and let the y-coordinate of this point be q.
Define g(n) = q−2^{−n} if g(n) ≥ g(n−1), otherwise g(n) = g(n−1).
Define h(n) = q+2^{−n} if h(n) ≤ h(n−1), otherwise h(n) = h(n−1).
By the construction, h and g are both computable functions approaching m from above and below respectively, hence m has a computable Cauchy name. □
We note that, although we can compute the maximum value f attains on a compact space, the point (or points) at which this maximum occurs may not be computable. Kreisel [44], Lacombe [53], and Specker [66] have all given examples of computable functions that do not reach a maximum at any computable real value.
4 The Distance Function
So far we have considered computable reals and computable real-valued functions. We now ask what it means for a subset of \(\mathbb {R}^{n}\) to be computable. We will define a new function, called the distance function, and call a compact set X computable if it has a computable distance function.^{16} In this section, we focus on the computability of the distance functions of the graphs of Type II and Markov computable functions. We will then return to this notion in the final chapter when we discuss the Blaschke Selection Theorem. Note that Theorem 4.4 and Corollary 4.5 are new. The proof of Lemma 4.1 is new.
Recall that the graph of a function \(f:D \subset \mathbb {R}^{k} \to \mathbb {R}^{l}\) is the set \({\Gamma }_{f}= \{(x,f(x))| x\in D\} \subset \mathbb {R}^{k+l}\).
Now that we are working with sets (rather than numbers or functions) we point out that it is sometimes useful to consider closed sets as \({{\Pi }_{1}^{0}}\) classes (and open sets as \({{\Sigma }_{1}^{0}}\) classes). Doing so allows us to utilise some of the tools of classical computability to prove our results. For example, we can prove that the graph of a Type II computable function \(f: \mathbb {R} \to \mathbb {R}\) is a \({{\Pi }_{1}^{0}}\) class in Baire space.^{17}
Lemma 4.1
If f is a computable function, then Γ_{f}is a\({{\Pi }_{1}^{0}}\)class in Baire space.
Proof
We will build a computable tree T is Baire space and define a string σ (which depends on (a, b)) such that \((a,b) \in {\Gamma }_{f} \iff (\forall n) \sigma \upharpoonright n \in T\).
Let Φ^{x} be the oracle Turing machine that computes f(x). We would like to build T so that the only paths in T are alternating rational Cauchy names for some x and f(x). That is, if P is a path in T then there must exist a real a with Cauchy name (a_{i})_{i} such that P(2n) = a_{n} and P(2n+1) = f(a)_{n} (if (f(a)_{i})_{i} is the Cauchy name of f(a) given by Φ^{a}). So we want P = a_{0}f(a)_{0}a_{1}f(a)_{1}a_{2}f(a)_{2}….
- 1.
The odd rationals in this string do not look Cauchy. That is, the sequence τ(1),τ(3),…,τ(m−1) does not look like a Cauchy sequence.
- 2.
There exists some even \(n \leq \frac {m}{2}\) such that Φ^{(τ(1),τ(3),…,τ(m−1))}(n) = q and \(|q-\tau (n)|>2.2^{-\frac {n}{2}}\).
If 1 holds then the odd terms do not represent a Cauchy name of any real, so we kill the branch. If 2 holds then the even terms do not constitute a potential Cauchy name for some f(x). Note we emphasise ‘potential’ because at some later stage the odd terms may fail to be Cauchy. Also notice that if \({\Phi }^{x_{1}, x_{2}, {\dots } x_{n}}\) halts and outputs a rational q, this q must be a reasonable approximation of f(x) by the Use Principle. Lastly, every pair of viable Cauchy names for the function f will be accepted as paths in the computable tree T.
Given a pair of Cauchy names (a_{i})_{i} and (b_{i})_{i} for \(a,b \in \mathbb {R}\), define a string σ ∈ ω^{ω} by letting σ(2n) = a_{n} and σ(2n+1) = b_{n}. Then \((a,b) \in {\Gamma }_{f} \iff (\forall n) \sigma \upharpoonright n \in T\). Hence Γ_{f} is a Baire space \({{\Pi }_{1}^{0}}\) class as required. □
Definition 4.2
We say that a compact set C is computable if its distance function d_{C} is a Type II computable function.
For example, in [0,1]^{2} the set C = [0,1]×{0} is computable. Simply set d_{[0,1]}((x, y)) = y.
Sometimes the term located is used in the place of computable when describing these sets. Brouwer was the first to introduce this notion in a constructive setting [16]. He originally called these sets “Katalogisiert”, which means ‘catalogued’.
We will now show that the graph of a Type II computable function on a bounded interval is located.
Theorem 4.3
(Folklore-essentially Bishop [5]) If\(f: \mathbb {R} \to \mathbb {R}\)is a Type II computable function on a bounded interval then\(d_{{\Gamma }_{f}}: \mathbb {R} \times \mathbb {R} \to \mathbb {R}\)is a Type II computable function.
Proof
To prove that \(d_{{\Gamma }_{f}}\) is computable, we show that the spaces above and below Γ_{f} are \({{\Sigma }_{1}^{0}}\) classes. Enumerating these connected components allows us to generate the sets of points strictly greater than, and less than, any fixed rational distance q from Γ_{f}. These sets can then be used to compute \(d_{{\Gamma }_{f}}\)
We first show that the connected components above and below Γ_{f} are \({{\Sigma }_{1}^{0}}\) classes. Note that we know these components are distinct because f is Type II computable, so continuous, and hence has a connected graph. Let (a, b) be any fixed point in our space. If (a, b)∉Γ_{f}, then at some point open balls of decreasing radius, centred around some term in the pairs of Cauchy sequences (a_{i})_{i}, (b_{i})_{i} and (a_{i})_{i}, (f(a)_{i})_{i}, become permanently separated. That is, there exists an n such that the open balls B((a_{n}, b_{n}),2^{−(n−1)}) and B((a_{n}, f(b)_{n}),2^{−(n−1)}) do not intersect.^{18} Should we observe this, we know for sure that the corresponding point cannot be a member of Γ_{f}. Then we need only compare the two rational centres to determine whether the ball centred at (a_{n}, b_{n}) lies above or below Γ_{f}. More formally, the point (a, b) lies below Γ_{f} ⇔ there exists an n such that B((a_{n}, f(a)_{n}),2^{−(n−1)}) ∩ B((a_{n}, b_{n}),2^{−(n−1)}) = ∅ and b_{n} < f(a)_{n}. This is a \({{\Sigma }_{1}^{0}}\) condition. Similarly for any point above Γ_{f}.
- 1.
\(d_{{\Gamma }_{f}}((x,y)) < q\), for \(q \in \mathbb {Q}\), if and only if B((x, y),q) intersects the class of points both above and below Γ_{f}.
- 2.
\(d_{{\Gamma }_{f}}((x,y)) > q\) if and only if \(\overline {B}((x,y),q)\) is entirely contained in the complement of Γ_{f}.
Using these two facts, and the enumeration of the collection of points above and below Γ_{f}, for any \(q \in \mathbb {Q}\) we can enumerate the collections of points \(\{ (x,y) : d_{{\Gamma }_{f}}((x,y)) < q \}\) and \(\{ (x,y) : d_{{\Gamma }_{f}}((x,y)) > q \}\); for every point (x, y), wait for an M that is far enough along in the respective Cauchy sequences (x_{i})_{i}, (y_{i})_{i}, such that n, m > M implies both \(|x_{n}-x_{m}|<\frac {q}{2}\) and \(|y_{n}-y_{m}|<\frac {q}{2}\). We now enumerate the sequence of open balls B((x_{n}, y_{n}),q) for all n > M, and the space above and below Γ_{f}. If there exists an n such that points in B((x_{n}, y_{n}),q) appear in both spaces, then \(d_{{\Gamma }_{f}}((x,y)) < q\). Similarly, if an open ball containing \(\overline {B}((x_{n},y_{n}),q)\), for some n > M, is enumerated into the space above or below Γ_{f}, we know that \(d_{{\Gamma }_{f}}((x,y)) > q\). In this way we can enumerate the sets of points strictly greater than, and less than, any fixed rational distance q from Γ_{f}
Finally, we can now show that \(d_{{\Gamma }_{f}}((x,y))\) is Type II computable. We provide a summary of the method, then follow with the precise details. Guess a distance q, and generate the two sets of points strictly greater than, and less than, q from Γ_{f}. Recall (a, b) is any fixed point in our space. We will use it here to demonstrate we can compute \(d_{{\Gamma }_{f}}((a,b))\). Our given point (a, b) must occur in one of these sets eventually. If the distance between Γ_{f} and (a, b) is greater than q, repeat for q + r for some appropriate rational r. If the distance is smaller than q, repeat instead for q − r. Choosing our distances sensibly, we will eventually bounce between two rationals q_{1} and q_{2}. These rationals we can refine until |q_{1}−q_{2}| < 2^{−n}, for any desired n. Then the computable function \(g(n)=\frac {q_{1}+q_{2}}{2}\) would sufficiently approximate \(d_{{\Gamma }_{f}}((a,b))\) to within 2^{−n}. The precise details follow.
- 1.
|q_{1}−q_{2}| < 2^{−(n+1)}
- 2.
\(d_{{\Gamma }_{f}}((x_{m},y_{m}))<q_{2}\)
- 3.
\(d_{{\Gamma }_{f}}((x_{m},y_{m}))>q_{1}\)
- 4.
|(x, y)−(x_{m}, y_{m})|<2^{−(n+2)}
Setting (x, y) = (a, b) allows us to compute \(d_{{\Gamma }_{f}}((a,b))\). Therefore, \(d_{{\Gamma }_{f}}((x,y))\) is Type II computable. □
Notice that the effective Extreme value Theorem (Theorem 3.14 from the previous section) is now an easy Corollary of this result.
We now ask what happens if we instead consider a Markov computable function defined on the computable reals. Is the distance function of Γ_{f} also computable? It turns out that this is not the case.
Theorem 4.4
A Markov computable function\(f: \mathbb {R}_{c} \to \mathbb {R}_{c}\)on a bounded interval has an upper semi-computable, but not necessarily Type II computable, distance function\(d_{{\Gamma }_{f}}\).
The proof will follow in two parts. Part one will show that \(d_{{\Gamma }_{f}}((x,y))\) is upper semi-computable, and part two that \(d_{{\Gamma }_{f}}((x,y))\) is not computable. Recall by Theorem 3.8 we know that Borel and Markov computability are equivalent so we can use these two notions interchangeably.
Proof of Part 1
- 1.
\(\lim _{k \to \infty } \phi (x,k)=f(x)\)
- 2.
\( \forall k \in \mathbb {N} : \phi (x,k+1) \leq \phi (x,k)\)
Fix \((a,b) \in \mathbb {R}_{c}^{2}\). Recall that we consider the distance function \(d_{{\Gamma }_{f}}(x,y)\) computable if we can computably give a computable Cauchy name for every pair of points (x, y). We are not trying to show that \(d_{{\Gamma }_{f}}\) is computable, but rather upper semi-computable. So instead of providing a computable a Cauchy name for every input, we want to build a computable function g(n, k) that approximates (from above) every term in the Cauchy name of fixed (a, b). Then, if we call \(d_{{\Gamma }_{f}}(n,(a,b))\) an approximation of the true distance between (a, b) and Γ_{f} with an accuracy of 2^{−n}, \(\lim _{k \to \infty } g(n,k)=d_{{\Gamma }_{f}}(n,(a,b))\). Taking both k and n to infinity then achieves the desired result; \(\lim _{n,k \to \infty } g(n,k) = d_{{\Gamma }_{f}}((a,b))\). We emphasise that a different g(n, k) must be constructed for every pair of points \((a,b) \in \mathbb {R}_{c}^{2}\).
We will show by induction how to define g(n, k) for fixed \((a,b) \in \mathbb {R}_{c}^{2}\). Let the function g(m, k) be defined for all m < n. Call \(d_{{{\Gamma }_{f}},n}((a,b))\) the upper bound of the n^{th} approximation of \(d_{{{\Gamma }_{f}}}((a,b))\) (this exists by the inductive hypothesis). We will define a sequence (g(n, k))_{k} that approaches \(d_{{{\Gamma }_{f}},n}((a,b))\) from above. This is done by finding the distance between an appropriately close approximation of (x, f(x)) and (a, b) for every computable real x (which depends on n), and defining g(n, s) to be the least of these distances at each stage. This will ensure (g(n, k))_{k} approaches \(d_{n,{{\Gamma }_{f}}}((a,b))\) from above, and ultimately \(\lim _{n,k \to \infty } g(n,k) = d_{{\Gamma }_{f}}((a,b))\). The precise details of the construction follow;
Initially we wait for terms f(a)_{n+2} and b_{n+2} in the respective Cauchy names of f(a) and b such that |f(a)_{n+2}−f(a)| < 2^{−(n+2)} and |b_{n+2}−b|<2^{−(n+2)}. Set g(n,0)=|f(a)_{n+2}−b_{n+2}|+2^{−(n+1)}.^{19}
Let e_{1}, e_{2}… be a listing of all partial machine indices. Assume we are at stage s, n is fixed, and Φ^{x} is the oracle Turing machine that approximates the Markov computable function f. We assume (again, by induction) that g(n, t) has been defined, and will now define g(n, t+1). Call an index ‘active’ if it was not ‘killed’ at an earlier stage. For least active e_{i}, we ask whether or not \(\varphi _{e_{i}}\) has output a finite Cauchy name q_{1},…,q_{m} after being run for s stages. If this is not the case, discard this index for all future stages, and check the next active index. If on the other hand q_{1},…,q_{m} does appear to be Cauchy, first note that q_{1},…,q_{m} looks like the initial terms of the Cauchy names of a range of computable reals (specifically, any q ∈ (q_{m}−2^{−m},q_{m}−2^{−m})). We assume, without loss of generality, m > n+3 (if not we can wait until a later stage where this is the case and the sequence looks Cauchy). We then ask whether this sequence, used as an oracle in Φ, is sufficient to compute what looks like a Cauchy approximation of f(q), to within 2^{−(n+3)}. This means we run \({\Phi }^{q_{1}, \dotsc , q_{m}}\) for s stages and, if \({\Phi }^{q_{1}, \dotsc , q_{m}}\) outputs a sequence r_{1},…,r_{n+3} that looks Cauchy, we have a success!
If we do not have success, repeat steps above for stage s+1. If we do have a success, we now have an approximation (q_{m}, r_{n+3}) which is within 2^{−(n+3)} of some computable real (q, f(q)) (in fact a range of such pairs). We are confident of this because we assumed m > n+3.
This construction will give us a sequence (g(n, k))_{k} that approaches \(d_{n,{{\Gamma }_{f}}}((a,b))\) from above. We also run this construction for other n, building next, for example, the sequence (g(n+1,k))_{k}. As mentioned, all indices must be reset every time n is updated.
This construction gives us a computable sequence \(\bigcup _{n,k} (g(n,k))_{k}\) such that for all n and k:
\(g(n,k) \geq d_{n,{\Gamma }_{f}}((a,b))\),
g(n, k) ≥ g(n, k+1)
and
\(\lim _{n,k \to \infty } g(n,k)=d_{{\Gamma }_{f}}((a,b))\).
Therefore \(d_{{\Gamma }_{f}}((a,b))\) is upper semicomputable. □
Proof Part 2
For the second part of the theorem we will show that, for any noncomputable right c.e. real α, there exists a Markov computable function f such that \(d_{{\Gamma }_{f}}((0,0))=\alpha \). The origin is chosen for simplicity, but the proof works just as well for any \((p,q)\in \mathbb {R}_{c}^{2}\).
Recall that a right c.e. real is a real \(x \in \mathbb {R}\) and c.e. sequence (x_{i})_{i} such that \(\lim _{i} x_{i} =x\) and (∀i)(x_{i} ≤ x_{i−1} and x_{i}>x).
Let q_{1}, q_{2},… be a noncomputable c.e. sequence converging to α from above and assume, without loss of generality, α<1. We will define the Markov computable function f in stages. At each stage n we define f for at least all values x > v (which v chosen at each stage is specified in the construction). Informally, we would like to define f(q_{i})=0 for all i, and almost everywhere else have f(x)>0. In particular, we will allow f(x) = 0 only if x ≥ q_{i} some q_{i} in (q_{i})_{i}. This will help to ensure that \(d_{{\Gamma }_{f}}((0,0))=\alpha \). The function f also needs to be Markov computable, which means for any \(u \in \mathbb {R}_{c}\) we need to be able to evaluate f(u) (given an approximation of u we can find an approximation of f(u)). By Claim 2 in Theorem 3.8 (existence of c.e. set W) this means that, given an open ball B ∋ u of any radius, we need to map B under f into another open ball B^{′} such that: B^{′} contains f(u), and for all \(x \in B \cap \mathbb {R}_{c}\) we have f(x)∈B^{′}.
We ensure this by doing the following; if an open ball B containing u falls into a range of values already defined at the current stage, we simply evaluate B at f and refine its radius to achieve the desired approximation of f(u). If B falls outside the defined values, we essentially set f(x) = 1 for all x ∈ B, and incorporate this into our construction at some later stage. Whenever we define f on an interval [a, b], we always ensure that f(a) = f(b) = 1 (if this is instead an open interval then we simply have f(x) tending to 1 as x tends to a from the right, and b from the left). This is done in a consistent manner to ensure f is continuous. □
- Stage 0
Observe the first term q_{0} in the rational noncomputable c.e. sequence converging to α from above. For simplicity assume q_{0} ≤ 1.
- Stage 1
Wait for next term q_{1} in the sequence. q_{0} and q_{1} are rationals, so let \(|q_{0}-q_{1}|=b_{1}\in \mathbb {Q}^{+}\) and b_{0}=1. Define f to vary linearly from 1 to 0 from \([q_{1}+\frac {b_{1}}{2}, q_{0}]\), and 0 to 1 from [q_{0}, q_{0} + b_{0}]. Call \(v_{1}:=q_{1}+\frac {b_{1}}{2}\).^{20}
- Stage n
Wait for the next term q_{n} in the sequence. Let v_{n−1} be the least rational f has been defined at such that, for all x > v_{n−1}, the value f(x) is defined at this stage. Check d(q_{n−1}, v_{n−1}), and d(q_{i}, q_{i−1}) for all i ≤ n, and let the least of these distances be D. Choose a k such that \(2^{-k}< \frac {D}{4}\). We do this to ensure that if we need to evaluate f(u) for \(u \in \mathbb {R}_{c}\), B(u_{k},2^{−k}) contains at most one element from the observed sequence q_{1},…,q_{n} tending to α
- Step 1:
If we do not need to evaluate f(u) at this stage, go to Step 2. Otherwise, we want to evaluate f(u) at this stage, \(u \in \mathbb {R}_{c}\), with Cauchy name (u_{i})_{i}. There are three sub-cases to consider. They occur as combinations of two conditions.
Condition (a) For all x ∈ B(u_{k},2^{−k}), f(x) has not yet been defined.
Condition (b) There exist \(r_{1}, r_{1} \in \mathbb {Q}^{+}\) such that for all x, r_{1} < x < u_{k}−2^{−k} and u_{k}+2^{−k} < x < r_{2}, f(x) has not yet been defined.
- I
If both (a) and (b), set f(x) = 1 for all x ∈ B(u_{k},2^{−k}) and go to Step 2.
- II
If (a) but not (b), wait for k^{′}>k such that (b) holds, then set f(x) = 1 for all \(x \in B(u_{k}^{\prime }, 2^{-k^{\prime }})\) and go to Step 2.
- III
If not (a), then f(x) defined on some points in B(u_{k},2^{−k}) already. Wait for k^{′}>k such that (a) applies to \(B(u_{k^{\prime }}, 2^{-k^{\prime }})\) OR \( \forall x \in B(u_{k}^{\prime }, 2^{-k^{\prime }}) f(x)\) has already been defined. In the first case set f(x) = 1 for all \(x \in B(u_{k^{\prime }}, 2^{-k^{\prime }})\) and go to Step 2. In the second, do nothing, go to Step 2.
We allow at most one such calculation at each stage.
- Step 2:
Observe q_{n}. Either at some earlier stage we were asked to evaluate \(w \in \mathbb {R}_{c}\), and consequently defined for some m all x ∈ B(w_{m},2^{−m}) including q_{n} ∈ B(w_{m},2^{−m}), or not. (We can decide this computably as we have been asked to evaluate only finitely many computable reals at this stage).
- IF NO: Recall that v_{n−1} is the least rational f was defined at such that ∀x > v_{n−1}, f(x) has been defined.
- IIf there exists some x such that q_{n} < x < v_{n−1}, and f(x) has already been defined, let c be greatest such that if q_{n} < x < c, f(x) has not yet been defined. Let \(b=q_{n} + 3\frac {c-q_{n}}{4}\) and \(a=q_{n} + \frac {c-q_{n}}{2}\). Then set f(x) = 1 for all x > c not yet defined. Let f(x) vary linearly from 1 to 0 on [a, b] and from 0 to 1 on [b, c]. f(x) is now defined for at least all x > a. This process is summarised in Fig. 4.
- II
Otherwise, do as in I, but let \(c= q_{n} + 3\frac {v_{n-1}-q_{n}}{4}\), \(b= q_{n} + \frac {v_{n-1}-q_{n}}{2}\) and \(a= q_{n} + \frac {v_{n-1}-q_{n}}{4}\).
- I
- IF YES: First, for all x > w_{m}−2^{−m} not yet defined, let f(x) = 1 (note that this preserves continuity). Find smallest rational d such that d > 0 and for all x, d < x < w_{m}−2^{−m}, f(x) has not yet been defined. Such a d must exist by Step 1, Condition (b). Choose some rational γ such that d < γ < w_{m}−2^{−m}. Let \(f(\gamma )= \sqrt {{q_{n}^{2}} - \gamma ^{2}}\) and f(x) to vary linearly from 1 to f(γ) on \([d+\frac {\gamma -d}{2},\gamma ]\), and from f(γ) to 1 on [γ, w_{m}−2^{−m}]. f(x) is now defined for at least all \(x>d+\frac {\gamma -d}{2}\). This process is summarised in Fig. 5.
Justification:
We first note that f is continuous. Whenever we defined f on an interval [a, b], we ensured f(a) = f(b) = 1. Each consecutive stage then essentially involved connecting some these intervals, and extending f to be defined at every point above some rational v_{s}. Continuity was preserved for all values above v_{s}, for each s, and every time we defined f below the current v_{s}, we ensured sufficient undefined space to ensure continuity at all later stages.
Claim
f is Markov computable.
Proof of claim
Suppose at stage n we wish to evaluate f(u) for some \(u \in \mathbb {R}_{c}\). Find B(u_{k},2^{−k}) as specified in construction. Then we either define f(x) = 1 for all x ∈ B(u_{k},2^{−k}), in which case f(u) = 1, or else there exists a k^{′} such that f at all \(x\in B(u_{k}^{\prime }, 2^{-k^{\prime }})\) has already been defined. In this case we can refine k^{′} until we achieve the desired approximation of f(u).
Hence, \(d_{{\Gamma }_{f}}\) is not computable. □
Notice that (0,0) is a computable point, and we have shown \(d_{{\Gamma }_{f}}((0,0)) \notin \mathbb {R}_{c}\). This means \(d_{{\Gamma }_{f}}\) cannot be Markov computable either.
Corollary 4.5
A Markov computable function\(f: \mathbb {R}_{c} \to \mathbb {R}_{c}\)on a bounded interval does not necessarily have a Markov computable distance function\(d_{{\Gamma }_{f}}\).
5 The Darboux Property
5.1 Introduction
The Intermediate value Theorem states that a continuous function \(f:[a,b] \to \mathbb {R}\) takes every value between f(a) and f(b) [8].^{21} By isolating this property, we define a new class of functions that are called Darboux.
Definition 5.1
A function f defined on an interval I has the Darboux property if for all a < b, a, b ∈ I and all y ∈ [f(a),f(b)] there exists a x ∈ [a, b] such that f(x) = y.
Sometimes the Darboux property is instead called the intermediate value property. We call the class of functions with the Darboux property \(\mathcal {D}\), and the class of continuous functions \(\mathcal {C}\). This chapter will be dedicated to exploring some of the characteristics of \(\mathcal {D}\).
Before the late 19th century, the intermediate value property (as it was known at the time) was given as part of the definition of a continuous function. In fact, many mathematicians assumed that this property and continuity were equivalent. It was not until 1875 that the French mathematician Jean Gaston Darboux gave a proof that every derivative has the Darboux property, and as not every derivative is continuous, separated the two classes \(\mathcal {D}\) and \(\mathcal {C}\) [22]. Why does this interest us? The Darboux property defines a strange class of functions, so this fact alone makes its complexity worth investigating. However, it turns out that every real-valued function is the limit of a sequence of Darboux functions (Sierpiński [63]). We are interested in how complicated these particular sequences are, and their relationship with computable real-valued functions.
Before we begin discussing Sierpiński’s result, we first take a moment to further discuss the Darboux property. We give a proof that every derivative has the Darboux property. The following is a common version of this proof, and can be found in [69].
Theorem 5.2
(Darboux [21]) Let I be an interval. If\(f: I \to \mathbb {R}\)is differentiable on I then f^{′}(the first derivative of f) has the Darboux property.
Proof
f^{′} must have the Darboux property, but is discontinuous at a single point; x = 0.
In turns out that even those functions that are discontinuous at some point on every interval can belong to \(\mathcal {D}\).
5.2 Approximating Real-Valued Functions
In 1953, Sierpiński proved that every real-valued function \(f: \mathbb {R} \to \mathbb {R}\) is the limit of a sequence of Darboux functions [63]. We will first sketch a proof of this result, and then investigate how hard it is to construct such a sequence for any given function. We would also like to apply our result to Type II computable functions. However, notice that every Type II function is continuous, and so is the limit of a trivial sequence of Darboux functions (namely, itself). So instead, we will mention how hard is it to construct a non-trivial Darboux sequence for any Type II computable function. Theorems 5.12, 5.13, 5.19, 5.20, Corollary 5.14 and Lemmas 5.16, 5.17 are original.
5.2.1 The Closure of the Class \(\mathcal {D}\) is all Functions
In order to sketch a proof of Sierpiński’s result, it is first helpful to construct a function that maps every interval to all of \(\mathbb {R}\). This is a (strong) example of a Darboux function that is discontinuous on every interval, and a similar function will be used in the proof to follow. We will call these types of functions canonical Darboux functions.
Definition 5.3
A function f:I→I (where I is any interval, including the entire real line) is a canonical Darboux function if for every interval J⊆I, f(J) = I.
There are a number of examples of this kind, and many of them can be adapted to prove Sierpiński’s result. For example, Conway constructed an extreme base 13 function which takes every real value on every nonempty open interval.^{22} Radcliffe also gave a similar result in [60] using the function f(x) = tan(nπx). The following example can be found in [69].
We construct a canonical Darboux function f:[0,1]→[0,1].
Example 5.4
Let D be the set of all rational numbers in the unit interval with finite decimal expansion. That is, \(D:=\{ m10^{-n} : m \in \mathbb {Z}, n \in \mathbb {N}, n\geq m\}\). If t ∈ [0,1] has the expansion t = 0.t_{1}t_{2}t_{3}…, \(t_{i} \in \mathbb {N}\) where t_{k}=0 for all sufficiently large k, if t ∈ D then define t^{∗} = 0.t_{1}t_{1}t_{2}t_{1}t_{2}t_{3}…. This means t^{∗} takes t and outputs the first decimal point in t, followed by the first and second, and so on. We can think of each of these repeating ‘blocks’ as initial segments of t, increasing by one bit every time a new block is added.
Notice that if t, s ∈ [0,1] are distinct, it follows that t^{∗}−s^{∗}∉D because t^{∗} and s^{∗} will differ at infinitely many places. In addition, for every x ∈ [0,1] there exists at most one t ∈ [0,1] such that x − t^{∗}∈D.
To verify that f is a canonical Darboux function, let I = [a, b] be any subinterval of the unit interval. For any t ∈ [0,1], there exists an x ∈ I such that x − t^{∗}∈D (enumerate something in the given interval until a stage where any real extending this enumeration must be contained in the interval, and from this stage onwards copy t^{∗}). Hence, for all t ∈ [0,1] there exists an x ∈ I such that f(x) = t. It follows immediately that f must have the Darboux property.
The following proof can be found in [69]. We repeat it here and later analyse the complexity of this result.
Theorem 5.5
(Sierpiński [63]) Every real-valued function\(f: \mathbb {R} \to \mathbb {R}\)is the limit of a sequence of functions with the Darboux property.
Proof sketch
The proof of this theorem follows by constructing a function very similar to the previous one. Let D and t^{∗} be as above. Define a set \(V:= \{ m5^{-n} : m \in \mathbb {Z}, n \in \mathbb {N} \}\), and collection of sets V_{i}: = V+2^{−i}. V_{1}, V_{2},… are pairwise disjoint subsets of D (because 2^{−i} is an unique infinite repeating sequence when expressed in base 5). ∀x ∈ [0,1] there exists at most one t ∈ [0,1] such that x − t^{∗}∈V_{i}.
Every f_{i} has the Darboux property, and \(\lim _{i \to \infty } f_{i}=f\). □
In the next subsubsection, we discuss the complexity of these kinds of sequences. As far as we know, every proof in the literature of the Sierpiński’s result involved the construction of not just a sequence whose terms had the Darboux property, but in fact, the canonical Darboux property. This property is stronger than strictly necessary, and these functions are, as a consequence, quite complex. It remains open whether every real-valued function is the limit of a sequence of non-canonical Darboux functions.
5.2.2 The Complexity of Canonical Darboux Functions
We want to decide how much computational power is sufficient (or insufficient) to compute certain Darboux functions. To avoid confusion, we will first explain exactly what is intended by ‘sufficient computational power’. Recall that \(x^{\prime } =\{ e: {\phi _{e}^{x}}(e) \downarrow \}\). We define a function that will in some sense correspond to the ‘jump’ relative to \(\mathbb {R}\).
Definition 5.6
Let \(J: \mathbb {R} \to \mathbb {R}\) denote a function that uniformly maps x↦x^{′}. Call this function the jump operator and refer to it as J.
We can generalise this definition and call the function \(J^{(2)}: \mathbb {R} \to \mathbb {R}\) that uniformly maps x↦x^{″} the double jump operator and refer to it as J^{(2)} (and so on for n^{th} jump operator J^{(n)}).
In the work to follow, when dealing with the complexity of Type II functions, we consider the jump operator as a Type II functional. We will measure the computational strength sufficient to compute particular functions in terms of J^{(n)}. Later, when we address Markov computable and classically computable functions, it is enough to consider the ‘jump’ in the usual sense; as a set.
In this subsubsection, we will prove that J is insufficient to compute any canonical Darboux function. It then follows that J is insufficient to compute the terms in the sequences of canonical Darboux functions we constructed earlier to approximate any real-valued function. We will first classify a particular class of functions and give some necessary definitions.
A function \(f: \mathbb {R} \to \mathbb {R}\) is Baire class 0 if it is a continuous function. A function f is Baire class 1 if f is the (pointwise) limit of a sequence of continuous functions (f_{i})_{i}. In general, a function f is Baire class n if f is the (pointwise) limit of a sequence of Baire class n−1 functions (f_{i})_{i}. We now adapt these definitions to a computable setting.
Definition 5.7
A function \(f: \mathbb {R} \to \mathbb {R}\) is effective Baire class 1 if f(x) ≤ _{T}J(x) uniformly in x.
More generally,
Definition 5.8
A function \(f: \mathbb {R} \to \mathbb {R}\) is effective Baire class n if f(x) ≤ _{T}J^{(n)}(x) uniformly in x.
Actually, the Baire classification of functions provides a nice example of how computable analysis can be used to give new proofs of classical results.
Consider a continuous function f on an effectively second countable space (we will stick to \({\mathbb R}\)). To specify the action of f, we need to specify its value on partial Cauchy sequences of finite sequences of balls of radius 2^{−n} around rationals r_{i}, for all pairs 〈r_{i}, n〉. (That is, representations of reals x to f(x).) A single real number z can code this information making f type II computable relative to z, and the degrees of all such reals is regarded as the continuous degree of f (see Miller [56]). Miller has shown that such degrees need not have a least member.
However, for our purposes, we can thus regard continuous functions as simply those which are computable relative to an oracle such as z. Hence all continuous functions can be listed as pairs 〈Φ_{e}, z〉 where Φ_{e} is a machine and z is a real. Considering the function which is the halting problem, the jump function, gives an example which is Baire 1 by the limit lemma and cannot be continuous by the proof of the halting problem. This is a proof of a theorem of Lebesgue that Baire 1 is not the same as continuous and similar comments apply to all levels of the Baire hierarchy. Also it is classically known that Baire class 1 functions have points of continuity, and these will be at places where the jump is forced by finite information. As we see below, this will be at the 1-generic points. More on the relationship between genericity and continuity of Baire class functions can be found in Kuyper-Terwijn [50].
The detail given here regarding the Baire classes is sufficient for the purpose of this paper, but for more information see [33] and [49].
Recall the definition of a 1-generic element x ∈ 2^{ω}. Let W⊆2^{ < ω}. We say that xmeetsW if there is an initial segment σ of x such that σ ∈ W. xavoids a set W if there exists an n such that, for all τ extending \(x \upharpoonright n\), τ∉W.
Definition 5.9
An element x ∈ 2^{ω} is 1-generic if it meets or avoids every c.e. set W.
Theorem 5.10
An irrational x∈[0,1] is 1-generic if and only if its unique binary expansion is 1-generic in 2^{ω}.
A proof of this result can be found in [49]. Assume a real x ∈ [0,1] is expressed as its unique binary expansion from this point onward. For rationals, this refers to their dyadic expansion (if such a representation exists), although notice that as rationals cannot be 1-generic, uniqueness is not a problem.
Now that we have introduced the relevant concepts, we want to prove that J is insufficient to compute any canonical Darboux function. Or in other words, no canonical Darboux function is effective Baire class 1. This result is a corollary of the following theorem.
Theorem 5.11
(Folklore) If x is a 1-generic real, and f is effective Baire class 1, then f is continuous at x.
Proof
Suppose that f(x) ≤ _{T}J. That is, \(\exists e \forall x {\Phi }_{e}^{x^{\prime }}=f(x)\). Let x be a 1-generic real. Notice that there is a continuous mapping between x and x^{′} (by which we mean the set \(\{ e: {\varphi _{e}^{x}}(e) \downarrow \}\)). This is because initial (although not necessarily computable) segments of 1-generic x determine initial segments of x^{′}, a unique property of 1-generics. There is also a continuous mapping between x^{′} and f(x) by assumption (simply map the Use (\(f(x)\upharpoonright n\)) \(\longmapsto f(x)\upharpoonright n\)), hence a continuous mapping from x to f(x). □
Our result is now a consequence of this theorem.
Theorem 5.12
Let\(f: [0,1] \to \mathbb {R}\)be a canonical Darboux function. Then f is not effective Baire class 1.
Proof
Follows directly from the theorem above. Specifically, if f is a canonical Darboux function then it is discontinuous everywhere, and therefore cannot be continuous at 1-generic reals. □
As a result, the jump function is not strong enough to carry out the construction of Theorem 5.5. To do so, we need more computational power. However, it turns out that J^{(2)} is sufficient to compute at least some canonical Darboux functions. Example 5.4 is such a function.
Theorem 5.13
There exists a canonical Darboux function\(f: [0,1] \to \mathbb {R}\)that is also effective Baire class 2.
Proof
We reconstruct the function from Example 5.4 to illustrate this.
Usually, the argument would begin by assuming we have a Cauchy name for some real x ∈ [0,1], however, the construction of this function is easier if we instead have a binary approximation of x. These notions are not usually equivalent (as noted by Turing in his correction [68]), however fortunately the double jump function can build a binary sequence that sufficiently approximates a Cauchy name of x. We will do this first.
Let x_{1}, x_{2},… be a Cauchy name for x ∈ [0,1]. When we build our binary approximation of x, we also need to ensure we avoid creating duplicates. That is, we must make sure that f maps any two Cauchy sequences that are converging to x, to the same value. We will express x finitely in binary, if possible, to ensure this.
Given Cauchy name x_{1}, x_{2},…, the double jump function can decide whether x is a dyadic rational. If x is not a dyadic rational, then for all n and m ≤ n, we can decide in finite time whether x ∈ (m2^{−n},(m+1)2^{−n}). We build a binary expansion 0.b_{1}b_{2}b_{3}… of x as follows. We begin by asking if \(x \in (0,\frac {1}{2})\). If \(x \neq \frac {1}{2}\) then at some stage we will see the Cauchy name of x fall entirely inside, or outside, of this interval. If the former, we set b_{1}, the first binary point of x, to be 0. If the latter, set b_{1}=1. We then repeat this process; if, (for example), b_{1}=0 and \(x \neq \frac {1}{4}\), we ask whether \(x \in (0, \frac {1}{4})\). If yes, set b_{2}=0, if no, then \(x \in (\frac {1}{4}, \frac {1}{2})\) set b_{2}=1, and so on. In this way, we obtain an accurate binary expansion of x = 0.b_{1}b_{2}b_{3}…. A problem of course could occur if \(x=\frac {1}{2}\), or indeed \(x=\frac {a}{2^{b}}\) for any natural a and b. It follows that the above process is not computable if and only if x is a dyadic rational. And so we ask whether the Cauchy name of x is always ‘close’ to some dyadic rational, (∃n)(∃m < n)(∀k)(|m2^{−n}−x_{k}| < 2^{−k}). Note that x_{k} is the k^{th} rational in x^{′}s Cauchy name. If no, complete the binary expansion construction above. If yes, check every n and m ≤ n until we find the pair n, m that satisfies the above sentence (which can be done with a \({{\Pi }^{0}_{1}}\) question). Then \(x=\frac {m}{2^{-n}}\), which can be computably and finitely expressed in binary.
In both cases we obtain a binary expansion x = 0.b_{1}b_{2}b_{3}… which we will use to construct f.
where t ∈ [0,1] and t^{∗},D is defined as in Example 5.4.
This pairing function is meant to represent ‘blocks’ like those seen in the t^{∗} function. We call a block a consecutive sequence of binary points that have been seen before in order, and one at the end that hasn’t. i.e. t^{∗} = 0.t_{1}t_{1}t_{2}t_{1}t_{2}t_{3}…, and so t_{1} is the first block, t_{1}t_{2} the second block, t_{1}t_{2}…t_{k} the k^{th} block, etc. 〈n, m〉 gives the position of t_{m} in the n^{th} block of t^{∗}, assuming that m > n (if this is not the case then we send the pairing function to −1 for completeness).
To define f we need to decide if at some stage x mimics t^{∗} for some t ∈ [0,1]. For simplicity assume the s^{th} stage is when we observe b_{s}, the s^{th} binary point in the approximation of x. We ask if there exists a stage s, and natural M, such that for all m > M, and n ≤ m, we have b_{s+〈m, n〉} = b_{s+〈m+1,n〉}. If no, then there is no t such that x − t^{∗}∈D, and so set f(x) = 0. If yes, we want to set f(x) = t = 0.t_{1}t_{2}t_{3}…. To define the k^{th} binary point of t ask (∃s)(∃M ≥ k)(∀m > M)(b_{s+〈m, k〉}=0). If yes, set t_{k}=0, otherwise t_{k}=1. Lastly, computably convert binary expression 0.t_{1}t_{2}t_{3}… into a Cauchy name for t. And so f(x) outputs the Cauchy name for desired t (if t exists), and can be computed by J^{(2)}. □
We have now shown that J^{(2)} is sufficient to compute at least one canonical Darboux function. Applying a very similar argument to the construction in Theorem 5.5 now gives the following result.
Corollary 5.14
If f is effective Baire class 2 then there exists a sequence of effective Baire class 2 functions (f_{i})_{i}with the Darboux property such that\(\forall x f(x) = \lim _{i} f_{i}(x)\).
5.2.3 Computational Power of Canonical Darboux Functions
How can we discuss a real-valued function’s Turing degree? If a function is continuous, this is not a problem; a function is continuous if and only if it is computable relative to some oracle.^{23} However, what if the function in question is not continuous? This is an important issue to address, as canonical Darboux functions are by definition discontinuous, and we would like some way to discuss their complexity. Some work in this area has been done, for example, see Scott ideals [56]. These fall outside of the scope of this paper, and so we propose a different strategy. As every real is the limit of a sequence of rationals, we believe it is natural to discuss a function’s complexity based on how it acts on the computable reals. If we take this approach, discussing the computational power of a function in some sense accesses the ‘Markov computability’ of that function. If nothing else, this notion ties back to the early chapters nicely, and so we relativise the Markov computability definition in order to discuss the computational power of a function f.
Definition 5.15
We call a function \(f:\mathbb {R}_{c} \to \mathbb {R}_{c}\)Markov computable in z if z can compute the index function of f.
Notice that because we refer to \(\mathbb {R}_{c}\), rather than to \(\mathbb {R}\) relative to z, this is a partial relativisation of Markov computability. If a function f is Markov computable in z, and z computes y, we will sometimes informally refer to this situation as “f computes y”.
Lemma 5.16
If the function g (defined above) is Markov computable in z, then z is sufficient to compute 0^{′}.
Proof
Fix e and suppose we want to know whether φ_{e}(e) halts. We can decide this by building a computable real y which we will input into g such that g(y) = 1 if an only if φ_{e}(e) halts.
We will built a computable Cauchy name y_{1}, y_{2},… for our computable real y. At stage n, observe φ_{e}(e) with use n at stage n. That is, ask does φ_{e}(e)[n]↓? If yes, for all m ≥ n set y_{m}=−2^{−(n+1)}. We have now determined y. If no, set y_{n}=0 and check φ_{e}(e) with use n+1 at stage n+1.
If φ_{e}(e) halts then we have built the Cauchy name of y such that y<0, and so g(y) = 1. If, on the other hand, φ_{e}(e) never halts, then y_{n}=0 for all n, hence g(y) = 0. □
The argument above can be applied to any discontinuous function, and leads us to conclude that every discontinuous function f(x) can compute 0^{′}. Or more formally,
Lemma 5.17
If a discontinuous function\(f: \mathbb {R}_{c} \to \mathbb {R}_{c}\)is Markov computable in z, then z can compute 0^{′}.
This result follows by generalising the argument given above. Given x (non-uniformly) at a discontinuity in f, the question becomes how to compute a sequence of computable reals approaching x that all map sufficiently far away from f(x) to ensure discontinuity. We can apply the same argument as above once such a sequence has been found. The issue here is that, while we can observe an index that appears to output a computable real whose image is sufficiently far away from f(x), it may turn out that this function is partial. We can avoid this by using the same trick as in Theorem 3.8.
Corollary 5.18
At least 0^{′}is required to compute every discontinuous function\(f:\mathbb {R} \to \mathbb {R}\).
By restricting the domain and range of f to \(\mathbb {R}_{c}\), we claim that, in the sense of definition 4.15, f can compute 0^{′′}.
It is easier first to prove something similar to Lemma 4.16 explicitly for this function, and then extend the argument to achieve our result.
Theorem 5.19
If the function f (defined above) is Markov computable in z, then z can compute 0^{′}.
Proof
This result follows by a relatively straightforward construction.
Fix e. We will show that ‘f can decide’ whether or not φ_{e}(e) halts. Then if z computes the index function of f, z must also compute 0^{′}. To do this, we construct a computable real y such that f(y) = 0 if and only if φ_{e}(e)↑.
Consider the computable real γ = 0.112123123412345…. Notice γ = t^{∗} if t = 0.12345678… (t^{∗} as defined Example 5.4). Recall the definition of a ‘block’ given previously. We say the real x has entered a block cycle if after some stage it exactly mimics γ, i.e. every new term in x’s Cauchy name differs from the former by an appropriate block. The y we want to build is almost γ, with a few changes according to the behaviour of φ_{e}(e) at each stage.
Essentially, the function f can tell if at some point a real we input enters a block cycle. We want our real y to enter this block cycle if and only if φ_{e}(e)↓.
To do this we observe φ_{e}(e) at each stage. If φ_{e}(e)↑[n], we need to ensure the block cycle is broken in the n^{th} term of y^{′}s Cauchy name, y_{n}. It is easiest to consider γ as the Cauchy sequence γ_{0}=0, γ_{1}=0.1, γ_{2}=0.112, γ_{3}=0.112123, γ_{n}=0.112123…123…n. A new ‘block’ has been added to each consecutive term in this sequence, and \(\lim _{i} \gamma _{i} = \gamma \). Similarly, at each stage we also add a block to the new term in the Cauchy name of y, except we add either 123…n or 023…n depending on the behaviour of φ_{e}(e)[n].
Suppose we observe φ_{e}(e)↑[n]. We then consider the last term y_{n−1} in the sequence we are building. Does \(y_{n-1}=0. {\dots } \overbrace {\mathbf {1}23 {\dots } (n-1)}^{\text {final block}}\) or \(y_{n-1}=0. {\dots } \overbrace {\mathbf {0}23 {\dots } (n-1)}^{\text {final block}}\)? We need to ensure we break the (potential) block cycle. So, if the former, add 023…n to y_{n}, i.e. \(y_{n}=0. {\dots } \mathbf {1}23 {\dots } (n-1)\overbrace {\mathbf {0}23 {\dots } n}^{\text {new block}}\). If the latter, add 123…n, i.e. \(y_{n}=0. {\dots } \overbrace {\mathbf {1}23 {\dots } n}^{\text {new block}}\).
In this way, if for all n we have φ_{e}(e)↑, the starting digit of each new block added to y_{n} will cycle between 0 and 1. This will build y so that there exists no t ∈ [0,1] such that y − t^{∗}∈D. Hence f(y) = 0.
If on the other hand there exists an n such that φ_{e}(e)↓[n], then from the stage that this becomes apparent we copy γ’s Cauchy name exactly. In this case the block cycle has begun, and f(y) = t (where t = 0.12345…∈[0,1] and because y − t^{∗}∈D).
We have shown that f can decide whether or not e ∈ 0^{′}. By extending this argument, for example following a similar pattern but altering every i between 0 and i to decide i ∈ 0^{′}, we can conclude that f computes 0^{′}. Or more precisely, if z computes the index function of f, then z computes 0^{′}. □
This argument can be adapted to show that ‘f computes 0^{″}’. We will illustrate this now. For simplicity, we switch to using quantified predicates, rather than partial functions, in our argument.
Theorem 5.20
If the function f (defined above) is Markov computable in z, then z can compute 0^{′′}.
Proof
Let P(x_{1}, x_{2}, x_{3}) be a computable predicate, \(x_{1},x_{2},x_{3} \in \mathbb {N}\). We will show that the function f defined above can decide, for fixed e, the formula ∃x_{2}∀x_{3}P(e, x_{2}, x_{3}). This is done by again building a computable real y. We use an almost identical argument to that above, except we now require y to enter a block cycle if and only if ∃x_{2}∀x_{3}P(e, x_{2}, x_{3}). At stage 〈b, c〉 we check P(e, b, c). The pairing function is explained in the construction.
Stage 〈1,1〉: Check P(e,1,1). If it returns true, set y_{1}=0.1. Then check P(e,1,2). If P(e,1,1) returns false, set y_{1}=0.0 and check P(e,2,1) (that is, go to stage 〈2,1〉).
Generally, if P(e,1,1) returns true it is possible that (∀x_{3})P(e,1,x_{3}), therefore ∃x_{2}∀x_{3}P(e, b, c) is true. To confirm this, we continue checking P(e,1,x_{3}) until we observe a failure. If we never find a failure, it must be true that ∃x_{2}∀x_{3}P(e, x_{2}, x_{3}). On the other hand, if at any stage that we do observe a failure, we begin checking (∀x_{3})P(e,2,x_{3}). A failure is not enough to confirm that ∃x_{2}∀x_{3}P(e, x_{2}, x_{3}) is false. Only infinitely many failures would imply this and so we need to build y to reflect this.
Stage n = 〈b, c〉: Suppose P(e, b, x_{3}) retuned true for all x_{3} < c and y_{n−1}=0.1…q_{m}. Technically, \(m={\sum }_{i=1}^{n-1} i\), and we assume here that we have observed n−1 stages so far. Consider x_{3} = c. If P(e, b, c) returns true, add the block 123…n on to the end of y_{n−1} to form y_{n}. So \(y_{n}= \overbrace {0.1 {\dots } (n-1)}^{y_{n-1}}123 {\dots } n\). Now go to stage 〈b, n+1〉 (i.e. check P(e, b, n+1)).
If P(e,1,n) returns false, let the current block in our new term y_{n} be different in the first digit to the last block in y_{n−1}. Hence, if \(y_{n-1}=0.1 {\dots } \overbrace {\textbf {1}23 {\dots } (n-1)}^{\text {final block}}\), add the block 023…n on to the end of y_{n−1} to form y_{n}. That is, \(y_{n}= \overbrace {0.1 {\dots } (n-1)}^{y_{n-1}}\overbrace {023 {\dots } n}^{\text {new block}}\). Similarly, if \(y_{n-1}=0.1 {\dots } \overbrace {\textbf {0}23 {\dots } (n-1)}^{\text {final block}}\) then \(y_{n}= \overbrace {0.1 {\dots } (n-1)}^{y_{n-1}}\overbrace {\textbf {1}23 {\dots } n}^{\text {new block}}\). Now go to stage 〈b+1,1〉 (i.e. check P(e, b+1,1)).
If there exists a b such that (∀c)P(e, b, c) returns true, then we will allow 1’s in every block of y from some stage onwards, thereby achieving the block cycle. However, if no such b exists we can always find two consecutive blocks in y that begin with different digits, therefore never achieving a block cycle.
Just like above, f(y) = 0 if and only if e∉0^{″}. By extending this argument to include all e, the result follows. □
The results of this subsubsection apply to only a single example of a canonical Darboux function. It remains open whether or not this idea can be extended somehow to all canonical Darboux functions.
5.3 The Darboux Property on \(\mathbb {Q}\)
We would like to have an effective version of the Darboux property. The problem is that in the Type II, or even Markov computable setting, continuity means that all relevant functions continuous on their domains, perhaps realizing the intuition of the 19th century analysts. But there is a natural definition on \(\mathbb {Q}\). Perhaps we will be able to salvage some relationship between ‘rational Darboux functions’ and other notions of computability. In this section, we will allow our functions to be once again computable in the classical sense. We define the Darboux property on \(\mathbb {Q}\) and discuss the difficulty of approximating a computable function \(f: \mathbb {Q} \to \mathbb {Q}\) using these rational Darboux functions. In this section, unless otherwise stated, all results are original.
In this section only (unless otherwise stated) we will refer to a computable function \(f: \mathbb {Q} \to \mathbb {Q}\) under a standard coding of \(\mathbb {Q}\). We also use regular jump notation (0^{′}, 0^{″}, etc.) with standard interpretation rather than the jump operator here.
Definition 5.21
We say a function \(f: \mathbb {R} \to \mathbb {R}\) has the rational Darboux property if f is defined on \(\mathbb {Q}\) and has the Darboux property when restricted to \(\mathbb {Q}\). Namely, for all a < b, \(a,b \in \mathbb {Q}\), and all \( y\in [f(a), f(b)]\cap \mathbb {Q}\), we have \(f(a),f(b)\in \mathbb {Q}\), and there exists \(x \in [a,b] \cap \mathbb {Q}\) such that f(x) = y.
Call the class of rational functions with the rational Darboux property \(\mathcal {RD}\).
We will restrict our discussion to explicit rational functions \(f: \mathbb {Q} \to \mathbb {Q}\), but the arguments following could be extended to functions defined on all of \(\mathbb {R}\). Notice that the rational Darboux property does not imply the real Darboux property (as given in Definition 4.1), nor does Definition 4.1 imply the rational Darboux property. These are two distinct notions. But also notice that to an precision 𝜖 these rational Darboux functions approximate a real one to within 𝜖.
5.3.1 The Closure of the Class \(\mathcal {RD}\) is all Rational Functions
Our aim is to prove that, for any computable function \(f:\mathbb {Q} \to \mathbb {Q}\), there exists a computable sequence of functions (f_{i})_{i} such that for all i, \(f_{i}: \mathbb {Q} \to \mathbb {Q}\) has the rational Darboux property and \(\lim _{i} f_{i} = f\).^{24} We take a similar approach to the last section, first defining a canonical rational function, proving the principal result, and then effectivising it.
We define a rational canonical Darboux function and then give an example of such a function.
Definition 5.22
A function \(f: \mathbb {Q} \to \mathbb {Q}\) is a canonical rational Darboux function (C.R.D function) if for every interval \(I \subset \mathbb {Q}\), \(f(I)=\mathbb {Q}\).
Example 5.23
^{25} Let \(\mathbb {D}\) be the set of dyadic numbers. Define a set of equivalence classes \(\mathcal {A}= \{ [x] : x \in \mathbb {Q}\}\) where \([x]=\{y \in \mathbb {Q} : x - y \in \mathbb {D}\}\) (i.e. \(x \sim y \iff x-y \in \mathbb {D}\)).
\(\mathbb {D}\) is dense in \(\mathbb {R}\) (and \(\mathbb {Q}\)), therefore \([x]=x+\mathbb {D}=\{x+d:d\in \mathbb {D}\}\).
Claim 4
\(|\mathcal {A}|=|\mathbb {Q}|\).
Proof of claim
Clearly \(|\mathcal {A}| \leq |\mathbb {Q}|\). In the other direction, suppose \(|\mathcal {A}| \ngeq |\mathbb {Q}|\). Then \(\mathcal {A}\) is finite, and we can list its members [x_{1}],[x_{2}],…,[x_{n}]. The unique sequence each of its members must repeat after some stage determines each equivalence class. That is, for every member x ∈ [x_{i}], there exists a \(m \in \mathbb {N}\), such that after \(x \upharpoonright m\), x repeats some fixed finite sequence. In doing so, we are identifying the dyadic rational that defines the equivalence class. But if we take one copy of each of the finite sequences corresponding to each of the classes in \(\mathcal {A}\), placing them together in any order, then we will obtain a new finite repeating sequence (i.e. dyadic rational) that is not represented in \(\mathcal {A}\), a contradiction. □
And so \(|\mathcal {A}|=|\mathbb {Q}|\). Hence there exists a bijection \(g: \mathcal {A} \to \mathbb {Q}\). Define a new function f(x) = g([x]).
Because \(\mathbb {D}\) is dense in \(\mathbb {Q}\), and dense in any rational open interval \((a,b) \cap \mathbb {Q}\), each equivalence class must have at least one element in (a, b). Therefore \(f((a,b))=g([a,b])=g([\mathcal {A}])=\mathbb {Q}\). □
In the previous section, we gave a proof that every real-valued function is the limit of a sequence of Darboux functions. In parallel, we now prove that a similar result holds when we restrict our attention to \(\mathbb {Q}\).
Theorem 5.24
Every rational function\(f: \mathbb {Q} \to \mathbb {Q}\)is the limit of a sequence of functions with the rational Darboux property.
Proof
Let \(f: \mathbb {Q} \to \mathbb {Q}\) be the function we are interested in approximating and let the equivalence class \(\mathcal {A}\) be as defined above. Let \(h:\mathbb {Q} \to \mathcal {A}\) be a bijection.
\(\mathcal {A}_{1}=h([0,1))\)
\(\mathcal {A}_{2}=h([-1,0))\)
\(\mathcal {A}_{3}=h([1,2))\)
…
\(\mathcal {A}_{k}=h([\frac {-k}{2},\frac {-k}{2}+1))\), k even
\(\mathcal {A}_{k+1}=h([\frac {k}{2},\frac {k}{2}+1))\)
Notice \(|\mathcal {A}_{i}|=|\mathbb {Q}|\) for all i; \(|\mathcal {A}_{i}| \leq |\mathcal {A}| =|\mathbb {Q}|\) and \(|\mathcal {A}_{i}|=|h[a,b)| = |[a,b) \cap \mathbb {Q}|\geq |(a,b)\cap \mathbb {Q}| = |\mathbb {Q}|\).
Therefore, there exists a bijection \(m_{i}: \mathbb {Q} \to \mathcal {A}_{i}\) for all i.
We partitioned \(\mathcal {A}\) so that, for all i, j, we have \(\mathcal {A}_{i} \cap \mathcal {A}_{j} = \emptyset \) and \(\bigcup _{i} \mathcal {A}_{i} = \mathcal {A}\). Hence any \(x \in \mathbb {Q}\) belongs to a unique class in \(\mathcal {A}\), and so must belong to a unique class in exactly one \(\mathcal {A}_{i}\).
Therefore, \(\lim _{i} f_{i}(x) = f(x)\) for all \(x \in \mathbb {Q}\).
All that remains is to show that each f_{i} has the rational Darboux property.
Consider any interval \(I \subset \mathbb {Q}\). Each equivalence class is dense in \( \mathbb {Q}\), which means I ∩ m_{i}(r)≠∅ for all \(r \in \mathbb {Q}\) and \(i \in \mathbb {N}\). Therefore, there exists an x ∈ I such that x ∈ m_{i}(r) ∩ I, i.e. f_{i}(x) = r. This means r ∈ f_{i}(I ∩ m_{i}(r)) ⊂ f_{i}(I) for every \(r \in \mathbb {Q}\), hence \(f_{i}(I)=\mathbb {Q}\). □
5.3.2 The Complexity of Canonical Rational Darboux Functions
Using Theorem 5.24 and Example 5.23 we now discuss the complexity of finding such a sequence for a given rational function \(f: \mathbb {Q} \to \mathbb {Q}\). We first address the complexity of C.R.D. functions.
Lemma 5.25
There exists a computable C.R.D. function\(f: \mathbb {Q} \to \mathbb {Q}\).
Proof
Example 5.23 is such a function.
Notice that we can computably decide whether two rationals x and y are in the same equivalence class. Assume that we are given two rationals \(q_{1}= \frac {a_{1}}{b_{1}}\) and \(q_{2}= \frac {a_{2}}{b_{2}}\) in reduced form. Without loss of generality, assume q_{1}>q_{2}. Subtraction is a computable operation, so compute \(q_{1}-q_{2}=q_{3}=\frac {a_{3}}{b_{3}}\). We ask whether or not q_{3} is dyadic. That is, for every n < b_{3} we ask if b_{3}=2^{n}. If no, then q_{1} and q_{2} belong to different equivalence classes. If yes, then q_{1} and q_{2} differ by a dyadic, and so belong to the same class.
Now build a bijection \(h: \mathbb {Q} \to \mathcal {A}\) in stages as follows. Enumerate \(\mathbb {Q}\) and \(\mathcal {A}\). We computably enumerate \(\mathcal {A}\) by enumerating \(\mathbb {Q}\), and for each rational q_{n} we observe, we check if it is in any of the classes that exist at this stage. There are only finitely many classes to check at any stage, so this process it computable. If q_{n} belongs to one of the classes that exist at the given stage, add q_{n} to that class. If not, define a new class [q_{n}].
Suppose we observe q_{s} at stage s. Define h(q_{s}) to be the ‘oldest’ equivalence class that has not yet been mapped to. If no classes are available at this stage, we wait until a new unseen class is enumerated into \(\mathcal {A}\), and set h(q_{s}) equal to this class.
It is clear that h is computable, and a bijection. Taking g = h^{−1} gives us the bijection of Example 5.23 □
Finally, we have the tools to give the main result of this section.
Theorem 5.26
Every computable function\(f: \mathbb {Q} \to \mathbb {Q}\)is the limit of a computable sequence of computable functions with the rational Darboux property.
Proof
Take computable bijection \(h: \mathbb {Q} \to \mathcal {A}\) given in Lemma 5.25 to be that used in Theorem 5.24.
We can computably find the partition of \(\mathcal {A}\) any given equivalence class, [q], is contained in. This is done by enumerating h on each of the unit intervals and waiting for [q] to appear. We can detect this computably because deciding whether two rationals are in the same equivalence class is computable (see Lemma 5.25).
In this manner, each \(\mathcal {A}_{i}\) is enumerable, and hence there exists a computable bijection m_{i} between \(\mathbb {Q}\) and \(\mathcal {A}_{i}\). The explicit construction is similar to that given in Lemma 5.25.
For any rational q, there exists exactly one \(i \in \mathbb {N}\) and \(r \in \mathbb {Q}\) such that q ∈ m_{i}(r). Given i we cannot tell computably if there exists an r such that q ∈ m_{i}(r), however we do know that such r and i exist.
To computably define the sequence we are interested in, we do not define functions individually, but rather we define all functions at once on a particular rational input. Suppose we are given \(q \in \mathbb {Q}\). We define f_{i}(q) for all i as follows.
Enumerate \(\mathcal {A}_{j}\) for all \( j \in \mathbb {N}\). At each stage ask if q is a member of any of the equivalence classes enumerated into each \(\mathcal {A}_{j}\). The rational q is a member of some equivalence class, and so we will eventually find a class that contains it. Suppose \([q] \in \mathcal {A}_{k}\). We can computably find r such that m_{k}(r) = [q] (again, enumeration). Set f_{k}(q) = r and f_{i}(q) = f(q) for all \(i \in \mathbb {N} \backslash \{k\}\). □
We can now deduce that the complexity of a rational function \(f: \mathbb {Q} \to \mathbb {Q}\) entirely determines the complexity of its corresponding rational Darboux sequence.
Corollary 5.27
If\(f: \mathbb {Q} \to \mathbb {Q}\)and f(x)≤_{T}0^{(n)}then there exists a sequence of rational Darboux functions (f_{i}(x))_{i}such that f is the limit of (f_{i}(x))_{i}and\((\forall x \in \mathbb {Q}) (\forall i)(f_{i}(x) \leq _{T} 0^{(n)})\).
5.4 Uniform Limits of Darboux Functions
In the previous sections, we explored real and rational valued functions and concluded that each could be approximated by a sequence of their respective (canonical) Darboux functions. Besides implicitly assuming a pointwise limit, we did not place any restrictions on the rate that these sequences approximated f. We now spend a moment discussing what happens if we require our Darboux sequences to uniformly approximate a function. In this section, we will restrict our attention to real-valued functions and the classical Darboux definition given earlier in the chapter.
The Bruckner, Ceder and Weiss paper mostly inspired this section [17]. Excluding the Examples 5.32 and 5.33, all work in this section is theirs.
5.4.1 Preliminaries
Sierpiński mentioned in [62] that, while every function is the limit of some sequence of Darboux functions, not every real-valued function is the uniform limit of such a sequence. He proved that the class of these functions was not trivial, and that there exist functions that are such limits and do not satisfy the Darboux property themselves. Bruckner, Ceder and Weiss classify this class of functions in [17]. We outline some of their argument here.
Recall a sequence of functions f_{1}, f_{2},… is said to uniformly converge to a function f if, for all 𝜖 > 0 there exists N such that n > N implies (∀x ∈ dom(f))|f(x)−f_{n}(x)| < 𝜖.
Definition 5.28
A function f:I→I is a member of the class \(\mathcal {U}\) if, for every interval [a, b] ⊂ I and every set A of cardinality less that c, the set f([a, b]∖A) is dense in the interval [f(a),f(b)].
Recall that if A and B are sets we say that A is dense in B if every open interval that intersects B also has nonempty intersection with A. We say a set A is c-dense in B is every open interval that intersects B also contains c points of A.
In turns out that \(\mathcal {U}\) is the uniform closure of the class of Darboux functions [17]. We give an outline of this result in the following subsubsection.
5.4.2 The Uniform Closure of \(\mathcal {D}\)
Before we sketch a proof of the theorem, note the following two results.
Theorem 5.29
(Bruckner, Ceder, Weiss [17]) Let\(f \in \mathcal {U}\)and 𝜖>0. Then there exists a function\(g \in \mathcal {U}\)such that g is not constant on any subinterval of its domain, the range of g is countable and (∀x∈ dom(f))|f(x)−g(x)|<𝜖.
Theorem 5.30
(Bruckner, Ceder, Weiss [17]) Let\(f \in \mathcal {U}\)such that f is not constant on any subinterval of its domain and the range of f is countable. Then f is the uniform limit of a sequence of Darboux functions.
We now state their main result.
Theorem 5.31
(Bruckner, Ceder, Weiss [17])\(f \in \mathcal {U}\)if and only if f is the uniform limit of a sequence of Darboux functions.
Proof
The forwards direction follows by applying Theorems 5.29 and 5.30. In the other direction, let f:I→I, [a, b] be a closed subinterval of I and A a set with cardinality less that c. If we can prove that f([a, b]∖A) is dense in [f(a),f(b)] then we are done. Let U be any open interval whose closure is contained in (f(a),f(b)). We will show that f([a, b]∖A) ∩ U ≠ ∅.
Let U = (y − 𝜖, y + 𝜖) and assume without loss of generality that f(a) < f(b). There exists an n such that \((\forall x \in [a,b])|f_{n}(x)-f(x)| < \frac {\epsilon }{4}\) and such that f_{n}(a) < y − 𝜖 and y + 𝜖 < f_{n}(b). Then because f_{n} is Darboux it takes every value in (y − 𝜖, y + 𝜖) over [a, b], hence there must exist a x_{0}∈[a, b]∖A such that \(y-\frac {\epsilon }{2} < f_{n}(x_{0}) < y+\frac {\epsilon }{2}\). Therefore, f([a, b]∖A) ∩ U ≠ ∅, and the result follows. □
5.4.3 Examples
We now give examples of functions that are not the uniform limit of any sequence of Darboux functions. Theorem 5.31 is a useful tool when constructing these.
First, notice that every Darboux function is, of course, a member of \(\mathcal {U}\). We now give an effective Baire class 2 function that is not a member of \(\mathcal {U}\).
Example 5.32
The function f(x) is computable in J^{(2)} (we ask if x is dyadic, which we can decide with J^{(2)} - for details see Theorem 5.13, construction of an interval function that can be computed in J^{(2)}). We can remove a countable set of points A in the interval \([0,\frac {1}{3}]\), namely all dyadic points, and \(f([0,\frac {1}{3}] \backslash A)\) is not dense in \([f(0),f(\frac {1}{3})]=[1,0]\). Therefore \(f \notin \mathcal {U}\), and hence by Theorem 5.31 is not the uniform limit of any sequence of Darboux functions.
We can, in fact, modify this example to give an even simpler function \(f \notin \mathcal {U}\), where this time f is effective Baire class 1.
Example 5.33
The function f(x) is computable in J (to decide x = 0, given the Cauchy name x_{1}, x_{2},… of x, we ask ∀n|x_{n}−0|<2^{−n}). We can remove a countable set of points A in the interval \([0,\frac {1}{3}]\), namely the point 0, and \(f([0,\frac {1}{3}] \backslash \{0\})=0\) is not dense in \([f(0),f(\frac {1}{3})]=[1,0]\). Therefore \(f \notin \mathcal {U}\), and hence by Theorem 4.31 is not the uniform limit of any sequence of Darboux functions.
5.5 Reducibilities for Type II
A somewhat less well-developed area is to look at reducibilities between type II objects. A classical notion from descriptive set theory is Wadge reducibility where f ≤ _{Wa}g means that there is a a continuous mapping h such that for all x, h^{−1}(f(x)) = g(x). The effective Wadge reducibility would be the same thing, except that we would ask that h be computable (i.e. in the type II sense).
One problem is that for analytic reasons, it is hard to compare functions like J with, for example, continuous functions under this definition.
The idea here is that k modifies the input x and h the output. They are often given not for functions, but for multivalued functions which represent solutions to problems, typically those represented by \({{\Pi }_{2}^{0}}\) statements. For example, the Weihrauch degree of the Bolzano-Weierstrass Theorem has been classified.
We remark that based on the ideas of the present paper (and hence Porter’s Thesis), Day, Downey and Westrick have developed some new ideas for reducibilities between functions. Let \({\mathcal C}=2^{\omega }\) for definiteness.
Definition 5.34
It is possible to give an equivalent definition which makes clear the “computation” that is going on. For \(Z\in {\mathcal C}\), let Tot ^{Z} be the set of all i such that for all \(X\in {\mathcal C}\), φ_{i}(X⊕Z) is total.
Proposition 5.35
The idea in the above is that in the situation where we are (i.e. at a certain precision) using the input x to generate queries of g, and the Tot ^{Z} represents the queries, with the understanding that there is no return if the particular query is partial.
In any case, with this definition, we can get an Type II analog of Theorem 5.19.
Theorem 5.36 (Day, Downey, Westrick)
If a Borel function f is not Baire n, then J_{n+1}≤_{TT2}f.
We remark that in further work in progress, Day, Downey, and Westrick have investigated truth-table and many-one variations of ≤ _{TT2} and have found that they give “computational” explanations of the Borgain hierarchy ([12]) in the Baire Classes.
6 The Blaschke Selection Theorem
6.1 Introduction
The Blaschke Selection Theorem was originally proved by Blaschke, an Austrian differential and integral geometer, in 1916.^{26} Recall that a set \(X \subseteq \mathbb {R}^{n}\) is said to be convex if for any two points x_{1}, x_{2} ∈ X, all points of the form ax_{1} + bx_{2}, where a, b ≥ 0 and a + b = 1, also belong to X. The Blaschke Selection Theorem asserts that every infinite collection of closed convex sets of a bounded portion of \(\mathbb {R}^{n}\) contains a subsequence that converges to a nonempty closed convex subset [6]. In some sense, the Blaschke Selection Theorem is a generalisation of the Bolzano-Weierstrass Theorem, a fundamental result from classical analysis. The Bolzano-Weierstrass Theorem states that any infinite collection of points in a bounded portion of \(\mathbb {R}^{n}\) contains a convergent subsequence. Proved in 1817 by Bolzano, the Bolzano-Weierstrass theorem was originally a lemma for a proof of the Intermediate value Theorem [8].^{27} It was later re-proved by Weierstrass and recognised as significant in its own right.^{28} Similar to the Bolzano-Weierstrass Theorem, the Blaschke Selection Theorem has great practical importance, and so it is a useful theorem to effectivise. Also, as far as we know, the Blaschke Selection Theorem has not yet been considered from a computability theoretic perspective. In this chapter, we give a proof of the theorem, followed by a discussion of its complexity. We would like to establish how difficult it is to find, and compute the limit of, a convergent subsequence of an infinite collection of computable closed convex sets in a bounded portion of \(\mathbb {R}^{n}\).
The main result of this chapter is Theorem 6.13; that every infinite computable collection of closed convex sets of a bounded portion of ℝ^{n} has a convergent subsequence with a 0″ computable limit.
We also give a proof that 0′′ in Theorem 6.12 cannot be replaced by 0^{′}.
Because convexity is an important property, we finish the chapter by looking into the complexity of convexity. We prove that 0^{′} is not sufficient to decide the convexity of a closed set in \(\mathbb {R}\) (a result which can be generalised to \(\mathbb {R}^{n}\)), but that the set of indices of closed convex sets is co-c.e. over 0^{′}. Theorems 6.12-17, Lemmas 6.7 and 6.11, and Example 6.6 are new. The proof of Theorem 6.5 is original (although the result is attributed to Blaschke [6]).
6.2 The Blaschke Selection Theorem
Let us begin by defining the metric we will be working in. Let B be a bounded portion of \(\mathbb {R}^{n}\) and \(\mathcal {C}\) be the collection of closed sets contained in B. Recall, the distance from set a \(A\subset \mathbb {R}^{n}\) to a point x is d_{A}(x) = inf{|x − y|:y ∈ A}.
Definition 6.1
Let X be a closed set in \(\mathbb {R}^{n}\) and take δ > 0. Define B(X, δ) to be {x:d_{X}(x) < δ}.
Δ is a metric. The proof is trivial, although we mention that two sets X_{1}, X_{2} need to be closed in order for Δ(X_{1}, X_{2})=0 to imply X_{1} = X_{2}.
Definition 6.2
A sequence of closed sets (X_{i})converges to limit X if \(\lim _{i} {\Delta }(X_{i},X) = 0\) and \(X \in \mathcal {C}\).
We will use the following results in our proof of the Blaschke Selection Theorem. The first can be found in [28].
Lemma 6.3
(Eggleston [28]) Let (X_{i}) be a convergent subsequence of elements of\(\mathcal {C}\)with limit X. If every member of (X_{i}) is convex then X is also convex.
Proof
Suppose that X is not convex. Then there exist two members x_{1} and x_{2} of X such that the line segment connecting x_{1} and x_{2} contains a point x_{0} and x_{0}∉X. But X is closed, and so there must exist a δ > 0 such that B(x_{0}, δ) ∩ X = ∅.
The sequence (X_{i}) converges to X, therefore there exists an i such that \({\Delta }(X_{i},X) < \frac {1}{4} \delta \). Notice this means \(X \subset B(X_{i},\frac {1}{4} \delta )\) and \(X_{i} \subset B(X,\frac {1}{4} \delta )\) and allows us to find u ∈ X_{i} such that \(|x_{0}-u|< \frac {1}{4} \delta \). We do this by choosing members u_{1} and u_{2} of X_{i} within \(\frac {1}{4}\delta \) of x_{1} and x_{2} respectively. There must exist a point on the line segment connecting u_{1} and u_{2} that is within \(\frac {1}{4}\delta \) of x_{0}, and this point must be a member of X_{i} by convexity. By the same argument, there exists a v ∈ X such that \(|u-v|<\frac {1}{4} \delta \).
This implies that there exists a point v ∈ X such that \(|x_{0}-v|< \frac {1}{2} \delta \), a contradiction. □
Lemma 6.4
Let (X_{i}) be a nested decreasing sequence of closed sets in\(\mathcal {C}\). Then\(\bigcap _{i} X_{i}=X\)is the limit of this sequence.
Proof
Suppose this is not the case. Then there exists a δ such that for infinitely many i, Δ(X_{i}, X)>δ. Take an element x_{i} from each X_{i} such that d_{X}(x_{i})>δ, and form a sequence (x_{i})_{i}.^{30} Let x be an accumulation point of this sequence. x∉X by assumption, but because each set X_{i} is closed, and our sequence is nested, x must be a member of each X_{i}, hence x ∈ X. Contradiction! □
We now prove the Blaschke Selection Theorem. Our intention is to give a proof that is easy to analyse from a computability theoretic perspective.
Theorem 6.5
(Blaschke [6]) (The Blaschke Selection Theorem) Every infinite collection of closed convex subsets of a bounded portion of\(\mathbb {R}^{n}\)contains an infinite subsequence that converges to a closed nonempty convex subset of this bounded portion of\(\mathbb {R}^{n}\).
Proof
Let B be a bounded portion of \(\mathbb {R}^{3}\) that contains an infinite collection \(\mathcal {A}\) of closed convex subsets. By compactness, we can finitely cover B with open balls of radius 𝜖 > 0.
We will first explain the construction for this fixed cover.
In the construction, we want to define a collection M_{i} of closed refinements of B, and \(\mathcal {N}_{i}\) infinite refinements of \(\mathcal {A}\). At the end of stage 1 we will obtain two new sets, \(B_{1}=\bigcap _{i} M_{i}\) and \(\mathcal {A}_{1}= \bigcap _{i} \mathcal {N}_{i}\). We will then choose a set from \(\mathcal {A}_{1}\) and begin forming our convergent subsequence.
Let the fixed cover of B require n balls of radius 𝜖. We first explain how to construct the collections M_{1},…,M_{n} and \(\mathcal {N}_{1}, \dots , \mathcal {N}_{n}\).
Initially, take an open ball b_{1} in our cover and ask whether infinitely many sets in \(\mathcal {A}\) fail to intersect b_{1} (asking whether there are infinitely many sets in \(\mathcal {A}\) that are contained in B∖b_{1} would be the same question phrased slightly differently).
If this is the case, define a new set M_{1} = B∖b_{1} and new subset of closed convex sets \(\mathcal {N}_{1}\), where \(\mathcal {N}_{1}\) is all closed convex sets from the original collection \(\mathcal {A}\) that do not intersect b_{1}; \(\mathcal {N}_{1} = \{ X : X \in \mathcal {A} \text { and } X \cap b_{1} =\emptyset \}\).
If not, let M_{1} = B and \(\mathcal {N}_{1} = \mathcal {A}\).
Notice that \(\mathcal {N}_{1}\) remains an infinite collection of closed convex subsets of our space in both cases and M_{1} is a closed bounded (and compact) subset of B.
Take another open ball in our cover b_{2} and ask whether infinitely many sets that remain in \(\mathcal {N}_{1}\) are members of M_{1}∖b_{2}. If yes, define M_{2} = M_{1}∖b_{2} and the new subset of closed convex sets \(\mathcal {N}_{2} = \{ X : X \in \mathcal {N}_{1} \text { and } X \cap b_{2} =\emptyset \}\). If no, let M_{2} = M_{1} and \(\mathcal {N}_{2}= \mathcal {N}_{1}\).
Assuming we have just defined M_{i} and \(\mathcal {N}_{i}\), take the open ball b_{i+1} in our cover and ask whether infinitely many sets that remain in \(\mathcal {N}_{i}\) are members of M_{i}∖b_{i+1}. If yes, define M_{i+1} = M_{i}∖b_{i+1} and the new subset of closed convex sets \(\mathcal {N}_{i+1} = \{ X : X \in \mathcal {N}_{i}\text { and } X \cap b_{i+1} =\emptyset \}\). If no, let M_{i+1} = M_{i} and \(\mathcal {N}_{i+1}= \mathcal {N}_{i}\).
Once this algorithm has been completed for each b_{i} in our cover, we have formed two collections M_{1},…,M_{n} and \(\mathcal {N}_{1}, \dots , \mathcal {N}_{n}\). Notice that each collection is nested, and if \(X \in \mathcal {N}_{i}\) then X ⊂ M_{i}. In addition, the construction has also ensured that if b_{j} and b_{k} are two balls in our cover such that b_{j} ∩ M_{n}≠∅ and b_{k} ∩ M_{n}≠∅ (i.e. neither ball was explicitly removed in the construction), then finitely many closed convex sets in \(\mathcal {N}_{n}\)do not intersect bothb_{j} and b_{k}. This follows because b_{j} was not removed from M_{j−1} to form M_{j}, which means only finitely many closed convex sets in the refined collection \(\mathcal {N}_{j-1}\)did not intersect b_{j} (if we had removed b_{j} we would have left only finitely many closed convex sets in the new collection N_{j}, something we want to avoid). Similarly for b_{k}.
This condition applies to every pair of balls that were not removed in the construction. Therefore, it follows that we can eliminate finitely many closed convex sets from \(\mathcal {N}_{n}\) to form a new set \(\mathcal {N}_{n+1}\) such that, if \(X \in \mathcal {N}_{n+1}\), then it intersects every ball in the cover that was not explicitly removed in the construction.
Finally, we let \(B_{1}={\bigcap _{i}^{n}} M_{i}\) and \(\mathcal {A}_{1}= \bigcap _{i}^{n+1} \mathcal {N}_{i}\). Choose any set that remains in \(\mathcal {A}_{1}\), call it C_{1}. This will be the first term in our convergent subsequence.
- 1.
B_{1} is a closed subset of B because M_{1}⊃…⊃M_{n} and each M_{i} was a closed subset of B.
- 2.
\(\mathcal {A}_{1}\) is an infinite subset of the original collection of closed convex sets \(\mathcal {A}\) because \(\mathcal {N}_{i} \supset {\dots } \supset \mathcal {N}_{n+1}\) and each \(\mathcal {N}_{i}\) was an infinite subset of \(\mathcal {A}\).
- 3.
If \(X \in \mathcal {A}_{1}\) then X⊆B_{1}. By contrapositive, if \(X \in \mathcal {A}\) and \(X \nsubseteq B_{1}\) then there exists a least i such that \(X \nsubseteq M_{i}\), but X⊆M_{i−1}. By construction there is a ball from the cover b_{i} such that M_{i} = M_{i−1}∖b_{i}, hence X ∩ b_{i+1}≠∅. But also by construction, \(\mathcal {N}_{i}=\{ X : X \in \mathcal {N}_{i-1} \text { and } X \cap b_{i+1} =\emptyset \}\). Therefore, \(X \notin \mathcal {N}_{i}\) and so \(X \notin \mathcal {A}_{1}\).
- 4.
If \(X \in \mathcal {A}_{1}\) then Δ(X, B_{1})<2𝜖. This follows because if \(X \in \mathcal {A}_{1}\), then X intersects every open ball in the cover that also intersects B_{1} (i.e. those that were not removed). Therefore, as X ⊂ B_{1} and B ⊂ B(X,2𝜖), we have that Δ(X, B_{1})<2𝜖.
- 5.
If \(X_{1}, X_{2} \in \mathcal {A}_{1}\) then Δ(X_{1}, X_{2})<4𝜖. This follows by the triangle inequality. Δ(X_{1}, X_{2})≤Δ(X_{1}, B_{1})+Δ(X_{2}, B_{1})<2𝜖+2𝜖.
Now repeat with a cover of open balls of radius \(\frac {\epsilon }{2}\), beginning with the bounded space B_{1} and infinite collection of closed convex sets \(\mathcal {A}_{1}\).
Continuing this construction, we obtain a sequence of closed convex sets C_{1}, C_{2},… and a decreasing sequence of closed sets B_{1}⊃B_{2}⊃…. Let \(C=\bigcap _{i} B_{i}\).
Claim 5
\(\lim _{i} C_{i} = C \)
Proof
- a.
C ≠ ∅ because it is a nested intersection of nonempty compact sets (recall that each B_{i} is compact).
- b.
∀n, C_{n}⊆B_{n} and m > n implies C_{m}⊆B_{n}. This is because \(C_{n}, C_{n+1}, {\dots } \in \mathcal {A}_{n}\), and if \(X \in \mathcal {A}_{n}\) then X⊆B_{n}.
- c.
∀δ∃i such that if \(X_{1}, X_{2} \in \mathcal {A}_{i}\) then Δ(X_{1}, X_{2}) < δ. Take the cover \(\epsilon = \frac {\delta }{4}\). The result then follows by an extension of Fact 4 above.
- d.
In addition, by Facts 4 and c if \(X \in \mathcal {A}_{i}\) then Δ(X, B_{i}) < δ.
- e.
∀δ∃k∀j > k such that Δ(B_{j}, C) < δ by Lemma 6.4.
The result now follows because for all δ, there exists an i such that for all j > i we have Δ(C_{j}, B_{j}) < δ. By Lemma 6.4 \(\lim _{i} B_{i} = C\), so it follows that \(\lim _{i} C_{i} = C\).
We have now constructed a convergent subsequence (C_{i}) of \(\mathcal {A}\) such that \(\lim _{i} C_{i} = C\). C is closed and nonempty as it is the infinite decreasing intersection of closed compact sets. Finally, C is convex by Lemma 6.3. □
6.3 Subsequence and Limit Complexity
In the previous section, we gave a proof of the Blaschke Selection Theorem. Given a collection of sets, we will now discuss how difficult it is to identify a convergent subsequence and compute its limit. We begin by restricting our attention to sequences of points in the unit interval, and then extend our argument to \(\mathbb {R}^{n}\).
6.3.1 Restricting to the Unit Interval
Naturally, we begin by asking whether every computable subsequence of a collection of convex sets needs to converge to a computable limit? Unsurprisingly, this turns out to be false. We give an example in the unit interval.
Example 6.6
We define a halting sequence (in binary) as follows. Let the i^{th} term in the sequence have a 1 in the i^{th} binary point if and only if φ_{j}(j)[i]↓. Otherwise, let this binary point be a 0. Each term in this sequence is computable, and the sequence converges to a limit x. However, if x was computable we could compute the halting problem. □
Setting our sights lower, and still considering only the unit interval, we can show is that 0^{″} is sufficient to find and compute the limit of a subsequence of any infinite collection of points.^{31} In the following lemma, we effectivise the Bolzano-Weierstrass Theorem.
Lemma 6.7
Given a computable infinite bounded sequence in\(\mathbb {R}\), 0^{′′}is sufficient to compute a fast convergent subsequence, and hence compute its limit.
Proof
Continuing in this manner, we obtain a subsequence y_{1}, y_{2},…. By construction, this sequence is Cauchy and therefore, converges to a point in the unit interval. □
To determine whether this result also holds in general we must discuss how we need to adapt our argument to work in higher dimensions.
6.3.2 Extending to Higher Dimensions
To give a generalised version of Lemma 6.7, we need to recall what we mean by a ‘computable collection of sets’. In an earlier section we defined a closed set X to be computable if it had a computable distance function d_{X}. We will call a collection of closed sets (X_{i}) computable if there exists an algorithm that uniformly gives the distance function of term X_{i} for all i.
Also, Lemma 6.7 states that 0^{″} is sufficient to approximate the limit of a sequence of points, which means 0^{″} can compute a Cauchy name for this limit. In order to generalise this notion, we define what it means for a collection of sets to approximate another.
Definition 6.8
A sequence of closed sets (X_{i})approximates a set X if ∀𝜖∃i∀j > iΔ(X_{j}, X) < 𝜖.^{33}
We can now relativise this definition and the definition of a computable sequence of closed sets.
Definition 6.9
A sequence of closed sets (X_{i})y-approximates a set X if ∀𝜖∃i∀j > iΔ(X_{j}, X) < 𝜖 and y can compute such an i for any 𝜖.
Definition 6.10
A collection of closed sets (X_{i}) is y-computable if there exists an algorithm computable in y that uniformly gives the distance function of set X_{i} for all i.
We give a lemma that will be useful later.
Lemma 6.11
If a sequence of closed sets (X_{i}) is y-computable, and (X_{i})y-approximates a set X, then X is y-computable.
Proof
We need to show that y is sufficient to compute the distance function of X. That is, for any point x_{0}, we will show y is sufficient to give a suitable n^{th} term in a Cauchy name of d_{X}(x_{0}). The sequence (X_{i})y-approximates the set X, so y is sufficient to compute an i such that for all j > i, Δ(X_{j}, X)<2^{−(n+1)}. Taking any j > i, y is sufficient to compute the distance function of X_{j}, and hence can compute \(d_{X_{j}}(x_{0})\) to within 2^{−(n+1)}. Let this rational approximation be q. □
Claim 6
q is a sufficient n^{th} term in a Cauchy name of d_{X}(x_{0}).
Proof of claim
Hence, q is a sufficient n^{th} approximation of d_{X}(x_{0}) and y is sufficient to compute q. The result follows. □
We can finally prove that Lemma 6.7 holds in general. We give a proof below using details from Theorem 6.5 (the Blaschke Selection Theorem).
Theorem 6.12
Given a computable, infinite collection of computable closed convex subsets of a bounded portion of\(\mathbb {R}^{n}\), 0^{′′}is sufficient to find a convergent subsequence of this collection and approximate its limit.
Proof
This result follows by evaluating the complexity of the sequence (C_{i}) constructed in Theorem 6.5, albeit making one small change. Notice that we cannot computably decide for a closed set X and an open set Y whether X ∩ Y ≠ ∅. So rather than asking at each stage whether the open ball b_{i} in a cover does not intersect infinitely many of our convex sets (as in the original proof), we will instead use the closure of b_{i} in the open ball’s place. The original proof remains unchanged, but we can now computably decide whether \(X \cap \overline {b_{i}} \neq \emptyset \), which will be useful below.
We call the closed set X_{i}, at stage t, the set X_{i, t} (it is nice to think of these sets in Baire space).^{34} Let (X_{i}) be an infinite, bounded, computable collection of closed convex sets. Finding a finite cover of our bounded portion of \(\mathbb {R}^{n}\) is computable. We would now like to ask if there are infinitely many sets X_{i} in our current collection \(\mathcal {N}_{i}\) (as defined in Theorem 6.5) that do not intersect b_{i} - or equivalently do not intersect \(\overline {b_{i}}\). That is, \((\forall r)(\exists s>r) (\exists t) (X_{s,r} \in \mathcal {N}_{i,r} \text { and } X_{s,t} \cap \overline {b_{i}} = 0)\)?
Depending on the answer, we take the appropriate step as outlined in the construction. Note that \(\mathcal {N}_{i}\) is c.e. and so \(\mathcal {N}_{i,t}\) (\(\mathcal {N}_{i}\) at stage t) is computable. The final question is asked when constructing \(\mathcal {N}_{n+1}\). For each \(X_{s} \in \mathcal {N}_{i}\), we ask whether (∀i, t) ((b_{i} in cover) ∧ (\(\overline {b_{i}} \cap M_{i,t} \neq \emptyset \))) implies (\(\overline {b_{i}}\cap X_{s,t} \neq \emptyset \)). If this is the case, enumerate X into \(\mathcal {N}_{i+1}\). Otherwise, discard X. Note that the sequence (C_{i}) approximates its limit by definition. The result follows. □
Notice that, while proving both Lemma 6.7 and Theorem 6.12, the sequences we constructed also happened to approximate their limits. As a consequence of our construction, this is not always the case.
It now follows by this Theorem, and Lemma 6.11, that 0^{″} is sufficient to compute the distance function of the limit X given above, which ties this result back to the original notion of a computable set.
Theorem 6.13
Every computable, infinite collection of closed convex subsets of a bounded portion of\(\mathbb {R}^{n}\), has a convergent subsequence with a 0^{′′}computable limit.
Finally, we note that Theorem 6.13 can, of course, be relativised. In all likelihood our result is equivalent to arithmetic comprehension over RCA_{0} [64]. Unfortunately there was insufficient time to confirm this.
6.3.3 Back to the Unit Interval; 0^{′} is not sufficient
While 0^{″} is sufficient to find a convergent subsequence and approximate its limit, we note that 0^{′} is not. We sketch the proof of this for a single dimension.
Theorem 6.14
There exists a computable sequence (x_{i})_{i}contained in the unit interval such that no accumulation point of the sequence is computable in 0^{′}.
Sketch of Proof:
We want to build a sequence of points x_{0}, x_{1},… in the unit interval such that no 0^{′} computable sequence converges to any accumulation point in this sequence. We will first discuss how to build such a sequence that avoids a single 0^{′} computable sequence, and then generalise this notion to account for every 0^{′} computable sequence.
Let y_{0}, y_{1},… be a 0^{′} computable sequence. This means we are not truly ‘given’ the terms in the sequence y_{0}, y_{1},… but rather 0^{′} computable Cauchy names converging to each of these terms. y_{0,0}, y_{0,1}, y_{0,2}… ‘converging’ to, for example, y_{0} and so on. We do not know the rate at which each of these ‘subsequences’ converges, only that eventually they must settle on a value y_{i}.
At stage 0, we observe y_{0,0}, y_{1,0}, y_{2,0}… and assume at this point that y_{0}, y_{1},… actually converges (of course, it may not, in which case we do not need to worry about avoiding it anyway). We now split the unit interval into two halves and consider y_{0,0}. Whichever half y_{0,0} is in, we choose the first term in our sequence to be a point from the other half of [0,1]. For example, if \(y_{0,0}=\frac {5}{8}\), we could choose \(x_{0}=\frac {1}{4}\). We now observe y_{1,1}. Whichever half y_{1,1} is in, we choose x_{1} to be in the other. For example, perhaps \(y_{1,1}= \frac {1}{4}\), then we could choose \(x_{1}= \frac {3}{4}\) (if y_{1,1} is not in the same half as x_{0}, we simply set x_{1} = x_{0}). Continuing this process, we know that the sequence y_{0,n}, y_{1,n},… must eventually get close to y_{n}. Therefore, if y_{0}, y_{1},… actually converges, avoiding the sequence y_{0,0}, y_{1,1}, y_{2,2},…,y_{n, n},… will be sufficient to avoid it too. If y_{0}, y_{1},… does not converge, then (x_{i})_{i} may not be able to avoid it. But if the sequence does not converge, then it cannot compute an accumulation point anyway.
So we have built a sequence (x_{i})_{i} that has no accumulation points computable by the 0^{′} sequence y_{0}, y_{1},….
We will now extend this argument by describing how to, in addition to the sequence above, avoid a second 0^{′} computable sequence w_{0}, w_{1},…. At stage 0 we now consider both y_{0,0} and w_{0,0}. We can computably decide whether \(y_{0,0} \in [0,\frac {1}{2})\) or \(\in [\frac {1}{2},1]\). We then ask which quarter w_{0,0} is a member of: \(w_{0,0} \in [0,\frac {1}{4}),[\frac {1}{4},\frac {1}{2}), [\frac {1}{2}, \frac {3}{4})\) or \([\frac {3}{4}, 1]\). Choose a point for x_{0} that avoids both the half and quarter which y_{0,0} and w_{0,0} are members of respectively. Continuing on in this manner (next checking y_{1,1} and w_{1,1}), we can build a sequence (x_{i})_{i} that avoids the sequences (y_{i})_{i} and (w_{i})_{i} if they converge.
We can generalise this notion and build a sequence whose accumulation points avoid every 0^{′} sequence. Take a computable listing of every 0^{′} sequence, and extending the argument above, avoid certain terms in every sequence appropriately. For example, at stage n we would address the first n sequences on our list. Observe the n^{th} approximation of each of the n^{th} terms in these n sequences, and avoid them by choosing a point x_{n} that avoids the half, quarter, eighth, …, \(\frac {1}{2^{-n}}\)th that the respective terms fall in.
We can see by the construction that there will always be an interval ‘free’ at each stage, so we can always define a new x_{i}. By dovetailing, our sequence (x_{i})_{i} will avoid the limit point (if it exists) of every 0^{′} sequence.
Because 0^{′} is not sufficient to compute any of (x_{i})_{i}’s accumulation points, it follows that no subsequence of (x_{i})_{i} can converge to a 0^{′} computable limit.
In general, this result holds in higher dimensions, as \(\mathbb {R}\) embeds into \(\mathbb {R}^{n}\).
6.4 Discussions on Convexity
We now take a moment to explore the notion of convexity, and how hard it is to decide if a closed set A in \(\mathbb {R}^{n}\) is convex. We first prove the following result for closed sets in Cantor space (as \({{\Pi }_{1}^{0}}\) classes).
Theorem 6.15
0^{′}is not sufficient to decide the convexity of a closed set A in Cantor space.
Proof
Suppose, to the contrary, that 0^{′} was sufficient to determine convexity. Let A be a \({{\Pi }_{1}^{0}}\) class in Cantor space that 0^{′} claims is convex. That is, we begin enumerating A, and at stage s, observing A_{s}, 0^{′} declares that A is convex. Call a branch in A_{s}active if it has not permanently halted earlier in the enumeration. Otherwise, we say that this branched is dead or was killed at an earlier stage.
0^{′} must now claim that A is convex.
Repeating this method builds a singleton {x} = A, but 0^{′} cannot determine its convexity. Contradiction. □
Because closed sets in Cantor space embed into closed sets in \(\mathbb {R}\) (they are effectively homeomorphic), showing that 0^{′} is insufficient to decide the convexity of a closed set in Cantor space is also a counterexample for \(\mathbb {R}\). Therefore, we can conclude the following.
Theorem 6.16
0^{′}is not sufficient to decide the convexity of a closed set A in\(\mathbb {R}\).
We can generalise this notion to \(\mathbb {R}^{n}\) by interpreting a \({{\Pi }_{1}^{0}}\) class as a closed set in \(\mathbb {R}^{n}\), and giving a similar argument.
The next thing we ask is how much more computational power is required to determine complexity? It turns out not very much more.
In this proof we explicitly discuss effectively closed sets in \(\mathbb {R}^{n}\). Recall that an effectively closed set in \(\mathbb {R}^{n}\) can be thought of as follows; at stage 0 it begins as all of \(\mathbb {R}^{n}\), and at certain stages open balls of rational radius drop of out of the set.
Theorem 6.17
The set of indices of effectively closed, convex sets of\(\mathbb {R}^{n}\)is co-c.e. over 0^{′}.
Proof
Notice that 0^{′} can also decide if any particular ball \(\overline {b_{i}}\) in this cover at some stage falls out of A. This is because \(\overline {b_{i}}\) is closed, and has so itself has a finite open cover (by compactness). The only way \(\overline {b_{i}}\) has empty intersection with A is if, at some stage t, every open ball in some cover of \(\overline {b_{i}}\) falls out of A. That is, \(\overline {B_{i}} \nsubseteq A\) if and only if there exists a stage t such that \(\overline {B_{i}} \nsubseteq A_{t}\). By the same principal, 0^{′} can also decide if any particular pair of balls \(\overline {B_{i}}, \overline {B_{j}}\) both fall out of A. That is, we ask if there exists a stage t such that \(\overline {B_{i}} \nsubseteq A_{t}\) and \(\overline {B_{j}} \nsubseteq A_{t}\).
Now take a pair of balls B_{i} and B_{j} that were enumerated (as a pair) into X. A fails to be convex if both B_{i} and B_{j} are truly subsets of A. So we ask if there exists a stage t such that \(\overline {B_{i}} \nsubseteq A_{t}\) and \(\overline {B_{j}} \nsubseteq A_{t}\). If no, then A fails to be convex. If yes, we cannot conclude anything (as A may fail to be convex for a different pair of balls, or different removed set B).
We repeat this construction for every open ball removed from A, and dovetail (increasing s cover) to ensure that, if A is convex, at some point we will come across a pair of balls that observe this. 0^{′} was sufficiently complex to compute all of our questions, and the result follows. □
Footnotes
- 1.
In this year Richard Dedekind developed Dedekind cuts which gave an equivalent definition of the real numbers.
- 2.
This list is a sample, and by no means exhaustive. For further contributions, see reference list.
- 3.
Although it is fair to say that the interpretation of what a computable function should be differs in these texts, as we will soon see.
- 4.
Both equivalences follow by well-known isomorphisms.
- 5.
In the case of sets, A is a \({{\Sigma }_{1}^{0}}\) subset of \(\mathbb {N}\) if A can be expressed as x ∈ A iff ∃nR(x, n) where R is a computable predicate on \(\mathbb {N \times N}\).
- 6.
- 7.
- 8.
This definition is not really attributed to Borel, however, as these types of functions are classically referred to as ‘Borel computable’ we will stick with this notation to avoid confusion.
- 9.
Define a function ϕ(m, n) = f(x)_{n}, where f(x)_{n} is the n^{th} term in f(x)^{′}s Cauchy name. By the S-m-n Theorem we can find a total computable function g such that ϕ(m, n) = φ_{g(m)}(n) for all \(n \in \mathbb {N}\). By the Recursion Theorem g has a fixed point. That is, there exists an e^{′} such that \(\varphi _{g(e^{\prime })}(n)=\varphi _{e^{\prime }}(n)\). Then \(\phi (m,n)=\phi (e^{\prime },n)= \varphi _{g(e^{\prime })}(n)=\varphi _{e}^{\prime }(n)\), and so e^{′} is the index of the Cauchy name of f(x), and is computable from g.
- 10.
In detail; we now take the partial function with index e and input it into the index function ν of f. Then ν(n) is the index of the partial function that outputs a Cauchy name for f(b). We take the (n+1)^{th} approximation of f(b) and are done.
- 11.
The use of a converging oracle computation Φ^{A}(n) is z+1 for the largest z such that A(z) is queried during the computation. Let the use function be Use\(:\mathbb {N} \to \mathbb {N}\). That is, Use (Φ^{A}(n)) = z+1 from above. The Use Principle is as follows; let Φ^{A} be a converging oracle computation and B a set such that \(B \upharpoonright \textit {Use}({\Phi }^{A}(n))=A \upharpoonright \textit {Use}({\Phi }^{A}(n))\). Then Φ^{B}(n) = Φ^{A}(n). For more details see, for example, [25] Section 2.
- 12.
Hertling has also written other papers about Banach-Mazur computability, notably ‘Banach-Mazur computable functions on metric Spaces’ [38].
- 13.
An English translation of this paper can be found in [10].
- 14.
It may be that this result appeared earlier that in the text given.
- 15.
The function f is Type II computable, so there exists an oracle machine \({{\Phi }_{e}^{x}}\) that outputs a Cauchy name for f(x). If \({{\Phi }_{e}^{x}}\) reads the first m terms in a Cauchy name of x, and outputs a n^{th} approximation of f(x), then by the Use Principle, this is also a sufficient n^{th} approximation of f(y) for any real y ∈ (x_{m}−2^{−m},x_{m}+2^{−m}). That is, the interval (x_{m}−2^{−m},x_{m}+2^{−m}) maps into the interval (f(x)_{n}−2^{−n},f(x)_{n}+2^{−n}).
- 16.
As with the computable real and computable real-valued function, there exist other classifications of a computable subset of \(\mathbb {R}^{n}\). See, for example, the Braverman and Yampolsky book [14].
- 17.
We emphasise that our result is for Baire rather than Cantor space. This does not have any effect in this paper but is worth bearing in mind as our \({{\Pi }_{1}^{0}}\) classes are not computably bounded. As a result, classical theorems (for example the Low Basis Theorem) would not apply here.
- 18.
We can not just take the open balls B((a_{n}, b_{n}),2^{−(n)}) and B((a_{n}, f(a)_{n}),2^{−(n)}) here because the point (a, b) and (a, f(a)) may actually fall outside of these balls.
- 19.
Note that \(d_{{\Gamma }_{f}, n}((a,b))\leq |f(x)_{n+2} - y_{n+2}|+2^{-(n+1)} =g(n,0)\).
- 20.
If we were asked to evaluate u at this stage, defer to Stage 2.
- 21.
An English translation of this paper can be found in [10].
- 22.
He formed this example while preparing for lectures [20].
- 23.
Folklore or any early text in recursive analysis.
- 24.
‘Computable’ is intended again in the classical sense here.
- 25.
This example is similar to an example of a real-valued canonical Darboux function given in [7].
- 26.
- 27.
An English translation of this paper can be found in [10].
- 28.
- 29.
Metric sourced from [28].
- 30.
Notice we are using two different metrics here. Recall that d was defined earlier; d_{X}(x_{i})= infx ∈ X|x − x_{i}|.
- 31.
The jump is considered as a set here again.
- 32.
Notice that x_{n} is thought of as a real here, rather than a term in a Cauchy name for a real x. This is one of the only notational exceptions of this type, and was made for convenience.
- 33.
This is just a more convenient reformulation of Definition 6.2.2.
- 34.
If a closed set X has a computable distance function then it can be expressed as a \({{\Pi }_{1}^{0}}\) class in Baire space. Check d_{X}(x). If the n^{th} approximation of d_{X}(x) is ever greater than 2^{−n}, kill the branch that extends however much of the Cauchy name of x we have seen.
Notes
Acknowledgments
This work was supported by the Marsden Fund of New Zealand, and a MSc scholarship to Porter. Much of the material is based around Porter’s MSc Thesis supervised by Day and Downey, and for this reason Porter is the first author on the paper.
References
- 1.Aberth, O.: Computable analysis McGraw-Hill International Book Company (1980)Google Scholar
- 2.Aberth, O.: Computable calculus Academic Press (2001)Google Scholar
- 3.Avigad, J., Brattka, V.: Computability and analysis: the legacy of Alan Turing (2012)Google Scholar
- 4.Banach, S., Mazur, S.: Sur les fonctions calculables. Ann. Soc Pol. de Math 16, 223 (1937)Google Scholar
- 5.Bishop, E.: Foundations of Constructive Analysis. Academic Press, New York (1967)MATHGoogle Scholar
- 6.Blaschke, W.: Kreis Und Kugel. Veit, Berlin (1916)MATHGoogle Scholar
- 7.Bogoşel, B.: Functions with the intermediate value property. Romanian Mathematical Gazette Series A, 1–2 (2012)Google Scholar
- 8.Bolzano, B.: Rein analytischer beweis des Lehrsatzes, dass zwischen je zwey werthen, die ein entgegengesetztes resultat gewȧhren, wenigstens eine reelle wurzel der gleichung liege. Gottlieb Haase Sohne Publisher, Prague reprint: 2 edition (1817)Google Scholar
- 9.Bolzano, B.: Spisy Bernarda Bolzano - Bernard Bolzano’s Schriften Vol. 1. In: Rychlik, K. (ed.) Functionenlehre. Královská Ceská Spolecnost Nauk, Prague (1930)Google Scholar
- 10.Bolzano, B., Russ, S. (translator): Purely Analytic Proof of the Theorem that between any two Values, which give Results of Opposite Sign, there lies at least one real Root of the Equation. In: The mathematical works of Bernard Bolzano. Oxford University Press, Oxford (2004)Google Scholar
- 11.Borel, E.: Le calcul des intégrales définies. J. de Mathéatiques pures et appliquées 6(8), 159–210 (1912)MATHGoogle Scholar
- 12.Bourgain, J.: On convergent sequences of continuous functions. Bull. Soc. Math. Belg. Sé,r. B 32(2), 235–249 (1980)MathSciNetMATHGoogle Scholar
- 13.Brattka, V., Hertling, P., Weihrauch, K.: A tutorial on computable analysis. New Comp. Parad., 425–491 (2008)Google Scholar
- 14.Braverman, M., Yampolsky, M.: Computability of Julia sets. Springer, Berlin (2009)MATHGoogle Scholar
- 15.Braverman, M.: On the complexity of real functions. In: 46th Annual IEEE Symposium on Foundations of Computer Science (FOCS’05), pp. 155–164. IEEE (2005)Google Scholar
- 16.Brouwer, L.: Collected Works, Vol I - Philosophy and Foundations of Mathematics. American Elsevier Publishing Company, Amsterdam (1975)MATHGoogle Scholar
- 17.Bruckner, A., Ceder, J., Weiss, M.: Uniform limits of Darboux functions. Coll Math. 15, 65–77 (1966)MathSciNetMATHGoogle Scholar
- 18.Caldwell, J., Pour-El, M.: On a simple definition of computable function of a real variable-with applications to functions of a complex variable. Z. Math Logik Grundlagen Math. 21, 1–19 (1975)MathSciNetCrossRefMATHGoogle Scholar
- 19.Ceitin, G.: Algorithmic operators in constructive metric spaces. Tr. Math. Inst. Steklov. 67, 295–361 (1962)MathSciNetGoogle Scholar
- 20.Conway, J.: Explanation given at Canada/USA Mathcamp (2013)Google Scholar
- 21.Darboux, G.: Mémoire sur les fonctions discontinues. Ann. Sci. Scuola Norm. 4, 57–122 (1875)Google Scholar
- 22.Dehn, M.: Transformation der Kurven auf zweiseitigen flächen. Math. Ann. 72(3), 413–421 (1912)MathSciNetCrossRefMATHGoogle Scholar
- 23.Dehn, M., Stillwell, J. (translator): In Papers on group theory and topology, pp 179–199. Springer, New York Inc (1987)Google Scholar
- 24.Demuth, O.: Necessary and sufficient conditions for Riemann integrability of constructive functions. Dokl. Akad Nauk SSSR 176, 757–758 (1967)MathSciNetMATHGoogle Scholar
- 25.Downey, R. (ed.): Turing’s Legacy: Developments from Turing’s ideas in logic. Cambridge University Press, Cambridge (2014)Google Scholar
- 26.Downey, R. G., Hirschfeldt, D. R.: Algorithmic randomness and complexity. Springer (2010)Google Scholar
- 27.Edwards, C.H. Jr.: The Historical Development of Calculus. Springer (1979)Google Scholar
- 28.Eggleston, H.: Convexity. Cambridge University Press, Cambridge (1977)MATHGoogle Scholar
- 29.Encyclopedia.com. Weierstrass, Karl Theodor Wilhelm (2008)Google Scholar
- 30.Fowler, D., Robson, E.: Square root approximations in old Babylonian mathematics: YBC 7289 in context. Historia Math. 25(4), 366–378 (1998)MathSciNetCrossRefMATHGoogle Scholar
- 31.Gödel, K.: On formally undecidable propositions of Principia Mathematica and related systems I (1931). In: Collected Works, Vol. 1: Publications 1929–1936, pp. 144–195. Oxford University Press, New York (1986)Google Scholar
- 32.Goodstein, R.: Recursive analysis. Dover Publications (Reprint 2010) Amsterdam (1961)Google Scholar
- 33.Gordon, R.: The integrals of Lebesgue, Denjoy, Perron, and Henstock (vol. 4). Amer. Math. Soc. (1994)Google Scholar
- 34.Gruber, P., Wills, J. (eds.): Handbook of Convex Geometry Volume A. Elsevier Science Publishers B.V., Amsterdam (1993)Google Scholar
- 35.Grzegorczyk, A.: Computable functionals. Fund. Math. 42, 168–202 (1955)MathSciNetMATHGoogle Scholar
- 36.Hermann, G.: Die frage der endlich vielen schritte in der theorie der polynomideale. Math. Ann. 95, 736–788 (1926)MathSciNetCrossRefMATHGoogle Scholar
- 37.Hermann, G.: The question of finitely many steps in polynomial ideal theory (translation). ACM SIGSAM Bull. 32(3), 8–30 (1998)CrossRefMATHGoogle Scholar
- 38.Hertling, P.: Banach-Mazur computable functions on metric spaces. In: Blanck, J., Brattka, V., Hertling, P. (eds.) Computability and Complexity in Analysis, volume 2064, pp. 69–81. Springer, Berlin Heidelberg (2001)Google Scholar
- 39.Hertling, P.: A Banach-Mazur computable but not Markov computable function on the computable real numbers. Ann. Pure Appl. Logic 132(2-3), 227–246 (2005)MathSciNetCrossRefMATHGoogle Scholar
- 40.Ivanov, A.: Blaschke selection theorem (2014)Google Scholar
- 41.Kleene, S: Introduction to metamathematics. Ishi Press (reprint 2009)Google Scholar
- 42.Kleene, S.: Countable functionals. North-Holland Publishing Company, Amsterdam (1959)MATHGoogle Scholar
- 43.Kreisel, G.: Review of Meschkowski - Zur rekursiven funktionentheorie. Acta Math. 95, 9–23 (1956)MathSciNetCrossRefGoogle Scholar
- 44.Kreisel, G.: Review of Meschkowski - Zur rekursiven funktionentheorie. Math. Reviews 19, 238 (1958)Google Scholar
- 45.Kreisel, G., Lacombe, D., Shoenfield, J.: Partial recursive functionals and effective operations. In: Heyting, A. (ed.) Construc. in Math., pp. 290–297, Amsterdam, 1959. North-Holland Publishing CompanyGoogle Scholar
- 46.Kronecker, L.: Grundzüge einer arithmetischen theorie der algebraischen grossen. J. Reine Angew. Math. 92, 1–123 (1882)MathSciNetMATHGoogle Scholar
- 47.Kronecker, L., Dedekind, R., Molk, J.: Grundzüge Einer Arithmetischen Theorie Der Algebraischen Grössen: a Complete Translation- except Only Abstracts of the First Four Sections. California Institute of Technology, Pasadena, Calif (1900)Google Scholar
- 48.Kushner, B.: Lectures on constructive mathematical analysis, volume 60 American Mathematical Society (1980)Google Scholar
- 49.Kuyper, R.: Effective genericity and differentiability. J. Log. Anal. 6(4), 1–14 (2014)MathSciNetCrossRefMATHGoogle Scholar
- 50.Kuyper, R., Sebastiaan, A.T.: Effective genericity and differentiability. J. Log. Anal. 6(4), 14 (2014)MathSciNetMATHGoogle Scholar
- 51.Lacombe, D.: Extension de la notion de fonction récursive aux fonctions d’une ou plusieurs variables éelles II and III (1955)Google Scholar
- 52.Lacombe, D.: Extension de la notion de fonction récursive aux fonctions d’une ou plusieurs variables réelles I. C.R. Acad. Sci. 240, 2478–2480 (1955)MathSciNetMATHGoogle Scholar
- 53.Lacombe, D.: Les ensembles récursivement ouverts ou fermés, et leurs applications á l’analyse récursive. C. R. Acad. Sci. Paris 245(13), 1040–1043 (1957)MathSciNetMATHGoogle Scholar
- 54.Markov, A.: On the continuity of constructive functions. Uspehi Mat. Nauk 9, 226–230 (1954)MathSciNetMATHGoogle Scholar
- 55.Markov, A.: On constructive functions. Trudy Math. Inst. Steklov. 52, 315–348 (1958)MathSciNetMATHGoogle Scholar
- 56.Miller, J.: Degrees of unsolvability of continuous functions. J. Symb. Log. 69 (2), 555–584 (2004)MathSciNetCrossRefMATHGoogle Scholar
- 57.Ng, K.M.: Some properties of D.C.E Reals and Their Degrees. National University of Singapore, Master’s thesis (2006)Google Scholar
- 58.Orevkov, V.: A constructive map of the square into itself which moves every constructive point. Dokl. Akad. Nauk SSSR 152, 55–58 (1963)MathSciNetGoogle Scholar
- 59.Pour-El, M., Richards, J.: Computability in analysis and physics. Springer, Heidelberg (1989)CrossRefMATHGoogle Scholar
- 60.Radcliffe, D.: A function that is surjective on every interval. Math. Ass. Amer. 123(1), 1–2 (2016)MathSciNetCrossRefMATHGoogle Scholar
- 61.Rice, H.: Recursive real numbers. Proc. Amer. Math. Soc. 5, 784–791 (1954)MathSciNetCrossRefMATHGoogle Scholar
- 62.Robert I.S.: Recursively enumerable sets and degrees. Springer, New Inc., New York, NY USA (1987)Google Scholar
- 63.Sierpinski, W.: Sur une propriété de fonctions réelles quelconques définie dans les espaces métriques. Le Matematiche (Catania) 8, 73–78 (1953)MATHGoogle Scholar
- 64.Simpson, S.: Subsystems of second order arithmetic. Cambridge University Press, New York (2009)CrossRefMATHGoogle Scholar
- 65.Specker, E.: Nicht konstruktiv beweisbare satze der analysis. J. Symb. Log. 14, 145–158 (1949)CrossRefMATHGoogle Scholar
- 66.Specker, E.: Der satz vom maximum in der rekursiven analysis. Construc. Math. Proc., Coll:254–265 (1959)Google Scholar
- 67.Turing, A.: On computable numbers, with an application to the Entsheidungsproblem. Proc. London Math. Sc. 42, 230–265 (1936)MATHGoogle Scholar
- 68.Turing, A.: On computable numbers, with an application to the Entscheidungsproblem. A correction. Proc. London Math. Sc. 43(2), 544–546 (1937)MATHGoogle Scholar
- 69.Van Rooij, A., Schikhof, W.: A second course on real functions. Cambridge University Press (1982)Google Scholar
- 70.von Mises, R.: Grundlagen der wahrscheinlichkeitsrechnung. Math. Z. 5, 52–99 (1919)MathSciNetCrossRefMATHGoogle Scholar
- 71.von Mises, R.: Richard von Mises, probability, statistics, and truth. Dover Publications (reprint, original Springer: 1928) New York (1957)Google Scholar
- 72.Weierstrass, K.: Original Works. Weierstrass’ writings were published as Mathematische Werke. 7 vols. Berlin. 1894-1927Google Scholar
- 73.Zaslavsky, I.: The refutation of some theorems of classical analysis in constructive analysis. Uspehi Mat. Nauk 10, 209–210 (1955)Google Scholar
- 74.Zaslavsky, I.: Some properties of constructive real numbers and constructive functions. Trudy Math. Inst. Steklov 67, 385–457 (1962)MathSciNetGoogle Scholar