背景

之前读了 Martin Davis 的《Computability and Unsolvability》,决定对其中的图灵机和递归函数等价性证明做一个(不严谨的)整理,证明方法比较有趣,虽然最终结果并没有太大的惊喜。

整理本身的目标是抛开晦涩难懂的数学符号,从结合实际的角度给一个概念上的说明,以此希望自己下次回顾的时候不会完全看不懂。

更方便讨论的图灵机

冯诺依曼体系结构可以看作是图灵机的一个具体实现,同时增加了对图灵机上一些基本操作的封装,比如说,图灵机包括一条无限长的被分成一个单元格的纸带,单元格上可以标记 0 或 1,这个纸带就可以对应到计算机内存,这个纸带上最开始的内容就可以看作输入,最终内容可以看作输出,图灵机中在具体某个状态下看到纸带当前单元格上的内容执行左移右移或者修改纸带内容的操作并跳转到某个状态即对应为在内存上读出某个数据,执行某种计算,写回计算结果,并跳转到新的指令地址的操作。而程序指令集增加的操作可以看作对图灵机一系列操作的封装,并不增加计算能力。

而面向过程的高级语言比如 C 语言又很好的反应了冯诺依曼体系结构的特点,比如变量对应到内存,语句对应到指令,同时有各种循环结构或者直接通过 goto 进行语句间的跳转。所以同样可以比较简单的把这样的高级语言看作是和图灵机等价的。所以后面会直接在高级语言的基础上进行讨论。

递归函数以及递归函数到图灵机的等价性

而递归函数的数学表达比较简单,并且看上去比较规则。不严格的说,递归函数表示的是任意可计算函数都可以通过对一些基本函数进行组合而成。基本函数的一些例子

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

而组合的方式一共包括以下三种

# 组合,对任意 h a b 函数
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

所以既然基本函数和组合函数都能很容易的写成面向过程的代码,潜在的就表示递归函数可以很方便的改写成图灵机,所以所有的递归函数都可以用图灵机计算。

图灵机到递归函数的等价性

所以证明的另一半就是证明所有的图灵机都是递归函数,也是比较有趣的部分。

证明的基本方法是编码整个图灵机的运算过程,然后枚举所有计算过程直到找到一个计算过程满足程序执行过程和程序要求并最终退出,然后从中得到计算结果。

比如说,对以下过程

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

要对整个执行过程进行编码,对状态 <s, v> 表示为在语句 s 时 i 的值为 v,则初始状态为 <0, 0>,最终结束状态为 <1, 2>,对整个执行过程,最终要找到 <0, 0>, <0, 1>, <0, 2>, <1, 2>。

所以对应的递归函数最外层会类似于

def f(x):for e in [[(0, 0)], [(0, 1)], [(1, 0)], [(1, 1)], [(0, 0), (0, 0)], [(0, 0), (0, 1)], # 无穷多的状态序列...]:# 符合初始状态if e[0] == (0, 0) # 符合结束状态and e[-1] == (0, 2)# 对状态序列中的每一个状态,# 都能得到下一个状态and all([ yields(e[i], e[i + 1]) for i in range(len(e) - 1)])return e[-1][1]

将执行过程进行两遍的哥德尔编码,即先对每个状态进行哥德尔编码,再对整个状态序列进行编码,我们就会在最上层得到一个调用了最小化函数的组合函数

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

其中 gl(x, y) 是从哥德尔编码中 y 中得到第 x 位的值。ln 返回哥德尔编码对应的序列长度,而 t 函数

def t(x):return valid(x) # 符合初始状态and gl(0, x) == gn(0, 0) # 符合结束状态and gl(ln(x) - 1, x) == gn(0, 2) # 对状态序列中的每一个状态,# 都能得到下一个状态and all ([ yields(gl(i, x), gl(i + 1, x)) for i in range(ln(x) - 1)])

其中 valid 测试是否为合法的两遍哥德尔编码结果,gn 是哥德尔编码函数。而 yields 函数描述了合法的程序状态转换

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)

其中的子函数都可以由递归函数规则生成,举其中一个简化了的例子

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

等价于

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)

而没有的惊喜在于整个证明过程并不能有效的找出图灵机中潜在的函数调用结构。严格证明可参考《Computability and Unsolvability》。

停机问题

所以从递归函数的角度看,停机问题其实只存在于最小化函数,而其它函数都是保证退出的,而其实对于整个图灵机到递归函数的证明也只在最后一步使用了最小化函数。

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

  1. logdet函数的凹凸性和遍历速率

    对于常见MIMO系统,我们知道对于确定性信道,性能通常由速率衡量,如下: R=log⁡det⁡(I+HQHH)R = \log\det(I +HQH^H)R=logdet(I+HQHH) 其中, HH ...

  2. NNs(Neural Networks,神经网络)和Polynomial Regression(多项式回归)等价性之思考,以及深度模型可解释性原理研究与案例...

    1. Main Point 0x1:行文框架 第二章:我们会分别介绍NNs神经网络和PR多项式回归各自的定义和应用场景. 第三章:讨论NNs和PR在数学公式上的等价性,NNs和PR是两个等价的理论方法 ...

  3. ssh等价性的一些疑惑

    昨天在做实验的时候: A:RHEL6.0 IP:192.168.0.110 B:RHEL6.0 IP:192.168.0.10  B SSH A 没有问题.A SSH B出现拒绝的情况.我查看防火墙没 ...

  4. 函数的凹凸性证明_判断复杂函数的凹凸性

    判断无人机能量x关系函数的凹凸性(函数是关于v和drt的二元函数) 函数有非常多的参数,极其复杂,看到就烦,我首先用画函数的方法通过图像法来观察,但是画出来的图像不忍直视(或许是我画的图像不对,反正看 ...

  5. 关于函数凹凸性两种定义与二阶导数符号之间的联系证明

    什么是函数的凹凸性 函数的凹凸性即对一个在某区间A上连续的函数,它的图像上凸或者上凹,则分别称为凸函数或者凹函数.而对于在某个区间内既有凹图像又有凸图像,则将凹图像所在区间称为函数的凹区间,凸图像所在 ...

  6. 关于函数或者数列极限保号性的直觉理解(图解)

    关于函数或者数列极限保号性的直觉理解(图解) 欢迎大家评论区指出问题或提出更严谨.有说服力的证明 首先,贴一条很有感触的话: "保号性"的说法,是汉语微积分教学中,穿凿附会.虚张声 ...

  7. 简述什么是图灵机_带你深入理解图灵机--什么是图灵机、图灵完备

    原标题:带你深入理解图灵机--什么是图灵机.图灵完备 我们知道图灵机首次提出在图灵的一篇论文<论数字计算在决断难题中的应用>中提出,原论文题目为<On Computable Numb ...

  8. 函数的凹凸性与拐点习题

    前置知识:函数的凹凸性与拐点 例题 求y=xex−ex+1y=xe^x-e^x+1y=xex−ex+1的单调性,极值,凹凸性及拐点. 解: \qquad令f(x)=xex−ex+1f(x)=xe^x- ...

  9. 带你深入理解图灵机--天才所在的时代

    来源:人机与认知实验室 这几年由于区块链的大热,以太坊独特的solidity语言实现智能合约功能,图灵完备这个词走进大家的视线. 没有计算机专业知识的同学其实很难理解这个词的意思,其实计算机专业的同学 ...

最新文章

  1. Vijos1683 有根树的同构问题
  2. 在 IntelliJ IDEA 中与小姐姐连麦写代码是什么体验?
  3. 学python要基础吗-无基础可以学习Python吗?
  4. MSP430F5529实现四位数码管数字显示
  5. 从应用到底层 36张图带你进入Redis世界
  6. 第3章 一切基于pom
  7. SAP License:ERP系统会计凭证中的那些必填项
  8. 别人家只会编段子,谷歌带大家找乐子 | 愚人节の真 · 大型线下踏春游戏
  9. Socket开发探秘--基于Json格式的数据协议收发
  10. java hex to ascii_使用java实现hex和ascii码的转换
  11. 导论 计算机组成 ppt,《计算机导论》说课稿PPT课件.ppt
  12. 身份证号码校验算法(附Python代码)
  13. Spring 中 配置文件 加入 aspectj-autoproxy 项目报错
  14. 虚拟机01--Mac安装Centos虚拟机
  15. 三星android+l,全键盘+安卓4.0 三星GALAXY M Pro回归
  16. CF1603C Extreme Extension
  17. postfix中间件--Amavisd-new--反垃圾和反病毒配置
  18. 你的网卡真有千兆么?——千兆网卡传输速度解析
  19. Visual Studio 的问题:unable to locate visual studio installer
  20. [附源码]java毕业设计企业记账系统

热门文章

  1. 郑杰 | 如何拿回我们自己的医疗数据?
  2. 常见中文NER数据集大盘点
  3. bert模型简介、transformers中bert模型源码阅读、分类任务实战和难点总结
  4. 阿里-2019算法岗笔试编程题-kmp匹配
  5. 二叉树----数据结构:二叉树的三种遍历及习题
  6. excel字符串反转
  7. 【代码笔记】iOS-实现网络图片的异步加载和缓存
  8. 我与ARM的那些事儿2JINLK烧录nor flash
  9. 2012/8/3 Extjs使用TabPanel时需要注意的问题
  10. 图像处理理论-颜色模式