【寫在8月25日2053,釋出後發現上下標給我全濾了?,我調整一下,過會兒再看】
硬核程度:☆☆☆☆☆
涉及領域:計算理論
大標題:三種函式外加三種操作怎樣解決所有可計算問題?為什麼偏遞迴函式可以製造無限迴圈?
可能是全網最不報菜名、最不裝比的解釋。
以下開始:
首先,什麼是可計算?
可計算就是指,有一個演算法,我們把它交付給計算機後,計算機可以像執行一個函式一樣,接受我們給它的輸入,然後返回輸出,這個輸出就是我們想要的答案。
為了方便描述,先行約定一下數學符號。<ut,它可以接受一對整數作為輸入,把它們相乘後輸出一個整數。
比如,輸入(3,4)輸出12
輸入(6,2)輸出12
輸入(0,6)輸出0<ain,輸出的一個數叫做doain。如果我們用z來代表全體整數集,那麼這個平平無奇的乘法器就可以用數學符號表示為:<utz2→z<ut是一個tota function,也許可以稱作“全函式”吧,意思是每一個doain裡的輸入,都能對應一個doain裡的輸出。
與全函式相對應的是,是“偏函式”。對於偏函式,對於有些輸入,它並不能給出輸出。比如一個除法器,當我們給它(6,0)時,它輸出不了任何東西。這個除法器可以表示為:
divz2—z
這裡的單橫線代表這是一個偏函式其實應該用半箭頭表示,但在這裡打不出來)
好了,定義好符號之後,就可以清爽地描述我們的三種基本函式:後繼函式、零函式、投影函式。
後繼函式:sun→n,su(x)=x+1,n代表自然數集。我們給它2,它輸出3;給它3它輸出4。總之就是往上+1.
零函式:zeronn→n,zero=0。不管給它什麼,它都輸出0.
投影函式:projnnn→n,projin(x1,...,xn)=xi。它接受長度為n的輸入,輸出第i個自然數。比如,proj22(1,3)=3。
好了,蓋大樓的磚塊一共就這麼三種,接下來把它們組合在一起就行了。
我們定義一個叫“組合”的函式f,它的功能是把n個函式組合在一起:
fnn—n
具體的,如果每一個被組合的函式g都可以接受同一組引數(x1,...,x),那麼組合n個g函式的操作可以被表示為:<—n
展開為:<)=f(g1(x1,...,x),...,gn(x1,...,x))
舉個栗子:
我們構造一個函式one,one(x)=1,即:不論給它什麼輸入,它都輸出為1,那麼:
one(x)=su(0)=su(zero(x))
即:su·[zero]=one
驗證一下:
su·[zero](x)=su(zero(x))=su(0)=1
su和zero兩個基本函式組成了我們要的one,完美。
如果栗子再複雜一點,我們想要一個加法器add,add(x,y)=x+y,怎麼用那三種基本函式組合?