日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

函数的凹凸性证明_理解图灵机和递归函数的等价性证明

發(fā)布時(shí)間:2024/7/23 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 函数的凹凸性证明_理解图灵机和递归函数的等价性证明 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

背景

之前讀了 Martin Davis 的《Computability and Unsolvability》,決定對其中的圖靈機(jī)和遞歸函數(shù)等價(jià)性證明做一個(gè)(不嚴(yán)謹(jǐn)?shù)?#xff09;整理,證明方法比較有趣,雖然最終結(jié)果并沒有太大的驚喜。

整理本身的目標(biāo)是拋開晦澀難懂的數(shù)學(xué)符號,從結(jié)合實(shí)際的角度給一個(gè)概念上的說明,以此希望自己下次回顧的時(shí)候不會完全看不懂。

更方便討論的圖靈機(jī)

馮諾依曼體系結(jié)構(gòu)可以看作是圖靈機(jī)的一個(gè)具體實(shí)現(xiàn),同時(shí)增加了對圖靈機(jī)上一些基本操作的封裝,比如說,圖靈機(jī)包括一條無限長的被分成一個(gè)單元格的紙帶,單元格上可以標(biāo)記 0 或 1,這個(gè)紙帶就可以對應(yīng)到計(jì)算機(jī)內(nèi)存,這個(gè)紙帶上最開始的內(nèi)容就可以看作輸入,最終內(nèi)容可以看作輸出,圖靈機(jī)中在具體某個(gè)狀態(tài)下看到紙帶當(dāng)前單元格上的內(nèi)容執(zhí)行左移右移或者修改紙帶內(nèi)容的操作并跳轉(zhuǎn)到某個(gè)狀態(tài)即對應(yīng)為在內(nèi)存上讀出某個(gè)數(shù)據(jù),執(zhí)行某種計(jì)算,寫回計(jì)算結(jié)果,并跳轉(zhuǎn)到新的指令地址的操作。而程序指令集增加的操作可以看作對圖靈機(jī)一系列操作的封裝,并不增加計(jì)算能力。

而面向過程的高級語言比如 C 語言又很好的反應(yīng)了馮諾依曼體系結(jié)構(gòu)的特點(diǎn),比如變量對應(yīng)到內(nèi)存,語句對應(yīng)到指令,同時(shí)有各種循環(huán)結(jié)構(gòu)或者直接通過 goto 進(jìn)行語句間的跳轉(zhuǎn)。所以同樣可以比較簡單的把這樣的高級語言看作是和圖靈機(jī)等價(jià)的。所以后面會直接在高級語言的基礎(chǔ)上進(jìn)行討論。

遞歸函數(shù)以及遞歸函數(shù)到圖靈機(jī)的等價(jià)性

而遞歸函數(shù)的數(shù)學(xué)表達(dá)比較簡單,并且看上去比較規(guī)則。不嚴(yán)格的說,遞歸函數(shù)表示的是任意可計(jì)算函數(shù)都可以通過對一些基本函數(shù)進(jìn)行組合而成。基本函數(shù)的一些例子

def s(x): return x + 1 def n(x): return 0

而組合的方式一共包括以下三種

# 組合,對任意 h a b 函數(shù) def c(x):return h(a(x), b(x))# 遞歸,對任意 g h def r(x, y):return x == 0 ? g(y): h(x, y, f(x - 1, y))# 最小化,對任意 g def m(x):i = 0while g(i, x): i += 1return i

所以既然基本函數(shù)和組合函數(shù)都能很容易的寫成面向過程的代碼,潛在的就表示遞歸函數(shù)可以很方便的改寫成圖靈機(jī),所以所有的遞歸函數(shù)都可以用圖靈機(jī)計(jì)算。

圖靈機(jī)到遞歸函數(shù)的等價(jià)性

所以證明的另一半就是證明所有的圖靈機(jī)都是遞歸函數(shù),也是比較有趣的部分。

證明的基本方法是編碼整個(gè)圖靈機(jī)的運(yùn)算過程,然后枚舉所有計(jì)算過程直到找到一個(gè)計(jì)算過程滿足程序執(zhí)行過程和程序要求并最終退出,然后從中得到計(jì)算結(jié)果。

比如說,對以下過程

def f(x):i = 0# 語句 0while i != 2: i += 1# 語句 1return i

要對整個(gè)執(zhí)行過程進(jìn)行編碼,對狀態(tài) <s, v> 表示為在語句 s 時(shí) i 的值為 v,則初始狀態(tài)為 <0, 0>,最終結(jié)束狀態(tài)為 <1, 2>,對整個(gè)執(zhí)行過程,最終要找到 <0, 0>, <0, 1>, <0, 2>, <1, 2>。

所以對應(yīng)的遞歸函數(shù)最外層會類似于

def f(x):for e in [[(0, 0)], [(0, 1)], [(1, 0)], [(1, 1)], [(0, 0), (0, 0)], [(0, 0), (0, 1)], # 無窮多的狀態(tài)序列...]:# 符合初始狀態(tài)if e[0] == (0, 0) # 符合結(jié)束狀態(tài)and e[-1] == (0, 2)# 對狀態(tài)序列中的每一個(gè)狀態(tài),# 都能得到下一個(gè)狀態(tài)and all([ yields(e[i], e[i + 1]) for i in range(len(e) - 1)])return e[-1][1]

將執(zhí)行過程進(jìn)行兩遍的哥德爾編碼,即先對每個(gè)狀態(tài)進(jìn)行哥德爾編碼,再對整個(gè)狀態(tài)序列進(jìn)行編碼,我們就會在最上層得到一個(gè)調(diào)用了最小化函數(shù)的組合函數(shù)

def f(x): # 組合函數(shù)return gl(1, gl(ln(g(x)) - 1, i))def g(x): # 最小化函數(shù)i = 0while not t(i): i += 1return i

其中 gl(x, y) 是從哥德爾編碼中 y 中得到第 x 位的值。ln 返回哥德爾編碼對應(yīng)的序列長度,而 t 函數(shù)

def t(x):return valid(x) # 符合初始狀態(tài)and gl(0, x) == gn(0, 0) # 符合結(jié)束狀態(tài)and gl(ln(x) - 1, x) == gn(0, 2) # 對狀態(tài)序列中的每一個(gè)狀態(tài),# 都能得到下一個(gè)狀態(tài)and all ([ yields(gl(i, x), gl(i + 1, x)) for i in range(ln(x) - 1)])

其中 valid 測試是否為合法的兩遍哥德爾編碼結(jié)果,gn 是哥德爾編碼函數(shù)。而 yields 函數(shù)描述了合法的程序狀態(tài)轉(zhuǎn)換

def yields(x, y):# if i != 2: i += 1return (gl(0, x) == 0 and gl(1, x) != 2 and gl(0, y) == 0 and gl(1, y) == s(gl(1, x)))# else: breakor (gl(0, x) == 0 and gl(1, x) == 2 and gl(0, y) == 1 and gl(1, y) == 2)

其中的子函數(shù)都可以由遞歸函數(shù)規(guī)則生成,舉其中一個(gè)簡化了的例子

def f(x, y):return x != 2 and y == 0

等價(jià)于

def f(x, y):return (not abs(x - 2)) + abs(y) == 0

其中加法可以表示為

def plus(x, y):return x == 0 ? y: 1 + plus(x - 1, y)

而沒有的驚喜在于整個(gè)證明過程并不能有效的找出圖靈機(jī)中潛在的函數(shù)調(diào)用結(jié)構(gòu)。嚴(yán)格證明可參考《Computability and Unsolvability》。

停機(jī)問題

所以從遞歸函數(shù)的角度看,停機(jī)問題其實(shí)只存在于最小化函數(shù),而其它函數(shù)都是保證退出的,而其實(shí)對于整個(gè)圖靈機(jī)到遞歸函數(shù)的證明也只在最后一步使用了最小化函數(shù)。

總結(jié)

以上是生活随笔為你收集整理的函数的凹凸性证明_理解图灵机和递归函数的等价性证明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。