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

问题描述

我们说语言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),因为这可能是其中最棘手的。

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

  1. 枚举器打印您的输入 w。在这种情况下,您的输入 w 肯定是在该语言中。
  2. 枚举器打印一个字符串 x,其中 w
  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 中的每个字符串。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...