我对算法有非常基本的了解。我是数学专业的毕业生。我正在阅读 Susanna Epp 的应用程序离散数学一书中的停止问题。它有以下定理:
定理:没有计算机算法会接受任何算法 X 和数据集 D 作为输入,然后将输出“halts”或“loops forever”来指示当 X 运行数据时 X 是否以有限步数终止设置 D。
证明:假设有一个算法,称为 CheckHalt,如果输入了算法 X 和数据集 D,则 CheckHalt 打印“halts”,如果 X 在使用数据集 D 或“永远循环”,如果 X 在使用数据集 D 运行时没有在有限的步数内终止。
现在下一行是我在这个证明中不理解的那些
观察构成算法 X 的字符序列可以看作是一个数据集本身。因此,可以考虑使用输入 (X,X) 运行 CheckHalt。
所以我理解 CheckHalt 本质上是作为算法 X 和数据集 D 获取输入的。它告诉我们是否使用该数据集 D 作为(X 的)输入运行算法 X,然后 X 将永远停止或循环。因此 CheckHalt(X,D) 看起来不错。
我的问题是算法 X 本身如何具有输入 X,即我们如何将算法称为数据集?
句子“组成算法X的字符序列”是什么意思?
我能理解 CheckHalt(X,D)。但是 CheckHalt(X,X) 是什么?
谢谢。