Apa itu Turing Lengkap?

487

Apa arti ungkapan "Turing Lengkap"?

Bisakah Anda memberikan penjelasan sederhana, tanpa terlalu banyak detail teoretis?

dlinsin
sumber
2
Beberapa tautan yang sangat bagus untuk pertanyaan SO ini .
Lazer

Jawaban:

325

Berikut penjelasan singkatnya:

Sistem Turing Lengkap berarti sistem di mana suatu program dapat ditulis yang akan menemukan jawaban (walaupun tanpa jaminan tentang runtime atau memori).

Jadi, jika seseorang mengatakan "hal baru saya adalah Turing Lengkap" yang berarti pada prinsipnya (meskipun sering tidak dalam praktik) itu dapat digunakan untuk menyelesaikan masalah perhitungan.

Suatu saat itu adalah lelucon ... seorang pria menulis simulator Turing Machine di vi, jadi mungkin untuk mengatakan bahwa vi adalah satu-satunya mesin komputasi yang pernah dibutuhkan di dunia.

Mark Harrison
sumber
18
Untuk bacaan lebih lanjut, lihat The Annotated Turing. Sangat mudah didekati. amazon.com/Annotated-Turing-Through-Historic-Computability/dp/…
i_am_jorf
43
"sering tidak dalam praktik" tidak benar. Tidak ada sistem yang Turing-lengkap dalam praktiknya, karena tidak ada sistem yang dapat diwujudkan yang memiliki pita tak terbatas. Apa yang sebenarnya kami maksudkan adalah bahwa beberapa sistem memiliki kemampuan untuk memperkirakan kelengkapan Turing hingga batas memori yang tersedia.
Shelby Moore III
22
Tapi Vi adalah satu-satunya mesin komputasi yang pernah dibutuhkan di dunia ... ;-)
Joe Edgar
4
Apakah Emacs Mesin Pemutar juga? XD
alem0lars
6
Seseorang baru-baru ini menunjukkan bahwa PowerPoint Turing Lengkap juga.
Tagc
193

Berikut ini penjelasan paling sederhana

Alan Turing menciptakan mesin yang dapat mengambil program, menjalankan program itu, dan menunjukkan beberapa hasil. Tetapi kemudian dia harus membuat mesin yang berbeda untuk program yang berbeda. Jadi dia menciptakan "Mesin Universal Turing" yang dapat mengambil program APA SAJA dan menjalankannya.

Bahasa pemrograman mirip dengan mesin tersebut (meskipun virtual). Mereka mengambil program dan menjalankannya. Sekarang, bahasa pemrograman disebut "Turing complete", jika itu dapat menjalankan program apa pun (terlepas dari bahasa) yang dijalankan oleh mesin Turing diberikan waktu dan memori yang cukup.

Sebagai contoh: Katakanlah ada program yang mengambil 10 angka dan menambahkannya. Mesin Turing dapat dengan mudah menjalankan program ini. Tetapi sekarang bayangkan bahwa karena suatu alasan bahasa pemrograman Anda tidak dapat melakukan penambahan yang sama. Ini akan membuatnya "Turing tidak lengkap" (bisa dikatakan). Di sisi lain, jika ia dapat menjalankan program apa pun yang dapat dijalankan mesin universal Turing, maka Turing itu lengkap.

Sebagian besar bahasa pemrograman modern (misalnya Java, JavaScript, Perl, dll.) Semua Turing lengkap karena mereka masing-masing mengimplementasikan semua fitur yang diperlukan untuk menjalankan program seperti penambahan, perkalian, kondisi if-else, pernyataan pengembalian, cara untuk menyimpan / mengambil / menghapus data dan sebagainya.

Pembaruan: Anda dapat mempelajari lebih lanjut di posting blog saya: "JavaScript Is Turing Complete" - Dijelaskan

Raja Rao
sumber
5
Gagasan bahwa bahkan akan ada istilah untuk jenis mesin ini jauh lebih masuk akal ketika saya ingat Turing dan ilmuwan komputer awal lainnya akan membangun mesin khusus setiap kali mereka ingin menyelesaikan masalah tertentu. Kami terbiasa dengan satu mesin yang dapat diprogram ulang selamanya. Terima kasih untuk konteksnya, Raja.
Jacob Ford
Bagaimana JavaScript dapat Menyelesaikan Turing? Itu tidak memiliki sistem file, API multithreading yang tepat. Ini memiliki banyak keterbatasan, terutama karena sifat sandbox keamanan browsernya. Ini hampir tidak bisa disebut 'bahasa pemrograman'. Lihat berapa banyak varian abstraksi skrip yang ada (bereaksi, naskah .. Anda beri nama), semua itu untuk mengkompensasi apa yang tidak dimiliki JS. (asm.js harus disebutkan di sini). Java, Python atau C ++ adalah contoh 'Turing Lengkap' yang benar. Tapi js? Saya kira tidak.
Michael IV
2
@MichaelIV Mesin touring juga tidak memiliki sistem file / utas. JS benar-benar tur lengkap.
Bax
@MichaelIV Untuk menambah tanggapan Bax, orang dapat menganggap komputer modern terdiri dari beberapa mesin Turing yang bekerja sama untuk memungkinkan semua hal-hal baik yang Anda sebutkan. Misalnya CPU menghasilkan "tape" untuk dibaca GPU sehingga dapat menulis "tape" untuk monitor sehingga monitor dapat menulis "tape" kepada pengguna. Demikian juga, CPU dapat menghasilkan "tape" untuk hard drive, NIC, kartu suara, dll.
86

Dari wikipedia :

Kelengkapan Turing, dinamai menurut Alan Turing, penting karena setiap desain yang masuk akal untuk perangkat komputasi sejauh ini dapat ditiru oleh mesin Turing universal - pengamatan yang telah dikenal sebagai tesis Church-Turing. Dengan demikian, mesin yang dapat bertindak sebagai mesin Turing universal dapat, pada prinsipnya, melakukan perhitungan apa pun yang dapat dilakukan oleh komputer lain yang dapat diprogram. Namun, ini tidak ada hubungannya dengan upaya yang diperlukan untuk menulis sebuah program untuk mesin, waktu yang diperlukan untuk mesin untuk melakukan perhitungan, atau kemampuan apa pun yang mungkin dimiliki mesin yang tidak terkait dengan perhitungan.

Sementara mesin Turing yang benar-benar lengkap sangat mungkin secara fisik tidak mungkin, karena mereka membutuhkan penyimpanan tanpa batas, kelengkapan Turing sering kali secara longgar dikaitkan dengan mesin fisik atau bahasa pemrograman yang akan universal jika mereka memiliki penyimpanan tanpa batas. Semua komputer modern Turing-lengkap dalam pengertian ini.

Saya tidak tahu bagaimana Anda bisa lebih non-teknis dari itu kecuali dengan mengatakan "turing yang lengkap berarti 'dapat menjawab masalah yang dapat dihitung dengan waktu dan ruang yang cukup'".

Ran Biron
sumber
4
Dalam konteks ini, apa yang dimaksud dengan "perangkat komputasi"?
dopatraman
30
Seperti sebagian besar artikel Wikipedia, meskipun kutipan ini secara teknis benar, kutipan ini tidak memberikan nilai bagi seseorang yang tidak memiliki pengetahuan tentang subjek ini dan berusaha memahaminya. Mampu menjelaskan segala sesuatunya dengan benar adalah ilmu tersendiri :)
Lacho Tomov
76

Definisi Informal

Bahasa lengkap Turing adalah bahasa yang dapat melakukan perhitungan apa pun. The Gereja-Turing Tesis menyatakan bahwa setiap perhitungan performable dapat dilakukan dengan mesin Turing. Sebuah mesin Turing adalah mesin dengan tak terbatas random access memory dan 'Program' terbatas yang mendikte ketika harus membaca, menulis, dan bergerak melintasi memori yang, ketika harus mengakhiri dengan hasil tertentu, dan apa yang harus dilakukan selanjutnya. Input ke mesin Turing dimasukkan ke dalam memorinya sebelum dimulai.

Hal-hal yang dapat membuat bahasa TIDAK Turing lengkap

Mesin A Turing dapat membuat keputusan berdasarkan apa yang dilihatnya dalam memori - The 'bahasa' yang hanya mendukung +, -, *, dan /pada bilangan bulat tidak Turing lengkap karena tidak dapat membuat pilihan berdasarkan masukan, tetapi mesin Turing bisa.

Mesin Turing dapat berjalan selamanya - Jika kami mengambil Java, Javascript, atau Python dan menghapus kemampuan untuk melakukan segala jenis loop, GOTO, atau panggilan fungsi, itu tidak akan Turing lengkap karena tidak dapat melakukan perhitungan sewenang-wenang yang tidak pernah selesai. Coq adalah pepatah teorema yang tidak bisa mengekspresikan program yang tidak berakhir, jadi Turing tidak lengkap.

Mesin Turing dapat menggunakan memori tak terbatas - Bahasa yang persis seperti Java tetapi akan berakhir setelah menggunakan lebih dari 4 Gigabytes memori tidak akan Turing lengkap, karena mesin Turing dapat menggunakan memori tak terbatas. Inilah sebabnya mengapa kita tidak bisa benar-benar membangun mesin Turing, tetapi Java masih merupakan bahasa lengkap Turing karena bahasa Java tidak memiliki batasan mencegahnya menggunakan memori tak terbatas. Ini adalah salah satu alasan ekspresi reguler Turing tidak lengkap.

Mesin Turing memiliki memori akses acak - Bahasa yang hanya memungkinkan Anda bekerja dengan memori pushdan popoperasi ke stack tidak akan selesai sepenuhnya. Jika saya memiliki 'bahasa' yang membaca string sekali dan hanya dapat menggunakan memori dengan mendorong dan muncul dari tumpukan, itu dapat memberitahu saya apakah setiap (string memiliki )nanti sendiri dengan mendorong ketika melihat (dan muncul ketika melihatnya ). Namun, tidak dapat memberi tahu saya jika setiap (memiliki )nanti sendiri dan setiap nanti nanti [sendiri ](catatan yang ([)]memenuhi kriteria ini tetapi ([]]tidak). Mesin Turing dapat menggunakan memori akses acaknya untuk melacak ()dan[]terpisah, tetapi bahasa ini hanya dengan tumpukan tidak bisa.

Mesin Turing dapat mensimulasikan mesin Turing lainnya - Mesin Turing, ketika diberi 'program' yang sesuai, dapat mengambil 'program' mesin Turing lainnya dan mensimulasikannya pada input sewenang-wenang. Jika Anda memiliki bahasa yang dilarang menerapkan interpreter Python, itu tidak akan Turing lengkap.

Contoh dari Turing bahasa lengkap

Jika bahasa Anda memiliki memori akses acak tak terbatas, eksekusi bersyarat, dan beberapa bentuk eksekusi berulang, itu mungkin Turing lengkap. Ada sistem yang lebih eksotis yang masih dapat mencapai semua yang dapat dilakukan mesin Turing, yang membuat mereka juga menyelesaikan Turing:

  • Kalkulus lambda yang tidak diketik
  • Permainan hidup Conway
  • Template C ++
  • Prolog
Gordon Gustafson
sumber
11
SQL sudah pasti turing-complete. Ini memiliki kemampuan scripting yang memungkinkan untuk perhitungan apa pun.
nzifnab
53
Tidak, Anda membingungkan SQL dengan ekstensi seperti T-SQL / PL-SQL. ANSI SQL tidak turing-lengkap. Tapi TSQL / PLSQL - adalah.
Agnius Vasiliauskas
15
Rupanya SQL sudah selesai-selesai: stackoverflow.com/questions/900055/…
Newtang
2
Menurut kelengkapan turing - sistem Turing lengkap jika dapat digunakan untuk mensimulasikan mesin Turing satu-taped. Tetapi dalam contoh di atas ketika saya mengerti dev dibangun khusus cyclic tag systemdan tidak universal cyclic tag system. Oleh karena itu - artikel tidak membuktikan kelengkapan turing SQL. (Atau saya salah paham sesuatu)
Agnius Vasiliauskas
2
Tidak ada implementasi yang dapat direalisasikan dari bahasa Turing-lengkap, karena tidak ada kaset tanpa batas. Apa yang sebenarnya kami maksudkan adalah bahwa beberapa bahasa memiliki kemampuan untuk memperkirakan kelengkapan Turing hingga batas memori yang tersedia dari mesin host.
Shelby Moore III
17

Pada dasarnya, kelengkapan Turing adalah salah satu syarat singkat, rekursi tak terbatas.

Bahkan tidak dibatasi oleh ingatan.

Saya memikirkan ini secara mandiri, tetapi sini ada beberapa diskusi tentang pernyataan tersebut. Definisi saya tentang LSP menyediakan lebih banyak konteks.

Jawaban lain di sini tidak secara langsung mendefinisikan esensi mendasar dari kelengkapan Turing.

Shelby Moore III
sumber
Automata keadaan terbatas diizinkan memiliki rekursi tak terbatas. Contoh kasus: a*.
3
FSMs @Rhoidoid memiliki memori terbatas —batas status negara) —tapi rekursi tak terbatas tanpa optimalisasi ekor harus memiliki memori tak terbatas. Saya tidak membatasi definisi saya ke subset rekursi tidak terbatas hanya dengan optimasi ekor. Harap hapus downvote Anda.
Shelby Moore III
Anda menyimpan definisi kabut rekursi tak terbatas. Apakah yang Anda maksud 'rekursi' dalam arti 'rekursi primitif', dan 'tidak terikat' dengan menjadikannya 'parsial' (atau 'umum', atau 'mu-')? Maka Anda mungkin benar. Tetapi rumusan Anda saat ini terlalu dekat dengan pernyataan yang dikritik dalam "On Folk Theorems" karya David Harel. Sangat penting untuk teliti dalam matematika, dan dengan mengabaikan definisi yang tepat, Anda mengabaikannya. Omong-omong: FSM dapat digeneralisasi untuk memodelkan interaksi; Apa yang membedakan mereka dari TM adalah bahwa lingkungan yang terakhir juga dimodelkan (sebagai rekaman).
Pencacahan @Rhoidoid adalah kebalikan dari presisi, misalnya menyebutkan ketepatan maksimum fraksi satu inci. Rekursi tanpa batas berarti setiap bentuk rekursi yang mungkin, yang tidak mungkin tanpa pita tak terbatas. Rekursi menyeluruh (tidak hanya umum dalam model) selalu Turing-lengkap. Saya menyatakan kesetaraan antara rekursi umum dan kemampuan untuk melakukan perhitungan yang mungkin. Itu adalah kesetaraan penting untuk diperhatikan.
Shelby Moore III
"Rekursi tanpa batas berarti setiap bentuk rekursi yang memungkinkan" Itulah bacaan Anda . Bagi sebagian besar pengguna SO, 'rekursi tanpa batas' berarti while (p) { /* ... */ }. "Saya menyatakan kesetaraan antara rekursi umum dan kemampuan untuk melakukan perhitungan yang mungkin." Tesis gereja adalah hal yang sangat berbeda dan harus benar-benar dibahas secara terpisah.
13

Turing Complete berarti setidaknya sekuat Mesin Turing . Ini berarti apa pun yang dapat dihitung dengan Mesin Turing dapat dihitung dengan sistem Turing Lengkap.

Belum ada yang menemukan sistem yang lebih kuat daripada Mesin Turing. Jadi, untuk saat ini, mengatakan sistem Turing Lengkap sama dengan mengatakan sistem sama kuatnya dengan sistem komputasi yang dikenal (lihat Tesis Gereja-Turing ).

Waylon Flinn
sumber
3
Perhatikan bahwa semua ini mengabaikan waktu dinding. Itu hanya mengatakan "itu bisa dilakukan".
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen sebenarnya, itu mengabaikan kompabilitas fisik sama sekali. Tidak hanya membutuhkan waktu lebih lama dari usia alam semesta, tetapi mungkin juga menggunakan lebih banyak memori daripada yang bisa dibangun dengan semua fermion dan boson di alam semesta.
Waylon Flinn
Tidak ada batasan jumlah boson dan fermion di alam semesta. Kami tidak tahu, dan mungkin tidak akan pernah tahu, ini ukurannya. Setiap kali Anda membaca tentang jumlah X di 'alam semesta', orang sebenarnya berbicara tentang alam semesta yang dapat diamati . Meskipun menarik, itu bukan batas fisik yang sebenarnya.
Stijn de Witt
9

Dalam istilah yang paling sederhana, sistem Turing-complete dapat menyelesaikan masalah komputasi yang mungkin terjadi.

Salah satu persyaratan utama adalah ukuran scratchpad tidak terikat dan memungkinkan untuk mundur untuk mengakses tulisan sebelumnya ke scratchpad.

Jadi dalam praktiknya tidak ada sistem yang Turing-lengkap.

Alih-alih beberapa sistem mendekati Turing-kelengkapan dengan memodelkan memori tidak terbatas dan melakukan perhitungan apa pun yang mungkin sesuai dengan memori sistem.

Shelby Moore III
sumber
2

Saya pikir pentingnya konsep "Turing Lengkap" adalah dalam kemampuan untuk mengidentifikasi mesin komputasi (belum tentu mekanikal / listrik "komputer") yang dapat prosesnya didekonstruksi menjadi instruksi "sederhana", terdiri dari lebih sederhana dan lebih sederhana instruksi, bahwa mesin Universal dapat menafsirkan dan kemudian mengeksekusi.

Saya sangat merekomendasikan The Annotated Turing

@Mark, saya pikir apa yang Anda jelaskan adalah campuran antara deskripsi Mesin Universal Turing dan Turing Lengkap.

Sesuatu yang Turing Lengkap, dalam arti praktis, akan menjadi mesin / proses / komputasi yang dapat ditulis dan diwakili sebagai program, yang akan dijalankan oleh Universal Machine (komputer desktop). Meskipun tidak mempertimbangkan waktu atau penyimpanan, seperti yang disebutkan oleh orang lain.

Brian Leahy
sumber
2

Apa yang saya pahami dengan kata-kata sederhana:

Turing Complete: Bahasa pemrograman / program yang dapat melakukan komputasi, adalah Turing complete.

Sebagai contoh :

  1. Bisakah Anda menambahkan dua angka menggunakan Just HTML . (Ans adalah ' Tidak ', Anda harus menggunakan javascript untuk melakukan penambahan.), Karenanya HTML tidak Turing Lengkap.

  2. Bahasa-bahasa seperti Java, C ++, Python, Javascript, Solidity untuk Ethereum dll. Turing Lengkap karena Anda dapat melakukan perhitungan seperti menambahkan dua angka menggunakan bahasa ini.

Semoga ini membantu.

Shirish Singh
sumber
0

Lengkap jika dapat menguji dan bercabang (memiliki 'jika')

Allan Wrobel
sumber
1
Untuk pertanyaan lama seperti itu, ada baiknya memeriksa untuk melihat apakah orang lain sudah memberikan kontribusi yang sama atau lebih substantif
alan ocallaghan
Tidak yakin dengan kebenaran jawabannya. Tapi ini penjelasan yang sangat sederhana yang belum pernah saya lihat sebelumnya. Lucunya: sudah lama sekali (setelah saya menulis potongan kode pertama saya), saya juga menggunakan penjelasan yang sama untuk mendefinisikan prosesor sesederhana mungkin.
Victor Yarema
Ini merupakan percobaan pertama yang sangat baik pada definisi operasional yang tajam, ringkas dan akurat. Namun, cabang harus mengizinkan perulangan dan, bukankah mesin itu juga harus mengizinkan panggilan subrutin (yaitu: rekursi)? Apakah ada program loop bersarang yang rata untuk setiap program dengan rekursi?
user3673
0

Mesin Turing mengharuskan setiap program dapat melakukan pengujian kondisi. Itu fundamental.

Pertimbangkan pemain piano roll. Pemain piano dapat memainkan musik yang sangat rumit, tetapi tidak pernah ada logika kondisional dalam musik. Itu Turing Lengkap.

Logika bersyarat adalah kekuatan dan bahaya dari mesin yang Turing Lengkap.

Roll piano dijamin berhenti setiap saat. Tidak ada jaminan untuk TM. Ini disebut "masalah terputus-putus."

Richard Riehle
sumber
-1

Seperti yang dikatakan Waylon Flinn :

Turing Complete berarti setidaknya sekuat Mesin Turing.

Saya percaya ini salah, sistem Turing lengkap jika sama kuatnya dengan Mesin Turing, yaitu setiap perhitungan yang dilakukan oleh mesin dapat dilakukan oleh sistem, tetapi juga setiap perhitungan yang dilakukan oleh sistem dapat dilakukan oleh mesin Turing .

ChrisC
sumber
1
Saya pikir Anda berasumsi bahwa tesis Church-Turing benar untuk sampai pada kesimpulan ini. Itu belum terbukti. Properti yang Anda gambarkan disebut 'Turing Equivalent'.
Waylon Flinn
1
@ WalklonFlinn Tidak, dia benar. "Kelengkapan" berarti keduanya setidaknya sekuat benda, tetapi juga tidak lebih kuat. Bandingkan dengan "NP-Complete".
Devin Jeanpierre
3
@DevinJeanpierre Saya tidak ingin memulai perang api di sini tapi saya hampir yakin kelas komputasi yang Anda gambarkan disebut "Turing Equivalent". Turing Lengkap memang memiliki hubungan yang mirip dengan NP-Lengkap. NP-Complete sama dengan NP jika dan hanya jika P = NP. Dengan cara yang sama Turing Lengkap sama dengan Turing Setara jika dan hanya jika tesis Gereja-Turing benar.
Waylon Flinn
@Waylon Source? Tidak ada yang saya baca setuju dengan itu (misalnya en.wikipedia.org/wiki/Turing_completeness )
Devin Jeanpierre
4
@DevinJeanpierre Dikatakan tepat di artikel wikipedia yang Anda tautkan. Mengutip bagian Definisi formal: "Sistem komputasi yang dapat menghitung setiap fungsi Turing-computable disebut Turing complete", "Sistem Turing-complete disebut Turing setara jika setiap fungsi yang dapat dikomputasinya juga Turing dapat dihitung"
Waylon Flinn
-2

Dalam istilah-istilah bahasa praktis yang umum bagi kebanyakan programmer, cara yang biasa untuk mendeteksi kelengkapan Turing adalah jika bahasa tersebut memungkinkan atau memungkinkan simulasi pernyataan sementara yang tidak dibatasi sementara (sebagai lawan dari gaya Pascal untuk pernyataan, dengan batas atas tetap).

Keith Douglas
sumber
1
Sebuah tunggal sementara loop tak terbatas sudah cukup untuk mensimulasikan mesin Turing.
masterxilo
-8

Dapatkah sebuah basis data relasional memasukkan garis lintang dan bujur tempat dan jalan, dan menghitung jalur terpendek di antara mereka - tidak. Ini adalah salah satu masalah yang menunjukkan SQL belum selesai Turing.

Tetapi C ++ dapat melakukannya, dan dapat melakukan masalah apa pun. Begitulah.

Akshay Jain
sumber
10
Mampu menghitung jalur terpendek antara titik bukanlah definisi Turing lengkap. Ada jauh lebih banyak daripada hanya satu contoh saja.
Eva
1
Saya hanya akan meletakkan ini di sini ... hansolav.net/blog/ImplementingDijkstrasAlgorithmUsingTSQL.aspx
Matthew Whited