Saya sudah mencoba google untuk penjelasan tetapi sebagian besar tautan hanya mengatakan hal-hal seperti "FRACTRAN sedang selesai. Sebagai contoh, mari kita lihat multiplikasi."
Saya ingat melihat posting forum xkcd mengatakan bahwa FRACTRAN membantu poster memahami Turing Completeness. Saya mencari penjelasan intuitif mengapa esolang ini Turing lengkap, karena tidak terlalu jelas melihat mekanika bahasa.
Jawaban:
Agar bahasa imperatif menjadi lengkap, Turing harus memiliki:
FRACTRAN adalah bahasa yang terdiri dari serangkaian fraksi yang menyimpan datanya dalam eksponen bilangan prima.
Katakanlah Anda ingin menambahkan dua angka: 2 a 3 b menjadi 5 ab
Itu adalah program FRACTRAN untuk melakukan perubahan di atas.
Anda memulai dengan angka seperti 72 (2 3 3 2 ). Program berjalan 'maju' sampai menemukan nomor yang ketika dikalikan dengan instruksi adalah bilangan bulat lain (tidak ada sisa yang diizinkan).
72
akan berjalan maju sampai tiba11/2
. Kemudian akan membagi jumlahnya dengan2
dan mengalikannya dengan11
(kekuatan dalam 11 adalah variabel). Ini memberi396
.396
habis dibagi 33 (mengurangi 3 daya dan 11) dan kalikan dengan 455 (menambah variabel 5, 7 dan 13). Dan seterusnya. Deskripsi lengkap program ini dan tabel statusnya dapat dibaca di halaman wikipedia FRACTRAN , termasuk gif animasi yang sangat bagus dari program di atas.Materi FRACTRAN lain di Stack Exchange yang menyentuh pada kelengkapan Turing dapat ditemukan di: Konversi Fractran menjadi Brainfuck (ok, itu penggunaan waktu seseorang yang sangat produktif)
Bagian dari trik di sini (dan ini mulai menyimpang ke teori) adalah bahwa di belakang layar, ini adalah mesin register Minsky yang terbukti bahwa kaset tertentu (program) adalah mesin Turing JIKA rekaman itu direpresentasikan sebagai nomor Gödel yang merupakan persis apa nomor FRACTRAN itu (dari halaman wikipedia tertaut):
Jadi, kita punya loop kondisional, variabel sewenang-wenang disimpan sebagai nomor Gödel, kita punya mesin Turing.
Beberapa bacaan menyenangkan lainnya yang menyentuh tentang sifat Collatz seperti FRACTRAN dapat dibaca di Can't Decide? Putuskan keputusan! yang mengaitkan dugaan Collatz dengan FRACTRAN dan masalah penghentian.
FRACTRAN agak sulit untuk membuat seseorang berkeliaran.
Pertimbangkan programnya seperti:
Dalam hal ini, setiap blok berbentuk:
Pernyataan pertama dari program multiplikasi di atas:
Akan ditulis dalam bentuk ini sebagai:
Dan dengan demikian Anda dapat dengan jelas melihat penyimpanan data dan konstruksi perulangan yang diperlukan untuk kelengkapan Turing. Sangat sederhana, tetapi itu ada dan berjalan sebagai mesin register sederhana - tapi kemudian hanya itu yang Anda benar-benar harus bisa lakukan.
Masih belum yakin?
Ini sebagian besar meminjam dari kuliah oleh Dimitri Hendricks on Models of Computation
Ini mengambil program
(2/3)
yang sangat sederhana yang merupakan penambah (2 a 3 b -> 3 a + b ) Tapi itu merusak - nilai dalam 2 dihapus sebagai bagian dari proses.Mari kita menulis FRACTRAN tingkat yang lebih tinggi yang membuatnya mudah untuk tidak melakukan penghancuran seperti itu.
Program asli dapat dianggap sebagai:
Dalam F 2 , seseorang dapat menentukan 'fungsi' sejenis.
Untuk mengonversi program F 2 (P) menjadi program FRACTRAN standar, Anda dapat:
menjadi:
Apa yang telah dilakukan ini adalah menggunakan bilangan prima p, q, r, dan s untuk menyimpan status program.
Dan kemudian kita punya mesin register ... ia memiliki sejumlah register yang terbatas yang menyimpan sejumlah besar arbitrer dan dua instruksi:
Mesin register ini telah terbukti Turing lengkap.
Ini kemudian menunjukkan proses selama beberapa slide mengkompilasi program mesin register menjadi program FRACTRAN sebagai bagian dari proses mekanis.
Pada dasarnya:
Dan dengan demikian karena kesetaraan antara dua model komputasi ini, FRACTRAN adalah Turing yang lengkap.
Btw, jika Anda benar-benar ingin pikiran Anda meledak, baca Code Golf: Fractran di mana beberapa orang menulis program FRACTRAN untuk menjalankan program FRACTRAN lainnya.
sumber