Program 579-bit dalam Binary Lambda Calculus ini memiliki status penghentian yang tidak diketahui:
01001001000100010001000101100111101111001110010101000001110011101000000111001110
10010000011100111010000001110011101000000111001110100000000111000011100111110100
00101011000000000010111011100101011111000000111001011111101101011010000000100000
10000001011100000000001110010101010101010111100000011100101010110000000001110000
00000111100000000011110000000001100001010101100000001110000000110000000100000001
00000000010010111110111100000010101111110000001100000011100111110000101101101110
00110000101100010111001011111011110000001110010111111000011110011110011110101000
0010110101000011010
Artinya, tidak diketahui apakah program ini berakhir atau tidak. Untuk menentukannya, Anda harus menyelesaikan dugaan Collatz - atau, setidaknya, untuk semua angka hingga 2 ^ 256. Pada repositori ini ada penjelasan lengkap tentang bagaimana program ini diperoleh.
Apakah ada (banyak) program BLC pendek yang juga memiliki status penghentian yang tidak diketahui?
algorithms
computability
kolmogorov-complexity
Viktor Maia
sumber
sumber
Jawaban:
Iya nih. Halaman ini mengatakan ada 98 5-negara mesin Turing yang status tersendat-sendat tidak diketahui. Anehnya, ia tidak memberikan contoh mesin seperti itu, tetapi halaman berusia 26 tahun ini memberikan 2 mesin 5-state Turing yang status penghentiannya tampaknya tidak diketahui pada waktu itu. (Mencari "penghitung sederhana" akan membawa Anda tepat di antara 2. itu.) Saya menyalinnya di sini jika tautannya turun:
sumber
Dugaan collatz:
Program berikut selalu berhenti:
Variasi sedikit (masih berupa dugaan, karena didasarkan pada hasil dari Collatz):
Untuk beberapa input, program berikut tidak akan pernah memasuki status yang sama dua kali (di mana status ditentukan oleh nilai yang dimiliki oleh "input"):
Perhatikan bahwa program kedua tidak pernah berhenti, terlepas dari apakah program pertama berhenti atau tidak.
Diyakini bahwa program pertama selalu berakhir untuk input apa pun, namun, kami tidak memiliki buktinya, dan mungkin masih ada beberapa bilangan bulat yang tidak dihentikan oleh program (ada juga hadiah $ 100 untuk membuktikannya) .
Program kedua juga menarik: ia menyatakan bahwa program tidak akan pernah memasuki keadaan yang sama dua kali untuk beberapa input, yang pada dasarnya mengharuskan program pertama untuk memiliki urutan dikenal menyimpang tanpa mengulangi. Ini tidak hanya mensyaratkan dugaan Collatz salah, tetapi juga mensyaratkan dugaan itu salah dan tanpa loop , terlepas dari loop 1,4,2,1 yang jelas.
Jika Collatz hanya memiliki perulangan contoh, variasi pada dugaan itu salah
Jika Collatz salah tanpa loop, variasi pada dugaan itu benar
Jika Collatz benar, variasinya salah
Jika Collatz salah baik karena memiliki loop dan karena memiliki nomor yang menyimpang, variasi pada dugaan itu benar (itu hanya membutuhkan nomor yang menyimpang tanpa memasuki lingkaran)
Saya pikir variasinya lebih menarik (bukan hanya karena saya menemukannya secara tidak sengaja dan menyadarinya berkat @LieuweVinkhuijzen), tetapi karena itu sebenarnya membutuhkan bukti nyata. Dengan memaksa kasar, kita mungkin dapat menemukan loop satu hari atau yang lain (dan itu akan menjadi loop lebih dari 70 angka: keadaan saat ini adalah bahwa tidak ada loop tak terbatas lebih pendek dari 68 atau lebih), dan kasar memaksa tidak menarik: itu hanya angka-angka. Namun kita tidak dapat dengan kasar memaksa urutan divergen tak terbatas, kita tidak tahu apakah itu akan benar-benar berakhir tanpa bukti nyata.
EDIT: Saya melewatkan bagian tentang dugaan Collatz, saya benar-benar menjawab dengan algoritma yang saya baca beberapa tahun yang lalu, saya tidak berharap itu sudah disebutkan.
EDIT2: Sebuah komentar membuat saya memperhatikan saya menulis algoritma dengan kesalahan, namun, kesalahan itu memang membuat jawaban saya berbeda dari dugaan Collatz (tetapi variasi langsung dari itu).
sumber
input > 1
input >= 1
>
, namun selama kami tidak memiliki bukti untuk berhenti dengan>
kami tidak dapat memastikan kami akan mencapai1 -> 4 -> 2 -> 1
loop (misalnya jika tidak berakhir untuk>
itu jangan ' t reach>=
)