递归语言、递归可枚举语言和非递归可枚举语言
引言
考虑下面一个问题:
那大家是不是觉得这个语言是不可枚举的语言了?即给定一个属于该语言的句子比如b,如果按照字典序来枚举,先列a开头的,那么我们给定的字符串b永远也不会被列举出来,因为在该语言中,a开头的字符串有无数个。
但是:
至于图灵机被0,1编码是怎么回事,可以看文章图灵机的种类中的通用图灵机部分。
小结:
即上面的3步枚举过程一定可以在有限时间内枚举到你所指定的图灵机。
递归可枚举语言
例子
假设语言L= a n b n , n > 0 a^nb^n,n>0 anbn,n>0,这个语言是否为递归可枚举语言?当然,根据定义,给定一个L中的字符串 w = a m b m , m > 0 w=a^mb^m,m>0 w=ambm,m>0,设计一个图灵机如下:
- 枚举ab
- 比较ab和w,相同则停机
- 不同则返回第一步,枚举下一个。
显然,这个图灵机可以在m步的时候接受w,但是我们发现这个图灵机有一个致命的缺点,就是对于w=a,一个不属于L中的句子,此图灵机将永不停机。
也许你会不爽,觉得是我图灵机设计得太差了,对于这个例子(L上下文无关语言)来说,这个图灵机确实不好。但是有些语言,你只能这么设计,因为你无法设计出更好得,甚至设计不出第二个!
再回过头来看看,是不是发现这个识别L的图灵机特别简单,谁都能想到,虽然有的时候不好用,但是也有的时候是最好且唯一的!
递归语言
这里一定要注意区别:
- 显然,递归语言是递归可枚举语言的一个子集。因为L是递归,那么存在M,使得接收L,所以递归可枚举。
- 反过来,L是递归可枚举,存在M,使得接收L,但不一定对不属于L的w停机,不符合递归语言定义,可能不递归。
进一步解释:L是递归语言,根据上面的定义,是说你随便给一个句子,L对应的图灵机可以确切的告诉你,这个是不是属于语言L,也就是说给定任意输入,图灵机一定停机并返回一个精确答案。L是递归可枚举语言,是说随便给一个句子,如果这个句子属于L,L对应的图灵机会告诉你。但是如果这个句子不属于L,那么有两种可能:
- 图灵机停下来了,告诉你这个不是L中的句子。
- 图灵机停不下来,还在一直枚举,并且这个过程永不结束,它试图告诉你答案。
结合我之前给的 a n b n a^nb^n anbn的例子,我上面设计的图灵机就对于不属于L的语言永远停不下来,只可以成功判定属于L的语言,无法判定不属于L的语言。
小结:正如前面所说,对于那个例子,你可以设计好的图灵机,其相当于一个成员资格判定算法,但是可以证明有些语言,你无法设计出一个成员资格判定算法!
由于你平常见到的用数字字母表述的语言,全都是递归语言,我举不出一个非递归但是是递归可枚举的语言,因为如果我具体化的描述出来了,那么它肯定是个递归语言!
但是,我们可以用文字抽象地表述并构造1.递归可枚举但非递归的语言2.非递归可枚举语言。这个在最后会给出,慢慢看下去。
非递归可枚举语言:
引理
所有递归可枚举语言构成的集合是可数的。
证明:所有递归可枚举语言都可以映射到各自的图灵机编码,而文章开头证明过图灵机编码构成的集合是可数的。
定理
证明:由于 Σ ∗ \Sigma^* Σ∗的子集的集合是不可数的,而 Σ ∗ \Sigma^* Σ∗的一个子集其实就对应一个语言,换句话说就是, Σ \Sigma Σ上所有语言的集合是不可数的。这和前面引理中的所有递归可枚举语言构成的集合是可数的是矛盾的。
结论:
存在 Σ \Sigma Σ上的一个语言它是非递归可枚举的,而且 Σ \Sigma Σ上非递归可枚举的语言要比递归可枚举的语言多得多。
另外,作为结论的一部分,你可以看看下面的题目:
但是,我无法举一个非递归可枚举语言的具体例子出来,因为能写出具体形式来的都是递归可枚举语言。
后两种语言的构造
下面依次构造
- 非递归可枚举语言
- 递归可枚举但非递归的语言
1.可以构造一个非递归可枚举语言,虽然不是那么直接。
定理:
定理:
2.构造递归可枚举但非递归的语言
定理
补充
结尾
大家慢慢看,必会所有收获,但是可能会需要一些可数无穷和不可数无穷的基础知识。
递归语言、递归可枚举语言和非递归可枚举语言相关推荐
- 脚本语言与非脚本语言
脚本语言(Script languages)是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言,脚本语言是编程语言的子集. 一个脚本通常是解 ...
- python语言是不是非开源语言_python是开元语言吗?
展开全部 Python语言是一门通用语言,google的搜索引擎.纽交所的在线交易中间的很多功62616964757a686964616fe4b893e5b19e31333433626535能都是py ...
- Facebook新AI模型实现直接从非英语语言翻译到另一种非英语语言
据外媒报道,机器翻译技术自诞生以来走过了漫长的道路.虽然像谷歌这样的翻译曾经粗糙.不可靠,而且只对最基本的翻译有用,但如今,由于AI的力量,它们可以实现惊人的准确.然而一些古老的翻译方法仍然存在. 比 ...
- swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程
swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程 1.2.3 注册非免费苹果账号swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程 免费的苹果账号在 ...
- 非关语言: 设计模式
http://www.riabook.cn/doc/designpattern/ From Gossip@caterpillar 非关语言: 设计模式 程式设计是思维具体化的一种方式,是思考如何解决问 ...
- jvm与非jvm语言优劣_都灵JVM编程语言:使用ANTLR构建高级词法分析器
jvm与非jvm语言优劣 正如我在上一篇文章中所写的那样,我最近开始研究一种名为Turin的新编程语言. 可以在GitHub上找到适用于languag初始版本的编译器. 我目前正在改善语言,并正在开发 ...
- 和自然语言处理有关的英语_自然语言处理对非英语语言的重要性
和自然语言处理有关的英语 Natural Language Processing (NLP) is growing in use and plays a vital role in many syst ...
- jvm与非jvm语言优劣_JVM语言的兴衰
jvm与非jvm语言优劣 时不时有一篇文章预测Java语言的消亡. 有趣的是,他们都没有写日期. 但老实说,它们可能都是真实的. 这是每种语言的命运:消失于遗忘-或更确切地说,越来越少地用于新项目. ...
- 百融榕树使用非Java语言栈,百融榕树具有明显优势
百融榕树Service Mesh架构出现之前,由于相同的语言栈有明显的协同优势,这显然会导致研发团队在选择语言栈时会有所顾虑,甚至不是按照适用的场景选择语言,比如百融榕树S初创团队一开始选择使用了Ja ...
最新文章
- C++ .h(头文件) 与 .cpp(源文件) 的使用
- VDI序曲二十三 制作OFFICE 2003应用程序虚拟化序列
- 把录制的视频压缩到最低
- Knockout应用开发指南(完整版) 目录索引
- 张孝祥Java培训视频及孙鑫java视频网址
- node-webkit中使用sqlite3
- 强化学习笔记: backup diagram
- python算方差_python计算均值方差
- 浏览器外部署Silverlight更新检查失败的原因及对策
- 什么是字节码,采用字节码的好处是什么
- 光端机和收发器的区别有哪些?
- [转载] Java8新特新--Stream语法应用在ArrayList的元素移除和排序
- 系统管理员设置了系统策略 禁止进行此安装的修改办法
- podman,ctr镜像导入导出
- Linux安装jdk、删除Open jdk
- 二十九 Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求...
- WinForm上显示gif动画
- 登录 Jed_SH ELK 默认端口
- 【软件工程】第一章 软件工程概述 考试重点 复习记录
- 运放为什么可以虚短虚断
热门文章
- python xmind转excel 知乎_XMind: ZEN 重磅更新!新增导出Word/Excel,自定义快捷键和其他...
- mac全选文字的快捷键_摆脱重复操作,教你 Mac 一次性多选复制的小技巧
- 数据库被置疑后的解决方法
- 游戏保护_CRC32检测
- SQL2008服务器连接失败
- python+opencv摄像头人脸检测+代码注释
- matlab中bitget函数用法_Matlab函数大全
- 点心云pcdn跑量越来越少问题解决方案
- java mail 监听邮件_javamail – IMAP messageChangedListener()没有被触发
- 2020年数学建模国赛C题Demo【准确率只有61%,仅供参考】