Kelengkapan Turing mengatakan satu hal dan hanya satu hal: model perhitungan adalah Turing-complete, jika ada perhitungan yang dapat dimodelkan oleh Mesin Turing juga dapat dimodelkan oleh model itu.
Jadi, apa saja komputasi yang bisa dimodelkan Mesin Turing? Yah, pertama dan terutama, Alan Turing dan semua rekannya hanya tertarik pada fungsi pada bilangan alami. Jadi, Mesin Turing (dan kalkulus λ, kalkulus kombinator SK, fungsi μ-rekursif, ...) hanya berbicara tentang kemampuan komputasi fungsi pada bilangan asli. Jika Anda tidak berbicara tentang fungsi pada bilangan asli, maka konsep Turing-kelengkapan bahkan tidak masuk akal, itu sama sekali tidak berlaku.
Namun, perlu diketahui bahwa kita dapat menyandikan banyak hal menarik sebagai bilangan alami. Kita dapat menyandikan string sebagai bilangan alami, kita dapat menyandikan grafik sebagai bilangan alami, kita dapat menyandikan boolean sebagai bilangan alami. Kita dapat menyandikan Mesin Turing sebagai bilangan alami, yang memungkinkan kita membuat Mesin Turing yang berbicara tentang Mesin Turing!
Dan, tentu saja, tidak semua fungsi pada bilangan asli dapat dihitung. Mesin Turing hanya dapat menghitung beberapa fungsi pada bilangan asli, kalkulus λ hanya dapat menghitung beberapa fungsi pada bilangan asli, kalkulus kombinator SK hanya dapat menghitung beberapa fungsi pada bilangan asli,…. Anehnya (atau tidak), ternyata setiap model perhitungan (yang benar-benar dapat diwujudkan dalam jagat fisik kita) dapat menghitung fungsi yang sama pada bilangan alami (setidaknya untuk semua model yang telah kita temukan sampai sekarang). [Catatan: jelas, ada model komputasi yang lebih lemah , tetapi kami belum menemukan yang lebih kuat, kecuali beberapa yang jelas-jelas tidak kompatibel dengan alam semesta fisik kita, seperti model yang menggunakan bilangan real atau perjalanan waktu.]
Fakta ini, bahwa setelah lama mencari banyak model yang berbeda, kami menemukan, setiap saat, bahwa mereka dapat menghitung fungsi yang persis sama, adalah dasar untuk Turing-Turing-Gereja, yang mengatakan (secara kasar) bahwa semua model-model perhitungan sama kuatnya, dan bahwa semuanya menangkap gagasan "ideal" tentang apa artinya menjadi "dapat dihitung". (Ada juga aspek CTT kedua yang lebih filosofis, yaitu bahwa manusia yang mengikuti algoritme juga dapat menghitung fungsi yang persis sama dengan yang dapat dihitung TM dan tidak lebih.)
Namun , tidak ada yang mengatakan apa-apa tentang ini
- seberapa efisien berbagai model
- betapa nyamannya mereka untuk digunakan
- apa lagi yang bisa mereka lakukan selain menghitung fungsi pada bilangan asli
Dan bahwa justru di mana perbedaan antara model yang berbeda dari perhitungan (dan bahasa pemrograman) ikut bermain.
O(sizearray)O(size2array)s i zea r r a ys i zea r r a y
Sebagai contoh untuk kenyamanan yang berbeda, Anda bisa membandingkan kode yang ditulis dalam bahasa tingkat tinggi, kode yang ditulis dalam rakitan, dan deskripsi TM untuk memecahkan masalah yang sama.
Dan saklar lampu Anda adalah contoh dari jenis ketiga perbedaan, hal-hal yang dapat dilakukan beberapa model yang tidak berfungsi pada bilangan asli dan karenanya tidak ada hubungannya dengan kelengkapan Turing.
Untuk menjawab pertanyaan spesifik Anda:
Tapi bisa saja program yang ditulis dalam bahasa yang lengkap Turing harus ditulis ulang di lain?
Tidak. Hanya jika program menghitung fungsi Turing-computable pada bilangan asli. Dan bahkan kemudian, mungkin perlu pengkodean yang kompleks. Sebagai contoh, λ-calculus bahkan tidak memiliki bilangan asli, mereka perlu dikodekan menggunakan fungsi (karena fungsi adalah satu-satunya yang dimiliki λ-calculus).
Pengkodean input dan output ini bisa sangat kompleks, seperti yang dapat mengekspresikan algoritma. Jadi, walaupun benar bahwa program apa pun dapat ditulis ulang, program yang ditulis ulang mungkin jauh lebih kompleks, lebih besar, menggunakan lebih banyak memori, dan jauh lebih lambat.
Bagaimana jika Majelis saya memiliki kode sandi LIGHTBUTTON? Secara fisik saya tidak dapat meniru bahasa itu pada sistem (bahasa) tanpa bola lampu.
Bola lampu bukan fungsi Turing yang dapat dihitung pada bilangan asli. Sungguh, bola lampu bukanlah fungsi atau perhitungan. Mengaktifkan dan menonaktifkan bola lampu adalah efek samping I / O. Mesin Turing tidak memodelkan efek samping I / O, dan Kelengkapan Turing tidak relevan bagi mereka.
Pada bilangan real arbitrer.
Kelengkapan Turing hanya berkaitan dengan fungsi yang dapat dihitung pada bilangan asli, itu tidak berkaitan dengan bilangan real.
Kelengkapan Turing sama sekali tidak menarik ketika datang ke pertanyaan seperti milik Anda karena dua alasan:
- Ini bukan rintangan yang sangat tinggi. Yang Anda butuhkan adalah
IF
, GOTO
, WHILE
, dan satu variabel bilangan bulat (dengan asumsi variabel dapat menahan bilangan bulat sewenang-wenang besar). Atau, rekursi. Banyak dan banyak dan banyak hal yang Turing-lengkap. Permainan kartu Magic: The Gathering sudah selesai Turing. CSS3 selesai-Turing. File sendmail
konfigurasi selesai Turing. Intel x86 MMU sudah selesai Turing. MOV
Instruksi Intel x86 adalah Turing-complete. Animasi PowerPoint sudah selesai Turing. Excel (tanpa skrip, hanya menggunakan rumus) sudah selesai Turing. Protokol perutean BGP sudah selesai Turing. sed
adalah Turing-complete. mod_rewrite
Aturan Apache sudah lengkap Turing. Google untuk " (secara tidak sengaja ATAU mengejutkan) telah selesai"untuk menemukan beberapa contoh menarik lainnya. Jika hampir semuanya Turing-lengkap, Turing-lengkap berhenti menjadi properti yang menarik.
- Sebenarnya tidak perlu berguna. Banyak hal bermanfaat yang belum selesai Turing. CSS sebelum versi 3 tidak Turing-lengkap (dan fakta bahwa CSS3 adalah tidak benar-benar digunakan oleh siapa saja). SQL sebelum 1999 tidak menyelesaikan-Turing, namun, itu sangat berguna bahkan saat itu. Bahasa pemrograman C tanpa pustaka tambahan sepertinya tidak lengkap Turing . Bahasa yang diketik dengan tergantung, kurang lebih menurut definisi, bukan Turing-complete, namun, Anda dapat menulis sistem operasi, server web, dan game di dalamnya.
Edwin Brady, penulis Idris, menggunakan istilah "Tetris-complete" untuk membicarakan beberapa aspek ini. Menjadi Tetris-complete tidak didefinisikan dengan ketat (selain dari yang jelas "dapat digunakan untuk mengimplementasikan Tetris"), tetapi itu mencakup hal-hal seperti menjadi tingkat tinggi dan cukup ekspresif sehingga Anda dapat menulis permainan tanpa menjadi gila, mampu berinteraksi dengan dunia luar (input dan output), mampu mengekspresikan efek samping, mampu menulis loop peristiwa, mampu mengekspresikan pemrograman reaktif, asinkron, dan bersamaan, mampu berinteraksi dengan sistem operasi, mampu untuk berinteraksi dengan perpustakaan asing (dengan kata lain: bisa memanggil dan dipanggil dengan kode C) dan sebagainya. Itu adalah fitur yang jauh lebih menarik dari bahasa pemrograman tujuan umum daripada Turing-kelengkapannya.
Anda mungkin menemukan jawaban saya untuk pertanyaan yang Anda tautkan menarik, yang menyentuh beberapa poin yang sama meskipun menjawab pertanyaan yang berbeda.