そのため、問題の単純化されたバージョンを解決するだけであるにもかかわらず、人々はこれを投稿し続けなければならない。じゃあオーケー :)
最後に、IbarraとTrânの論文から学んだことと、その方法が私たちの一般的な問題を破壊する理由をいくつか紹介しますが、おそらくいくつかの有用な情報を提供します。
しかし、最初に、セットを決定しようとするより単純な問題を見てみましょう
2 n }L={2n∣の3進表現と進表現の長さは偶数または奇数です2n}
これは持っているか注ではなく、元の問題のように。特に、入力数が2の累乗でない場合、任意のベースでその長さを計算しようとするのではなく、拒否します。 n2nn
これにより、問題が大幅に簡素化されます。元の数値がとして素因数分解されて書き込まれる場合、を除くすべてのについて確認するだけです。それらはすべてです。v i v 2 02v23v35v57v7...viv20
これにより、乗算/除算オートマトンの単一変数の素因数分解の指数でカウンターオートマトンの状態をエンコードする古い方法(ミンスキーによると思います)のラッパーを使用して、この単純化された問題を解決できます。上記のOPで述べたように、これは2カウンターオートマトンとほぼ同等です。k
まず、ラップするにはカウンターオートマトンが必要です。、、およびという名前の3つのカウンターを使用します。v 2 v 3 v 5kv2v3v5
オートマトンは、初期カウンター値に対してiffを受け入れますの3進表現と進表現の長さは偶数でも奇数でもあり、とは両方ともゼロです。受け入れると、最初にすべてのカウンターがゼロになります。 v 3 v 52v2v3v5
そのためのコードを、OPに似たアセンブリ形式で示します(変数を命令に追加したところです)。実行するものがないので、実際にはテストしていませんが、これは形式的であると考えています。3カウンターオートマトンはチューリング完全であり、そのいずれかの計算可能な関数を構築できることがよく知られています。初期値。
// Check that v3 and v5 are both zero.
JZ v3, check5
GOTO reject
check5: JZ v5, init3
GOTO reject
// Decrement v2 until it is zero, constructing 2^n in the process. If 2^n
// was even, we will then pass to even2 with 2^n in v3; If 2^n was odd, we
// will pass to odd2 with 2^n in v5.
init3: INC v3 // Set v3 to 1 = 2^0 to start with.
even1: // We have decremented v2 an even number of times so far.
// 2^decremented amount is in v3.
JZ v2, odd2
DEC v2
dup3to5: JZ v3, odd1
DEC v3
INC v5
INC v5
GOTO dup3to5
odd1: // We have decremented v2 an odd number of times so far.
// 2^decremented amount is in v5.
JZ v2, even2
DEC v2
dup5to3: JZ v5, even1
DEC v5
INC v3
INC v3
GOTO dup5to3
// The second part checks the ternary length of 2^n, which starts out in v3
// or v5 according to whether the *binary* length of 2^n (i.e. n+1) was odd
// or even.
odd2: // v3 needs to have odd ternary length to accept.
// It is simplest to consider 0 to have even length in both
// binary and ternary. This works out as long as we're
// consistent.
JZ v3, reject
trisect3to5: DEC v3
DEC v3
JZ v3, even2
DEC v3
INC v5
GOTO trisect3to5
even2: // v5 needs to have even ternary length to accept
JZ v5, accept
trisect5to3: DEC v5
DEC v5
JZ v5, odd2
DEC v5
INC v3
GOTO trisect5to3
accept: HALT Accept
reject: HALT Reject
次のステップは、単一変数オートマトンの指数で上記を再エンコードすることです。結果はかなり長いので、一般的な方法を説明しますが、フルバージョン(スポットで少し「最適化」)が私のWebサイトにあります。
JZ vp, label
DEC vp
next: ...
(基本的にpで除算し、除算が偶数でない場合は元に戻すためにクリーンアップを行います):
DIV p, next, ..., newlabel.fp-1
newlabel.f1: MUL p
GOTO newlabel.i1
...
newlabel.fp-1: MUL p
INC
newlabel.ip-2: INC
...
newlabel.i1: INC
GOTO label
next: ...
INC vp
になりMUL p
ます。個別でJZ
あり、DEC
最初に結合形式に変更できます。 GOTO label
とHALT Reject
変更されていません。
HALT Accept
我々は数に素因数がないことを確認する必要がありますことを私たちのケースでは、我々はまだやるために1つの最終チェックしてい除き、変わらないだろう他の当社の特定の3-カウンタオートマトンゼロので、2,3および5カウンターそれ以外の受け入れるときに使用します。これは簡単です。最終変数が1であることをテストするだけで、コードにジャンプすることで実行できます。
DEC // BTW it cannot be zero before this.
JZ accept
HALT Reject
accept: HALT Accept
私のウェブサイトのコードには、数値がゼロではないという最初のチェックもあります。これは、v3、v5のゼロチェックで冗長であることがわかりました。
私が述べたように、上記の方法を簡素化問題のために動作しますが、それは本当にありません何のために、一般的なもののために働くのチャンスを:一般的な問題での正確な値は、すべてのためプライムの指数カウントをその一般的なサイズを決定するために、どの長さは、それをさまざまな拠点にあります。この意味は:
- カウンターに使用できる「無料の」素数はありません。
- 私たちがいてもいたカウンターのための無料の素数を持って、私たちは本当にすべての指数値が無限に多くの他の素数から必要な情報を抽出する方法はありませんん事を。
それでは、特定の問題が 2CAで解決できないことを証明する方法と、それがわずらわしく破壊される方法について、イバラとトラン(自由にダウンロード可能なバージョン)による上記のリンクされた論文からの一般的な方法の要点の説明で終わりましょう場合。
最初に、すべての2CAを「通常の形式」に変更します。2つのカウンターは、「増加」と「減少」の間で「位相」を切り替えてゼロに達するまで切り替えます。この正規化されたオートマトンの状態数は、推定において重要な役割を果たします。s
次に、彼らはこのオートマトンを分析して、動作がリンクされている数値の特定の算術シーケンスを構築できると結論付けます。正確に言えば(これのいくつかは定理として述べられていないが、2つの主な例の両方の証明に暗示されている):
- 数xはオートマトンで受理された場合、サイズなし相の初めにゼロ以外のカウンタの今まで行くの、その後、整数が存在するように、すべての数字、が受け入れられます。 I ≤ S D > 0 、X + N D N ≥ 0vxii ≤sD>0x+nDn≥0
セットに少なくとも受け入れられた数値が含まれ、各数値に対してようなフェーズがある場合、および整数を見つけることができますなどXs2+1x∈Xivxi≤sp,r∈XK1,K2
- すべての整数について、といずれかがオートマトンによって受け入れられるか、両方とも拒否されます。n≥0p+nK1r+nK2
(考え:
- 彼らは必要ためにが、私は、これは実際には不要だと思います。実際にはそうです。x>sx∈X
- 拒否が非終了ではなく明示的な停止によるものである限り、これのほとんどは拒否された番号にも当てはまります。
自分の例については、彼らはまた、頻繁に使用しているという事実何の素因数がありません。不可能を証明するために、彼らはそのような算術的なシーケンスが存在できないことを示すことによって矛盾を導き出します。D,K1,K2>s
私たちの問題では、これから矛盾を取得することは、2番目のケースで壊れます。我々が持っている場合、それほど大きく十分でないとの間の数及びどちらかで割り切れるない又は、その後もの間には2のべき乗または3は存在しないであろうとなので、両方とも受け入れられるか、両方とも拒否されます。 k p r 2 k 3 k p + 6 k n q + 6 k nK1=K2=6kkpr2k3kp+6knq+6kn
ポイント1は、2と3の累乗の大部分がますます離れていくため、不可能であることを示すことができます。そして、場合は不可能な2番目のケースを示すことができると信じています(@MarzioDeBiasiに引数をメールで送信しました)。したがって、おそらく誰かがこの情報を使用してオートマトンの形式をさらに制限し、最終的にそれから矛盾を導き出すことができます。K1≠K2