图灵机只是一个计算机程序,与其它程序一样。 现在人们可能会问,所有可以写成计算机程序的问题是否 可以通过计算机如图灵机来计算或解决。 例如,你有没有想过是否可以在你的计算机上避免这种消息? 这个如何! 某些版本的Microsoft Windows可怕的蓝屏 告诉您计算机崩溃了。 事实证明它们不能完全消除,事实证明这些 问题是不可解决的或不可计算的。 如果您想询问有关图灵机或计算机程序 的一般行为的问题。 Alan Turing (艾伦·图灵)自己也表明,David Hilbert (大卫·希尔伯特), 希望的数学是不可能的。 因此,想象一下,我们能够知道计算机程序何时永远不会停止, 例如您从计算机收到消息, 告诉您运行程序时出现问题。 换句话说,我们可以构建一个图灵机U, 它接受另一台机器M的描述作为输入,然后U停止并告诉你M如果M没有停止则不停止, 或者如果M停止则U不停止。 但是,如果我们用U本身取代M,这可能会导致矛盾, U正在描述自己! 因此,如果U停止,那么U不会停止,如果U停止,U不会停止! 所以这意味着我们的假设是错误的, 并且实际上不可能一般地知道图灵机M是否会停止。 因此在某种程度上证明了为什么公司无法编写完全无瑕的软件。 有一个花哨的技术名称 就是停机问题的不可判定性的。 这是Hilbert问题的简化答案,与数学问题有关, 因为数学问题类似计算机程序。 但积极的结果,  我们在讲座开始时谈论的 有着突出的后果,并且如下。 在现代计算机时代之前,人们可能认为需要一台不同的机器 来完成不同的任务,如果你想写小说,那需要一台打字机, 如果你想听音乐,你需要一个无线电设备, 如果你想联系某人,你需要一部电话。 但现在所有这些以及更多都是由一台机器完成的。 这不是很棒吗? 换句话说,有一台机器用于所有东西, 机器的特性称为图灵普遍性。 因此,在练习中,我们为了证明Halting问题的不可判定性, 我们将图灵机M的描述编码为机器U的输入。 嗯,这不是一个明显的技巧, 人们需要证明确实可以做到这样的事情,并且通过这样做,你可以按照M的指示行事, 就像M一样。这就是Alan Turing所做的。 他通过编写这样一台通用的图灵机证明了这一点, 任何图灵机都可以将其编码为磁带上的输入, 用于可以模拟所有其它机器。 显而易见因为这是我们一直在做的事情。 当我们打开一个应用程序时,我们重新编程, 计算机以表现出不同的行为, 这就是图灵所理解并给予我们的! 他告诉我们除了程序和数据之间的操作之外没有其他根本的区别, 因为程序和数据可以相互表示。 那么构建或实际编写通用图灵机有多难? 嗯,实际上很容易! 以下是由Alex Stangl用C ++语言编写实现的, 为几年前组织的比赛。 你可以看到它有多小,不要试图理解它,因为代码是非常混淆的, 因为比赛的目的是在每种编程语言中编写 尽可能小的图灵机。 这是图灵最初的通用图灵机! 看一下计算机科学的历史不是很神奇吗? 这是一个棘手的机器,因为其中一些标签不是传统的图灵机状态, 而是图灵在他的论文中定义的子程序。 例如,E代表擦除。 如果您想了解更多信息,可以访问我的博客。