テストでバグがないことを示すことができますか?


18

(n+1)次数多項式を一意に決定するにはn + 1 ポイントが必要ですn。たとえば、平面内の2つのポイントが正確に1つのラインを決定します。

固定言語でfを計算するプログラムの長さを考慮して、計算可能な関数を一意に決定するために必要なポイントはいくつですか?(すなわち、fのコルモゴロフ複雑性の限界)。f:NNff

少なくとも理論的には、十分なテストを行うことでプログラムの正確性を証明できるという考え方です。

fを計算する長さLのプログラムがある場合、最大Lのソース長で計算できる関数の数には限界があります。PLfL

したがって、次のことを証明するだけで十分です。

  • f でき、ソース長で計算することがL
  • Pは(テストにより)Lバイト以下で計算可能な他の関数を計算しません

この考えにはおそらく実用的な結果はありません(境界は確実に指数関数的であることに間違いありません)。


4
関数の記述がバイナリで与えられている場合、最大2L+11の記述長が最大Lます。しかし、現在の問題は、多項式とは異なり、2つの異なる計算可能な関数が無限数の入力で同じ値を簡単に取得できることです。したがって、あなたの問題は私には不可能のようです。
ブルーノ

私はあなたの考えを理解しています。ただし、説明の長さ<= Lの2つの異なる計算可能な関数は、ある点(n0の場合)で異なる必要があります。Lが与えられたn0の値を見つけることができますか?
プバレン

4
存在する場合はそのような点を見つけることができます。すべての値の関数をダブテイルを使用して計算するだけですが、そうでない場合はわかりませんが、プログラムサイズの上限の長さは何も変更しません。
カベ

7
実際、@ Kavehは、独自の議論により、上限は、計算可能なものではなく、それらがどこで異なるかを教えてくれます。もしK F L、およびF G、次いでK X 2 L + C cは、あなた(@Kaveh)が説明されているアルゴリズムの長さであり、Xれる最初の文字列であり、F及びGは異なります。特に、xK(f)K(f)LfgK(x)2L+ccxfgxビジービーバーのような関数によって制限されます。しかし、すべての発見xはそのようなことをK xは2 L + CまたはBBの計算はまだuncomputableあります。@pbaren:限界がありますが、それは単なる指数関数ではなく、計算不可能です。2L+cxK(x)2L+c
ジョシュアグロチョウ

6
@Kaveh:それは私が「ビジービーバーのような」関数によって意味したものです:をKolmogorovの複雑さ(普遍的なマシンを修正)が最大nである最長の文字列の長さとしましょう。そのような文字列は有限数しかないため、これはユニバーサルマシンの選択まで明確に定義されています。すると、B B 2 L + c は上限です。最大でLのコルモゴロフ複雑度の2つの(計算可能な)関数が、長さB B 2 L + c までのすべての点で一致する場合BB(n)nBB(2L+c)LBB(2L+c)、それらは等しいです。
ジョシュアグロチョウ

回答:


9

(これはコメントとして意図されていましたが、長くなりました)。非常に興味深い質問です。コルモゴロフ以外の複雑さの尺度についても考えている場合は、学習理論に満足できる答えがいくつかあります。その分野の専門家に任せます。

例えば、もし私が間違っていなければ、「学習可能な理論」で、Valiantは、そのk-CNF式のサイズ(任意の固定kに対して)の多項式数の「正の点」が与えられると、ブール関数を再構築できることを証明しました、そして私は「正の点」という形のそれらを意味します)。(x1,,xn,1)

KnuthのTAOCP 7.2.1.6では、(クリスマスツリーパターンを使用して)単調なブール関数(つまり、各変数の非減少)を再構築するには、正確にが必要であることが示されていポイント。(n+1n/2+1)


7

デイゴの答えの線に沿って続けるために、学習理論からの標準的なサンプルの複雑さの限界は、「ほぼ正しい」プログラムを見つけることに満足しているなら、あなたは全く多くの点を試す必要がないことを示します。長さdのプログラムがしかないように、プログラムをバイナリでエンコードしているとしましょう。また、入力例何らかの分布があると仮定します。おそらくあなたの目標は、あなたがほぼ正しいと確信しているプログラムを見つけることです(「Valients Correct」、つまりValiants PAC学習モデルのように)。つまり、と一緒に少数のサンプルを取り込み、少なくとも確率でアルゴリズムを実行する必要があります。 D X D F X 1 - δ P F 1 - ε D2dDxDf(x)(1δ)から引き出された入力の少なくとも分数でと一致するプログラムを出力します。 Pf(1ϵ)D

単純に例描画し、すべての例でと一致する長さプログラムを出力します。(が最大でコルモゴロフ複雑度を持っていると仮定するため、1つは存在することが保証されます)...X D P D F F DmxDPdffd

例の分以上でと一致しない特定のプログラム、選択した例と一致する確率はどのですか?最大でです。この確率を最大でて、すべてのプログラムに結合境界を取り、少なくとも確率で、「悪い」プログラムが一貫していないと言いたい私たちの描かれた例で。解決すると、 例だけ十分であることがわかり 。(すなわち、コルモゴロフ複雑度において線形的にのみ多くのF ε M 1 - ε M δ / 2 D 2 D 1 - δ M 1Pfϵm(1ϵ)mδ/2d2d1δ

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

ところで、このような議論は「Occam's Razor」を正当化するために使用することができます:それらを説明するすべての理論の中で、固定数の観測が与えられると、最小の過剰適合の可能性があるので、最も低いコルモゴロフの複雑さを持つものを選択する必要があります

もちろん、この方法で1つの固定プログラムのみをチェックする場合は、例のみが必要です...O(log(1/δ)/ϵ)


3

簡単な答えは次のとおりです仮定すると 、その後、の値をすべて知る必要がありますを一意に決定することを指します。したがって、プログラムの長さが非常に短いことを知らない限り、スケッチする方法はまったく役に立ちません。よりもはるかに短いですビット。Llg|N|f|N|fLlg|N|

関数のファミリー検討、関数として定義され場合とであれば。の計算のコルモゴロフの複雑さは約ことに注意してくださいソースコードでの値をハードコードでき、必要なのは単純な条件ステートメント( extra)だけだからです。、F 、I 、F 、IX = 1 、I = X F IX = 0 、I X F I LG | N | i O 1 F={fi:iN}fifi(x)=1i=xfi(x)=0ixfilg|N|iO(1)

ただし、入力でテストしない限り、とall-zeros関数を区別することはできません。入力またはテストしない限り、と区別できません。したがって、あなたが評価する必要がありますすべてで入力、どのを処理するかを一意に決定します。(OK、技術的には、入力で評価する必要がありますが、何でも。) i f i f j i j f | N | f i | N | 1fiififjijf|N|fi|N|1


0

プログラムを任意に長くすることができます。したがって、任意のプログラムが与えられた場合、その言語がこのプログラムの言語と同等であるかどうかを判断できます。ライスの定理ではそれができません。


1
いくつかのインスタンスでプログラムを実行してプログラムをチェックするという考え方は、一般的には機能しないという正当な点があります。
伊藤剛
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.