停止ステータスが不明な非常に短いプログラムとは何ですか?


32

Binary Lambda Calculusのこの579ビットプログラムには、不明な停止ステータスがあります。

01001001000100010001000101100111101111001110010101000001110011101000000111001110
10010000011100111010000001110011101000000111001110100000000111000011100111110100
00101011000000000010111011100101011111000000111001011111101101011010000000100000
10000001011100000000001110010101010101010111100000011100101010110000000001110000
00000111100000000011110000000001100001010101100000001110000000110000000100000001
00000000010010111110111100000010101111110000001100000011100111110000101101101110
00110000101100010111001011111011110000001110010111111000011110011110011110101000
0010110101000011010

つまり、このプログラムが終了するかどうかはわかりません。それを決定するには、Collat​​zの予想を解く必要があります-少なくとも、2 ^ 256までのすべての数値に対して。このリポジトリには、このプログラムがどのように取得されたかの完全な説明があります。

また、停止ステータスが不明な短いBLCプログラムがありますか?


6
非常に関連する質問。コミュニティの投票、お願い:重複?
ラファエル

9
そのようなプログラムをできるだけ少ないビットで表現する仕事はコードゴルフの問題であるようであり、コンピュータ科学ではありません。
ラファエル

2
5-state TMについてのRickyの答えは、元の質問の答えよりも優れていると思います。これがduとして閉じられている場合、答えを移動できますか?
デビッドリチャービー


6
重要な詳細が欠落しています。プログラムを記述する言語を指定していません。この例では、バイナリラムダ計算を使用しています。興味のある言語はそれだけですか?アルゴリズムの本体を言語自体に直接埋め込むだけで、不明な停止ステータスを持つ1ビットプログラムを開発するのは簡単です。これは抜け穴ですが、ゴルフソリューションを求める際には注意が必要です。彼らは抜け穴が大好きです!コルモゴフの複雑さは、ここで検討する重要なトピックかもしれません。
コートアンモン-復帰モニカ

回答:


30

はい。このページは 98 5ステートがあると言うチューリングマシンその停止の状態は不明ですが。迷惑なことに、このようなマシンの例はありませんが、この26年前のページには、その時点で停止状態が明らかに不明だった2つの5ステートチューリングマシンがあります。(「シンプルカウンター」を検索すると、これら2つの間を移動できます。)リンクがダウンした場合に備えて、ここにコピーしました。

Input Bit   Transition on State     Steps            Comment
             A   B   C   D   E

    0       B1L C1R D0R A1L H1L   > 2*(10^9)       ``chaotic''
    1       B1R E0L A0L D0R C0L

    0       B1L A0R C0R E1L B0L       ?        complex ``counter''
    1       A1R C0L D1L A0R H1L

ページの下部には次のように書かれています:$ Date:2007/11/03、それでは26歳ですか?
ファラク

1
@Falaqueページの上部には、「このページは、著者の... 1990年2月のHTML書き換えです」と記載されています。テキストは、HTMLへの演出は2007年に(または最後に更新)からで、26歳
IMSoP

5

Collat​​z予想:

次のプログラムは常に停止します。

void function( ArbitraryInteger input){
     while( input > 1){
            if(input % 2 == 0)
                input /= 2;
            else
                input = (input*3) + 1;
     }

     // Halt here
}

わずかなバリエーション(Colllatzの結果に基づいているため、まだ推測です):

入力によっては、次のプログラムが同じ状態を2回入力することはありません(状態は「input」が保持する値によって決定されます)。

void function( ArbitraryInteger input){
     while( input >= 1){ // notice the "="
            if(input % 2 == 0)
                input /= 2;
            else
                input = (input*3) + 1;
     }
}

最初のプログラムが停止するかどうかに関係なく、2番目のプログラムは停止しないことに注意してください。

最初のプログラムはすべての入力で常に終了すると考えられていますが、その証拠はなく、プログラムが停止しない整数がまだ存在する可能性があります(それを証明するための賞金100ドルもあります) 。

2番目のプログラムも興味深いものです。これは、プログラムが入力に対して同じ状態を2回入力しないことを示しています。Collat​​z推測がfalse である必要があるだけでなく、明らかな1,4,2,1ループを除き、loopsなしでfalseであることが必要です。

  • Collat​​zに反例のみがループしている場合、推測のバリエーションはfalseです

  • Collat​​zがループなしでfalseの場合、推測のバリエーションはtrueです

  • Collat​​zがtrueの場合、バリエーションはfalseです

  • Collat​​zがループを持ち、分岐する数を持っているためにfalseである場合、推測のバリエーションはtrueです(ループに入ることなく分岐する数が必要です)。

バリエーションはもっと面白いと思います(偶然に見つけて@LieuweVinkhuijzenのおかげで気づいたからだけでなく)、実際に証拠が必要だからです。ブルートフォーシングによって、いつかループを見つけることができるかもしれません(そして、それは70を超えるループになります:現在の最新技術では、68ほど短い無限ループは存在できないということです)。強制はおもしろくありません:それは単なる数値計算です。しかし、無限の発散シーケンスをブルートフォースすることはできません。実際の証拠なしに本当に終了するかどうかはわかりません。

編集:Collat​​z Conjectureに関する部分をスキップしました。数年前に読んだアルゴリズムで心から真剣に答えました。すでに言及されているとは思いませんでした。

EDIT2:コメントは、私が間違いでアルゴリズムを書いたことに気づきましたが、その間違いは実際に私の答えをCollat​​zの予想とは異なります(しかし、それの直接のバリエーション)。


1
input > 1input >= 11421

あなたは正しい、私は入れたかったされている>がいる限りで、我々は停止らしのための証拠を持っていないとして、>私たちは必ず私たちが達することができない1 -> 4 -> 2 -> 1ため、それが終了しない場合の例では(ループを>「それはドンtに達する>=
-GameDeveloper

1
> =14211421> =>

2
n<1n=1n4n>1n11

1
それは本当です:)あなたは正しいです、私は私の最初のコメントに「Collat​​z予想が真実である場合」を追加すべきでした。あなたの編集がとても良いと思います。2番目のプログラムは必要ありません。「このプログラムは2回同じ状態になることはない」という推測も最初のプログラムでは解決されないためです。非常に大きな数の大きなループ。
Lieuwe Vinkhuijzen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.