停止問題の


9

簡単な練習問題である次の質問に遭遇しました(下のネタバレ)。

私たちは、与えられたn停止問題のインスタンス(つまり、翻訳メモリM1,...,Mn)、そして私たちは、正確に停止し、それらのどれかを決定する必要がありϵ。つまり、を出力する必要があります{i:Mi halts on ϵ}。私たちは停止問題の神託を与えられますが、それを最小限の回数使用する必要があります。

log(n+1)呼び出しで実行できることを示すことは難しくありません。

私の質問は、私たちは下限を証明できますか?そのような境界を見つけるのが非常に難しいと疑う理由はありますか?

質問自体への答え(ネタバレ、ホバーマウス):

3 TM の場合を考えます。M 1M 2M 3を並行して実行し、少なくとも2つが停止すると停止する(そうでなければスタックする)TM H2を構築できます。同様に、少なくとも1つが停止すると停止するTM H 1を作成できます。その後、H 2でオラクルを呼び出すことができます。停止した場合は、マシンを並行して実行し、停止するまで待つことができます。その後、最後のオラクルを呼び出すことができます。オラクルが「ノー」と言う場合、H 1でオラクルを実行します。M1,M2,M3H1H2H1。停止した場合は、1つが停止するまでマシンを実行します。停止するのはそれだけです。H1が停止しない場合、それらのいずれも停止しません。これをn台のマシンに拡張するのは簡単です。

この質問に関する最初の観察は、オラクルなしでマシンを実行することによって情報を取得する能力に大きく依存しているため、情報理論的なツールを使用して解決することは不可能に思われるということです。


@Kaveh-Neal Youngが書いたように、停止マシンの正確なセットを計算する必要があります。
Shaull

回答:


11

結果は次の場所にあります

彼らの証明は、実際には、問題を停止する問題自体は言うまでもなく、任意のセットXに対する未満のクエリでは解決できないことを示しています。一部の表記では、問題はC K nまたはC H A L T nで示される場合があります(停止問題のお気に入りの表記に応じて)。log2nXCnKCnHALT

これと関連する多くの結果については、以下も参照してください。


10

編集:私は答えていたという議論は間違っていなかったが、それが唯一の上限は、のためにタイトでなければならなかったことを示したという点で、それは、少し誤解を招くだったいくつか それは時にタイトなければならないため、実際には些細である(nは= 2、境界は1)。nn=2

これはより正確な議論です。 特定のn上限が緩い場合、すべてのnで必要なOracle呼び出しの数はO 1 です。log2nn nO(1)

(確かにO 1 ではない ので、上限は決して緩いものではありません!しかし、実際にここで証明することはできません。問題に対する他の答えを考えると、追求する価値がないようです。)O(1)

最大出力計算する問題を考えてみましょう。

与えられたタプルM 1... M Nチューリングマシンのは、(チューリングマシンの上で実行している場合は停止、その最大出力計算εを)。停止しない場合は0を返します。n(M1,,Mn)ϵ

関数として、この関数の計算に必要なOracle呼び出しの最悪の場合の数は、n個の指定されたマシンのどれを停止するかを決定するのに必要な数と同じです。私はマシンが停止している知っていれば(、私は簡単に最大出力を計算することができます。逆に、私はマシンが停止しているかを知りたい場合は、問題文で構築後、私はマシン構築することができます{ M " 私を } 私は= 1 2 ... N ここで、Mは私はすべての実行N個並列に与えられたマシンを、次いで、停止及び出力Inn{Mi} (i=1,2,,n)Miniもしにそれらのが今まで停止します。最大出力により、停止した数がわかります。それから、どの停止を正確に計算できます。)i

ここで、ように最小の整数n(ある場合)とします。n0n

N nはC(n)=max{kZ:2k<n}nn

であるため、明らかにです。実際、であるため、でもありますが、特定のマシンの最大出力を計算することは決定できません(Oracle呼び出しはありません)。次に、より大きい検討します。C 1 = 1 n 0 > 2 C 2 = 0 2 nn0>1C(1)=1n0>2C(2)=02n

主張: が有限の場合、任意の、 oracle呼び出しで特定のマシンの最大出力を計算できます。 n n C n 0n0nnC(n0)(が有限の場合、ことに注意してください。) C n 0=O1n0C(n0)=O(1)

証明。。帰納法でそれを証明します。基本ケースは、これはと定義により保持されます。、N N 0 、N 0 Cnnn0n0C

ましょう任意のことTMことチューリングマシン、のみ使用して、最大出力を算出 Oracleへの呼び出しを。n 0 C n 0Q0n0C(n0)

修正します。任意の与えられたマシン次のように、最大出力を計算します。 n M 1M nn>n0nM1,,Mn

最初の マシンにます。これらのマシンでを実行することを検討してください。そのノート作る Oracleへのコールを、及びのみが存在するこれらのコールに対するOracleによって可能な応答。定義により、。してみましょう示す番目の可能性応答。それぞれについて、マシン構築 シミュレート次のようにこれらのマシンには: Q 0 n 0 Q 0 C n 0n = 2 C n 0 n = 2 C n 0 < n 0M1,,Mn0Q0n0Q0C(n0)n=2C(n0)n=2C(n0)<n0 i i = 1 n M i Q 0oiii=1,,nMiQ0

TM(入力): ϵMiϵ

  1. マシンでをシミュレートしが、オラクルを呼び出す代わりに、オラクルがに従って応答すると仮定し。n 0M 1M n 0o iQ0n0(M1,,Mn0)oi
  2. このシミュレーションは停止しない可能性があります(たとえば、がオラクルが実際に返すものでない場合)。oi
  3. シミュレーションが停止した場合、を、がと言う最大出力とします。Q 0hiQ0
  4. すべてのマシンます。それらのいずれかが出力する、停止してを出力し。M 1M n 0h i h in0(M1,,Mn0)hihi

ここで、指定された台のマシンのシーケンスで、最初の台のマシンをこれらの台のマシンます。この台のマシンのシーケンスで再帰的に計算された値を返します。(オラクルは再帰的に呼び出される前に呼び出されるわけではないので、オラクルは基本ケースに達したときにのみ呼び出されることに注意してください。)n 0 M 1M n 0 n < n 0 M 1M n n n 0n < nnn0M1,,Mn0n<n0M1,,Mnn(n0n)<n

これがこの計算が正しい理由です。以下のためにようオラクルによって``正しい「」応答であるクエリに、停止し、元の正しい最大出力与えるマシン。したがって、台のマシンの最大出力 は、少なくとも台のマシンの最大出力です。一方、ステップ4では、 はの最大出力よりも大きな出力をできません。したがって、マシンの最大出力o i Q 0 M i n 0 n M 1M n n 0M 1M n 0M iM 1M n 0n M 1M nioiQ0Min0n(M1,,Mn)n0(M1,,Mn0)Mi(M1,,Mn0)nn0(M1,,Mn) は、それらが置き換えるマシンの最大出力に等しくなります。QEDn0

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.