其他分享
首页 > 其他分享> > 阿兰图灵如何证明计算机无法解决一切问题

阿兰图灵如何证明计算机无法解决一切问题

作者:互联网

  解释ALAN如何证明的计算机并非使用Python代码。

  介绍

  计算机已经成为当今社会中的一种动力,即在没有他们的情况下想象我们的生活变得越来越困难。随着机器学习的崛起,计算机和软件解决问题的自然能力已经变得越来越无与伦比。随着本世纪的精彩崛起,似乎现代技术无法解决,但这真的是这种情况吗?

  如果您花了任何时间研究和学习现代计算机和现代计算机科学的历史,那么您可能听说过阿兰图灵。阿兰是一台计算机天才,他在他的时间领先于时代,负责创造现代计算机的机械版本。不仅是科学的成就归因于他,也是更加奇妙的科学成就。

  由Alan Turing完成的奇妙科学成就的一个突出的例子是证明,计算机无法解决人类不得不提供它的所有问题。

  entsheidungsproblus假说

  1928年,一个名叫大卫·希尔伯特的数学家制定了EntscheidungsProblus的假设。这个假设的名称从德语中的英语中的决策问题转化为德语,所以从这里出来我将参考该公式作为决策问题。

  他提出的问题是

  “是否有一种算法将采用正式的语言,以及该语言的逻辑陈述,这将根据声明的真值值输出”真“或”假“?”来源:维基百科

  那个假设版本是:

  如果存在将采用正式语言的算法,以及该语言的逻辑语句,那么它应该输出“真”或“假”,具体取决于语句的真值值。

  这意味着任何采用某些特定符号的计算算法和逻辑,那么它将始终输出为true或false。换句话说,只要算法遵循凝聚率逻辑,它将始终具有输出,从而解决任何将其放入其中的问题。我们现在将正式的语言作为编程语言,以及算法作为现代计算机编程中的函数,因此它肯定有助于将这些传统版本的计算描述(更像预留在遗留前)进入更现代化的描述。考虑到这一点,我将在最后一次重构这个问题,以便将其现代化为正常程序员阅读。

  如果存在具有逻辑语法的函数,那么它应该能够根据该语句的真实输出为true或false。

  在纸上,在许多感官中,这似乎是真的。如果我们要在我们最喜欢的编程语言中编写功能,那么它可以解决它的任何问题,只要它旨在这样做。考虑一下你曾经写的每个功能做出决定,你可能会想象它提交了这一假设的范围。然而,Alan Turing对这个公式有不同的思考,并了解他如何证明它是错误的,我们需要了解他的逻辑悖论。

  Alan Turing的逻辑悖论

  1936年,Alan Tying表明这问题不存在答案。换句话说,他的同行评审透露,这个公式无效。现在,为了感到浓缩他如何进入一篇文章,这些文章不会需要六天阅读或给你一个计算机科学学位,我将大大简化了思想 - 并在Python中提供现代高级代码举个例子。此外,这里的大多数代码都是理论,并且只意味着展示Alan Tures逻辑悖论的思想,并以现代的编程语言缺乏解决方案。我还将这段代码复制到笔记本中,以便任何想要检查出来的人都可以轻松查看。

  def our_func(x):

  x +=1

  our_func(x)

  import threading

  import time

  def test_infinite(func):

  t=threading.Thread(target=func, args=([1]))

  t.start()

  time.sleep(10)

  infinite=None

  if t.is_alive():

  print("huh")

  t.stop()

  infinite=True

  else:

  infinite=False

  return(infinite)

  def second_func(x):

  r=0

  for z in range(-50, x):

  r +=z

  sf=test_infinite(second_func)

  print(sf) # False

  ff=test_infinite(our_func)

  print(ff) # False

  def invtest_infinite(infinite):

  return(not infinite)

  def inftests(func):

  infinite=test_infinite(func)

  infinite=invtest_infinite(infinite)

  考虑以下递归函数:

  def our_func(x):

  x +=1

  our_func(x)

  此功能是一个将循环开启和on Eternity的功能,从不停止直到中断或定时。使用此示例,我们可以想象一个单独的函数,告诉我们此功能是否将永远循环。当然,这本身就是我作为电脑程序员似乎不可行的东西。即使在汇编程序级别,我们也可以考虑一个部分需要耗尽,以便我们的计算机发现它是否将永远循环。但是,当然有一个人可以谈论这样的函数,而虽然这个蟒蛇的例子可能不一定能够判断某事物是否无限循环,但它可以告诉你循环在100秒内没有完成:

  import threading

  import time

  def test_infinite(func):

  t=threading.Thread(target=func, args=([1]))

  t.start()

  time.sleep(100)

  infinite=None

  if t.is_alive():

  print("huh")

  t.stop()

  infinite=True

  else:

  infinite=False

  return(infinite)

  现在考虑另一个不是无限的函数:

  def second_func(x):

  r=0

  for z in range(-50, x):

  r +=z

  我们将测试这种理论码以获取无限循环的理论码:

  sf=test_infinite(second_func)

  ff=test_infinite(our_func)

  但是,Python解释器足够聪明,不要让你做一些如此愚蠢,所以如果你试着这样做,它会返回reacursionError抛出。

  > (image by author)

  现在我们需要考虑一个新函数,我们将简单地呼唤对面。它需要一个布尔,并将其变为与本身相反。

  def invtest_infinite(infinite):

  return(not infinite)

  然后,如果我们被传递了一组指令,请考虑将发生的一组返回的指令。一种看起来有点像这样的方法:

  def inftests(func):

  infinite=test_infinite(func)

  infinite=invtest_infinite(infinite)

  对于创建悖论的最后一步,我们需要将功能包装在内部。这在Pythonic典范中不会有很大的意义,因为我们只需递归地传递我们需要函数的BOOL类型,而且会考虑在Python中是否可以在Python中进行什么。如果我们这样做,我们会看到计算机无法做出决定,因为函数调用自己逆转自己,因此在无限的悖论中离开了我们的功能,也不是假的。

  结论

  这座历史性发现背后的计算机科学在我看来非常令人着迷,而Alan Turing有点疯狂的天才来迎接它。虽然这是一个简化版的Alan Tures解释,但它确实在决策问题方面确实得到了答案。对我来说这个故事真正令人着迷的是,在第一台计算机创造之前十年的理论计算机被证明。Alan Ty实际上发明了现代计算机的理论力学版,以反驳它!该机器被称为图灵机,是对计算机的本发明的重要步骤,所有必须添加的都是微电子!非常感谢你的阅读,我希望这一点电脑历史记录是一个有趣的阅读!

标签:计算机,计算机无法,图灵,Alan,阿兰,test,func,infinite,def
来源: https://www.cnblogs.com/linjingyg/p/15784031.html