原始递归函数

在可計算性理論中，**原始遞迴函數**（英語：primitive recursive functions）對計算的完全的形式化而言是形成重要構造板塊的一類函數。它們使用遞迴和複合作為中心運算來定義，並且是遞迴函數的嚴格的子集，它們完全是可計算函數。通過補充允許偏函數和介入無界尋找運算可以定義出遞迴函數的更廣泛的類。

通常在數論中研究的很多函數，近似於實數值函數，比如加法、除法、階乘、指數，找到第 _n_ 個質數等等是原始遞迴的（Brainerd and Landweber, 1974）。實際上，很難設計不是原始遞迴的函數，儘管某些函數是已知的 (比如阿克曼函數)。所以，通過研究它們，我們能發現有廣泛影響的結論的那些性質。

原始遞迴函數可以用總是停機的圖靈機計算，而遞迴函數需要圖靈完全系統。

原始遞迴函數的集合在計算複雜性理論中叫做 PR。

## 定義

原始遞迴函數接受自然數或自然數的元組作為參數並生成自然數。接受 _n_ 個參數的函數叫做 _n_- 元函數。基本原始遞迴函數用如下公理給出:

1. **常數函數**: 0 元常數函數 0 是原始遞迴的。
2. **後繼函數**: 1 元後繼函數 _S_，它接受一個參數並返回皮亞諾公理給出的後繼數，是原始遞迴的。
3. **投影函數**: 對於所有 _n_≥1 和每個 1≤_i_≤_n_ 的 _i_，_n_ 元投影函數 _P_in，它接受 _n_ 個參數並返回它們中的第 _i_ 個參數，是原始遞迴的。

更加複雜的遞迴函數可以通過應用下列公理給出的運算來獲得:

1. **複合**: 給定 _k_ 元原始遞迴函數 _f_，和 _k_ 個 _m_ 元原始遞迴函數 _g_1,...,_g_k，_f_ 和 _g_1,...,_g_k 的複合，也就是 _m_ 元函數 _h_(_x_1,...,_x_m) = _f_(_g_1(_x_1,...,_x_m),...,_g_k(_x_1,...,_x_m)), 是原始遞迴的。
2. **原始遞迴**: 給定 _k_ 元原始遞迴函數 _f_，和 _k_+2 元原始遞迴函數 _g_，定義為 _f_ 和 _g_ 的原始遞迴的 _k_+1 元函數，也就是函數 _h_ 這裡的 _h_(0,_x_1,...,_x_k) = _f_(_x_1,...,_x_k) 並且 _h_(_S_(_n_),_x_1,...,_x_k) = _g_(_h_(_n_,_x_1,...,_x_k),_n_,_x_1,...,_x_k), 是原始遞迴的。

服從這些公理的函數是原始遞迴的，如果它是上述基本函數之一，或者它可以通過應用有限次數的運算獲得自基本函數。

### 投影函數的作用

投影函數可用來避免採用上述明顯刻板的函數元數方式；通過使用各種投影函數的複合，有可能把一個函數的參數子集遞移到另一個函數。例如，如果 _g_ 和 _h_ 是二元原始遞迴函數，則

　
: $f(a,b,c)=g(h(a,c),h(a,b))\!$

也是原始遞迴的。使用投影函數的一個形式定義為

　
: $f(a,b,c)=g(h(P_{1}^{3}(a,b,c),P_{3}^{3}(a,b,c)),h(P_{1}^{3}(a,b,c),P_{2}^{3}(a,b,c)))$ .

### 轉換謂詞到數值函數

在某些設定中，自然的考慮接受混合了數值和真值 {t= true, f=false} 的參數，或生成真值作為輸出的原始遞迴函數 (參見 Kleene [1952 pp.226-227])。這可以通過把真值辨識為任何固定方式的數值來完成。例如，通常把真值 _t_ 辨識為 _1_ 和真值 _f_ 辨識為 _0_。一旦作出這種辨識，集合 _A_ 的特徵函數，它在文字上返回 _1_ 或 _0_，可以被看作判定一個數是否在集合 _A_ 中的謂詞。把謂詞辨識為數值函數的這種方式將假定於本文餘下部分。

## 例子

### 加法

直覺上我們會把加法遞迴的定義為:

　
: add(0,_x_)=_x_

　
: add(_n_+1,_x_)=add(_n_,_x_)+1

為了使它適合於嚴格的原始遞迴定義，我們定義:

　
: add(0,_x_)=_P_11(_x_)

　
: add(S(_n_),_x_)=_S_(_P_13(add(_n_,_x_),_n_,_x_))

(注意：這裡的 _P_13 是一個函數，它接受 3 個參數並返回第一個。)

_P_11 是簡單的恆等函數；包含它是上述原始遞迴運算定義的要求；它扮演了 _f_ 的角色。_S_ 和 _P_13 的複合，它是原始遞迴的，它扮演了 _g_ 的角色。

### 減法

我們可以定義_有限減法_，就是說，截止到 0 的減法 (因為我們還沒有負數的概念呢)。首先我們必須定義 "前驅" 函數，它擔任後繼函數的對立物。

直覺上我們會把前驅定義為:

　
: pred(0)=0

　
: pred(_n_+1)=_n_

為了使它適合正式的原始遞迴定義，我們寫:

　
: pred(0)=0

　
: pred(S(_n_))=_P_22(pred(_n_),_n_)

現在我們以類似加法的方式定義減法。

　
: sub(0,_x_)=_P_11(_x_)

　
: sub(S(_n_),_x_)=pred(_P_13(sub(_n_,_x_),_n_,_x_))

出於簡單的緣故，切換了 "標準" 定義的參數次序來適合原始遞迴的要求，就是說， sub (_a_,_b_) 對應於 _b_-_a_。這可以輕易的使用適當的投影來矯正。

很多類似的函數可以被證明是原始遞迴的；一些例子包括條件、指數、質數檢定和數學歸納法，並且原始遞迴函數可以被擴充來運算在其他物件上比如整數和有理數。

#### 在整數和有理數上的運算

通過使用哥德爾數，原始遞迴函數可以被擴充到在其他物件比如整數和有理數上的運算上。如果以標準方式編碼整數用哥德爾數，算術運算包括加法、減法、乘法都是原始遞迴的。類似的，如果以哥德爾數表示有理數，則域運算都是原始遞迴的。

## 與遞迴函數的聯系

通過介入無界尋找算子可定義更廣泛的偏遞迴函數類。這個算子的使用可以導致偏函數，就是說，對每個參數有最多一個值，但是不同於全函數，不必須對參數有值的關係 (參見定義域)。一個等價的定義聲稱偏遞迴函數是可以被圖靈機就算的函數。全遞迴函數是對所有輸入有定義的偏遞迴函數。

所有原始遞迴函數都是全遞迴的，但不是所有全遞迴函數都是原始遞迴的。阿克曼函數 _A_(_m_,_n_) 是周知的不是原始遞迴的全遞迴函數。原始遞迴函數有作為使用阿克曼函數的全遞迴函數的子集的一個特徵。這個特徵聲稱一個函數是原始遞迴的，若且唯若有一個自然數 _m_ 使得這個函數可以被總在 A (_m_,_n_) 或更少步驟內停機的圖靈機計算，這裡的 _n_ 是原始遞迴函數的參數的總數。

## 限制

原始遞迴函數意圖緊密對應於我們直覺上可計算函數應該的樣子。當然函數的初始集合在直覺上是可計算的 (因為它們非常簡單)，而你能用來建立新原始遞迴函數的兩個運算也是非常直接的。但是原始遞迴函數的集合不包含所有可能的可計算函數 — 這可以看作康托爾對角論證法的變體。這個論證提供了一個不是原始遞迴的可計算函數。證明的梗概如下:

原始遞迴函數集合可以被計算列舉。這個編號方案在函數定義上是唯一的，儘管在實際函數自身上不是唯一的 (因為所有的函數都可以有無限數目的定義 — 考慮簡單的由恆等函數構成)。這個編碼在可計算性的形式模型，比如遞迴函數或圖靈機下定義的意義上是可計算的，邱奇 - 圖靈論題涉及的任何機器都可以。

現在考慮一個矩陣，這裡的行是在這個編號方案下的有一個參數的原始遞迴函數，而列是自然數。則每個元素 (_i_, _j_) 對應於計算於數 _j_ 之上的第 _i_ 個一元原始遞迴函數。我們可以寫為 _f_i(_j_)。

現在我們考慮函數 _g_(_x_) = S(_f_x(_x_))。_g_ 位於這個矩陣的對角線上，並簡單的對它找到的值加一。這個函數是可計算的 (按上述定義)，但是明顯的沒有計算它的原始遞迴函數存在，因為它與每個可能的原始遞迴函數都有至少一個值不同。所以，必然存在不是原始遞迴的可計算函數。

這個論證可以應用於能用這種方式列舉的任何一類的可計算 (全) 函數上。所以，任何這種可計算 (全) 函數的明確列表都不可能是完全的，比如那些可以用判定器計算的函數。但是要注意，_偏_可計算函數集合 (那些不需要對所有參數有定義的函數) 可以被明確的列舉，例如通過列舉圖靈機編碼。

可以明確展示的一個簡單的 1 - 元可計算函數阿克曼函數，它是對任何自然數遞迴定義的，但不是原始遞迴的。

## 歷史

遞迴定義以前在數學中或多或少地被正式使用過，但原始遞迴的構造可以追溯到理察・戴德金的 "Was sind und was sollen die Zahlen? (1888). 這項工作是第一個給出某個遞迴結構定義了一個唯一函數的證明。 

原始遞迴算術是由 Thoralf Skolem 首次提出的 1923 年。

目前的術語是由 Rózsa Péter（1934 年）在 Wilkinson 之後創造的。(1934) 在阿克曼於 1928 年證明了今天以他名字命名的函數不是原始遞迴函數之後，這一事件促使人們需要重新命名在那之前被簡單稱為遞迴函數的東西。

## 參見

* 遞迴 (電腦科學)
* 雙重遞迴
* 原始遞迴集函數
* 原始遞迴序數函數

## 注釋

## 參考文獻

* Brainerd, W.S., Landweber, L.H. (1974), _Theory of Computation_, Wiley, ISBN 0-471-09585-0.
* Robert I. Soare, _Recursively Enumerable Sets and Degrees_ , Springer-Verlag, 1987. ISBN 0-387-15299-7
* Stephen Kleene (1952) _Introduction to Metamathematics_, North-Holland Publishing Company, New York, 11th reprint 1971: (2nd edition notes added on 6th reprint). In Chapter XI. General Recursive Functions §57
* George Boolos, John Burgess, Richard Jeffrey (2002), _Computability and Logic: Fourth Edition_, Cambridge University Press, Cambridge, UK. Cf pp. 70-71.
* Robert I. Soare 1995 _Computability and Recursion_ http://www.people.cs.uchicago.edu/~soare/History/compute.pdf （頁面存檔備份，存於網際網路檔案館）
* Daniel Severin 2008, _Unary primitive recursive functions_, J. Symbolic Logic Volume 73, Issue 4, pp.  1122-1138 arXiv （頁面存檔備份，存於網際網路檔案館） projecteuclid （頁面存檔備份，存於網際網路檔案館）

Template: 數學邏輯