Apakah ada konstruksi eksplisit singkat dari fungsi rekursif universal ? Semua definisi yang saya lihat melibatkan penomoran mesin Turing dalam beberapa cara, yang mungkin namun tampaknya sulit dan tidak dapat dikelola untuk menulis dalam bahasa pemrograman tingkat tinggi (seperti Python, Haskell dll.)
9
Jawaban:
Bagaimana dengan penerjemah Lisp asli McCarthy (asal di sini )? Ini universal, bekerja pada pengodean alami (a Lisp AST), tidak bergantung pada penerjemah eksternal, dan sekitar 20 baris.
sumber
Tentu. Tulis rutin yang menghitung masing-masing fungsi rekursif primitif Godel , dan tulis rutin untuk operator pencarian yang tidak terikat. Himpunan fungsi yang dapat Anda hitung dengan cara ini setara dengan himpunan fungsi yang dapat dihitung oleh mesin Turing. Informasi lebih lanjut di sini .
Kelemahannya adalah setiap input untuk program universal Anda perlu dibingkai dalam hal operasi sederhana tersebut. Tentu saja, itu untuk apa kompiler.
sumber
Penerjemah apa pun untuk bahasa apa pun yang lengkap Turing adalah fungsi rekursif universal. Ada penerjemah untuk bahasa tingkat tinggi seperti C ++ atau Python.
Penomoran godel ada, tetapi secara implisit. Misalnya, kode C ++ menghitung fungsi rekursif adalah indeks untuk .gg g
sumber
Fungsi universal
u
dapat ditulis dengan mudah dalam bahasa mirip Haskell (tanpa efek samping, fungsi tingkat tinggi), yaitu:Fungsi
u
bersifat universal karena menerima (deskripsi) programf
dan rekaman masukanx
, dan memberitahu Anda hasil yang berjalanf
dix
.Walaupun jawaban ini tidak sepenuhnya serius, ia menunjukkan bahwa kompiler atau juru bahasa Haskell seperti sudah berisi semua bagian bangunan yang diperlukan untuk fungsi universal. Moral dari cerita ini adalah bahwa waktu lebih baik dihabiskan untuk mempelajari bagaimana kompiler dan penerjemah bekerja daripada khawatir tentang menerapkan fungsi universal dalam hal mesin Turing.
sumber
u
mengambil fungsi - Saya akan menyebutnya fungsi tingkat tinggi. Saya inginu
mengambil integer, atau tipe data aljabar biasa. Saya tidak memaksakan model komputasi spesifik apa pun, asalkan argumennyau
berwujud - misalnya, ia dapat diserialisasi dari / ke string.u
mengambil penutup, yang merupakan urutan byte yang terbatas. Bahkan dalam teorema utm biasa integer yangu
mengambil mewakili suatu fungsi.Periksa juga makalah ini oleh John Tromp, menggunakan logika kombinasi. Tulisan sebelumnya, tampaknya tidak lagi tersedia, bahkan lebih rapi.
sumber