Mengapa bahasa fungsional Turing lengkap?

22

Mungkin pemahaman saya yang terbatas tentang subjek ini tidak benar, tetapi sejauh ini yang saya mengerti:

  • Pemrograman fungsional didasarkan dari Lambda Calculus, yang dirumuskan oleh Gereja Alonzo.

  • Pemrograman imperatif didasarkan pada model mesin Turing, yang dibuat oleh Alan Turing, siswa Gereja.

  • Kalkulus Lambda sama kuat dan mampu dengan Mesin Turing, yang
    berarti mereka setara dalam kekuatan komputasi.

Jika pemrograman fungsional didasarkan pada Lambda Calculus dan bukan mesin Turing, lalu mengapa beberapa (atau semua) dari mereka dijelaskan sebagai Turing lengkap, dan bukan Lambda lengkap atau semacamnya? Apakah istilah "Kelengkapan Turing" khusus untuk mesin Turing, atau hanya sebuah kata?

Terakhir, jika bahasa imperatif didasarkan pada Mesin Turing, dan komputer pada dasarnya adalah mesin Turing, tanpa memori tak terbatas, apakah itu berarti mereka berkinerja lebih baik daripada bahasa pemrograman fungsional pada PC modern kita?

Jika itu masalahnya, lalu apa yang setara dengan mesin kalkulus lambda?

Saya tahu ini tampaknya menjadi 3 pertanyaan terpisah, tetapi mereka semua terkait erat, dan masing-masing tergantung pada pertanyaan sebelumnya menjadi pertanyaan yang valid untuk memulai.

Abdul
sumber
6
Bukan jawaban, tetapi Anda menyebutkan bahwa tidak semua versi kalkulus lambda adalah Turing Lengkap. The Simply Typed Lambda Calculus, dan versi Coq dan Agda yang lebih kuat berdasarkan pengecekan penghentian, tidak Turing Lengkap (karena mereka memiliki masalah penghentian yang dapat diputuskan). Bahasa yang sangat diketik seperti Haskell dan SML menyiasati ini dengan memungkinkan rekursi sewenang-wenang dengan kombinator fixpoint, istilah dengan tipe (a -> a) -> a.
jmite
Sangat salah untuk mengatakan "didefinisikan sebagai Turing lengkap". Bisakah kita mengubah judulnya?
Andrej Bauer
@AndrejBauer Terima kasih atas suntingan judul, tapi saya penasaran mengapa itu ( didefinisikan sebagai Turning Complete ) salah? Apakah karena itu kata sifat? Apakah akan digambarkan sebagai kata yang lebih baik daripada mendefinisikan?
Abdul
1
@ Ahbdul Nah, masalahnya adalah kata "didefinisikan". Jika Anda mengatakan bahwa "bahasa fungsional didefinisikan sebagai Turing selesai", Anda mengatakan bahwa definisi "bahasa fungsional" atau definisi "Turing selesai" menyatakan bahwa bahasa fungsional Turing lengkap. Faktanya, tidak ada definisi yang mengatakan itu.
Tanner Swett

Jawaban:

20

Singkatnya :

Apa yang mencirikan bahasa pemrograman imperatif yang dekat dengan mesin Turing dan komputer biasa seperti PC, (lebih dekat dengan mesin akses acak (RAM) daripada mesin Turing) adalah konsep memori eksplisit yang dapat dimodifikasi untuk disimpan (hasil antara ). Ini adalah tampilan automata dari komputasi, dengan konsep keadaan (terdiri dari kontrol keadaan hingga dan konten memori) yang dapat berubah saat proses komputasi berlangsung.

Sebagian besar model lain lebih abstrak. Meskipun mereka dapat mengekspresikan perhitungan sebagai suksesi langkah-langkah transformasi struktur asli, transformasi ini diterapkan dalam semacam semesta intemporal makna matematika. Ini dapat mempertahankan properti, seperti transparansi referensial, yang dapat membuat analisis matematika lebih sederhana. Tetapi lebih jauh dari model fisik alami yang mengandalkan pada ingatan akan hal itu.

Jadi tidak ada mesin fungsional alami, kecuali dalam arti yang lebih besar seperti yang dijelaskan di bawah ini, karena perangkat lunak tidak benar-benar dapat dipisahkan dari perangkat keras.

Referensi Turing sebagai tolok ukur kemampuan komputasi mungkin berasal dari kenyataan bahwa modelnya, mesin Turing paling dekat dengan batasan realisasi fisik ini, yang menjadikannya model komputasi yang lebih intuitif.

Pertimbangan lebih lanjut :

Ada banyak model komputasi, yang dirancang untuk menangkap dengan cara yang paling umum konsep komputasi. Mereka termasuk mesin Turing, sebenarnya dalam banyak rasa yang berbeda, kalkulus lambda (rasa juga), sistem penulisan ulang semi-Thue, fungsi rekursif parsial, logika kombinasional.

Mereka semua menangkap beberapa aspek dari berbagai teknik yang digunakan oleh matematikawan untuk mengekspresikan atau melakukan perhitungan. Dan sebagian besar telah digunakan sampai batas tertentu sebagai dasar dari beberapa desain bahasa pemrograman (misalnya Snobol untuk sistem penulisan ulang, APL untuk kombinator, Lisp / Skema untuk kalkulus lambda) dan sering dapat dikombinasikan dalam berbagai cara dalam bahasa pemrograman modern.

Salah satu hasil utama adalah bahwa semua model perhitungan ini terbukti setara, yang mengarah pada tesis Church-Turing bahwa tidak ada model komputasi yang dapat direalisasikan secara fisik yang dapat melakukan lebih dari model-model ini. Sebuah model perhitungan dikatakan Turing lengkap jika dapat dibuktikan setara dengan salah satu model ini, karenanya setara dengan semuanya.

Namanya bisa saja berbeda. Pilihan mesin Turing (TM) sebagai rujukan mungkin karena fakta bahwa itu mungkin yang paling sederhana dari model-model ini, meniru dengan cermat (walaupun secara sederhana) cara manusia menghitung dan cukup mudah diimplementasikan (dalam bentuk terbatas yang terbatas). ) sebagai perangkat fisik, sedemikian rupa sehingga mesin Turing telah dibangun dengan set Lego . Ide dasarnya tidak memerlukan kecanggihan matematika. Mungkin kesederhanaan dan realisasi model yang memberikannya posisi referensi ini.

Pada saat Alan Turing menciptakan perangkat komputasinya, proposal lain berada di atas meja untuk berfungsi sebagai definisi formal kemampuan komputasi, masalah penting bagi dasar matematika (lihat Entscheidungsproblem ). Proposal Turing dianggap oleh para ahli saat itu sebagai karya yang paling meyakinkan mencakup apa yang harus dihitung (lihat Computability and Recursion , RI Soare, 1996, lihat bagian 3.2). Berbagai proposal terbukti setara, tetapi Turing lebih meyakinkan. [dari komentar oleh Yuval Filmus]

Perlu dicatat bahwa, dari sudut pandang perangkat keras, komputer kita bukan mesin Turing, melainkan apa yang disebut Random Access Machines (RAM) , yang juga Turing lengkap.

Bahasa yang murni imperatif (apa pun artinya) adalah formalisme yang digunakan untuk model paling dasar, seperti mesin Turing, atau bahasa rakitan (melompati kode binernya) komputer. Keduanya terkenal tidak dapat dibaca, dan sangat sulit untuk menulis program yang penting. Sebenarnya, bahkan bahasa rakitan memiliki beberapa fitur tingkat yang lebih tinggi untuk memudahkan pemrograman sedikit, dibandingkan dengan penggunaan instruksi mesin secara langsung. Model imperatif dasar tertutup bagi dunia fisik, tetapi tidak terlalu berguna.

Hal ini menyebabkan pengembangan model komputasi tingkat tinggi secara cepat, yang mulai mencampurkan berbagai teknik komputasi, seperti subprogram dan panggilan fungsi, penamaan lokasi memori, pelingkupan nama, kuantifikasi dan variabel dummy, sudah digunakan dalam beberapa bentuk dalam matematika dan logika, dan bahkan konsep yang sangat abstrak seperti refleksi ( Lisp 1958).

Klasifikasi bahasa pemrograman ke dalam paradigma pemrograman seperti imperatif, fungsional, logika, berorientasi objek didasarkan pada keunggulan beberapa teknik ini dalam desain bahasa, dan ada tidaknya beberapa fitur komputasi yang memberlakukan beberapa properti untuk program. atau fragmen program yang ditulis dalam bahasa.

Beberapa model nyaman untuk mesin fisik. Beberapa yang lain lebih nyaman untuk deskripsi algoritma tingkat tinggi, tergantung pada jenis algoritma yang akan dijelaskan. Beberapa ahli teori bahkan menggunakan spesifikasi algoritma non deterministik, dan bahkan itu dapat diterjemahkan dalam istilah pemrograman yang lebih konvensional. Tetapi tidak ada masalah ketidaksesuaian, karena kami mengembangkan teknologi kompiler / juru bahasa yang canggih yang dapat menerjemahkan masing-masing model ke model lain sesuai kebutuhan (yang juga merupakan dasar dari tesis Church-Turing).

Sekarang, Anda tidak boleh melihat komputer Anda sebagai perangkat keras mentah. Itu memang mengandung sirkuit boolean yang melakukan pemrosesan yang sangat dasar. Tetapi sebagian besar digerakkan oleh program mikro di dalam komputer yang tidak pernah Anda ketahui. Kemudian Anda memiliki sistem operasi yang membuat mesin Anda tampak berbeda dari apa yang dilakukan perangkat keras, Selain itu Anda mungkin memiliki mesin virtual yang mengeksekusi kode-byte, dan kemudian bahasa tingkat tinggi seperti Pyva dan Jathon, atau Haskell , atau OCaml, yang dapat dikompilasi menjadi kode byte.

Di setiap tingkat Anda melihat model perhitungan yang berbeda. Sangat sulit untuk memisahkan tingkat perangkat keras dari tingkat perangkat lunak sehingga untuk menetapkan model komputasi tertentu ke mesin. Dan karena mereka semua dapat diterjemahkan, gagasan model perhitungan perangkat keras utama adalah ilusi.

Mesin kalkulus lambda memang ada: ini adalah komputer yang dapat mengurangi ekspresi kalkulus lambda. Iklan yang mudah dilakukan.

Tentang arsitektur mesin khusus

Sebenarnya, melengkapi jawaban Peter Taylor , dan menindaklanjuti masalah hardware / software intertwinning, mesin-mesin khusus telah diproduksi untuk lebih disesuaikan dengan paradigma tertentu, dan perangkat lunak dasar mereka ditulis dalam bahasa pemrograman berdasarkan paradigma itu.

Ini termasuk

Pada dasarnya, ini juga merupakan struktur perangkat keras yang penting, tetapi dimitigasi dengan fitur harware khusus atau interpreter yang diprogram untuk lebih beradaptasi dengan paradigma yang dimaksud.

Sebenarnya, perangkat keras yang dikhususkan untuk paradigma tertentu tampaknya tidak pernah berhasil dalam jangka panjang. Alasannya adalah bahwa teknologi kompilasi untuk mengimplementasikan paradigma pada perangkat keras vanilla menjadi lebih dan lebih efektif, sehingga perangkat keras khusus tidak begitu dibutuhkan. Selain itu, kinerja harware meningkat dengan cepat, tetapi biaya perbaikan (termasuk evolusi perangkat lunak dasar) lebih mudah diamortisasi pada perangkat keras vanila daripada perangkat keras khusus. Perangkat keras khusus tidak bisa bersaing dalam jangka panjang.

Namun demikian, dan meskipun saya tidak memiliki data yang pasti mengenai hal ini, saya akan curiga bahwa usaha ini meninggalkan beberapa ide yang mempengaruhi evolusi mesin, ingatan, dan arsitektur perangkat instruksi.

babou
sumber
Pilihan mesin Turing sebagai referensi, sejauh yang sebenarnya dibuat, sebagian besar termotivasi secara historis: Turing adalah yang pertama datang dengan definisi komputabilitas yang memuaskan.
Yuval Filmus
@YuvalFilmus Dan mengapa itu lebih merupakan "definisi komputabilitas yang memuaskan."
babou
Itulah yang dipikirkan Gödel. Bob Soare memiliki beberapa kata untuk dikatakan tentang masalah ini di sini: cs.uchicago.edu/~soare/Publications/compute.ps .
Yuval Filmus
@YuvalFilmus Ini adalah 46 halaman. Maksud saya, saya memberikan beberapa alasan mengapa itu harus lebih memuaskan. Mereka mungkin naif. Jika ada yang lebih meyakinkan yang menjelaskan keberhasilan, itu akan disebutkan secara eksplisit.
babou
Lihatlah Bagian 3.2. Ada definisi komputabilitas sebelumnya tetapi mereka tidak meyakinkan. Turing adalah yang pertama yang meyakinkan, setidaknya untuk beberapa orang penting.
Yuval Filmus
21

Turing-complete hanyalah sebuah nama. Anda bisa menyebutnya Abdul-lengkapi jika Anda mau. Nama diputuskan secara historis dan sering dinamai dengan nama orang yang "salah". Ini adalah proses sosiologis yang tidak memiliki kriteria yang jelas. Nama itu tidak memiliki arti di luar semantik resminya.

Bahasa imperatif tidak berdasarkan pada mesin Turing. Mereka didasarkan pada mesin RAM. Komputer Anda adalah mesin RAM. Mesin Turing adalah model teoretis yang bagus, tetapi mereka bukan model komputer aktual yang sangat bagus.

Memprogram bahasa berdasarkan paradigma lain bisa sangat sukses, meskipun CPU yang mendasarinya tidak mendukung mereka secara asli; misalnya, printer menjalankan bahasa stack. Ada lebih banyak pemrograman daripada kode mesin.

Yuval Filmus
sumber
"Mesin Turing adalah model teoretis yang bagus, tetapi mereka bukan model komputer aktual yang sangat bagus." Kecuali karena kurangnya memori yang tak terbatas, apa alasan lain mengapa itu bukan model yang baik untuk komputer yang sebenarnya? Juga, apakah saya benar dalam berpikir bahasa fungsional didasarkan dari lambda calculus?
Abdul
5
λ
11
Bahasa-bahasa imperatif cenderung untuk memungkinkan akses array dalam waktu yang konstan, di C A[x]. Mesin Turing tidak dapat melakukan ini dalam waktu yang konstan. Itu sebabnya bahkan dalam ilmu komputer teoretis, waktu berjalan algoritma dianalisis pada model mesin RAM daripada pada model mesin Turing.
Yuval Filmus
14
Sebenarnya, Turing Machines adalah komputer yang baik ... kecuali bahwa ketika Turing menulis makalahnya, "komputer" adalah deskripsi pekerjaan untuk seorang manusia yang bekerja dengan pena dan kertas. Kepala baca / tulis adalah model pena, kaset itu adalah model tumpukan kertas yang tak terbatas (potong saja menjadi potongan-potongan kecil dan rekatkan), alfabetnya adalah model, yah, alfabet kita , dan transisi yang terbatas adalah model dari jumlah aturan yang terbatas yang dapat disimpan di kepala seseorang.
Jörg W Mittag
3
Itulah wawasan terbaik yang pernah saya miliki tentang mengapa Turing memilih mesin Turing. Saya selalu bertanya-tanya "mengapa dia memilih model perhitungan yang jelek". Saya selalu berpikir jika menemukan teori perhitungan telah diserahkan kepada saya (tuhan tolong kami; kami tidak akan terlalu jauh) saya mungkin akan masih memilih model komputasi yang lebih baik. Sekarang saya tahu dari mana asalnya dan itu jauh lebih masuk akal.
Jake
10

Karena "Turing-complete" berarti "dapat menghitung apa pun yang dapat dihitung oleh mesin Turing."

David Richerby
sumber
Turing-complete juga bisa dinamai untuk menghormati Turing (orang), yang menghasilkan definisi komputabilitas pertama yang memuaskan secara filosofis; atau dapat dinamai untuk menghormati makalah Turing di mana ia menggambarkan konsep ini.
Yuval Filmus
1
@YuvalFilmus: bisa dinamai ibu Alan Turing, tetapi pernyataan di sini adalah bahwa itu bukan ;-)
Steve Jessop
@YuvalFilmus Bisa jadi (meskipun, sejauh yang saya tahu, tidak). Tetapi dari mana istilah itu berasal hanya dari kepentingan sekunder. Yang penting di sini adalah apa istilah berarti .
David Richerby
2
Ini pendek dan manis, tapi mungkin agak terlalu pendek. Apa yang dilakukan mesin Turing? Nah di antara hal-hal yang mereka "lakukan" adalah membaca dan menulis kaset, yang tidak diungkapkan oleh ekspresi lambda, Lebih baik menjadi "model komputasi Turing-lengkap memungkinkan semua fungsi yang dihitung dapat dihitung."
Theodore Norvell
@TheodoreNorvell Saya pikir komentar Anda mirip dengan apa yang saya pikirkan. Saya tahu bahwa kalkulus lambda dan mesin Turing setara dalam kekuatan, tetapi mekanismenya berbeda (dan sekarang saya tahu ada yang lain), tetapi saya bertanya-tanya apakah istilah "Kelengkapan Turing" dengan cara apa pun khusus untuk mesin Turing, atau apakah itu hanya sebuah nama.
Abdul
6

Salah satu pertanyaan Anda tampaknya belum dijawab:

Jika itu masalahnya, lalu apa yang setara dengan mesin kalkulus lambda?

Sebuah mesin Lisp . Perangkat keras yang dirancang khusus agar sesuai dengan model perhitungan LISP. Artikel Wikipedia berbicara tentang produk komersial, tetapi direktur studi saya di universitas memiliki satu buatan tangan di kantornya.

Peter Taylor
sumber
0

bahasa fungsional dalam bentuk kalkulus lambda ditemukan oleh Gereja terbukti Turing lengkap. ini adalah bukti matematika aktual yang dapat ditemukan dalam makalah ilmiah yang diterbitkan oleh "mengurangi" lambda kalkulus untuk operasi / perhitungan pada mesin Turing. sekitar waktu makalah Turings 1936 dan setelah itu, model komputasi "komprehensif" yang berbeda diusulkan / diedarkan. itu tidak segera menyadari bahwa semua yang setara. bukti bahwa mereka setara diterbitkan kira-kira pada akhir 1930-an dan 1940-an setelah kertas Turings.

mesin Turing secara konseptual (tetapi tidak secara fungsional) lebih sederhana daripada model lain dan itu kemungkinan merupakan bagian penting dari alasan bahwa kelengkapan Turing dinamai menurut namanya. ide-ide lain seperti lambda calculus lebih abstrak dan dimulai / berasal terutama dalam teori matematika / logika. Turing mengusulkan mesin teoretis . sebuah "mesin" secara harfiah adalah "perangkat fisik". ini adalah objek konseptual yang luar biasa / konstruksi yang mengikat / menyatukan dua dunia yang berbeda, yang diterapkan dan teoritis. itu memberi makna abstrak baru untuk entitas fisik misalnya "waktu dan ruang". itu bukan kebetulan belaka bahwa matematikawan kadang-kadang merujuk pada "teknologi," "mesin," atau "perangkat" bukti. Turing dengan cerdik menggabungkan semua ini dalam penemuan konseptualnya. nya definisi cukup sederhana tetapi analisis itu menunjukkan beberapa yang paling luar biasa perilaku muncul pernah dilihat dalam sejarah ilmiah / pemikiran matematika. Turing adalah ilmuwan / ahli matematika pertama yang menangkap banyak signifikansi / kekuatan / potensi ini.

ay
sumber
dengan kata lain dapat dikatakan bahwa Turing adalah orang pertama yang mengidentifikasi / "mengenali" pentingnya fenomena kelengkapan Turing dan pada gilirannya, CS "mengakui" dia untuk pencapaian monumental ini melalui penggunaan istilah tersebut.
vzn
X