{{위키데이터 속성 추적}}
{{소문자|title=μ-재귀 함수}}
[[수리논리학]] 및 [[컴퓨터 과학]]에서 '''μ-재귀 함수'''({{llang|en|μ-recursive function}}) 또는 간단히 '''재귀 함수'''란, [[자연수]]에서 자연수로의 '계산가능한' [[부분 함수]]이다. [[재귀 이론]]에서는, μ-재귀 함수와 [[튜링 기계]]로 계산가능한 함수가 일치하는 것임이 알려져 있다. 유명한 예로 [[피보나치 수]] 등이 있다.

μ-재귀 함수는 [[원시 재귀 함수]]와 밀접한 관련이 있으며, 그 재귀적(귀납적) 정의가 원시 재귀 함수에 기초하고 있다. 다만, μ재귀함수가 모두 원시 재귀 함수인 것은 아닌데, 그러한 예로 [[아커만 함수]] 등이 있다.

또 재귀함수와 일치하는 개념으로는, [[람다 계산]]에서 쓰이는 재귀함수나 [[마르코프 알고리즘]](Markov algorithms)으로 계산가능한 함수 등이 있다.

전역 μ-재귀 함수를 모은 클래스는 복잡도 클래스 [[R (복잡도)|R]]과 같다. 이는 [[PR (복잡도)|PR]]을 포함한다.

== 정의 ==
μ-재귀 함수란, 유한 개의 자연수의 튜플을 취하여 1개의 자연수를 내어놓는 부분 함수를 가리키는 말로, 이들의 클래스는 초등함수를 포함하면서 합성, 원시재귀, μ작용소(μ연산자)에 대하여 닫혀 있는 [[부분 함수]]의 클래스 중 최소의 것이다.

[[원시 재귀 함수]]와 똑같은 방식으로 정의되지만, 전역 함수이며 μ 연산자가 추가되어 있다는 점에서 다르다. 때문에 [[아커만 함수]]와 같이 원시 재귀 함수는 아니면서 전역 재귀 함수인 것을 정의에 포함할 수 있다. μ-재귀함수에서 μ 연산자는 [[유계 작용소|비유계]](unbounded)의 '탐색' 작용소로서 작용하며, 마지막으로 수를 내어놓고 연산을 종료시키는 역할을 한다.

그러나, 만약 비유계 μ 작용소 그 자신이 부분적이라면(즉 수를 내어놓지 못하는 경우가 존재한다면) 그것이 쓰인 함수 역시 부분함수가 되어 일부 수에 대하여 정의되지 않게 된다. 이러한 경우, μ작용소는 비유계이기 때문에 탐색을 끝없이 계속할 것이고, 결국 영원히 수를 내어놓고 계산을 종료하지 못하게 된다. (간혹 비결정임을 나타내는 기호 u를 내어놓을 수 있고 연산을 끝내도록 정의해두기도 한다.) 다르게 말하면, 부분 μ작용소를 쓰는 부분 μ재귀 함수는 전역적이지 않을 수도 있다.

=== 초등함수 ===
우선 다음을 초등함수로 정의한다(Kleene (1952) p. 219 에 근거):
#'''상수 함수'''(constant function): 각 자연수 <math>n</math>과 <math>k</math>에 대하여:
#:<math>f(x_1,\ldots,x_k) = n</math>.
#:정수 <math>n</math>은, 0만을 내어놓는 영함수에 따름수 함수의 합성을 반복시키는 것으로서 정의하기도 한다.
#'''따름수 함수'''(successor function) '''S''':
#:<math>S(x) \stackrel{\mathrm{def}}{=}  f(x) = x' = x + 1\,</math>
#'''사영 함수'''(projection function) <math>P_i^k</math>: <math>1</math> ≤ <math>i</math> ≤ <math>k</math>를 만족하는 모든 자연수 <math>i, k\,</math>에 대하여:
#:<math>P_i^k(x_1,\ldots,x_k) \stackrel{\mathrm{def}}{=} f(x_1,\ldots,x_k) = x_i</math>

=== 작용소 ===
다음은 작용소(연산자)이다:
#'''합성 작용소'''(composition operator): m항 함수 <math>h(x_1,\ldots,x_m)\,</math>와 m개의 k항 함수 <math>g_1(x_1,\ldots,x_k),\ldots,g_m(x_1,\ldots, x_k)</math>를 취하여, <math>x_1,\ldots,x_k</math>를 다음과 같이 매핑하는 함수를 반복하는 조작이다:
#:<math>f(x_1,\ldots,x_k) = h(g_1(x_1,\ldots,x_k),\ldots,g_m(x_1,\ldots,x_k))</math>
#'''원시 재귀 작용소'''(primitive recursion operator): 함수 <math>g(x_1,\ldots,x_k)</math>와 <math>h(y,z,x_1,\ldots,x_k)</math>를 취하여 다음과 같은 함수 <math>f</math>를 반복하는 조작이다:
#:<math>f(0,x_1,\ldots,x_k) = g(x_1,\ldots,x_k)</math>,
#:<math>f(y+1,x_1,\ldots,x_k) = h(y,f(y,x_1,\ldots,x_k),x_1,\ldots,x_k)</math>.
#'''μ 작용소''': 함수 <math>f(y,x_1,\ldots, x_k)</math>를 취하여, <math>x_1,\ldots, x_k</math>를 변수로 하는 함수 <math>\mu y f(y,x_1,\ldots,x_k)</math>를 반복하는 조작이다. 여기서 함수 <math>f</math>는 자연수 <math>\{ 0, 1, ... n \}</math>로부터 자연수 <math>\{ 0, 1, ... n \}</math>로의 수론적 함수이거나 치역이 <math>\{ 0, 1 \}</math>인 진리값을 나타내는 [[지시함수]]이다. 또 함수 <math>\mu y f</math>는 <math>f(0,x_1,\ldots, x_k),f(1,x_1,\ldots, x_k),...,f(y,x_1,\ldots, x_k)</math>가 모두 결과값을 내어놓을 때 <math>f(y,x_1,\ldots, x_k) = 0</math>를 만족시키는 자연수 <math>y</math>가 존재하면 그 중 최소의 값을 내어놓고, 만약 그러한 <math>y</math>가 없으면 <math>\mu y f</math>는 변수 <math>x_1,\ldots,x_k</math>에 대하여서는 정의되지 않는다.

== 계산가능성 이론에서 ==
(halt하지 않을 가능성을 가지는) [[튜링 기계]]의 계산능력과 일치하며, [[처치-튜링 명제]]는 "μ-재귀에 해당한다는 것이 '계산가능'이라는 무정의 용어에 대한 최적의 정의"이라는 주장이다.

== 원시재귀와의 관계 ==
μ 연산자는 일부 입력값에 대하여 정의되지 않을 수 있으며, 컴퓨터적으로 표현하면 계산이 끝나지 않고 영원히 계속될 수 있다. 이로 인해 원시 재귀와의 결정적 차이가 발생하지만, 클레이니의 정규형 정리에 의하면 모든 재귀함수는 원시재귀함수와 μ 연산자를 결합한 형태로 적절히 분해할 수 있다.

== 같이 보기 ==
* [[계산 가능성 이론]]
* [[원시 재귀 함수]]
* [[계산 가능 함수]]

{{전거 통제}}

[[분류:계산 이론]]
[[분류:계산 가능성 이론]]