测试可以表明没有错误吗?


18

(n+1)个点才能唯一确定次数的多项式;例如,平面中的两个点恰好确定了一条线。n

给定以固定语言计算的程序的长度,唯一确定可计算函数需要多少点?(即的Kolmogorov复杂度的界)。f ff:NNff

这个想法是,至少在理论上,可以通过进行足够的测试来证明程序的正确性。

如果一个具有程序长度的,计算˚F,有一个键合上的可与至多一个源长度被计算的功能的数量大号大号˚F 大号PLfL

因此,“仅”需要证明:

  • f 可以用源长度L
  • P不计算任何其他可计算为L个字节或更少字节的函数(通过测试)

这个想法可能没有实际的后果(界限肯定是指数的)。


4
假设您的函数描述以二进制形式给出,那么描述长度最多为L,最多为2 ^ {L + 1} -1个。但是现在的问题是,与多项式不同,两个不同的可计算函数可以轻松地在无限数量的输入上采用相同的值。因此,您的问题对我来说似乎是不可能的。2L+11L
布鲁诺

我了解你的想法。但是描述长度<= L的两个不同的可计算函数在某些点(对于某些n0)应该有所不同。给定L可以找到n0的值吗?
pbaren 2011年

4
您可以找到这样的一点(如果存在),仅使用燕尾计算所有值上的函数,但是如果没有,您将永远不会知道,这是不确定的,程序大小的上限没有任何改变。
卡夫

7
实际上,根据您自己的说法,@ Kaveh 确实会告诉您有关的上限的一些区别,只是无法计算。如果和,则其中是您描述的算法的长度(@Kaveh),是和的第一个字符串不同。特别地,受到的类似于Busybeaver的函数的限制。但是,找到所有使得ķ ˚F 大号˚F ķ X 2 大号+ C ^ C ^ X ˚F X 2 大号+ Ç X ķ X 2 大号+ ÇK(f)K(f)LfgK(x)2L+ccxfgx2L+cxK(x)2L+c或仍无法计算BB。@pbaren:有一个界限,但是它不仅是指数形式的,还算不上什么。
Joshua Grochow 2011年

6
@Kaveh:这就是我所说的“类似于忙碌的海狸”函数的意思:让是最长字符串的长度,该字符串的Kolmogorov复杂度(固定通用机器)最多为。这样的字符串数量有限,因此可以根据通用机器的选择来明确定义。那么是一个上限:如果最多两个Kolmogorov复杂度函数(全部可计算)在长度所有点上都一致,则它们相等。BB(n)nBB(2L+c)LBB(2L+c)
Joshua Grochow 2011年

Answers:


9

(这只是作为评论,但持续了很长时间)。非常有趣的问题。如果您愿意考虑除Kolmogorov之外的其他复杂性度量,那么学习理论中的一些答案可能会让您满意。我把它留给该地区的专家。

例如,如果我没记错的话,Valiant在“可学习的理论”中证明,只要在其k-CNF公式的大小(对于任何固定k ,我的意思是“正点”形式)。(x1,,xn,1)

在Knuth的TAOCP 7.2.1.6中,它以惊人的方式(使用圣诞树模式)显示出,要重建一个Monote布尔函数(即,每个变量不减少),您需要精确地分。(n+1n/2+1)


7

要继续按照Deigo的回答行事,学习理论的标准样本复杂性边界告诉您,如果您对找到“近似正确”的程序感到满意,则根本不需要尝试太多。可以说我们是以二进制形式编码程序,因此只有程序的长度为d。还假设输入示例存在一些分布。也许您的目标是找到一个您肯定确定是正确的程序(“可能近似正确”,即在Valiants PAC学习模型中)。也就是说,要运行一个算法,将在一个小样本连同,并且将与概率至少 d X d ˚F X 1 - δ P ˚F 1 - ε d2dDxDf(x)(1δ)输出某些程序,其与一致上至少一个的从绘制输入分数。 Pf(1ϵ)D

我们将简单地绘制示例,并输出与所有示例上的一致的,长度为任何程序(因为我们假设最多具有 Kolmogorov复杂度,所以保证存在一个)。X d P d ˚F ˚F dmxDPdffd

什么是概率特定程序是不同意上一个多的例子分数是一致的,我们选择的例子吗?最多为。我们希望使该概率最大为以便我们可以对所有程序进行并集约束,并说概率至少为,没有“坏”程序是一致的与我们绘制的示例。通过求解,我们看到仅以 为例就足够了 。(即的Kolmogorov复杂度仅线性地˚F ε 1 - ε δ / 2 d 2 d 1 - δ 1Pfϵm(1ϵ)mδ/2d2d1δ

m1ϵ(d+log1/δ)
f...)

顺便说一句,类似这样的论点可以用来证明“奥卡姆剃刀”的合理性:给定一定数量的观察结果,在所有解释它们的理论中,您应该选择具有最低Kolmogorov复杂度的理论,因为过拟合的机会最少。

当然,如果您只想以这种方式检查单个固定程序,则只需要示例...O(log(1/δ)/ϵ)


3

这是一个简单的答案:假设,那么你需要知道的价值在所有指向唯一确定点。因此,除非您以某种方式知道程序的长度非常短:比短得多,否则您绘制的方法根本没有帮助位。Llg|N|f|N|fLlg|N|

考虑的功能的家庭,其中被定义为函数,如果和,如果。请注意,计算的Kolmogorov复杂度约为lg |。N | 位,因为您可以在源代码中对i的值进行硬编码,然后您只需要一个简单的条件语句(额外增加O 1 )个)。F={fi:iN}fifi(x)=1i=xfi(x)=0ixfilg|N|iO(1)

但是,你不能区分从全零的功能,除非你在输入测试。除非您对输入ij进行测试,否则无法将f if j区分开。因此,你需要评估˚F在所有| N | 输入,唯一地确定哪些˚F ,我们正在处理。(好的,从技术上讲,您需要在| N |1个输入上对其进行评估,但无论如何。)fiififjijf|ñ|F一世|ñ|-1个


0

您可以使程序任意长。因此,对于任何程序,您都可以决定其语言是否与该程序的语言相同。根据赖斯定理,您无法做到这一点。


1
您有一个合理的观点,即在多个实例上运行以检查程序的想法通常不会起作用。
伊藤刚(Tsuyoshi Ito)
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.