为什么空白符号不被视为图灵机输入字母的一部分?


12

图灵机的定义总是明确的,因为空白符号不是输入字母的一部分。

我想知道其作为输入字母的一部分会出问题的原因,因为实际上空白符号似乎已经成为输入的一部分。

为了解释最后一句话中的“似乎”,请考虑以下内容。

在默认设置中,输入右边将出现无数个空白符号。当磁带头移到第一个空白符号上方时,计算可以继续进行,因为它不必处于接受或拒绝状态。

现在假定计算随后将输入字母中的符号写到第一个空白符号的右侧,然后返回到最左侧的位置,同时还返回到开始状态。然后,它将使用其他磁带“重新开始”。实际上,它现在从一个不同的输入开始,在空白的右边有以前没有的输入符号。输入似乎有效地包含空白符号。机器的其他行为现在也可能有所不同:再次遇到空白后,它将在右侧遇到不同的符号。

假设确实存在这种情况,为什么不考虑输入字母的空白符号部分,为什么不允许将其作为“初始”输入的一部分呢?

也许这只是一种定义输入的方式,使输入并不总是无限的?


在上课时,我设计了图灵机,该机利用输入中的β(局部空白符号)作为字段分隔符。
约书亚

Answers:


23

主要原因是它允许机器检测输入的结尾:它是第一个空格(前面的字符)。如果在输入中允许使用空格,则机器将永远无法知道是否可以通过向右扫描更远来找到更多输入。当然,您可以通过使用特殊的“输入结束”字符来解决该问题,但是您必须坚持认为字符不会出现在输入中,因此您将问题更深了一层。

这也使初始条件的指定更加容易:输入是初始磁带的非空白部分,该部分必须是有限且连续的。而且,如果您希望空白字符成为输入字母的一部分,则可以随时添加一个额外的字符(称其为“空格”或其他内容),并让机器按照您希望的方式运行。


2
嗯,当然,如果无法确定初始输入的结尾,则无法进行某些计算。但是除此之外,该符号没有什么特别的。而且我想使用空格符号是术语经济的问题,因为无论如何您都需要在字母表中使用该符号。我认为,当最初使用明确的输入结束符号和注释进行定义时,这对我来说将更为明显,而这并不是严格必要的,而且经常被忽略。
混乱

1
有简单的输入编码,不需要额外的符号。例如,可以通过考虑成对的字符00、01、10和11来模拟四个字符的字母,然后(例如)指定解码{00}0{11}1个{1001}b。但这大大简化了允许使用第三个字符的过程,并且这样做没有任何实际的不利影响。
Yonatan N

2
看到图灵机需要规则来控制它读取空白时的操作,并且可能有一条规则告诉它写入空白,这并不意味着空白确实是其字母表的一部分吗?我不明白为什么输入中可能不包含空格。如何使用非空白字符和单个空白作为分隔符来编码输入项?然后,多个连续的空白表示输入的结尾。
罗西F

3
@YonatanN当然。那是“简单的”,但使用空白符号会更简单。
大卫·里奇比

3
@RosieF空白是磁带字母的一部分;输入字母是该字母的子集。而且,可以确定的是,您可以为输入在某些情况下(如您所做的)如何包含空格的行为建立约定,但这只会使定义更加复杂。更复杂的定义意味着很难证明有关图灵机的情况。而且,由于Turing机器实际上仅用于证明事物(如果您想设计一台实际的计算机,那么它就不会是TM),这不是一个很好的折衷方案。
大卫·里希比

6

您可以将空白符号定义为字母的一部分。这样做的问题是,如果输入b010010b(其中b表示空白)的图灵机从不读取第二个b,则该机器在以b010010b开头的所有输入上的行为将完全相同。

这些图灵机称为前缀图灵机,它们对于证明有关Kolmogorov复杂度的一些定理非常有用。


5

答案很简短:磁带字母是可以出现在磁带上的一组符号,其中包括空白符号。的输入字母是一组可以出现的符号的初始输入,并且它不包括空白符号。机器关心的主要字母是磁带字母:例如,当看到空白时,它仍然需要处理的规则。

正如其他人所说,这种区别很重要,这样机器才能知道输入的结束位置。这是您不能(有用)将零字符放在C的字符串中间的原因:零字符保留表示“在此数据末尾的最后一个非零字符,因此看到这个,就完成了。” 如果您希望字符串中间包含零个字符,则编写起来strlen会困难得多。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.