Pembelajaran Teorema Otomatis

44

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

  1. Apa perbedaan antara Coq dan Isabelle?

  2. Haruskah saya mempelajari Isabelle atau Coq, atau keduanya?

  3. Apakah ada keuntungan mempelajari Isabelle atau Coq dulu?

Temukan pertanyaan selanjutnya dari seri ini di sini .

Guy Coder
sumber
7
Penting untuk dicatat bahwa alat yang Anda sebutkan bukan prover otomatis tetapi asisten bukti (meskipun mereka dapat membuktikan hal-hal mudah dengan sendirinya).
Raphael
@DaveClarke Duplikat?
Raphael
@ Raphael: Ya (kecuali sekarang jawaban saya berisi data baru).
Dave Clarke
@DaveClarke Apakah Anda pikir kita harus menutup yang ini dan menggabungkan keduanya?
Raphael
@ Raphael: Ya. Saya baru saja menyalin teks jawaban di sini ke jawaban saya untuk pertanyaan lain.
Dave Clarke

Jawaban:

25

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.

Dave Clarke
sumber
4
ProofGeneral luar biasa, setelah Anda menjinakkannya! Mengenai sintaks Isabelle: iirc, hal-hal dalam kutipan ganda adalah hal-hal yang Anda bicarakan, formula. Yang lainnya adalah kontrol bukti. Saya pikir perbedaan yang jelas itu bagus, tetapi tanda kutip ganda (dan kurangnya sintaks yang disorot di dalam tanda kutip) mungkin bukan cara terbaik untuk mengimplementasikannya.
Raphael
4
Kami membuat wiki Isabelle / HOL tahun lalu untuk kursus; itu memiliki beberapa ikhtisar bagus sulit didapat sebaliknya.
Raphael
18

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.)

Kristopher Micinski
sumber
15

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.

  • Apa perbedaan antara Coq dan Isabelle?

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.

  • Haruskah saya mempelajari Isabelle atau Coq, atau keduanya?

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 :-)

  • Apakah ada keuntungan mempelajari Isabelle atau Coq dulu?

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.

Makarius
sumber
10

Berikut adalah beberapa tutorial Coq video yang bagus oleh Andrej Bauer. Ini sama sekali tidak lengkap, tapi saya pikir ini perkenalan yang bagus.

Daniil
sumber
1
Bagus! Catat kalimat sentral dalam "Bukti pertama dengan Coq": "Pikirkan bagaimana Anda melakukannya di atas kertas." Saran terbaik yang pernah ada.
Raphael
4

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.

Shaull
sumber
1
"Saya tahu Isabelle sering muncul sebagai titik awal default.": Saya lebih suka mengatakan, HOL sering datang sebagai titik awal default, dan sebagai asisten bukti, itu agak Coq yang sering muncul sebagai default. Kalau dipikir-pikir, itu lucu ... logika paling terkenal (HOL lebih terkenal dari pada CoC) dan asisten bukti paling terkenal (Coq lebih terkenal dari pada Isabelle), tidak cocok (Coq didasarkan pada CoC dan Isabelle pada HOL).
Hibou57
2

λ

Juga, Yayasan Perangkat Lunak DeepSpec Summer School memiliki beberapa kuliah yang cukup keren:

Beberapa kuliah berdasarkan seri yayasan Perangkat Lunak, yang telah disebutkan.

Aristu
sumber