computation-theory - 递归语言

标签 computation-theory lexicographic turing-machines

“如果一种语言是递归的,那么存在一种方法可以按某种顺序编写语言中的字符串” 我还被告知“如果某种语言可以通过某些图灵机按字典顺序枚举,那么这种语言称为递归”

首先:这两种说法是不同的吗? 第二:是否应该只按字典序排列?

最佳答案

回想一下为什么定义递归语言需要字典顺序的原因:

  • 如果可以决定,则语言是递归的。也就是说,对于给定的单词 W 和给定的语言 L,可以通过有限多个步骤知道 W 是否是 L 的成员,或不是
  • 如果一种语言可以被接受,那么它就是递归可枚举的。也就是说,对于给定的单词 W 和给定的语言 L,可以通过有限多步知道 W 是否是 L 的成员,但是不可能知道 W < em>不是 L 的成员。

因此,如果机器只是以任意顺序枚举 L 中的单词,您可以检查您的单词 W 是否在该列表中。如果是,你就停下来。如果不是,你必须永远等待,看看你的词是否最终被机器输出。该语言是递归可枚举的。

不过,如果您知道顺序,您可以评估机器现在是否应该输出 W。如果机器输出了一个单词 X,并且根据你知道机器正在使用的顺序,W 在 X 之前,你知道机器永远不会输出 W,所以你知道 W 不是 L 的成员。

词典顺序是满足属性的众多单词总排序之一,您可以判断单词 W 应该 何时输出,因此如果到那时您还没有看到它,您可以停止。

其他订单:
https://en.wikipedia.org/wiki/Lexicographical_order#Colexicographic_order
https://en.wikipedia.org/wiki/Kleene%E2%80%93Brouwer_order

所以回答你的具体问题:

  1. 这两个说法有区别吗?
    是的。
    第一条语句声明“按某种顺序”,它没有指定序列必须是 total order。在 L 的字母表上。因此第一种说法是错误的。第一条语句定义了递归可枚举语言。
    第二个陈述是正确的,但比它需要的更严格。词典顺序只是一个字母表的总顺序。其他的也可以。

  2. 是否应该只按字典序排列?
    没有。
    如上,只要机器保证按字母表上的任何全序输出,该语言就是递归的。

关于computation-theory - 递归语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38525216/

相关文章:

c++ - 查找字符串中字典序最大的旋转

c++ - 是否有可以无限期编译的 C++ 代码?

union - 两种非正则语言的结合是正则的吗?

testing - BDD 特性和场景

java - 具有最小冲突的两个整数数组的哈希函数

hbase - 为什么说 HBase 行按字典顺序存储?

Java - 按字典顺序查找下一个单词

c++ - C++是递归可枚举语言吗?

turing-machines - 相对于 P、NP、coNP,类 R、RE coRE 之间的关系是什么

language-agnostic - 什么是图灵完备?