Questions tagged «computability»

与可计算性理论(又称为递归理论)有关的问题

12
为什么停运问题如此重要?
我不明白为什么经常使用“ 暂停问题”来消除确定程序是否暂停的可能性。维基百科[article] [1]正确地解释了具有有限内存的确定性机器将停止或重复先前的状态。您可以使用算法来检测链表是否循环以实现具有O(1)空间复杂度的停止功能。 在我看来,“停顿问题”证明无非就是所谓的“悖论”,它是自欺欺人的自相矛盾(至少是周期性的),与说谎者的悖论一样。它得出的唯一结论是,停止功能容易受到此类格式错误的问题的影响。 因此,除矛盾的程序外,停止功能是可以确定的。那么,为什么我们认为它是相反的证据呢? 4年后:当我写这篇文章时,我只是看了这段视频。程序员得到了一些程序,必须确定哪些程序终止,然后视频继续解释为什么这是不可能的。我很沮丧,因为我知道给定一些任意程序,主角可能会证明它们是否终止。普遍性的概念以某种方式丢失了。说“无法证明某些程序终止”与“不能证明程序终止”之间是有区别的。正式证明了许多算法可以做到这一点。根据我在网上找到的每一个参考文献,未能做出这种区分是我如何找到该问题的标题。因此,我非常感谢您的回答 将停止功能重新定义为三元而不是布尔值。

3
如何确定
我们进行了以下练习。 让 F(n )= { 100ñ 以π 的十进制表示形式出现 其他f(n)={10n occurs in the decimal representation of π0else\qquad \displaystyle f(n) = \begin{cases} 1 & 0^n \text{ occurs in the decimal representation of } \pi \\ 0 & \text{else}\end{cases} 证明是可计算的。Fff 这怎么可能?据我所知,我们不知道是否包含数字的每个序列(或哪个序列),并且算法当然不能确定某个序列没有发生。因此我认为f是不可计算的,因为根本的问题只能是半确定的。ππ\piFff

5
哥德尔不完备定理,停止问题和通用图灵机之间是否有具体关系?
我一直模糊地认为,对上述问题的回答在以下几方面是肯定的。哥德尔的不完备性定理和停止问题的不可判定性都是关于可判定性的负面结果,并由对角线论证(以及在1930年代)确立,因此它们在某种程度上必须是两种方式来审视同一件事。而且我以为图灵使用了通用的图灵机来表明停止问题是无法解决的。(另请参阅此math.SE问题。) 但是,现在(在学习可计算性课程方面)我更加仔细地研究了这些问题,我对发现的结果感到困惑。因此,我需要一些帮助以理顺我的想法。我意识到,一方面,哥德尔的对角线论点非常微妙:构建一个算术语句需要很多工作,该算术语句可以解释为说出它自己的可导性。另一方面,我在这里发现的停止问题的不确定性证明非常简单,甚至没有明确提到图灵机,更不用说通用图灵机了。 关于通用图灵机的一个实际问题是,通用图灵机的字母与它所模拟的图灵机的字母相同是否重要?我认为这是必要的,以便编造适当的对角线参数(让机器自己模拟),但是我在网上发现的关于通用机器的令人困惑的描述集中,并没有发现对此问题的任何关注。如果不是因为停顿问题,通用的图灵机在任何对角线论点中都有用吗? 最后,我对这进一步的部分感到困惑同一篇WP文章的另一篇文章说,哥德尔不完整的一种较弱形式来自于停顿问题:“无法实现所有关于自然数的陈述的完整,一致和合理的公理化”,其中“声音”应被削弱。我知道,如果一个理论不能得出矛盾,那么该理论是一致的,关于自然数的完整理论似乎意味着可以从中得出关于自然数的所有真实陈述。我知道哥德尔说这样的理论不存在,但是我看不到这样一个假设的野兽怎么可能听起来不对劲,即,也得出对自然数是错误的陈述:否定这样的陈述是正确的,因此从完整性上也可以导出,这会与一致性相矛盾。 我希望您能对其中之一进行澄清。

10
人类的计算能力:人类可以决定图灵机上的暂停问题吗?
我们知道(图灵机上的)暂停问题对于图灵机是无法确定的。有一些研究人的大脑能够如何处理这个问题,可能帮助通过图灵机或通用计算机? 注意:显然,从最严格的意义上讲,您总是可以拒绝,因为图灵机是如此之大,以至于在一个人的生命周期中都无法读取。但这是一个荒谬的限制,对实际问题没有帮助。因此,为了使事情变得均匀,我们必须假设人类具有任意的寿命。 因此,我们可以问:给定图灵机T以任何合适的方式表示,任意寿命的人类H和任意数量的缓冲区(即纸和笔),H可以决定T是否停止该空单词吗? 推论:如果答案是肯定的,那么如果任何一台计算机都有机会通过图灵测试,这是否还会解决?


3
人类为什么可以解决某些“无法确定”的问题?
高阶模式匹配是一个不确定的问题。这意味着不存在算法,给定的公式a => b,其中a和b是在简单类型λ演算的开放式术语,认定的取代S,使得aS => bS,其中=>代表“具有相同的BN正常形式”。但是,人类可以有效地解决该问题。例如,给定以下问题: a = (λt . t (F (λ f x . (f (f (f x))))) (F (λ f x . (f (f x))))) b = (λ t . t (λ f x . (f (f (f (f (f (f x))))))) (λ f x . (f (f …


9
为什么图灵的某些编程语言比较完整,但缺乏其他语言的某些功能?
在编写(应该)挂钩到外部程序/函数的解释器时遇到一个奇怪的问题:'C'和'C ++'中的函数不能挂钩可变参数,例如,我无法创建调用'printf'的函数具有与它完全相同的参数,而必须调用采用可变参数的替代版本。这是非常有问题的,因为我希望能够制作一个持有匿名钩子的对象。 因此,我认为这很奇怪,因为Forth,JavaScript和也许其他多种语言都可以很容易地做到这一点,而不必求助于汇编语言/机器代码。由于其他语言可以很容易地做到这一点,这是否意味着每种编程语言可以解决的问题类别实际上也会因语言而有所不同,即使这些语言都已经完成了图灵处理?

5
迭代可以代替递归吗?
我一直看到堆栈溢出,例如here,here,here,here,here以及其他我不愿提及的其他内容,“任何使用递归的程序都可以仅通过迭代转换为程序”。 甚至还有一个非常upvoted 线程具有高度upvoted 答案是肯定的说,这是可能的。 现在我不是说他们错了。只是这个答案抵消了我对计算的微薄知识和理解。 我相信每个迭代功能都可以表示为递归,而维基百科对此有一个陈述。但是,我怀疑相反是真的。首先,我怀疑非原始递归函数是否可以迭代表示。 我也怀疑超级运算是否可以迭代表示。 在对我的问题 @YuvalFIlmus的回答(我不明白)中,他说不可能将任何数学运算序列转换为一系列加法运算。 如果YF的答案确实是正确的(我想是的,但是他的推理超出了我的脑袋),那么这是否意味着并非每个递归都可以转换为迭代?因为如果有可能将每个递归转换为迭代,我将能够将所有操作表示为一系列加法。 我的问题是这样的: 可以将每个递归转换为迭代吗,为什么? 请给一个聪明的高中生一个答案,或者本科一年级的学生会理解。谢谢。 PS我不知道什么是原始递归(我确实知道Ackermann函数,它不是原始递归,但仍然可以计算。我对它的了解也来自Ackermann函数的Wikipedia页面。) PPS:如果答案是肯定的,例如您可以编写非原始递归函数的迭代版本。例如,答案是Ackermann。它会帮助我理解。


4
有什么常用技术可以减少彼此的问题?
在可计算性和复杂性理论(可能还有其他领域)中,减少是无处不在的。有很多种类,但是原理保持不变:通过将实例映射到L_1中与解决方案等效的实例,可以证明一个问题至少与其他问题一样困难。本质上,我们表明,如果允许L_1的任何求解器使用归约函数作为预处理器,它也可以求解L_2。L 2 L 2大号1个L1L_1大号2L2L_2大号2L2L_2L 1 L 2大号1个L1L_1大号1个L1L_1大号2L2L_2 这些年来,我已经完成了减少的份额,有些事情困扰着我。尽管每个新的减少都需要(或多或少)创造性的构造,但任务可能会让人感到重复。是否有规范的方法库? 人们可以定期采用哪些技术,模式和技巧来构造归约函数? 这应该成为参考问题。因此,请谨慎给出一般的,有说服力的答案,至少由一个例子说明了这一点,但仍然涵盖了许多情况。谢谢!

9
C实际上是图灵完备的吗?
我试图向某人解释C是图灵完备的,并且意识到我实际上并不知道它在技术上确实是图灵完备的。(C代表抽象语义,而不是实际实现。) 就我所知,“明显”的答案(大致:它可以处理任意数量的内存,因此它可以仿真RAM机器,因此它是图灵完成的)实际上是不正确的,尽管C标准允许要使size_t任意大,必须将其固定为一定的长度,并且无论将其固定为多长都是有限的。(换句话说,尽管您可以给定一台任意停止的图灵机,选择一个size_t的长度以使其能够“正常”运行,但没有办法选择一个size_t的长度,以使所有停止的图灵机都能正常运行) 所以:C99 Turing完成了吗?


2
赖斯定理感到困惑
摘要:根据赖斯定理,一切都是不可能的。但是,我一直都在做这不可能的事情! 当然,赖斯定理并不仅仅是说“一切皆有可能”。它说得更具体一些:“计算机程序的每个属性都是不可计算的。” (如果要分割头发,则每个“非平凡的”属性。也就是说,所有程序具有或没有程序具有的属性都是微不足道的。但是其他任何属性都是不可计算的。) 这就是定理说的或似乎要说的。大概许多非常聪明的人已经仔细验证了该定理的正确性。但这似乎完全违背了逻辑!程序具有众多特性,可以轻松计算!!例如: 程序在暂停之前执行多少步?要确定此数字是有限的还是无限的,恰好是停止问题,该问题不可计算。决定此数字是大于还是小于某个有限的是微不足道的!只需运行该程序最多n步,然后查看它是否停止。简单!nnnnnn 同样,程序在前m个执行步骤中使用的存储单元是否少于nnn个?微不足道的。mmm 程序文本中是否提到了名为k的变量kkk?简单的文本分析将揭示答案。 程序是否调用命令σσ\sigma?再次,扫描程序文本以查找该命令名称。 我可以看到很多性能之间做一下非可计算为好; 例如,一个完整的程序运行会执行多少次添加?嗯,这几乎与询问程序执行多少步骤相同,这实际上是“停止问题”。但是看起来确实有很多程序属性,它们确实非常容易计算。然而,赖斯定理坚持认为它们都不是可计算的。 我在这里想念什么?


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.