Saya belajar Pembuktian Teorema Otomatis / SMT solver / Asisten Bukti sendiri dan memposting serangkaian pertanyaan tentang proses, mulai di sini.
Perhatikan bahwa topik ini tidak mudah dicerna tanpa latar belakang logika (matematika). Jika Anda memiliki masalah dengan istilah dasar, silakan baca di atas, misalnya Logika dalam Ilmu Komputer oleh M. Huth dan M. Ryan (khususnya bab satu, dua dan empat) atau Pengantar Logika Matematika dan Teori Jenis oleh P. Andrews.
Untuk pengantar singkat ke logika urutan lebih tinggi (HOL) lihat di sini .
Saya melihat Coq dan membaca bab pertama pengantar untuk Isabelle di antara yang lain; Jenis Provers Teorema Otomatis
Saya sudah mengenal Prolog selama beberapa dekade dan sekarang saya belajar F #, jadi ML, O'Caml dan LISP adalah bonus. Haskell adalah binatang yang berbeda.
Saya punya buku-buku berikut
"Handbook of Automated Reasoning" diedit oleh Alan Robinson dan Andrei Vornkov
"Buku Pegangan Logika Praktis dan Penalaran Otomatis" oleh John Harrison
"Term Rewriting and All That" oleh Franz Baader dan Tobias Nipkow
Apa perbedaan antara Coq dan Isabelle?
Haruskah saya mempelajari Isabelle atau Coq, atau keduanya?
Apakah ada keuntungan mempelajari Isabelle atau Coq dulu?
Temukan pertanyaan selanjutnya dari seri ini di sini .
sumber
Jawaban:
Preferensi saya untuk Coq, tetapi saya membayangkan orang lain lebih suka Isabelle. Salah satu hal aneh yang saya temukan tentang Isabelle adalah bahwa ada sintaksis dua tingkat, di mana beberapa definisi Anda harus berada di dalam tanda kutip ganda. Tidak ada omong kosong seperti itu hadir dalam Coq.
Pada akhirnya, yang paling cocok untuk Anda mungkin bergantung pada apa yang ingin Anda buktikan. Kedua bahasa memiliki banyak dukungan perpustakaan dan komunitas aktif melakukan segala macam pengembangan dan contoh teori. Jika satu bahasa menyediakan dukungan perpustakaan yang memadai (atau lainnya) untuk jenis teori yang ingin Anda kembangkan, maka saya akan memilih bahasa itu.
Salah satu strategi adalah melakukan tutorial sederhana dalam kedua bahasa dan menindaklanjuti salah satu yang terasa paling baik. Sebagai contoh,
Berikut adalah posting blog yang membandingkan keduanya dengan seseorang yang akhirnya lebih menyukai Isabelle.
Pastikan Anda menggunakan IDE yang tepat (seperti ProofGeneral ), daripada melakukan hal-hal di baris perintah.
Cara lain untuk masuk ke Coq adalah dengan mencoba buku Yayasan Perangkat Lunak online oleh Benjamin Pierce et al. Ini memberikan tutorial yang sangat baik dengan banyak detail yang disediakan. Fokusnya sebagian besar pada semantik bahasa pemrograman, tetapi banyak dasar-dasar (dan seterusnya) Coq dan pembuktian teorema semi-otomatis tercakup di sepanjang jalan.
sumber
Satu hal yang saya pikir Anda akan menemukan menarik adalah bahwa istilah "pembuktian teorema" sangat bervariasi tergantung pada bidang apa Anda. Sementara mereka - dalam abstrak - pembuktian teorema praktis yang agak terkait, praktis (seperti jenis lihat diuraikan di dalam Handbook of Automated Reasoning) tidak ada hubungannya dengan Coq atau Isabelle daripada yang Anda kira.
Ketika saya pertama kali mulai belajar tentang teorema yang membuktikan hal-hal terkait, buku pertama yang saya baca (walaupun sekarang sudah ketinggalan zaman?) Adalah Logika Orde Pertama dan Pembuktian Teorema Otomatis yang sangat baik dari Melvin Fitting . Buku ini benar-benar luar biasa yang membahas berbagai topik yang akan Anda lihat yang berhubungan dengan logika tingkat rendah, di mana Anda sebenarnya bisa mendapatkan otomatisasi dalam jumlah yang wajar. Jenis logika yang Anda pelajari harus ditentukan oleh apa yang ingin Anda alasankan, dan tidak begitu banyak teorema yang membuktikannya. Sebagai contoh, sementara logika urutan pertama memberi Anda cukup banyak ekspresi dan kemampuan penalaran, sebagian besar komunitas bahasa pemrograman (di mana saya telah berakhir hari ini) telah meninggalkan sekolah yang lebih tua dari pembuktian teorema dan pengecekan model (yang masuk ke ember hal-hal yang lebih dapat ditentukan tetapi kurang ekspresif).
Jangan anggap ini sebagai - namun - bahwa hal-hal seperti penalaran urutan pertama dan pengecekan model belum terlalu berguna dalam praktiknya. Mereka sudah! Anda dapat melihat ACL2 sebagai contoh pepatah yang dibangun di atas logika urutan pertama yang telah berhasil dalam jumlah yang luar biasa di bidang industri. Bersamaan dengan itu, ada juga perkembangan yang luar biasa dalam penyelesaian SMT. Pemecah SMT modern dibangun di atas pemecah SAT yang sangat kuat (kebanyakan melalui penemuan dalam dua puluh tahun terakhir untuk perbaikan pada DPLL), dan telah banyak digunakan dalam hal-hal seperti eksekusi simbolis.
Namun, seperti yang saya katakan, walaupun sedikit "teorema pembuktian" yang lebih tradisional itu menyenangkan, ada banyak lagi yang harus dipelajari. Mempelajari Coq - misalnya - tidak banyak hubungannya dengan mempelajari alat otomasi yang diberikannya kepada Anda, dan lebih banyak berkaitan dengan mempelajari teori jenis yang menjadi dasarnya (kalkulus predikatif konstruksi konstruktif). Jika Anda tidak terbiasa dengan logika konstruktif, kari isomorfisme kari, atau teori tipe, Anda akan memiliki waktu yang menyenangkan untuk mempelajari alat-alat ini, tetapi saya hampir tidak dapat berpikir bahwa mereka terlalu dekat dengan hal-hal yang Anda lihat di volume pertama. buku pegangan.
Jadi putuskan apa yang ingin Anda lakukan: verifikasi model dan teorema dalam logika urutan pertama, atau gunakan teori tipe yang kuat untuk alasan tentang kebenaran program Anda (atau teorema dalam logika konstruktif). Jika ini yang pertama, pelajari lebih banyak tentang teknik berbasis deduksi otomatis, jika ini yang kedua, pelajari lebih lanjut tentang Coq, HOL, dll. Ngomong-ngomong, jika Anda ingin belajar Coq, sedangkan referensi di atas baik, saya pikir itu ada dua referensi inti untuk belajar Coq:
Buku fondasi perangkat lunak Benjamin Pierce (Dr. Pierce adalah penulis yang hebat, dan saya sarankan Anda juga melihat "buku bata," yang lebih populer, jika Anda belum melakukannya).
Pemrograman Bersertifikat dengan Tipe Ketergantungan (Adam Chlipala juga menulis dengan cukup baik, meskipun buku-bukunya mengasumsikan kedewasaan dan kecerdasan sedikit lebih dari pengantar Pierce yang mungkin lebih sederhana.)
sumber
Ada berbagai sistem untuk Provor Teorema Interaktif (ITP) - lihat juga konferensi nama itu - Coq, Isabelle, HOLs, ACL2, PVS dll.
Semuanya relatif menantang untuk dipelajari, dan masing-masing memiliki budaya spesifiknya sendiri. Ini seperti belajar bahasa asing: katakanlah Anda sudah tahu bahasa Inggris, dan kemudian memiliki pilihan bahasa Prancis, Jerman, Italia, Spanyol, Portugis. Semua dari mereka entah bagaimana terkait - ini bukan Cina - tetapi sangat sedikit orang yang mengelola semua itu secara bersamaan. Jadi, Anda harus mencoba merasakan setiap budaya dan komunitas, dan kemudian membuat komitmen.
Mungkin juga ada "fitur pembunuh" yang benar-benar Anda butuhkan untuk pekerjaan Anda.
Ini juga membantu untuk memiliki rekan ahli di salah satu sistem ini.
Keduanya adalah keturunan sistem LCF dari Stanford / Edinburgh / Cambridge. Pada tahun 1985, G. Huet dan L. Paulson bekerja bersama pada versi terakhir Cambridge LCF. Kemudian perpecahan terjadi terhadap Coc / CIC / COQ (sekarang Coq) di Perancis, dan Isabelle di Cambridge dan Munich. Perhatikan bahwa HOL4, HOL-Light, HOL-XYZ adalah keturunan terkait LCF lainnya.
Lebih dari 20 tahun yang lalu, perbedaan Coq vs Isabelle akan dibuat sesuai dengan dasar logis: Logika Konstruktif Ketergantungan Ketik di sini, Logika Klasik Simpl-Typed di sana. Saat ini, ada dampak yang sangat kecil pada hal itu dalam praktiknya, karena semakin banyak lapisan telah ditambahkan di atas setiap sistem formal, termasuk alat tambahan, dan perpustakaan.
Anda harus melihat keduanya, dan mencoba merasakan jika Anda lebih suka Wine dan Keju, atau Bratwurst dan Sauerkraut. (Sebagai salah satu orang di belakang Isabelle, tetapi saat ini di Prancis, saya terkejut betapa banyak orang Prancis benar-benar menyukai Sauerkraut ketika mereka secara pribadi di rumah dan tidak ada yang melihat :-)
Saya kira tidak. Mungkin ada bahaya bahwa Anda terjebak dengan yang Anda coba pertama dan jangan coba yang kedua, atau bahwa Anda kecewa terlalu dini dengan yang pertama dan mengabaikannya terlalu dini. Bagaimanapun, Anda akan membutuhkan waktu dan ketekunan untuk menjadi produktif dengan kedua sistem tersebut.
Karena Proof General sebagai "IDE" sudah disebutkan: Proof General / Emacs dulu merupakan antarmuka pemersatu standar untuk Coq dan Isabelle selama bertahun-tahun, tetapi saya tidak akan pernah menyebutnya sebagai IDE. Ada juga CoqIDE dengan "IDE" dalam namanya, tetapi merupakan editor yang relatif mendasar di atas widget Gtk. Isabelle saat ini termasuk Isabelle / jEdit, yang tidak memiliki "IDE" dalam namanya, tetapi dimaksudkan untuk memperkirakan hal-hal yang Anda lihat secara rutin di Netbeans atau IntelliJ IDEA --- untuk teks bukti bukan kode Java.
sumber
Berikut adalah beberapa tutorial Coq video yang bagus oleh Andrej Bauer. Ini sama sekali tidak lengkap, tapi saya pikir ini perkenalan yang bagus.
sumber
Ini pengantar Isabelle cukup lengkap.
Lihat juga pengantar untuk Isabelle ini
Secara umum, Isabelle relatif mudah untuk memulainya, karena ada banyak contoh yang tersedia. Misalnya, di situs web resmi
PS - Saya sama sekali tidak berafiliasi dengan Isabelle, saya adalah ahli teori dalam metode formal, tapi saya tahu Isabelle sering muncul sebagai titik awal default.
sumber
Juga, Yayasan Perangkat Lunak DeepSpec Summer School memiliki beberapa kuliah yang cukup keren:
Beberapa kuliah berdasarkan seri yayasan Perangkat Lunak, yang telah disebutkan.
Coq Intensif
Algoritma fungsional terverifikasi
sumber