Ini adalah sebuah polisi dan pencuri tantangan berdasarkan definisi bahasa dan membuktikan bahwa mereka Turing lengkap.
Ini adalah utas polisi. Utas perampok ada di sini .
Polisi
Sebagai seorang polisi, Anda akan menyiapkan dua hal:
Spesifikasi formal bahasa pemrograman, atau sistem komputasi lainnya. (Sistem komputasi didefinisikan di bawah ini.)
Bukti bahwa sistem Anda Turing lengkap, sesuai dengan definisi yang agak ketat di bawah ini.
Anda akan memposting spesifikasi bahasa Anda, dan perampok akan mencoba untuk "memecahkannya" dengan membuktikan kelengkapan Turing-nya. Jika kiriman Anda tidak retak dalam waktu satu minggu, Anda dapat menandainya sebagai aman dan memposting bukti Anda. (Jawaban Anda dapat dibatalkan jika seseorang menemukan kesalahan dalam bukti Anda, kecuali jika Anda dapat memperbaikinya.)
Ini adalah sebuah kontes popularitas, jadi pemenang akan menjadi jawaban yang memiliki suara terbanyak, dan yang tidak retak atau tidak valid. Tantangannya terbuka - saya tidak akan menerima jawaban.
Demi tantangan ini, sistem komputasi akan didefinisikan sebagai empat hal:
"Program set"
P
. Ini akan menjadi himpunan tak terhingga yang tak terhitung jumlahnya, misalnya string, integer, pohon biner, konfigurasi piksel pada kisi, dll. (Tetapi lihat batasan teknis di bawah ini.)Suatu "set input"
I
, yang juga akan menjadi set yang tak terhingga jumlahnya, dan tidak perlu set yang samaP
(meskipun bisa jadi)."Himpunan keluaran"
O
, yang juga akan menjadi himpunan tak terhingga yang terhitung, dan mungkin atau mungkin tidak sama denganP
atauI
Prosedur deterministik, mekanistik untuk menghasilkan output
o
dari programp
dan inputi
, di manap
,i
dano
merupakan anggotaP
,I
danO
masing - masing. Prosedur ini harus sedemikian rupa sehingga pada prinsipnya dapat diimplementasikan pada mesin Turing atau model komputasi abstrak lainnya. Prosedurnya, tentu saja, gagal berhenti, tergantung pada program dan inputnya.
Set P
, I
dan O
harus sedemikian rupa sehingga Anda dapat mengekspresikannya sebagai string dengan cara yang dapat dihitung. (Untuk pilihan yang paling masuk akal, ini tidak masalah; aturan ini ada untuk mencegah Anda memilih set yang aneh, seperti set mesin Turing yang tidak berhenti.)
Kelengkapan Turing akan didefinisikan sebagai berikut:
- Untuk setiap fungsi parsial dihitung
f
dariI
keO
, terdapat sebuah programp
diP
sehingga diberikanp
dan masukani
, output adalahf(i)
jikaf(i)
memiliki nilai. (Kalau tidak, program tidak akan berhenti.)
Kata "computable" dalam definisi di atas berarti "dapat dihitung menggunakan mesin Turing".
Perhatikan bahwa baik aturan 110 maupun tag siklik bitwise tidak selesai-Turing oleh definisi ini, karena mereka tidak memiliki struktur input-output yang diperlukan. Kalkulus Lambda adalah Turing lengkap, selama kita mendefinisikan I
dan O
menjadi angka Gereja . (Ini bukan Turing-lengkap jika kita mengambil I
dan O
menjadi ekspresi lambda secara umum.)
Perhatikan bahwa Anda tidak harus menyediakan implementasi bahasa Anda, tetapi Anda dapat memasukkannya dalam jawaban jika Anda mau. Namun, Anda tidak harus bergantung pada implementasi untuk mendefinisikan bahasa dengan cara apa pun - spec harus lengkap dengan sendirinya, dan jika ada kontradiksi antara spec dan implementasi, ini harus diperlakukan sebagai bug dalam implementasi.