图灵机中的递归与递归可枚举语言?

时间:2021-07-07 14:09:35

标签: turing-machines automata-theory language-theory decidable

我们说语言L递归,如果它是由TM决定

L递归可枚举 (r.e.),如果它被 TM 识别

假设,enumerator (en-r) 是一台带有打印机的确定性图灵机,从一条空白带开始,可以打印字符串 s1、s2、s3、s4 ... sn ... 如果语言是无限的,则永远继续。

程序需要生成正在打印的字符串,所以这是一个图灵机,可以在磁带上的某处生成语言中的所有字符串。我也可以在磁带上存储其他东西。

en-r 的语言是它打印的所有字符串的集合。 En-r 是生成器机器,不是识别器机器。

对于枚举数 EN 我们说 L(EN) = {s| EN 打印 s}。

关于这种情况,我有 3 个问题:

  1. 假设 L 是一个 r.e. set,那么我们如何使用识别器为L创建枚举器?

  2. 如果 L 是一种语言并且有一个枚举器以递增的顺序枚举 L,那么为什么 L 是递归的?

  3. 为什么如果 L 是递归的,那么有一个 en-r 以递增的顺序枚举它?

谢谢

1 个答案:

答案 0 :(得分:0)

我将最后解决问题 (1),因为这可能是其中最棘手的。

对于 (2),假设您有一个以递增顺序打印集合的枚举器。要从中构建决策程序,请执行以下操作。获取输入字符串 w,然后运行枚举器,直到发生以下情况之一:

  1. 枚举器打印您的输入 w。在这种情况下,您的输入 w 肯定是在该语言中。
  2. 枚举器打印一个字符串 x,其中 w < x。在这种情况下,枚举器不会打印您的字符串,并且由于从该点开始枚举器的所有输出 z 都满足 w < x < z,因此它永远不会打印您的输入。然后您可以拒绝。
  3. 枚举器停止而不打印您的输入字符串 w。在这种情况下,它绝对不是在语言中,您可以拒绝。

这三个选项中的一个肯定会发生,因此您可以保证该过程在所有输入上停止,因此是一个决策者。

对于 (3),假设 D 是您的语言的决定器。下面是一个枚举器的伪代码,它以递增的顺序打印语言中的字符串:

for each string w, in increasing order:
    run D on w.
    if D accepts w, print w.

你明白为什么这会按排序顺序打印集合 S 吗?

现在,回到(1)。有几种方法可以证明这一点。传统的方法是使用燕尾形的想法。想象一下,按照 w0、w1、w2、w3……的顺序写出所有字符串。然后,执行这段代码,假设 R 是 L 的识别器:

for i = 1 to infinity
    for j = 0 to i:
        run R on w_j for i - j steps.
        if R accepted, print w_j.

这个想法是,对于 L 中的每个字符串 w_j,有一些 i 选择,其中 R 在 i - j 步中接受 w_j,因此这最终会打印 L 中的每个字符串。

相关问题