Theory of Computing Systems

, Volume 60, Issue 1, pp 53–111 | Cite as

Notes on Computable Analysis

Part of the following topical collections:
  1. 50th Anniversary


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.


Computable analysis Computable real Computable real-valued function Markov computable Borel computable Type II computable Darboux property Blaschke Selection Theorem Convex sets 

1 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 x1, x2,… such that, for all 𝜖 > 0 there exists an n such that, if m > n, then |xnxm| < 𝜖. 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].

For every string σ ∈ 2 < ω (the collection of finite strings) we define a basic open class to be
$$[{\kern-2.3pt}[ \sigma ]{\kern-2.3pt}] = \{ x : x \in 2^{\omega} \text{ and } \sigma \prec x \}. $$
The open classes of Cantor space are unions of basic open classes. A class \(\mathcal {A} \subseteq 2^{\omega }\) is effectively open if \(\mathcal {A}= [{\kern -2.3pt}[ A ]{\kern -2.3pt}]\) for some computable set A ⊂ 2 < ω. A class \(\mathcal {A}\) is \({{\Sigma }_{1}^{0}}\) if there is a computable relation R such that
$$\mathcal{A}= \{ x : \exists n R(x \upharpoonright n)\}. $$
A set \(\mathcal {A}\) is effectively open if and only if \(\mathcal {A}\) is \({{\Sigma }_{1}^{0}}\).
A class \(\mathcal {C} \subseteq 2^{\omega }\) is \({{\Pi }_{1}^{0}}\) if there is a computable relation R such that
$$\mathcal{C}= \{ x : \forall n R(x \upharpoonright n)\}. $$

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:AX and XB = }, 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, yY 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 AM 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

One notable paper that demonstrated this was by Borel in 1912 (coincidentally the year of Alan Turing’s birth). In his paper Borel claims that a real x is ‘computable’ if, given any natural number n, we can obtain a rational q within \(\frac {1}{n}\) of x [11].7 What Borel means by ‘computable’ is uncertain, particularly since it would be another 20 years before any formal notion of computation emerged. It is unclear what Borel intended when he spoke of ‘obtaining’ a rational close to x. However, in a footnote Borel writes;

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]).

In his 1936 paper, Turing proposed an intuitively acceptable “definition” of being computable. Noting that Turing called a machine that writes only a finite number of symbols circular, he states;

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 qi for all i such that |xqi| < 2i (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 (qi)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 (xi)i of rationals that converge rapidly to x. That is, for every k and jk, |xjx|<2k.

Definition 3.2

  1. 1.

    A real number x is computable if it has a computable (rapidly converging) Cauchy name.

  2. 2.

    Similarly, we call a sequence of real numbers (ri)icomputable if there exists a computable sequence of rationals (qi, k)i, k such that for all i, (qi, k)k is a computable Cauchy name for ri.


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 (xi)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.


Suppose to the contrary. Fix e. Define a computable sequence of rationals (xi)i such that xi represents the state of the eth machine at stage i on input e. That is, x0=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. (xi)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. xy follows similarly. □

Notice that the complexity of equality is at worst 0; to decide if x = y, given respective Cauchy names (xi)i and (yi)i, simply ask whether (∀n)|xnyn| < 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.

We finish listing some miscellaneous facts:
  1. 1.

    \(\mathbb {R}_{c}\) is dense in \(\mathbb {R}\) and forms a real closed field [57,61].

  2. 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. 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. 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 nth element in a branch represents the nth 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 2m 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, yY 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) = |xy| 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 dX(f, g) = sup{|g(x)−f(x)|:x ∈ [0,1],f, gX}. Then the collection Y of all polynomials \(p: [0,1] \to \mathbb {R}\) is a countable dense subset of X. For any two polynomials p1, p1, we can compute dX(p1, p2) to within 𝜖, hence (X, dX, Y) is a computable metric space. We can then define a function fX 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 (xi)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 |qf(x)| < 2n.

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.


(⇐) 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

Let \(f: \mathbb {R}_{c} \to \mathbb {R}_{c}\) be a function defined on an interval \(I\subseteq \mathbb {R}_{c}\). The function f is effectively continuous on I if there exists a computable function d(𝜖, a) such that, for all x, aI and 𝜖 > 0,
$$|x-a|<d(\epsilon,a) \implies |f(x)-f(a)|<\epsilon. $$

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 nth approximation, and therefore Cauchy name, of f(x).

Fix an arbitrary computable real a with (possibly noncomputable) Cauchy name (ai)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 2n of f(a), and so will act as a sufficient approximation of f(a). More precisely, |f(b)n+1f(a)| ≤ |f(b)n+1f(b)|+|f(b)−f(a)| < 2−(n+1)+2−(n+1) = 2n.

We can find such a \(b \in \mathbb {R}_{c}\) as follows: Let m be least such that d(2−(n+1),a) ≥ 2m. Wait for a \(q \in \mathbb {Q}\) such that |qam+1| < 2−(m+1) and consider the corresponding constant Cauchy name q, q, q, q,… with index name e. Then
$$\begin{array}{@{}rcl@{}} |q-a| &\leq& |q-q_{m+1}|+|q_{m+1}-a_{m+1}|+|a_{m+1}-a|\\ &<& 0+2^{-(m+1)}+2^{-(m+1)}\\ &=& 2^{-m}\\ \end{array} $$

Because |qa|<2md(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.

Fix a Markov computable function \(f: \mathbb {R}_{c} \to \mathbb {R}_{c}\) and let W be a c.e. set of pairs of open balls such that:
  1. 1.

    If the pair of open balls (b1, b2)∈W, then for all computable real numbers x contained in b1, f(x) is contained in b2.

  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 kth approximation of f(x), whose index name is ν(e) (and similarly for xk).


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(2m,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 a1, a2,… and f(a)1, f(a)2,… be Cauchy names of a and f(a) respectively.

To define d(2n,a), we wait for a particular pair (b1, b2) to be enumerated into W. We know that there exist Cauchy names a1, a2,… and f(a)1, f(a)2,… of a and f(a) respectively such that (b1, b2)∈W where b2 = B(f(a)n+3,2−(n+3)) and b1 = B(ak,2k) for some k by Property 2 of W.

When we observe such a pair, set d(2n,a) = 2−(k+1).

Justification: if d(2n,a) = 2−(k+1) then |xa| < d(2n,a) if and only if xB(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)∈b2 = B(f(a)n+3,2−(n+3)) ⊂ B(f(a),2n). Hence, if |xa| < d(2n,a) then |f(x)−f(a)| < 2n, 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 e1, e2,… be a computable listing of indices corresponding to all possibly partial Cauchy sequences. That is, for any index i, the machine with index ei copies the sequence output by φi until a stage where the sequence no longer looks Cauchy. If we observe a machine ei outputting some rational that is too far away from the previously observed term in the sequence, we halt ei 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 ei on all outputs until a stage s is reached where the machine with index ν(e(i, k)) halts and outputs a viable kth approximation to some rational (hopefully the image under f of whatever ei 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 r1,…,rk−1, where (∀j)(∀i)j < i < k,|rirj| < 2j. 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)∉b2. At some point we will enumerate a pair (b3, b4) into W such that b3b1 but b2b4 = (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 (b1, b2) and (b3, b4)’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 b3b1, and so e(i, k) will still output a viable Cauchy name. That is, suppose by this stage e(j, l) has copied rationals a1,…am 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 kth 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] = rk (by the Use Principle), but f(a)∉B(rk,2k).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 (ri)i of real numbers into a computable sequence of real numbers (f(ri))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 (xi)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 |qf(x)| < 2n.

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)| < 2n).

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 finish with one final, alternate notion by Caldwell and Pour-El, who gave their classification in 1975. They defined a computable sequence of polynomials to be a sequence defined by
$$p_{n}={\Sigma}_{i=1}^{g(n)} r_{n,i}x^{i}, $$
where \(g:\mathbb {N} \to \mathbb {N}\) is computable function and (rn, i)n, i a computable rational (double) sequence. They then call a function \(f:\mathbb {R} \to \mathbb {R}\) computable if there exists a computable sequence of rational polynomials (pi(x))i that converges effectively to f. For full details see [18]. This definition was proved equivalent to Grzegorczyk and Lacombe’s in [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 mth term output by machine \(\varphi _{e_{n}}\) (if such a term exists) qm, n. Notice that, partial or not, qm, n is a 2m 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.

More formally, we construct f in stages. At stage n, let m be least such that:
  1. 1.

    We have observed qm, m

  2. 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}\), maxxXf(x) is computable.


We give a proof for intervals, which can be generalised to arbitrary compact space. Let X = [a, b], \(a,b \in \mathbb {Q}\). We know maxx ∈ [a, b]f(x): = m exits by the original Extreme value Theorem, so to show that m is computable we need find a Cauchy name. It is sufficient to approximate m from above and below with two computable functions \(g:\mathbb {N} \to \mathbb {Q}\) and \(h:\mathbb {N} \to \mathbb {Q}\). We will define our functions by induction. Assume g(x) and h(x) are defined for all x < n. There exists a finite cover of of [a, b] by Compactness. Also by Compactness, there exists a finite cover of Γf (the graph of f) of open balls of radius 2n. We want a special cover of [a, b] such that the image of the cover of [a, b] covers the graph Γf with open balls of radius at most 2n. This can be done computably by the Use Principle and is illustrated in Fig. 1.15
Fig. 1

The open ball cover correspondence

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−2n if g(n) ≥ g(n−1), otherwise g(n) = g(n−1).

Define h(n) = q+2n 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.

Figure 2 summarises the relationship between the different types of computability we have covered in this chapter (see [3]).
Fig. 2

Function relationship summary

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 Γfis a\({{\Pi }_{1}^{0}}\)class in Baire space.


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 (ai)i such that P(2n) = an 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 = a0f(a)0a1f(a)1a2f(a)2….

To ensure this, we begin by enumerating all possible rational sequences into T. At stage s we check all finite branches in Ts (T at stage s). Let τsTs and |τs| = m. Without loss of generality assume m is even. We kill this branch at stage s only if it satisfies one of two conditions:
  1. 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. 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 (ai)i and (bi)i for \(a,b \in \mathbb {R}\), define a string σωω by letting σ(2n) = an and σ(2n+1) = bn. 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. □

We now define the distance function for a compact set C. Let
$$d_{C}(X)= \inf_{y\in C} |x-y| = \min_{y\in C} |x-y|, $$
where the second equality follows by compactness.

Definition 4.2

We say that a compact set C is computable if its distance function dC 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.


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 (ai)i, (bi)i and (ai)i, (f(a)i)i, become permanently separated. That is, there exists an n such that the open balls B((an, bn),2−(n−1)) and B((an, 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 (an, bn) lies above or below Γf. More formally, the point (a, b) lies below Γf ⇔ there exists an n such that B((an, f(a)n),2−(n−1)) ∩ B((an, bn),2−(n−1)) = and bn < f(a)n. This is a \({{\Sigma }_{1}^{0}}\) condition. Similarly for any point above Γf.

Now we know that:
  1. 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. 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 (xi)i, (yi)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((xn, yn),q) for all n > M, and the space above and below Γf. If there exists an n such that points in B((xn, yn),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 qr. Choosing our distances sensibly, we will eventually bounce between two rationals q1 and q2. These rationals we can refine until |q1q2| < 2n, 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 2n. The precise details follow.

Suppose we want to approximate \(d_{{\Gamma }_{f}}((a,b))\) to within 2n. We build a functional Φ with oracle \(((x,y)_{i})_{i \in \mathbb {N}}=(x_{i+1},y_{i+1})_{i \in \mathbb {N}}\), a Cauchy name of (x, y), to compute this approximation. On input n, find rationals q1, q2, and terms in the given rapidly converging Cauchy sequences xm, ym, such that:
  1. 1.

    |q1q2| < 2−(n+1)

  2. 2.

    \(d_{{\Gamma }_{f}}((x_{m},y_{m}))<q_{2}\)

  3. 3.

    \(d_{{\Gamma }_{f}}((x_{m},y_{m}))>q_{1}\)

  4. 4.

    |(x, y)−(xm, ym)|<2−(n+2)

So, we have \(q_{1}-2^{-(n+2)}<d_{{\Gamma }_{f}}((x,y))<q_{2}+2^{-(n+2)}\).
Let \({\Phi }^{(x,y)}(n):=\frac {q_{1}+q_{2}}{2}\). Then,
$$\begin{array}{@{}rcl@{}} |d_{{\Gamma}_{f}}((x,y))-{\Phi}^{(x,y)}(n)|&=& |d_{{\Gamma}_{f}}((x,y))-\frac{q_{1}+q_{2}}{2}|\\ &<& |q_{2}+2^{-(n+2)} - \frac{q_{1}+q_{2}}{2}| \\ &=& |2q_{2}+2^{-(n+1)} - (q_{1}+q_{2})|\\ &=& |q_{2}-q_{1}+2^{-(n+1)}|\\ &\leq& |q_{2}-q_{1}|+|2^{-(n+1)}|\\ &<&2^{-(n+1)}+2^{-(n+1)}\\ &=&2^{-n}\\ \end{array} $$

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

First recall that a partial function \(f: \mathbb {R}_{c} \to \mathbb {R}\) is upper semi-computable (which means it can be approximated from above) if there exists a computable function of two variables \(\phi (x,k): \mathbb {R}_{c} \times \mathbb {N} \to \mathbb {R}_{c}\) where x is the desired parameter for f(x) and k the level of approximation such that:
  1. 1.

    \(\lim _{k \to \infty } \phi (x,k)=f(x)\)

  2. 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 2n, \(\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 nth 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 bn+2 in the respective Cauchy names of f(a) and b such that |f(a)n+2f(a)| < 2−(n+2) and |bn+2b|<2−(n+2). Set g(n,0)=|f(a)n+2bn+2|+2−(n+1).19

Let e1, e2… 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 ei, we ask whether or not \(\varphi _{e_{i}}\) has output a finite Cauchy name q1,…,qm 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 q1,…,qm does appear to be Cauchy, first note that q1,…,qm looks like the initial terms of the Cauchy names of a range of computable reals (specifically, any q ∈ (qm−2m,qm−2m)). 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 r1,…,rn+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 (qm, rn+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.

Next, calculate the distance D between (an+3, bn+3) and (qm, rn+3). This is summarised in Fig. 3. Recall that, by the inductive assumption, we have defined g at this point up to g(n, t). If D+2−(n+1)g(n, t), set g(n, t+1) = D+2−(n+1). If not, set g(n, t+1) = g(n, t). Notice that we need to add 2−(n+1) to D to ensure that we approach the 2n distance approximation from above. We now ‘kill’ the index ei for this particular fixedn and go to stage s+1. We emphasise that stage s+1 is still operating with the same fixed n, and will define g(n, t+2). When we change n (which involves a completely separate construction) we must then reset all indices.
Fig. 3

The distance D

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)


\(\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 (xi)i such that \(\lim _{i} x_{i} =x\) and (∀i)(xixi−1 and xi>x).

Let q1, q2,… 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(qi)=0 for all i, and almost everywhere else have f(x)>0. In particular, we will allow f(x) = 0 only if xqi some qi in (qi)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 Bu 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 xB, 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. □

The formal construction follows.
Stage 0

Observe the first term q0 in the rational noncomputable c.e. sequence converging to α from above. For simplicity assume q0 ≤ 1.

Stage 1

Wait for next term q1 in the sequence. q0 and q1 are rationals, so let \(|q_{0}-q_{1}|=b_{1}\in \mathbb {Q}^{+}\) and b0=1. Define f to vary linearly from 1 to 0 from \([q_{1}+\frac {b_{1}}{2}, q_{0}]\), and 0 to 1 from [q0, q0 + b0]. Call \(v_{1}:=q_{1}+\frac {b_{1}}{2}\).20

Stage n

Wait for the next term qn in the sequence. Let vn−1 be the least rational f has been defined at such that, for all x > vn−1, the value f(x) is defined at this stage. Check d(qn−1, vn−1), and d(qi, qi−1) for all in, 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(uk,2k) contains at most one element from the observed sequence q1,…,qn tending to α

  1. 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 (ui)i. There are three sub-cases to consider. They occur as combinations of two conditions.

  • Condition (a) For all xB(uk,2k), f(x) has not yet been defined.

  • Condition (b) There exist \(r_{1}, r_{1} \in \mathbb {Q}^{+}\) such that for all x, r1 < x < uk−2k and uk+2k < x < r2, f(x) has not yet been defined.

  1. I

    If both (a) and (b), set f(x) = 1 for all xB(uk,2k) and go to Step 2.

  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.

  3. III

    If not (a), then f(x) defined on some points in B(uk,2k) 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.

  1. Step 2:

    Observe qn. Either at some earlier stage we were asked to evaluate \(w \in \mathbb {R}_{c}\), and consequently defined for some m all xB(wm,2m) including qnB(wm,2m), 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 vn−1 is the least rational f was defined at such that ∀x > vn−1, f(x) has been defined.
    1. I
      If there exists some x such that qn < x < vn−1, and f(x) has already been defined, let c be greatest such that if qn < 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.
      Fig. 4

      The construction of f if ‘No : I’

    2. 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}\).

  • IF YES: First, for all x > wm−2m 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 < wm−2m, f(x) has not yet been defined. Such a d must exist by Step 1, Condition (b). Choose some rational γ such that d < γ < wm−2m. 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 [γ, wm−2m]. f(x) is now defined for at least all \(x>d+\frac {\gamma -d}{2}\). This process is summarised in Fig. 5.
    Fig. 5

    The construction of f if ‘Yes’


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 vs. Continuity was preserved for all values above vs, for each s, and every time we defined f below the current vs, we ensured sufficient undefined space to ensure continuity at all later stages.


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(uk,2k) as specified in construction. Then we either define f(x) = 1 for all xB(uk,2k), 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).

So f is a Markov computable function, and
$$\lim_{n \to \infty} d_{{\Gamma}_{f}}((0,0)) =\lim_{n \to \infty}(q_{i})_{i\in\mathbb{N}}=\alpha. $$

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, bI 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.


Let f be a differentiable function. We will show that f has the Darboux property. Let a, bI, where a < b, and \(r \in \mathbb {R}\), where r is between f(a) and f(b). Without loss of generality, assume f(a) < r < f(b). We now define a function \(g: [a,b] \to \mathbb {R}\). Let
$$g(x)=f(x)-rx \hspace{1cm} \text{for } x \in [a,b]. $$
By a well known result in calculus, if f(x) is differentiable then it is continuous. rx is trivially continuous, and as the difference of two continuous functions is continuous (another classic result, see any standard calculus textbook), g(x) must also be continuous. By the Extreme value Theorem, there must exist a point c ∈ [a, b] such that g(c) is a maximum on [a, b]. By properties of derivatives, this means g(c) = 0. Differentiating both sides of g(x) = f(x)−rx and substituting c for x gives
$$\begin{array}{@{}rcl@{}} g^{\prime}(c)&=&f^{\prime}(c)-r \\ f^{\prime}(c)&=&r\\ \end{array} $$
The result follows. □
Consequently, continuity is not a necessary condition for membership of \(\mathcal {D}\). A basic example of a function \(f: \mathbb {R} \to \mathbb {R}\) with a discontinuous derivative is
$$f(x)= \left\{\begin{array}{ll} x^{2}\sin(\frac{1}{x}) & \text{if } x \neq 0\\ 0 & x=0\\ \end{array}\right., $$
with the derivative
$$f^{\prime}(x)= \left\{\begin{array}{ll} 2x\sin(\frac{1}{x})-\cos(\frac{1}{x}) & \text{if } x \neq 0\\ 0 & x=0\\ \end{array}\right.. $$

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:II (where I is any interval, including the entire real line) is a canonical Darboux function if for every interval JI, 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.t1t2t3…, \(t_{i} \in \mathbb {N}\) where tk=0 for all sufficiently large k, if tD then define t = 0.t1t1t2t1t2t3…. 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 tsD 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 xtD.

We can now define our function.
$$f(x)= \left\{\begin{array}{ll} t & \text{ if } t\in[0,1]\text{ and } x-t^{*} \in D\\ 0 & \text{ otherwise }\\ \end{array}\right. $$

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 xI such that xtD (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 xI 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 Vi: = V+2i. V1, V2,… are pairwise disjoint subsets of D (because 2i is an unique infinite repeating sequence when expressed in base 5). ∀x ∈ [0,1] there exists at most one t ∈ [0,1] such that xtVi.

We then define a sequence of functions f1, f2,…:[0,1]→[0,1].
$$f_{i}(x)= \left\{\begin{array}{ll} t & \text{ if } t\in[0,1]\text{ and } x-t^{*} \in V_{i}\\ f(x) & \text{ otherwise }\\ \end{array}\right. $$

Every fi 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 xx. 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 xx the double jump operator and refer to it as J(2) (and so on for nth 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 (fi)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 (fi)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) ≤ TJ(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) ≤ TJ(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 2n around rationals ri, for all pairs 〈ri, 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.


Suppose that f(x) ≤ TJ. 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.


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.


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 x1, x2,… 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 x1, x2,…, the double jump function can decide whether x is a dyadic rational. If x is not a dyadic rational, then for all n and mn, we can decide in finite time whether x ∈ (m2n,(m+1)2n). We build a binary expansion 0.b1b2b3… 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 b1, the first binary point of x, to be 0. If the latter, set b1=1. We then repeat this process; if, (for example), b1=0 and \(x \neq \frac {1}{4}\), we ask whether \(x \in (0, \frac {1}{4})\). If yes, set b2=0, if no, then \(x \in (\frac {1}{4}, \frac {1}{2})\) set b2=1, and so on. In this way, we obtain an accurate binary expansion of x = 0.b1b2b3…. 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)(|m2nxk| < 2k). Note that xk is the kth rational in xs Cauchy name. If no, complete the binary expansion construction above. If yes, check every n and mn 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.b1b2b3… which we will use to construct f.

Recall that we would like
$$f(x)= \left\{\begin{array}{ll} t & \text{ if } t\in[0,1]\text{ and } x-t^{*} \in D\\ 0 & \text{ otherwise }\\ \end{array}\right., $$

where t ∈ [0,1] and t,D is defined as in Example 5.4.

We begin by defining a pairing function 〈n, m〉 as follows.
$$\langle n,m\rangle= \left\{\begin{array}{ll} {\Sigma}_{i=1}^{n-1}i+m & \text{ if } m\leq n\\ -1 & \text{ otherwise }\\ \end{array}\right. $$

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.t1t1t2t1t2t3…, and so t1 is the first block, t1t2 the second block, t1t2tk the kth block, etc. 〈n, m〉 gives the position of tm in the nth 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 sth stage is when we observe bs, the sth 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 nm, we have bs+〈m, n = bs+〈m+1,n. If no, then there is no t such that xtD, and so set f(x) = 0. If yes, we want to set f(x) = t = 0.t1t2t3…. To define the kth binary point of t ask (∃s)(∃Mk)(∀m > M)(bs+〈m, k=0). If yes, set tk=0, otherwise tk=1. Lastly, computably convert binary expression 0.t1t2t3… 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 (fi)iwith 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”.

Keeping this tentative definition in mind, we give a simple application. Define a simple discontinuous function \(g: \mathbb {R}_{c} \to \mathbb {R}_{c}\) as follows.
$$g(x)= \left\{\begin{array}{ll} 1 & \text{ if } x<0\\ 0 & \text{ if } x \geq 0\\ \end{array}\right. $$

Lemma 5.16

If the function g (defined above) is Markov computable in z, then z is sufficient to compute 0.


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 y1, y2,… 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 mn set ym=−2−(n+1). We have now determined y. If no, set yn=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 yn=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 0is required to compute every discontinuous function\(f:\mathbb {R} \to \mathbb {R}\).

We can now turn to the computational power of some of the earlier examples. Recall the function defined previously.
$$f(x)= \left\{\begin{array}{ll} t & \text{ if } t\in[0,1]\text{ and } x-t^{*} \in D\\ 0 & \text{ otherwise }\\ \end{array}\right. $$

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.


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 nth term of ys Cauchy name, yn. 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 yn−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 yn, 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 yn will cycle between 0 and 1. This will build y so that there exists no t ∈ [0,1] such that ytD. 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 ytD).

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′′.


Let P(x1, x2, x3) 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 ∃x2x3P(e, x2, x3). 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 ∃x2x3P(e, x2, x3). 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 y1=0.1. Then check P(e,1,2). If P(e,1,1) returns false, set y1=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 (∀x3)P(e,1,x3), therefore ∃x2x3P(e, b, c) is true. To confirm this, we continue checking P(e,1,x3) until we observe a failure. If we never find a failure, it must be true that ∃x2x3P(e, x2, x3). On the other hand, if at any stage that we do observe a failure, we begin checking (∀x3)P(e,2,x3). A failure is not enough to confirm that ∃x2x3P(e, x2, x3) 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, x3) retuned true for all x3 < c and yn−1=0.1…qm. Technically, \(m={\sum }_{i=1}^{n-1} i\), and we assume here that we have observed n−1 stages so far. Consider x3 = c. If P(e, b, c) returns true, add the block 123…n on to the end of yn−1 to form yn. 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 yn be different in the first digit to the last block in yn−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 yn−1 to form yn. 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 (fi)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 [x1],[x2],…,[xn]. The unique sequence each of its members must repeat after some stage determines each equivalence class. That is, for every member x ∈ [xi], 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.


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.

We want to split \(\mathcal {A}\) up into countably many disjoint subsets. Define this partition as follows:
  • \(\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.

Define a sequence of functions as follows.
$$f_{i}(x)= \left\{\begin{array}{ll} r & \text{ if } x \in m_{i}(r)\\ f(x) & \text{ otherwise }\\ \end{array}\right. $$

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 fi has the rational Darboux property.

Consider any interval \(I \subset \mathbb {Q}\). Each equivalence class is dense in \( \mathbb {Q}\), which means Imi(r)≠ for all \(r \in \mathbb {Q}\) and \(i \in \mathbb {N}\). Therefore, there exists an xI such that xmi(r) ∩ I, i.e. fi(x) = r. This means rfi(Imi(r)) ⊂ fi(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}\).


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 q1>q2. Subtraction is a computable operation, so compute \(q_{1}-q_{2}=q_{3}=\frac {a_{3}}{b_{3}}\). We ask whether or not q3 is dyadic. That is, for every n < b3 we ask if b3=2n. If no, then q1 and q2 belong to different equivalence classes. If yes, then q1 and q2 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 qn 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 qn belongs to one of the classes that exist at the given stage, add qn to that class. If not, define a new class [qn].

Suppose we observe qs at stage s. Define h(qs) 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(qs) 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.


We need to prove that the function defined in Theorem 5.24, i.e.
$$\begin{array}{@{}rcl@{}} f_{i}(x)= \left\{\begin{array}{ll} r & \text{ if } x \in m_{i}(r)\\ f(x) & \text{ otherwise }\\ \end{array}\right., \end{array} $$
is computable for each i.

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 mi 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 qmi(r). Given i we cannot tell computably if there exists an r such that qmi(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 fi(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 mk(r) = [q] (again, enumeration). Set fk(q) = r and fi(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)≤T0(n)then there exists a sequence of rational Darboux functions (fi(x))isuch that f is the limit of (fi(x))iand\((\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 f1, f2,… 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)−fn(x)| < 𝜖.

Definition 5.28

A function f:II 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.


The forwards direction follows by applying Theorems 5.29 and 5.30. In the other direction, let f:II, [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 fn(a) < y𝜖 and y + 𝜖 < fn(b). Then because fn is Darboux it takes every value in (y𝜖, y + 𝜖) over [a, b], hence there must exist a x0∈[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

Define a function \(f: \mathbb {R} \to \mathbb {R}\),
$$f(x)= \left\{\begin{array}{ll} 1 & \text{ if } x \in \mathbb{D}\\ 0 & \text{ otherwise }\\ \end{array}\right.. $$

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

Define a function \(f: \mathbb {R} \to \mathbb {R}\),
$$f(x)= \left\{\begin{array}{ll} 1 & \text{ if } x=0\\ 0 & \text{ otherwise }\\ \end{array}\right.. $$

The function f(x) is computable in J (to decide x = 0, given the Cauchy name x1, x2,… of x, we ask ∀n|xn−0|<2n). 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 fWag 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.

Another popular recent reduction is Weihrauch reducibility. For functions, we will say that fsWg (strong Weihrauch) means that there are computable functions h and k such that for all x,
$$f(x)=h(g(k(x)), $$
and fWg means that
$$f(x)=h((\langle x,g(k(x))\rangle). $$

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

Say fTT2g if and only if there are continuous functions \(h_{i} : {\mathcal C} \to {\mathcal C}\) for iω and a continuous function h with domain \(\{{\prod }_{i} g(h_{i}(X)) : X \in {\mathcal C}\}\subseteq {\mathbb R}^{\omega }\) such that for all \(X\in {\mathcal C}\),
$$f(X) = h\left(\prod\limits_{i} g(h_{i}(X))\right). $$

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(XZ) is total.

Proposition 5.35

For any\(f,g:{\mathcal C}\to {\mathbb R}\), f≤TT2g if and only if there is a parameter\(Z\in {\mathcal C}\)and a computable functional Δ such that for all\(X \in {\mathcal C}\), and for all sequences\(\langle Y_{i} \rangle _{i\in \text {Tot}^{Z}}\)(Here TotZare the functions total relative to Z) with\(Y_{i} \in {\mathcal C}\)such that each Yiis a Cauchy name for g(φi(X⊕Z)), the following computation yields a Cauchy name W for f(X):
$$W= {\Delta}\left(\text{Tot}^{Z} \oplus (\bigoplus_{i\in \text{Tot}^{Z}} Y_{i})\right). $$

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 Jn+1TT2f.

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 x1, x2X, all points of the form ax1 + bx2, 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 dA(x) = inf{|xy|:yA}.

Definition 6.1

Let X be a closed set in \(\mathbb {R}^{n}\) and take δ > 0. Define B(X, δ) to be {x:dX(x) < δ}.

We define a metric in \(\mathcal {C}\).29 Let \(X_{1}, X_{2} \in \mathcal {C}\), and let δ1 be the infimum of the collection of distances δ such that X2B(X1, δ), and δ2 be the infimum of the collection δ such that X1B(X2, δ). We define the distance between X1 and X2 to be
$${\Delta}(X_{1}, X_{2}) = \delta_{1} + \delta_{2}. $$

Δ is a metric. The proof is trivial, although we mention that two sets X1, X2 need to be closed in order for Δ(X1, X2)=0 to imply X1 = X2.

Definition 6.2

A sequence of closed sets (Xi)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 (Xi) be a convergent subsequence of elements of\(\mathcal {C}\)with limit X. If every member of (Xi) is convex then X is also convex.


Suppose that X is not convex. Then there exist two members x1 and x2 of X such that the line segment connecting x1 and x2 contains a point x0 and x0X. But X is closed, and so there must exist a δ > 0 such that B(x0, δ) ∩ X = .

The sequence (Xi) 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 uXi such that \(|x_{0}-u|< \frac {1}{4} \delta \). We do this by choosing members u1 and u2 of Xi within \(\frac {1}{4}\delta \) of x1 and x2 respectively. There must exist a point on the line segment connecting u1 and u2 that is within \(\frac {1}{4}\delta \) of x0, and this point must be a member of Xi by convexity. By the same argument, there exists a vX such that \(|u-v|<\frac {1}{4} \delta \).

This implies that there exists a point vX such that \(|x_{0}-v|< \frac {1}{2} \delta \), a contradiction. □

Lemma 6.4

Let (Xi) be a nested decreasing sequence of closed sets in\(\mathcal {C}\). Then\(\bigcap _{i} X_{i}=X\)is the limit of this sequence.


Suppose this is not the case. Then there exists a δ such that for infinitely many i, Δ(Xi, X)>δ. Take an element xi from each Xi such that dX(xi)>δ, and form a sequence (xi)i.30 Let x be an accumulation point of this sequence. xX by assumption, but because each set Xi is closed, and our sequence is nested, x must be a member of each Xi, hence xX. 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}\).


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 Mi 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 M1,…,Mn and \(\mathcal {N}_{1}, \dots , \mathcal {N}_{n}\).

Initially, take an open ball b1 in our cover and ask whether infinitely many sets in \(\mathcal {A}\) fail to intersect b1 (asking whether there are infinitely many sets in \(\mathcal {A}\) that are contained in Bb1 would be the same question phrased slightly differently).

If this is the case, define a new set M1 = Bb1 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 b1; \(\mathcal {N}_{1} = \{ X : X \in \mathcal {A} \text { and } X \cap b_{1} =\emptyset \}\).

If not, let M1 = 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 M1 is a closed bounded (and compact) subset of B.

Take another open ball in our cover b2 and ask whether infinitely many sets that remain in \(\mathcal {N}_{1}\) are members of M1b2. If yes, define M2 = M1b2 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 M2 = M1 and \(\mathcal {N}_{2}= \mathcal {N}_{1}\).

Assuming we have just defined Mi and \(\mathcal {N}_{i}\), take the open ball bi+1 in our cover and ask whether infinitely many sets that remain in \(\mathcal {N}_{i}\) are members of Mibi+1. If yes, define Mi+1 = Mibi+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 Mi+1 = Mi and \(\mathcal {N}_{i+1}= \mathcal {N}_{i}\).

Once this algorithm has been completed for each bi in our cover, we have formed two collections M1,…,Mn and \(\mathcal {N}_{1}, \dots , \mathcal {N}_{n}\). Notice that each collection is nested, and if \(X \in \mathcal {N}_{i}\) then XMi. In addition, the construction has also ensured that if bj and bk are two balls in our cover such that bjMn and bkMn (i.e. neither ball was explicitly removed in the construction), then finitely many closed convex sets in \(\mathcal {N}_{n}\)do not intersect bothbj and bk. This follows because bj was not removed from Mj−1 to form Mj, which means only finitely many closed convex sets in the refined collection \(\mathcal {N}_{j-1}\)did not intersect bj (if we had removed bj we would have left only finitely many closed convex sets in the new collection Nj, something we want to avoid). Similarly for bk.

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 C1. This will be the first term in our convergent subsequence.

Before moving on, we note the following facts:
  1. 1.

    B1 is a closed subset of B because M1⊃…⊃Mn and each Mi was a closed subset of B.

  2. 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. 3.

    If \(X \in \mathcal {A}_{1}\) then XB1. 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 XMi−1. By construction there is a ball from the cover bi such that Mi = Mi−1bi, hence Xbi+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. 4.

    If \(X \in \mathcal {A}_{1}\) then Δ(X, B1)<2𝜖. This follows because if \(X \in \mathcal {A}_{1}\), then X intersects every open ball in the cover that also intersects B1 (i.e. those that were not removed). Therefore, as XB1 and BB(X,2𝜖), we have that Δ(X, B1)<2𝜖.

  5. 5.

    If \(X_{1}, X_{2} \in \mathcal {A}_{1}\) then Δ(X1, X2)<4𝜖. This follows by the triangle inequality. Δ(X1, X2)≤Δ(X1, B1)+Δ(X2, B1)<2𝜖+2𝜖.


Now repeat with a cover of open balls of radius \(\frac {\epsilon }{2}\), beginning with the bounded space B1 and infinite collection of closed convex sets \(\mathcal {A}_{1}\).

Continuing this construction, we obtain a sequence of closed convex sets C1, C2,… and a decreasing sequence of closed sets B1B2⊃…. Let \(C=\bigcap _{i} B_{i}\).

Claim 5

\(\lim _{i} C_{i} = C \)


Again, we begin by listing a number of facts:
  1. a.

    C because it is a nested intersection of nonempty compact sets (recall that each Bi is compact).

  2. b.

    n, CnBn and m > n implies CmBn. This is because \(C_{n}, C_{n+1}, {\dots } \in \mathcal {A}_{n}\), and if \(X \in \mathcal {A}_{n}\) then XBn.

  3. c.

    δi such that if \(X_{1}, X_{2} \in \mathcal {A}_{i}\) then Δ(X1, X2) < δ. Take the cover \(\epsilon = \frac {\delta }{4}\). The result then follows by an extension of Fact 4 above.

  4. d.

    In addition, by Facts 4 and c if \(X \in \mathcal {A}_{i}\) then Δ(X, Bi) < δ.

  5. e.

    δkj > k such that Δ(Bj, C) < δ by Lemma 6.4.


The result now follows because for all δ, there exists an i such that for all j > i we have Δ(Cj, Bj) < δ. 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 (Ci) 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 ith term in the sequence have a 1 in the ith 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.


Without loss of generality, assume the sequence (xi)i is contained in the unit interval. We know that at least one of the following sets contains infinitely many elements.
$$\{x_{i} : 0 \leq x_{i} < \frac{1}{2}\}, \{x_{i} :\frac{1}{2}\ <x_{i} \leq 1\}, \{ x_{i}: x_{i} = \frac{1}{2} \} $$
We can decide, for example, if the first set \(X=\{x_{i} : 0 \leq x_{i} < \frac {1}{2}\}\) is infinite by asking if \((\forall n)(\exists m>n)(\exists s)(x_{n,s} \in [2^{-s},\frac {1}{2}-2^{-s}))\), where xn, s is the sth term in the Cauchy name of xn.32 Similarly for the other two sets. Once we have identified one of the infinite sets, we extract an arbitrary element from it. Call this element y1. If \(y_{1}= \frac {1}{2}\) we are done. Otherwise, without loss of generality, assume \(y_{1} \in \{x_{i} : 0 \leq x_{i} < \frac {1}{2}\}\). Now repeat the process for the three sets:
$$\{x_{i} : 0 \leq x_{i} < \frac{1}{4}\}, \{x_{i} :\frac{1}{4}\ <x_{i} \leq \frac{1}{2}\}, \{ x_{i}: x_{i} = \frac{1}{4} \}. $$
Again, one of which must contain infinitely many elements.

Continuing in this manner, we obtain a subsequence y1, y2,…. 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 dX. We will call a collection of closed sets (Xi) computable if there exists an algorithm that uniformly gives the distance function of term Xi 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 (Xi)approximates a set X if ∀𝜖ij > iΔ(Xj, 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 (Xi)y-approximates a set X if ∀𝜖ij > iΔ(Xj, X) < 𝜖 and y can compute such an i for any 𝜖.

Definition 6.10

A collection of closed sets (Xi) is y-computable if there exists an algorithm computable in y that uniformly gives the distance function of set Xi for all i.

We give a lemma that will be useful later.

Lemma 6.11

If a sequence of closed sets (Xi) is y-computable, and (Xi)y-approximates a set X, then X is y-computable.


We need to show that y is sufficient to compute the distance function of X. That is, for any point x0, we will show y is sufficient to give a suitable nth term in a Cauchy name of dX(x0). The sequence (Xi)y-approximates the set X, so y is sufficient to compute an i such that for all j > i, Δ(Xj, X)<2−(n+1). Taking any j > i, y is sufficient to compute the distance function of Xj, 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 nth term in a Cauchy name of dX(x0).

The claim follows by two kinds of triangle inequality. However, as dX is not actually a metric, this may not be immediately apparent. We first show that
$$\begin{array}{@{}rcl@{}} d_{X}(x) \leq d_{X}(z) + d_{z}(x) \end{array} $$
$$\begin{array}{@{}rcl@{}} d_{x}(z) \leq d_{X}(z) + d_{X}(x) \end{array} $$
holds for all closed, bounded sets X and points x and z.
Equation (1):
$$\begin{array}{@{}rcl@{}} d_{X}(z) + d_{z}(x) &=& \inf_{t\in X} |t-z| + \inf_{t\in y} |t-x|\\ &=& \inf_{t\in X} |t-z|+|z-x|\\ &=& \min_{t\in X} |t-z|+|z-x| \text{ as \textit{X} compact }\\ &=& |w-z|+|z-x| \text{ for some \(w \in X\) }\\ &\geq& |w-x| \text{ as \(||\) a metric } \\ &\geq& \inf_{t\in X} |u-x| \\ &=&d_{X}(x)\\ \end{array} $$
Equation (2):
$$\begin{array}{@{}rcl@{}} d_{X}(z) + d_{X}(x) &=& \inf_{t\in X} |t-z| + \inf_{t\in X} |t-x|\\ &=& \min_{t\in X} |t-z|+\min_{t\in X} |t-x| \text{ as \textit{X} compact }\\ &=& |w_{1}-z|+|w_{2}-x| \text{ for some \(w_{1}, w_{2} \in X\) }\\ &\geq& |w_{1}-z|+|w_{1}-x| \text{ w.l.o.g. choosing \(w_{1}\) }\\ &\geq& |z-x| \text{ as distance is metric } \\ &=&d_{x}(z)\\ \end{array} $$

Proof of claim

\(q-2^{-(n+1)}<d_{X_{j}}(x_{0})<q+2^{-(n+1)}\). Therefore, there exists a point uXj such that q−2−(n+1) < |ux0| < q+2−(n+1). We are non-uniformly provided with x0, so we can check every computable point in Xj until we find one that satisfies q−2−(n+1) < |ux0| < q+2−(n+1). In addition, Δ(Xj, X)<2−(n+1), therefore every point xXj is within 2−(n+1) of some point in X, i.e. dX(u)<2−(n+1). These details are summarised in Fig. 6.
Fig. 6

Distances between x0, u, X, and Xj

We now apply (1),
$$\begin{array}{@{}rcl@{}} d_{X}(x_{0})&\leq& d_{X}(u) + d_{u}(x_{0}) \\ &=& d_{X}(u) + |u-x_{0}|\\ &<& 2^{-(n+1)} + q+2^{-(n+1)}\\ &<& 2^{-n} + q \end{array} $$
and (2),
$$\begin{array}{@{}rcl@{}} d_{X}(x_{0}) &\geq& d_{x_{0}}(z)-d_{X}(z)\\ &>& q-2^{-(n+1)} -2^{-(n+1)}\\ &=& q-2^{-n} \end{array} $$

Hence, q is a sufficient nth approximation of dX(x0) 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.


This result follows by evaluating the complexity of the sequence (Ci) 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 XY. So rather than asking at each stage whether the open ball bi in a cover does not intersect infinitely many of our convex sets (as in the original proof), we will instead use the closure of bi 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 Xi, at stage t, the set Xi, t (it is nice to think of these sets in Baire space).34 Let (Xi) 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 Xi in our current collection \(\mathcal {N}_{i}\) (as defined in Theorem 6.5) that do not intersect bi - 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) ((bi 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 (Ci) 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 RCA0 [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 (xi)icontained 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 x0, x1,… 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 y0, y1,… be a 0 computable sequence. This means we are not truly ‘given’ the terms in the sequence y0, y1,… but rather 0 computable Cauchy names converging to each of these terms. y0,0, y0,1, y0,2… ‘converging’ to, for example, y0 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 yi.

At stage 0, we observe y0,0, y1,0, y2,0… and assume at this point that y0, y1,… 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 y0,0. Whichever half y0,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 y1,1. Whichever half y1,1 is in, we choose x1 to be in the other. For example, perhaps \(y_{1,1}= \frac {1}{4}\), then we could choose \(x_{1}= \frac {3}{4}\) (if y1,1 is not in the same half as x0, we simply set x1 = x0). Continuing this process, we know that the sequence y0,n, y1,n,… must eventually get close to yn. Therefore, if y0, y1,… actually converges, avoiding the sequence y0,0, y1,1, y2,2,…,yn, n,… will be sufficient to avoid it too. If y0, y1,… does not converge, then (xi)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 (xi)i that has no accumulation points computable by the 0 sequence y0, y1,….

We will now extend this argument by describing how to, in addition to the sequence above, avoid a second 0 computable sequence w0, w1,…. At stage 0 we now consider both y0,0 and w0,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 w0,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 x0 that avoids both the half and quarter which y0,0 and w0,0 are members of respectively. Continuing on in this manner (next checking y1,1 and w1,1), we can build a sequence (xi)i that avoids the sequences (yi)i and (wi)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 nth approximation of each of the nth terms in these n sequences, and avoid them by choosing a point xn 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 xi. By dovetailing, our sequence (xi)i will avoid the limit point (if it exists) of every 0 sequence.

Because 0 is not sufficient to compute any of (xi)i’s accumulation points, it follows that no subsequence of (xi)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

0is not sufficient to decide the convexity of a closed set A in Cantor space.


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 As, 0 declares that A is convex. Call a branch in Asactive 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.

Choose an appropriate active branch in As such that killing this branch will prevent A from being convex. It must be an active branch with at least one active branch to the left and right of it. We then declare this branch dead. We have now removed an open ball entirely contained in As so that As+1 threatens to be non-convex (it has a hole!). Figure 7 shows A at stage s and Fig. 8A at stage s+1.
Fig. 7

Tree at stage s

Fig. 8

Tree at stage s+1

Now suppose that 0 observes As+1, and states that A is now not convex. We then choose an appropriate collection of branches to kill in order to ensure that As+2 again looks convex. Figure 9 shows A at stage s+2.
Fig. 9

Tree at stage s+2

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

0is 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.


Suppose A is an effectively closed subset of \(\mathbb {R}^{n}\). The set A fails to be convex when an open ball falls out of A, and there exist two points in A such that the line segment connecting them has a non-empty intersection with the open ball that was removed. See Fig. 10.
Fig. 10

If A not convex

We claim that 0 is sufficient to eventually determine if A is not convex. Let B be an open ball with rational center point and radius such that BAs−1, but BAs = , where As is the set A at stage s. Finitely cover the space As within s of the ball B with open balls whose center points are rational, and of some appropriate small rational radius \(\epsilon \in \mathbb {Q}\). For each pair of balls Bi and Bj in this cover, ask if for all \(x \in \overline {B_{i}}\) and \(y \in \overline {B_{j}}\), the line segment connecting x and y intersects B. This is decidable in 0. See Fig. 11. Enumerate every such pair of balls into a set X.
Fig. 11

Does B threaten A’s convexity?

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 Bi and Bj that were enumerated (as a pair) into X. A fails to be convex if both Bi and Bj 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. □


  1. 1.

    In this year Richard Dedekind developed Dedekind cuts which gave an equivalent definition of the real numbers.

  2. 2.

    This list is a sample, and by no means exhaustive. For further contributions, see reference list.

  3. 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. 4.

    Both equivalences follow by well-known isomorphisms.

  5. 5.

    In the case of sets, A is a \({{\Sigma }_{1}^{0}}\) subset of \(\mathbb {N}\) if A can be expressed as xA iff ∃nR(x, n) where R is a computable predicate on \(\mathbb {N \times N}\).

  6. 6.

    For English translation of [22], see [23]. For an English translation of [36], see [37]. For an English translation of [46], see [47]. For an English translation of [70], see [71].

  7. 7.

    Quotes and comments from Borel’s paper [11] are based on a translation (French to English) by Avigad and Brattka [3].

  8. 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. 9.

    Define a function ϕ(m, n) = f(x)n, where f(x)n is the nth 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. 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. 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, UseA(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. 12.

    Hertling has also written other papers about Banach-Mazur computability, notably ‘Banach-Mazur computable functions on metric Spaces’ [38].

  13. 13.

    An English translation of this paper can be found in [10].

  14. 14.

    It may be that this result appeared earlier that in the text given.

  15. 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 nth approximation of f(x), then by the Use Principle, this is also a sufficient nth approximation of f(y) for any real y ∈ (xm−2m,xm+2m). That is, the interval (xm−2m,xm+2m) maps into the interval (f(x)n−2n,f(x)n+2n).

  16. 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. 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. 18.

    We can not just take the open balls B((an, bn),2−(n)) and B((an, f(a)n),2−(n)) here because the point (a, b) and (a, f(a)) may actually fall outside of these balls.

  19. 19.

    Note that \(d_{{\Gamma }_{f}, n}((a,b))\leq |f(x)_{n+2} - y_{n+2}|+2^{-(n+1)} =g(n,0)\).

  20. 20.

    If we were asked to evaluate u at this stage, defer to Stage 2.

  21. 21.

    An English translation of this paper can be found in [10].

  22. 22.

    He formed this example while preparing for lectures [20].

  23. 23.

    Folklore or any early text in recursive analysis.

  24. 24.

    ‘Computable’ is intended again in the classical sense here.

  25. 25.

    This example is similar to an example of a real-valued canonical Darboux function given in [7].

  26. 26.

    The paper cited here, ‘Kreis und Kugel’, is written in German and has not been translated into English. A number of secondary sources confirmed this reference, for example [40] and [34].

  27. 27.

    An English translation of this paper can be found in [10].

  28. 28.

    Weierstrass published relatively little in his lifetime, but some of his original works can be found in [72]. See [29] for historical information.

  29. 29.

    Metric sourced from [28].

  30. 30.

    Notice we are using two different metrics here. Recall that d was defined earlier; dX(xi)= infxX|xxi|.

  31. 31.

    The jump is considered as a set here again.

  32. 32.

    Notice that xn 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. 33.

    This is just a more convenient reformulation of Definition 6.2.2.

  34. 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 dX(x). If the nth approximation of dX(x) is ever greater than 2n, kill the branch that extends however much of the Cauchy name of x we have seen.



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.


  1. 1.
    Aberth, O.: Computable analysis McGraw-Hill International Book Company (1980)Google Scholar
  2. 2.
    Aberth, O.: Computable calculus Academic Press (2001)Google Scholar
  3. 3.
    Avigad, J., Brattka, V.: Computability and analysis: the legacy of Alan Turing (2012)Google Scholar
  4. 4.
    Banach, S., Mazur, S.: Sur les fonctions calculables. Ann. Soc Pol. de Math 16, 223 (1937)Google Scholar
  5. 5.
    Bishop, E.: Foundations of Constructive Analysis. Academic Press, New York (1967)MATHGoogle Scholar
  6. 6.
    Blaschke, W.: Kreis Und Kugel. Veit, Berlin (1916)MATHGoogle Scholar
  7. 7.
    Bogoşel, B.: Functions with the intermediate value property. Romanian Mathematical Gazette Series A, 1–2 (2012)Google Scholar
  8. 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. 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. 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. 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. 12.
    Bourgain, J.: On convergent sequences of continuous functions. Bull. Soc. Math. Belg. Sé,r. B 32(2), 235–249 (1980)MathSciNetMATHGoogle Scholar
  13. 13.
    Brattka, V., Hertling, P., Weihrauch, K.: A tutorial on computable analysis. New Comp. Parad., 425–491 (2008)Google Scholar
  14. 14.
    Braverman, M., Yampolsky, M.: Computability of Julia sets. Springer, Berlin (2009)MATHGoogle Scholar
  15. 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. 16.
    Brouwer, L.: Collected Works, Vol I - Philosophy and Foundations of Mathematics. American Elsevier Publishing Company, Amsterdam (1975)MATHGoogle Scholar
  17. 17.
    Bruckner, A., Ceder, J., Weiss, M.: Uniform limits of Darboux functions. Coll Math. 15, 65–77 (1966)MathSciNetMATHGoogle Scholar
  18. 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. 19.
    Ceitin, G.: Algorithmic operators in constructive metric spaces. Tr. Math. Inst. Steklov. 67, 295–361 (1962)MathSciNetGoogle Scholar
  20. 20.
    Conway, J.: Explanation given at Canada/USA Mathcamp (2013)Google Scholar
  21. 21.
    Darboux, G.: Mémoire sur les fonctions discontinues. Ann. Sci. Scuola Norm. 4, 57–122 (1875)Google Scholar
  22. 22.
    Dehn, M.: Transformation der Kurven auf zweiseitigen flächen. Math. Ann. 72(3), 413–421 (1912)MathSciNetCrossRefMATHGoogle Scholar
  23. 23.
    Dehn, M., Stillwell, J. (translator): In Papers on group theory and topology, pp 179–199. Springer, New York Inc (1987)Google Scholar
  24. 24.
    Demuth, O.: Necessary and sufficient conditions for Riemann integrability of constructive functions. Dokl. Akad Nauk SSSR 176, 757–758 (1967)MathSciNetMATHGoogle Scholar
  25. 25.
    Downey, R. (ed.): Turing’s Legacy: Developments from Turing’s ideas in logic. Cambridge University Press, Cambridge (2014)Google Scholar
  26. 26.
    Downey, R. G., Hirschfeldt, D. R.: Algorithmic randomness and complexity. Springer (2010)Google Scholar
  27. 27.
    Edwards, C.H. Jr.: The Historical Development of Calculus. Springer (1979)Google Scholar
  28. 28.
    Eggleston, H.: Convexity. Cambridge University Press, Cambridge (1977)MATHGoogle Scholar
  29. 29. Weierstrass, Karl Theodor Wilhelm (2008)Google Scholar
  30. 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. 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. 32.
    Goodstein, R.: Recursive analysis. Dover Publications (Reprint 2010) Amsterdam (1961)Google Scholar
  33. 33.
    Gordon, R.: The integrals of Lebesgue, Denjoy, Perron, and Henstock (vol. 4). Amer. Math. Soc. (1994)Google Scholar
  34. 34.
    Gruber, P., Wills, J. (eds.): Handbook of Convex Geometry Volume A. Elsevier Science Publishers B.V., Amsterdam (1993)Google Scholar
  35. 35.
    Grzegorczyk, A.: Computable functionals. Fund. Math. 42, 168–202 (1955)MathSciNetMATHGoogle Scholar
  36. 36.
    Hermann, G.: Die frage der endlich vielen schritte in der theorie der polynomideale. Math. Ann. 95, 736–788 (1926)MathSciNetCrossRefMATHGoogle Scholar
  37. 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. 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. 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. 40.
    Ivanov, A.: Blaschke selection theorem (2014)Google Scholar
  41. 41.
    Kleene, S: Introduction to metamathematics. Ishi Press (reprint 2009)Google Scholar
  42. 42.
    Kleene, S.: Countable functionals. North-Holland Publishing Company, Amsterdam (1959)MATHGoogle Scholar
  43. 43.
    Kreisel, G.: Review of Meschkowski - Zur rekursiven funktionentheorie. Acta Math. 95, 9–23 (1956)MathSciNetCrossRefGoogle Scholar
  44. 44.
    Kreisel, G.: Review of Meschkowski - Zur rekursiven funktionentheorie. Math. Reviews 19, 238 (1958)Google Scholar
  45. 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. 46.
    Kronecker, L.: Grundzüge einer arithmetischen theorie der algebraischen grossen. J. Reine Angew. Math. 92, 1–123 (1882)MathSciNetMATHGoogle Scholar
  47. 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. 48.
    Kushner, B.: Lectures on constructive mathematical analysis, volume 60 American Mathematical Society (1980)Google Scholar
  49. 49.
    Kuyper, R.: Effective genericity and differentiability. J. Log. Anal. 6(4), 1–14 (2014)MathSciNetCrossRefMATHGoogle Scholar
  50. 50.
    Kuyper, R., Sebastiaan, A.T.: Effective genericity and differentiability. J. Log. Anal. 6(4), 14 (2014)MathSciNetMATHGoogle Scholar
  51. 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. 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. 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. 54.
    Markov, A.: On the continuity of constructive functions. Uspehi Mat. Nauk 9, 226–230 (1954)MathSciNetMATHGoogle Scholar
  55. 55.
    Markov, A.: On constructive functions. Trudy Math. Inst. Steklov. 52, 315–348 (1958)MathSciNetMATHGoogle Scholar
  56. 56.
    Miller, J.: Degrees of unsolvability of continuous functions. J. Symb. Log. 69 (2), 555–584 (2004)MathSciNetCrossRefMATHGoogle Scholar
  57. 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. 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. 59.
    Pour-El, M., Richards, J.: Computability in analysis and physics. Springer, Heidelberg (1989)CrossRefMATHGoogle Scholar
  60. 60.
    Radcliffe, D.: A function that is surjective on every interval. Math. Ass. Amer. 123(1), 1–2 (2016)MathSciNetCrossRefMATHGoogle Scholar
  61. 61.
    Rice, H.: Recursive real numbers. Proc. Amer. Math. Soc. 5, 784–791 (1954)MathSciNetCrossRefMATHGoogle Scholar
  62. 62.
    Robert I.S.: Recursively enumerable sets and degrees. Springer, New Inc., New York, NY USA (1987)Google Scholar
  63. 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. 64.
    Simpson, S.: Subsystems of second order arithmetic. Cambridge University Press, New York (2009)CrossRefMATHGoogle Scholar
  65. 65.
    Specker, E.: Nicht konstruktiv beweisbare satze der analysis. J. Symb. Log. 14, 145–158 (1949)CrossRefMATHGoogle Scholar
  66. 66.
    Specker, E.: Der satz vom maximum in der rekursiven analysis. Construc. Math. Proc., Coll:254–265 (1959)Google Scholar
  67. 67.
    Turing, A.: On computable numbers, with an application to the Entsheidungsproblem. Proc. London Math. Sc. 42, 230–265 (1936)MATHGoogle Scholar
  68. 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. 69.
    Van Rooij, A., Schikhof, W.: A second course on real functions. Cambridge University Press (1982)Google Scholar
  70. 70.
    von Mises, R.: Grundlagen der wahrscheinlichkeitsrechnung. Math. Z. 5, 52–99 (1919)MathSciNetCrossRefMATHGoogle Scholar
  71. 71.
    von Mises, R.: Richard von Mises, probability, statistics, and truth. Dover Publications (reprint, original Springer: 1928) New York (1957)Google Scholar
  72. 72.
    Weierstrass, K.: Original Works. Weierstrass’ writings were published as Mathematische Werke. 7 vols. Berlin. 1894-1927Google Scholar
  73. 73.
    Zaslavsky, I.: The refutation of some theorems of classical analysis in constructive analysis. Uspehi Mat. Nauk 10, 209–210 (1955)Google Scholar
  74. 74.
    Zaslavsky, I.: Some properties of constructive real numbers and constructive functions. Trudy Math. Inst. Steklov 67, 385–457 (1962)MathSciNetGoogle Scholar

Copyright information

© Springer Science+Business Media New York 2016

Authors and Affiliations

  1. 1.School of Mathematics and StatisticsVictoria UniversityWellingtonNew Zealand

Personalised recommendations