Computable function
please note:
- the text and code below is from The Pseudopedia
- it has been imported raw for GetWiki
{{redirect|Total recursive function|other uses of the term "recursive function"|Recursive function}}
Computable functions are the basic objects of study in
computability theory. The set of computable functions is equivalent to the set of
Turing-computable functions and
partial recursive functions. Computable functions are the formalized analogue of the intuitive notion of
algorithm. They are used to discuss computability without referring to any concrete
model of computation such as
Turing machines or
register machines. Their definition, however, must make reference to some specific model of computation. Before the precise definition of computable function,
mathematicians often used the informal term
effectively computable. This term has since come to be identified with the computable functions. Note that the effective computability of these functions does not imply that they can be
efficiently computed (i.e. computed within a reasonable amount of time). In fact, for some effectively computable functions it can be shown that any algorithm that computes them will be very inefficient in the sense that the running time of the algorithm increases
exponentially (or even
superexponentially) with the length of the input. The fields of
feasible computability and
computational complexity study functions that can be computed efficiently.According to the
Church-Turing thesis, computable functions are exactly the functions that can be calculated using a mechanical calculation device given unlimited amounts of time and storage space. Equivalently, this thesis states that any function which has an
algorithm is computable.The
Blum axioms can be used to define an abstract
computational complexity theory on the set of computable functions. In computational complexity theory, the problem of determining the complexity of a computable function is known as a
function problem.
Definition
There are many equivalent ways to define the class of computable functions. For concreteness, the remainder of this article will assume that
computable functions have been defined as those
finitary partial functions on the
natural numbers that can be calculated by a
Turing machine. There are many equivalent models of computation that define the same class of computable functions. These
models of computation include
and others.Each computable function
f
takes a fixed number of natural numbers as arguments. Because the functions are partial, they may not be defined for every possible choice of input. If a computable function is defined then it returns a single natural number as output (this output can be interpreted as a list of numbers using a
pairing function). These functions are also called
partial recursive functions. In computability theory, the
domain of a function is taken to be the set of all inputs for which the function is defined.A function which is defined for all arguments is called
total. If a computable function is total, it is called a
total computable function or
total recursive function.The notation
f(xarg∈-→(:4(x;font-size:12(x;">1lderiv(⋅)sxarg∈-→(:4(x;font-size:12(x;">k) ⇓
indicates that the partial function
f
is defined on arguments
xarg∈-→(:4(x;font-size:12(x;">1lderiv(⋅)sxarg∈-→(:4(x;font-size:12(x;">k
, and the notation
f(xarg∈-→(:4(x;font-size:12(x;">1lderiv(⋅)sxarg∈-→(:4(x;font-size:12(x;">k) ⇓ = y
indicates that
f
is defined on the arguments
xarg∈-→(:4(x;font-size:12(x;">1lderiv(⋅)sxarg∈-→(:4(x;font-size:12(x;">k
and the value returned is
y
.
Characteristics of computable functions
The basic characteristic of a computable function is that there must be a finite procedure (an
algorithm) telling how to compute the function. The models of computation listed above give different interpretations of what a procedure is and how it is used, but these interpretations share many properties. The fact that these models give equivalent classes of computable functions stems from the fact that each model is capable of reading and mimicking a procedure for any of the other models, much as a
compiler is able to read instructions in one computer language and emit instructions in another language.Enderton [1977] gives the following characteristics of a procedure for computing a computable function; similar characterizations have been given by Turing [1936], Rogers [1967], and others.
- “There must be exact instructions (i.e. a program), finite in length, for the procedure.”
Thus every computable function must have a finite program that completely describes how the function is to be computed. It is possible to compute the function by just following the instructions; no guessing or special insight is required.
- “If the procedure is given a k-tuple x in the domain of f, then after a finite number of discrete steps the procedure must terminate and produce f(x).”
Intuitively, the procedure proceeds step by step, with a specific rule to cover what to do at each step of the calculation. Only finitely many steps can be carried out before the value of the function is returned.
- “If the procedure is given a k-tuple x which is not in the domain of f, then the procedure might go on forever, never halting. Or it might get stuck at some point, but it must not pretend to produce a value for f at x.”
Thus if a value for
f(x) is ever found, it must be the correct value. It is not necessary for the computing agent to distinguish correct outcomes from incorrect ones because the procedure is always correct when it produces an outcome.Enderton goes on to list several clarifications of these requirements of the procedure for a computable function:
- The procedure must theoretically work for arbitrarily large arguments. It is not assumed that the arguments are smaller than the number of atoms in the Earth, for example.
- The procedure is required to halt after finitely many steps in order to produce an output, but it may take arbitrarily many steps before halting. No time limitation is assumed.
- Although the procedure may use only a finite amount of storage space during a successful computation, there is no bound on the amount of space that is used. It is assumed that additional storage space can be given to the procedure whenever the procedure asks for it.
The field of
computational complexity studies functions with prescribed bounds on the time and/or space allowed in a successful computation.
Computable sets and relations
A set
A of natural numbers is called
computable (synonyms:
recursive,
decidable) if there is a computable function
f such that for each number
n,
f(n) ⇓ = 1
if
n is in
A and
f(n) ⇓ = 0
if
n is not in
A.A set of natural numbers is called
computably enumerable (synonyms:
recursively enumerable,
semidecidable) if there is a computable function
f such that for each number
n,
f(n) is defined
if and only if n is in the set. Thus a set is computably enumerable if and only if it is the domain of some computable function. The word
enumerable is used because the following are equivalent for a nonempty subset
B of the natural numbers:
- B is the domain of a computable function.
- B is the range of a total computable function. If B is infinite then the function can be assumed to be injective.
If a set
B is the range of a function
f then the function can be viewed as anenumeration of
B, because the list
f(0),
f(1), ... will include every element of
B.Because each
finitary relation on the natural numbers can be identified with a corresponding set of finite sequences of natural numbers, the notions of
computable relation and
computably enumerable relation can be defined from their analogues for sets.
Formal languages
''In
computability theory in computer science, it is common to consider
formal languages. An
alphabet is an arbitrary set. A
word on an alphabet is a finite sequence of symbols from the alphabet; the same symbol may be used more than once. For example, binary strings are exactly the words on the alphabet
01
. A
language is a subset of the collection of all words on a fixed alphabet. For example, the collection of all binary strings that contain exactly 3 ones is a language over the binary alphabet.A key property of a formal language is the level of difficulty required to decide whether a given word is in the language. Some coding system must be developed to allow a computable function to take an arbitrary word in the language as input; this is usually considered routine. A language is called
computable (synonyms:
recursive,
decidable) if there is a computable function
f
such that for each word
w over the alphabet,
f(w) ⇓ = 1
if the word is in the language and
f(w)⇓ = 0
if the word is not in the language. Thus a language is computable just in case there is a procedure that is able to correctly tell whether arbitrary words are in the language.A language is
computably enumerable (synonyms:
recursively enumerable,
semidecidable) if there is a computable function
f such that
f(w)
is defined if and only if the word
w is in the language. The term
enumerable has the same etymology as in computably enumerable sets of natural numbers.
Examples
The following functions are computable:
- Each function with a finite domain; e.g., any finite sequence of natural numbers.
- The function which gives the list of prime factors of a number.
If
f and
g are computable, then so are:
f + g,
f * g,
f ο g
if
f is unary, max(
f,
g), min(
f,
g), argmin{
y≤
f(x)} and many more combinations.The following examples illustrate that a function may be computable though it is not known which algorithm computes it.
- The function f such that f(n) = 1 if there is a sequence of n consecutive fives in the decimal expansion of π, and f(n) = 0 otherwise, is computable. (The function f is either the constant 1 function, which is computable, or else there is a k such that f(n) = 1 if n < k and f(n) = 0 if n ≥ k. Every such function is computable. It is not known whether there are arbitrarily long runs of fives in the decimal expansion of π, so we don't know which of those functions is f. Nevertheless, we know that the function f must be computable.)
- Each finite segment of an incomputable sequence of natural numbers (such as the Busy Beaver function Σ) is computable. E.g., for each natural number n, there exists an algorithm that computes the finite sequence Σ(0), Σ(1), Σ(2), ..., Σ(n) — in contrast to the fact that there is no algorithm that computes the entire Σ-sequence, i.e. Σ(n) for all n. Thus, "Print 0, 1, 4, 6, 13" is a trivial algorithm to compute Σ(0), Σ(1), Σ(2), Σ(3), Σ(4); similarly, for any given value of n, such a trivial algorithm exists (even though it may never be known or produced by anyone) to compute Σ(0), Σ(1), Σ(2), ..., Σ(n).
Church-Turing thesis
The
Church-Turing thesis states that any function computable from a procedure possessing the three properties listed above is a computable function. Because these three properties are not formally stated, the Church-Turing thesis cannot be proved. The following facts are often taken as evidence for the thesis:
- Many equivalent models of computation are known, and they all give the same definition of computable function (or a weaker version, in some instances).
- No stronger model of computation which is generally considered to be effectively calculable has been proposed.
The Church-Turing thesis is sometimes used in proofs to justify that a particular function is computable by giving a concrete description of a procedure for the computation. This is permitted because it is believed that all such uses of the thesis can be removed by the tedious process of writing a formal procedure for the function in some model of computation.
Incomputable functions and unsolvable problems
Every computable function has a finite procedure telling how to compute it.So there are only countably many computable functions.
That is, let
Σ
be a finite set of symbols. For example
Σ = 01
.Then let
Σarg∈-→(:-4(x;font-size:12(x;">*
be the set of all strings composed of symbols from
Σ
including the empty string.So
Σarg∈-→(:-4(x;font-size:12(x;">*
is an infinite set and in this example
e&(lusmn;tyset ∈ Σarg∈-→(:-4(x;font-size:12(x;">* 0 ∈ Σarg∈-→(:-4(x;font-size:12(x;">* 1 ∈ Σarg∈-→(:-4(x;font-size:12(x;">* 00 ∈ Σarg∈-→(:-4(x;font-size:12(x;">* lderiv(⋅)s.
Any infinite subset
S &su(; Σarg∈-→(:-4(x;font-size:12(x;">*
is countable. Because the elements of
S
can be sorted by length and placed in bijection to the natural numbers.The set of all programs for a given computer is a subset of
Σarg∈-→(:-4(x;font-size:12(x;">*
. So the set of all programs for a given computer is countable. So the set of computable functions is countable.The real numbers are uncountable so most real numbers are not computable. See
computable number.The set of finitary functions on the natural numbers is uncountable so most are not computable. The
Busy beaver function is a concrete example of such a function. Similarly, most subsets of the natural numbers are not computable. The
Halting problem was the first such set to be constructed. The
Entscheidungsproblem, proposed by
David Hilbert, asked whether there is an effective procedure to determine which mathematical statements (coded as natural numbers) are true. Turing and Church independently showed in the 1930s that this set of natural numbers is not computable. According to the Church-Turing thesis, there is no effective procedure (with an algorithm) which can perform these computations.
Extensions of computability
The notion of computability of a function can be
relativized to an arbitrary
set of
natural numbers
A, or equivalently to an arbitrary function
f from the naturals to the naturals, by using
Turing machines (or any other model of computation) extended by an
oracle for
A or
f. Such functions may be called
A-computable or
f-computable respectively. Although the Church-Turing thesis states that the computable functions include all functions with algorithms, it is possible to consider broader classes of functions that relax the requirements that algorithms must possess. The field of
Hypercomputation studies methods and procedures that can solve non-algorithmically decidable problems.
Hyperarithmetical theory studies a different extension of standard computability. Even more general recursion theories have been studied, such as
E-recursion theory in which any set can be used as an argument to an E-recursive function.
See also
References
- Enderton, H.B. Elements of recursion theory. Handbook of Mathematical Logic (North-Holland 1977) pp. 527–566.
- Rogers, H. Theory of recursive functions and effective computation (McGraw-Hill 1967).
- Turing, A. (1936), On Computable Numbers, With an Application to the Entscheidungsproblem. Proceedings of the London Mathematical Society, Series 2, Volume 42 (1936). Reprinted in M. Davis (ed.), The Undecidable, Raven Press, Hewlett, NY, 1965.
BerechenbarkeitFunción computableFonction calculableFunzione calcolabile計算可能関数Computable functionFunkcja obliczalnaВычислимая функция可计算函数
- content above as imported from The Pseudopedia
- "Computable function" does not exist on GetWiki
- time: 2:54pm EDT - Fri, Mar 19 2010