In mathematics and computer science, computable analysis is the study of mathematical analysis from the perspective of computability theory. It is concerned with the parts of real analysis and functional analysis that can be carried out in a computable manner. The field is closely related to constructive analysis and numerical analysis.
A notable result is that integration (in the sense of the Riemann integral) is computable.[1] This might be considered surprising as an integral is (loosely speaking) an infinite sum. While this result could be explained by the fact that every computable function from to is uniformly continuous, the notable thing is that the modulus of continuity can always be computed without being explicitly given. A similarly surprising fact is that differentiation of complex functions is also computable, while the same result is false for real functions; see § Basic results.
The above motivating results have no counterpart in Bishop's constructive analysis. Instead, it is the stronger form of constructive analysis developed by Brouwer that provides a counterpart in constructive logic.
A popular model for doing computable analysis is Turing machines. The tape configuration and interpretation of mathematical structures are described as follows.
A Type 2 Turing machine is a Turing machine with three tapes: An input tape, which is read-only; a working tape, which can be written to and read from; and, notably, an output tape, which is "append-only".
In this context, real numbers are represented as arbitrary infinite sequences of symbols. These sequences could for instance represent the digits of a real number. Such sequences need not be computable — this freedom is both an important one and philosophically unproblematic.[2] Note that the programs that act on these sequences do need to be computable in a reasonable sense.
In the case of real numbers, the usual decimal or binary representations are not appropriate. Instead a signed digit representation first suggested by Brouwer often gets used: The number system is base 2, but the digits are (representing ), 0 and 1. In particular, this means can be represented both as and .
To understand why decimal notation is inappropriate, consider the problem of computing where and , and giving the result in decimal notation. The value of is either or . If the latter result were given for instance, then a finite number of digits of would be read before choosing the digit before the decimal point in — but then if the th digit of were decreased to 2, then the result for would be wrong. Similarly, the former choice for would be wrong sometimes. This is essentially the tablemaker's dilemma.
As well as signed digits, there are analogues of Cauchy sequences and Dedekind cuts that could in principle be used instead.
Computable functions are represented as programs on a Type 2 Turing machine. A program is considered total (in the sense of a total function as opposed to partial function) if it takes finite time to write any number of symbols on the output tape regardless of the input. A total program runs forever, generating increasingly more digits of the output.
Results about computability associated with infinite sets often involve namings, which are maps between those sets and recursive representations of subsets thereof. A naming on a set gives rise to a topology over that set, as elaborated upon below.
Type 1 computability is the naive form of computable analysis in which one restricts the inputs to a machine to be computable numbers instead of arbitrary real numbers.
The difference between the two models lies in the fact that a program that is well-behaved over computable numbers (in the sense of being total) is not necessarily well-behaved over arbitrary real numbers. For instance, there are computable functions over the computable real numbers that map some bounded closed intervals to unbounded open intervals.[3] These functions cannot be extended to arbitrary real numbers (without making them partial), as all computable functions are continuous, and this would then violate the extreme value theorem. Since that sort of behaviour could be considered pathological, it is natural to insist that a function should only be considered total if it is total over all real numbers, not just the computable ones.
In the event that one is unhappy with using Turing machines (on the grounds that they are low level and somewhat arbitrary), there is a realisability topos called the Kleene–Vesley topos in which one can reduce computable analysis to constructive analysis. This constructive analysis includes everything that is valid in the Brouwer school, and not just the Bishop school.[4] Additionally, a theorem in this school of constructive analysis is that not all real numbers are computable, which is constructively non-equivalent to there exist uncomputable numbers. This school of constructive analysis is therefore in direct contradiction to schools of constructive analysis — such as Markov's — which claim that all functions are computable. It ultimately shows that while constructive existence implies computability, it is in fact unproblematic — even useful — to assert that not every function is computable.
One of the basic results of computable analysis is that every computable function from to is continuous.[5] Taking this further, this suggests that there is an analogy between basic notions in topology and basic notions in computability:
The analogy suggests that general topology and computability are nearly mirror images of each other. The analogy has been made rigorous in the case of locally compact spaces.[7] This has resulted in the creation of sub-areas of general topology like domain theory which study topological spaces very unlike the Hausdorff spaces studied by most people in mathematical analysis — these spaces become natural under the analogy.