In
mathematical logic
Mathematical logic is the study of formal logic within mathematics. Major subareas include model theory, proof theory, set theory, and recursion theory. Research in mathematical logic commonly addresses the mathematical properties of formal ...
and
computer science
Computer science is the study of computation, automation, and information. Computer science spans theoretical disciplines (such as algorithms, theory of computation, information theory, and automation) to practical disciplines (includi ...
, a general recursive function, partial recursive function, or μ-recursive function is a
partial function
In mathematics, a partial function from a set to a set is a function from a subset of (possibly itself) to . The subset , that is, the domain of viewed as a function, is called the domain of definition of . If equals , that is, if is de ...
from
natural number
In mathematics, the natural numbers are those numbers used for counting (as in "there are ''six'' coins on the table") and ordering (as in "this is the ''third'' largest city in the country").
Numbers used for counting are called ''cardinal ...
s to natural numbers that is "computable" in an intuitive sense – as well as in a
formal one. If the function is total, it is also called a total recursive function (sometimes shortened to recursive function). In
computability theory, it is shown that the μ-recursive functions are precisely the functions that can be computed by
Turing machine
A Turing machine is a mathematical model of computation describing an abstract machine that manipulates symbols on a strip of tape according to a table of rules. Despite the model's simplicity, it is capable of implementing any computer algori ...
s (this is one of the theorems that supports the
Church–Turing thesis). The μ-recursive functions are closely related to
primitive recursive function
In computability theory, a primitive recursive function is roughly speaking a function that can be computed by a computer program whose loops are all "for" loops (that is, an upper bound of the number of iterations of every loop can be determined ...
s, and their inductive definition (below) builds upon that of the primitive recursive functions. However, not every total recursive function is a primitive recursive function—the most famous example is the
Ackermann function.
Other equivalent classes of functions are the functions of
lambda calculus and the functions that can be computed by
Markov algorithm
In theoretical computer science, a Markov algorithm is a string rewriting system that uses grammar-like rules to operate on strings of symbols. Markov algorithms have been shown to be Turing-complete, which means that they are suitable as a gener ...
s.
The subset of all ''total'' recursive functions with values in is known in
computational complexity theory
In theoretical computer science and mathematics, computational complexity theory focuses on classifying computational problems according to their resource usage, and relating these classes to each other. A computational problem is a task solved ...
as the
complexity class R.
Definition
The μ-recursive functions (or general recursive functions) are partial functions that take finite tuples of natural numbers and return a single natural number. They are the smallest class of partial functions that includes the initial functions and is closed under composition, primitive recursion, and the
μ operator
In computability theory, the μ-operator, minimization operator, or unbounded search operator searches for the least natural number with a given property. Adding the μ-operator to the five primitive recursive operators makes it possible to define ...
.
The smallest class of functions including the initial functions and closed under composition and primitive recursion (i.e. without minimisation) is the class of
primitive recursive functions
In computability theory, a primitive recursive function is roughly speaking a function that can be computed by a computer program whose loops are all "for" loops (that is, an upper bound of the number of iterations of every loop can be determined ...
. While all primitive recursive functions are total, this is not true of partial recursive functions; for example, the minimisation of the successor function is undefined. The primitive recursive functions are a subset of the total recursive functions, which are a subset of the partial recursive functions. For example, the
Ackermann function can be proven to be total recursive, and to be non-primitive.
Primitive or "basic" functions:
#''Constant functions '': For each natural number and every
#::
#:Alternative definitions use instead a ''zero function'' as a primitive function that always returns zero, and build the constant functions from the zero function, the successor function and the composition operator.
# ''Successor function S:''
#::
# ''Projection function''
(also called the ''Identity function''): For all natural numbers
such that
:
#::
Operators (the
domain of a function
In mathematics, the domain of a function is the set of inputs accepted by the function. It is sometimes denoted by \operatorname(f) or \operatornamef, where is the function.
More precisely, given a function f\colon X\to Y, the domain of is . ...
defined by an operator is the set of the values of the arguments such that every function application that must be done during the computation provides a well-defined result):
# ''Composition operator''
(also called the ''substitution operator''): Given an m-ary function
and m k-ary functions
:
#::
#:This means that
is defined only if
and
are all defined.
# ''Primitive recursion operator'' : Given the ''k''-ary function
and ''k''+2 -ary function
:
#::
#:This means that
is defined only if
and
are defined for all