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

背景

之前读了 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》。

停机问题

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497681.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

观点 | 别忽视深度学习的种种问题,Gary Marcus 泼冷水义不容辞

来源&#xff1a;AI科技评论纽约大学心理学教授 Gary Marcus 曾是 Uber 人工智能实验室的负责人&#xff0c;他自己创立的人工智能创业公司 Geometric Intelligence 2016 年 12 月被 Uber 收购&#xff0c;自己也就加入 Uber 帮助他们建立人工智能实验室。Gary Marcus 也曾号召…

spring框架做全局异常捕获_@ControllerAdvice注解(全局异常捕获)

背景ControllerAdvice 注解 通常用于定义ExceptionHandler&#xff0c; InitBinder和ModelAttribute 适用于所有RequestMapping方法的方法。ExceptionHandler异常处理器作用:可以拦截程序抛出来的指定异常。使用场景:主要使用与项目统一异常处理&#xff0c;对于rest风格的返回…

DeepMind推出「控制套件」:为「强化学习智能体」提供性能基准

来源&#xff1a;arxiv作者&#xff1a;Yuval Tassa, Yotam Doron, Alistair Muldal, Tom Erez,Yazhe Li, Diego de Las Casas, David Budden, Abbas Abdolmaleki, Josh Merel,Andrew Lefrancq, Timothy Lillicrap, Martin Riedmiller「雷克世界」编译&#xff1a;嗯~阿童木呀、…

JS中实现replaceAll的方法

http://fuleonardo.iteye.com/blog/339749 第一次发现JavaScript中replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符. 而str.replace(/\-/g,"!")则可以全部替换掉匹配的字符(g为全局标志)。 replace() The replace()…

pytorch统计矩阵非0的个数_矩阵的三种存储方式---三元组法 行逻辑链接法 十字链表法...

在介绍矩阵的压缩存储前&#xff0c;我们需要明确一个概念&#xff1a;对于特殊矩阵&#xff0c;比如对称矩阵&#xff0c;稀疏矩阵&#xff0c;上&#xff08;下&#xff09;三角矩阵&#xff0c;在数据结构中相同的数据元素只存储一个。 [TOC] 三元组顺序表 稀疏矩阵由于其自…

【视频】2017,50个令人屏息的科技瞬间

来源&#xff1a;甲子光年概要&#xff1a;整个世界的巨变&#xff0c;肇始于一颗微尘的颤动。「甲子光年」挑选了属于2017年的50个科技瞬间。十年后再回望时&#xff0c;它们可能正是那个撼动世界的历史性时刻。即将过去的2017年&#xff0c;一定有这样的一瞬&#xff1a;整个…

机加工程序工时程序_准终工时、人工工时、机器工时,十个工程师九个会弄错...

​上一篇文章种蚂蚁先生跟大家详细分析了产品成本的组成&#xff0c;其主要分为材料成本和制造成本两个部分。 然而要得到制造成本&#xff0c;则必须有标准工时数据。那么标准工时究竟是什么呢&#xff1f;​标准工时制&#xff1a; 标准工时是在标准工作环境下&#xff0c;进…

互联网大脑的云反射弧路径选择问题,兼谈ET大脑模糊认知反演理论

互联网大脑的云反射弧路径选择问题研究2008年以来&#xff0c;我们在互联网大脑架构和互联网进化的研究中提到&#xff0c;“互联网大脑架构&#xff0c;就是互联网向与人类大脑高度相似的方向进化过程中&#xff0c;形成的类脑巨系统架构。互联网云脑架构具备不断成熟的类脑视…

如何传入比较器_typescript专题(五) 装饰器

欢迎来到我专题文章【typescript】&#xff0c;更多干货内容持续分享中&#xff0c;敬请关注&#xff01;本章目标基于webpack4.x从0开始搭建ts的开发环境ts中的装饰器的基本使用基于webpack4.x从0开始搭建ts的开发环境webpack4.x已经问世好久了&#xff0c;0配置是一大亮点&am…

『报告』IDC:2018年物联网产业10大预测

来源&#xff1a;T客汇编译概要&#xff1a;根据市场研究公司IDC的报告&#xff0c;2018年全球物联网支出总额将达到7720亿美元。新年新气象&#xff0c;2017年被称作物联网&#xff08;IoT&#xff09;元年&#xff0c;而2018年还将续写IoT的高歌猛进。根据市场研究公司IDC的报…

上传图片和音频到DB

jsp页面 <% page language"java" pageEncoding"UTF-8" contentType"text/html;charsetUTF-8"%> <% include file"/common/taglibs.jsp"%> <% include file"/pages/exercise/editExerciseFrame.jsp"%> <…

hbase获取表信息_HBase的读写和javaAPI的使用

一、hbase系统管理表hbase:namespace&#xff0c;记录了hbase中所有namespace的信息 ,当前系统下有哪些namespace信息scan hbase:namespacehbase:meta&#xff0c;记录了region信息scan hbase:meta二、读写思想client(get、scan)rowkey条件(1)由于rowkey是存储在region上的(2)判…

机器学习必知的15大框架

作者 | Devendra Desale译者 | Mags来源 | 云栖社区不管你是一个研究人员&#xff0c;还是开发者&#xff0c;亦或是管理者&#xff0c;想要使用机器学习&#xff0c;需要使用正确的工具来实现。本文介绍了当前最流行15个机器学习框架。机器学习工程师是开发产品和构建算法团队…

上传图片和音频到Server,再转存到DB

jsp页面 <% page language"java" pageEncoding"UTF-8" contentType"text/html;charsetUTF-8"%> <% include file"/common/taglibs.jsp"%> <link rel"stylesheet" href"<c:url value/plugin/ztree-v3…

区分大小屏幕_第一个Python程序——在屏幕上输出文本

本节我将给大家介绍最简单、最常用的 Python 程序——在屏幕上输出一段文本&#xff0c;包括字符串和数字。Python 使用 print 函数在屏幕上输出一段文本&#xff0c;输出结束后会自动换行。在屏幕上输出字符串字符串就是多个字符的集合&#xff0c;由双引号" "或者单…

2018 年物联网发展五大趋势预测

来源&#xff1a;腾股创投作者 &#xff1a;Pramod Chandrayan物联网已经开始在所有行业的企业中走向主流。 到 2018 年底&#xff0c;物联网支出预计将增长 15&#xff05;&#xff0c;达到 7725 亿美元&#xff0c;毫无疑问&#xff0c;未来一年连接设备和企业物联网项目数量…

js中立即执行函数会预编译吗_JavaScript预编译过程

什么是预编译&#xff1f;当js代码执行时有三个步骤&#xff1a;1.语法分析&#xff0c;这个过程检查出基本的语法错误。2&#xff0c;预编译&#xff0c;为对象分配空间。3&#xff0c;解释执行&#xff0c;解释一行执行一行&#xff0c;一旦出错立即停止执行。预编译发生在代…

知识图谱火了,但你知道它的发展历史吗?|赠书5本

作者&#xff1a;尼克 编辑&#xff5c;Emily版式由AI前线整理知识图谱火了&#xff0c;但你知道它的发展历史吗&#xff1f;本文节选自《人工智能简史》第 3 章&#xff0c;从第一个专家系统 DENDRAL 到语义网再到谷歌的开源知识图谱&#xff0c;对知识图谱的发展历程进行了…

python使用selenium_如何在python中使用selenium的示例

最近基于selenium写了一个python小工具,记录下学习记录,自己运行的环境是Ubuntu 14.04.4, Python 2.7,Chromium 49.0,ChromeDriver 2.16selenium简介selenium提供了一个通用的接口,可模拟用户来操作浏览器,比如用于自动化测试等.selenium的核心是WebDriver,它提供了一组接口,这…

英特尔爆发史诗级芯片漏洞,Linux之父痛斥英特尔公司

来源&#xff1a;CEO来信概要&#xff1a;1月4日消息&#xff0c;英特尔处理器存在芯片级漏洞的消息仍在发酵&#xff0c;恐怕将会成为计算机行业发展史上最大的安全漏洞之一。1月4日消息&#xff0c;英特尔处理器存在芯片级漏洞的消息仍在发酵&#xff0c;恐怕将会成为计算机行…