Adakah yang pernah benar-benar menulis sebuah sistem (perangkat lunak atau penjelasan terperinci di atas kertas dengan contoh sederhana) yang menghasilkan program komputer? Saya memasukkan dan ia menciptakan sebuah program yang mencantumkan bilangan prima kurang dari 10. secara sederhana didefinisikan sebagai Profesor mengatakan mereka bisa tetapi tidak ada yang memberikan contoh lengkap aktual.P r i m e ( x ) 1 < x ∧ ∄ A
17
Jawaban:
Ini adalah topik penelitian yang sangat aktif, sangat menjanjikan, meskipun otomatisasi penuh pembuatan program mungkin memiliki keterbatasan intrinsik (tetapi apakah manusia lebih baik?). Tetapi idenya masih sangat berguna dalam membantu pembuatan program dengan memekanisasi banyak langkah, dan dengan secara otomatis memeriksa kebenaran pembuatan program.
Ini sangat terkait dengan hasil dalam logika, yang disebut korespondensi Curry-Howard (atau isomorfisme), yang menunjukkan bahwa program komputer dan bukti matematika sangat mirip.
Jadi idenya adalah bahwa sistem akan mengambil spesifikasi program Anda sebagai teorema yang harus dibuktikan. Dalam contoh Anda, ini akan menjadi seperti (secara informal): "ada satu set semua bilangan prima yang lebih kecil dari 10".
Kemudian, Anda akan berusaha membuktikan teorema itu, dan sistem yang ada akan membantu Anda dalam melakukan pembuktian, mengotomatisasi beberapa bagian, mungkin seluruh pembuktian, dan memastikan Anda tidak pernah membuat kesalahan.
Dari bukti itu orang kemudian dapat mengekstrak program yang benar-benar menghitung daftar bilangan prima yang diinginkan yang telah ditentukan sebelumnya.
Beberapa sistem dikembangkan di masa lalu untuk menjelaskan ide-ide ini. Salah satu yang lebih dikenal adalah LCF oleh Robin Milner , yang menciptakan bahasa ML untuk tujuan itu. Salah satu sistem yang paling canggih saat ini adalah Coq .
Ada beberapa contoh yang sepenuhnya berhasil, beberapa di antaranya cukup rumit. Anda mungkin menemukan beberapa di artikel berikut ini , meskipun tidak mudah dibaca dan membutuhkan pengetahuan Logika yang canggih.
sumber
Jawaban mengibas: Ya, tetapi pada saat penulisan, untuk sebagian besar program nontrivial spesifikasi tampaknya sama sulitnya untuk menulis dan debug seperti program akan.
Lebih serius, jawaban babou bagus, tapi aku juga akan menyarankan memeriksa area tipe dependen. Ada buku yang agak bagus menggunakan Coq (penafian penuh: ditulis oleh teman saya), tetapi ada juga Epigram, Agda, dan Idris. Isabelle / HOL juga layak untuk dicoba.
Ini semua didasarkan pada kalkulus konstruksi. Jika Anda ingin mengetahui dasar teoretis, lihat teori tipe Martin-Löf. Ada beberapa perkenalan yang bagus di sekitar.
sumber
Melangkah menyinggung di sini, generator program (yaitu, sistem yang memberikan deskripsi tingkat tinggi dari sesuatu dalam beberapa bahasa khusus) telah ada selamanya. Kompiler apa pun adalah salah satunya, seperti halnya salah satu dari banyak generator parser. Kembali pada hari sistem yang disebut "bahasa generasi ketiga," yang menghasilkan (sebagian besar) kode aplikasi bisnis yang khas memberikan deskripsi tingkat tinggi dan katalog data yang tersedia populer.
sumber
Pemrograman Logika dan, secara lebih umum, Pemrograman Deklaratif mengambil sebagai premis apa yang Anda usulkan: yaitu, dari spesifikasi logis, mengembalikan hasil yang memenuhi spesifikasi tersebut.
Salah satu area yang tampaknya secara khusus menangani contoh "primes kurang dari 10" yang Anda berikan adalah Constraint Programing yang mencoba mencari solusi untuk masalah yang melibatkan kendala tertentu, termasuk batasan integer seperti yang Anda berikan.
Anda mungkin ingin mencoba ECLiPSe untuk implementasi spesifik (open source) dari sistem seperti itu.
sumber