我们说语言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 个问题:
假设 L 是一个 r.e. set,那么我们如何使用识别器为L创建枚举器?
如果 L 是一种语言并且有一个枚举器以递增的顺序枚举 L,那么为什么 L 是递归的?
为什么如果 L 是递归的,那么有一个 en-r 以递增的顺序枚举它?
谢谢
答案 0 :(得分:0)
我将最后解决问题 (1),因为这可能是其中最棘手的。
对于 (2),假设您有一个以递增顺序打印集合的枚举器。要从中构建决策程序,请执行以下操作。获取输入字符串 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 中的每个字符串。