原始遞迴函式

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

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

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

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

定義

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

常數函式: 0 元常數函式 0 是原始遞迴的。
後繼函式: 1 元后繼函式 S，它接受一個引數並返回皮亞諾公理給出的後繼數，是原始遞迴的。
投影函式：對於所有 n≥1 和每個 1≤i≤n 的 i，n 元投影函式 Pin，它接受 n 個引數並返回它們中的第 i 個引數，是原始遞迴的。

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

複合：給定 k 元原始遞迴函式 f，和 k 個 m 元原始遞迴函式 g1,...,gk，f 和 g1,...,gk 的複合，也就是 m 元函式 h (x1,...,xm) = f (g1 (x1,...,xm),...,gk (x1,...,xm)), 是原始遞迴的。
原始遞迴：給定 k 元原始遞迴函式 f，和 k+2 元原始遞迴函式 g，定義為 f 和 g 的原始遞迴的 k+1 元函式，也就是函式 h 這裡的 h (0,x1,...,xk) = f (x1,...,xk) 並且 h (S (n),x1,...,xk) = g (h (n,x1,...,xk),n,x1,...,xk), 是原始遞迴的。

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

1.1 投影函式的作用

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

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

.

1.2 轉換謂詞到數值函式

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

例子

2.1 加法

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

add (0,x)=x

add (n+1,x)=add (n,x)+1

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

add (0,x)=P11 (x)

add (S (n),x)=S (P13 (add (n,x),n,x))

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

P11 是簡單的恆等函式；包含它是上述原始遞迴運算定義的要求；它扮演了 f 的角色。S 和 P13 的複合，它是原始遞迴的，它扮演了 g 的角色。

2.2 減法

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

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

pred (0)=0

pred (n+1)=n

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

pred (0)=0

pred (S (n))=P22 (pred (n),n)

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

sub (0,x)=P11 (x)

sub (S (n),x)=pred (P13 (sub (n,x),n,x))

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

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

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

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

與遞迴函式的聯絡

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

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

限制

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

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

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

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

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

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

歷史

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

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

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