Bagaimana cara 'taktik' bekerja di asisten bukti?

44

Pertanyaan: Bagaimana cara 'taktik' bekerja di asisten bukti? Mereka tampaknya menjadi cara menentukan bagaimana menulis ulang istilah menjadi istilah yang setara (untuk beberapa definisi 'setara'). Agaknya ada aturan formal untuk ini, bagaimana saya bisa belajar apa itu dan bagaimana mereka bekerja? Apakah mereka melibatkan lebih dari pilihan pesanan untuk pengurangan Beta?

Latar belakang tentang minat saya: Beberapa bulan yang lalu, saya memutuskan ingin belajar matematika formal. Saya memutuskan untuk pergi dengan teori tipe karena dari penelitian pendahuluan sepertinya The Right Way To Do Things (tm) dan karena sepertinya menyatukan pemrograman dan matematika yang menarik . Saya pikir tujuan akhirnya saya adalah untuk dapat menggunakan dan memahami asisten bukti seperti Coq (saya pikir terutama bisa menggunakan tipe dependen karena saya ingin tahu tentang hal-hal seperti mewakili jenis-jenis matriks). Saya mulai mengetahui sangat sedikit, bahkan tidak pemrograman fungsional dasar, tapi saya membuat kemajuan lambat. Saya telah membaca dan memahami potongan besar Jenis dan Bahasa Pemrograman (Pierce) dan mempelajari beberapa Haskell dan ML.

John Salvatier
sumber
1
Ini adalah iklan yang tak tahu malu untuk tutorial video Coq saya, math.andrej.com/2011/02/22/…
Andrej Bauer

Jawaban:

36

SEBUAHBSEBUAHBSEBUAHBSEBUAHBdengan hipotesis yang sama), terapkan lemma (~ aplikasi fungsi), bagikan lemma tentang beberapa jenis induktif ke dalam case untuk setiap konstruktor, dan seterusnya. Taktik dasar dapat berhasil atau gagal tergantung pada konteks di mana mereka diterapkan. Taktik yang lebih maju seperti program fungsional kecil yang menjalankan taktik dasar, melakukan pencocokan pola pada istilah dalam tujuan dan / atau asumsi, membuat pilihan berdasarkan keberhasilan atau kegagalan taktik, dan sebagainya. Taktik yang lebih maju berurusan dengan aritmatika dan jenis teori spesifik lainnya. Makalah utama tentang bahasa taktik Coq adalah sebagai berikut:

  • D. Delahaye. Bahasa Taktik untuk Coq Sistem . Dalam Prosiding Logika untuk Pemrograman dan Penalaran Otomatis (LPAR), Pulau Reunion, volume 1955 dari Catatan Kuliah dalam Ilmu Komputer, halaman 85-95. Springer-Verlag, November 2000.

Aturan formal yang membentuk esensi dari taktik dasar didefinisikan dalam panduan pengguna Coq di sini atau di Bab 4 dari pdf .

Makalah yang cukup instruktif tentang penerapan taktik dan taktik (pada dasarnya taktik yang menggunakan taktik lain sebagai argumen) adalah:

Bahasa taktik Coq memiliki batasan bahwa bukti-bukti yang ditulis menggunakannya hampir tidak menyerupai bukti yang dilakukan seseorang dengan tangan. Beberapa upaya telah dilakukan untuk mengaktifkan bukti yang lebih jelas. Ini termasuk Isar (untuk Isabelle / HOL) dan bahasa bukti Mizar .

Selain: Apakah Anda juga tahu bahwa bahasa pemrograman ML pada awalnya dirancang untuk menerapkan taktik untuk teorema LCF ? Banyak ide yang dikembangkan untuk ML, seperti inferensi tipe, telah memengaruhi bahasa pemrograman modern.

Dave Clarke
sumber
3
Jawaban yang bagus Pemrograman Bersertifikat Adam Chlipala dengan Jenis-Jenis Tanggungan ( adam.chlipala.net/cpdt ) adalah sumber lain yang baik tentang penggunaan taktik dalam Coq.
jbapple
16

LCF memang merupakan bapak dari semua sistem ini: Coq, Isabelle, HOL, termasuk bahasa pemrograman ML (yang kita lihat sekarang sebagai OCaml, SML, juga F #). Ya, saya termasuk Coq sebagai anggota keluarga LCF yang lebih besar. Dibandingkan dengan asisten bukti AS-Amerika (terutama ACL2), atau Mizar yang sama sekali tidak terkait, Coq secara budaya cukup dekat dengan Isabelle dan HOL, terutama karena gagasan taktik yang digunakan bersama .

Jadi, apa taktiknya, terlepas dari pengamatan yang tidak disengaja tentang penulisan ulang, konversi, memperkenalkan atau menghilangkan koneksi?

Prinsip layering utama di sini diwarisi dari Milner's LCF:

  • Inferensi inti (penalaran ke depan), baik sebagai datatype abstrak thmdalam pendekatan LCF asli, atau dengan pengecekan terpisah terhadap bukti dalam cabang Tipe-Teori keluarga (Coq, Matita). Ini memberi Anda dasar logis tertentu untuk hasil yang dianggap pepatah sebagai teorema. Jadi Anda dapat memiliki inferensi primitif yang mengambil ⊢ A dan ⊢ B dan memberi Anda ⊢ A ∧ B. Inferensi primitif lain dapat memberi Anda ⊢ t = u, di mana u adalah bentuk beta-normal dari t. Namun, tidak satu pun dari mekanisme ini yang merupakan taktik, melainkan aturan inferensi seperti pada logika standar.

  • Bukti diarahkan-tujuan (penalaran mundur). Idenya adalah Anda beroperasi pada beberapa gagasan tentang "keadaan tujuan" dengan menyempurnakannya, membaginya menjadi lebih banyak dan lebih banyak sub-tujuan, tutup sub-tujuan, sampai semuanya selesai. Menyelesaikan keadaan tujuan, akan membuat teorema tertentu keluar dari proses. LCF telah memperkenalkan infrastruktur ekstra-logis tertentu untuk tujuan, yang masih ada di HOL: taktik adalah beberapa fungsi ML yang menyempurnakan tujuan, dan menghasilkan beberapa pembenaran untuk penyempurnaan. Di akhir pembuktian, justifikasi ditampilkan kembali dalam urutan terbalik untuk menghasilkan bukti di depan menurut kesimpulan primitif yang dijelaskan di atas.

Coq dan Matita masih cukup dekat dengan prinsip LCF ini. Isabelle berbeda di sini: pada awal 1989, Larry Paulson mereformasi gagasan tentang tujuan dan taktik untuk membuat mereka lebih dekat dengan logika, yang merupakan kerangka logis "murni" dari Isabelle di sini. Isabelle / Pure menyediakan logika tingkat tinggi minimal dengan implikasi ==> dan kuantifier !! yang menunjukkan struktur aturan deduksi alami dan status tujuan.

Sebagai contoh, ⊢ A ==> B ==> A ∧ B adalah aturan pengenalan konjungsi (dari logika objek) sebagai teorema kerangka kerja logis.

Status sasaran juga merupakan teorema, dimulai dengan ⊢ C ==> C untuk klaim awal C Anda, yang disempurnakan menjadi ⊢ X ==> Y ==> Z ==> C dalam kondisi perantara, di mana X, Y, Z adalah sub-tujuan saat ini, dan proses berakhir dengan ⊢ C (tidak ada sub-tujuan).

Sekarang kembali ke taktik, yang lebih seragam untuk semua proverver ini: diberi beberapa gagasan tentang keadaan tujuan (misalnya yang Isabelle di atas), taktik adalah fungsi yang memetakan keadaan tujuan untuk (0, 1, atau lebih) tindak lanjut negara tujuan. Selain itu, taktik adalah kombinasi fungsi taktik seperti itu, misalnya untuk mengekspresikan komposisi berurutan, pilihan, ulangi dll. Faktanya, bahasa taktik dan taktis terkait dengan pendekatan "daftar keberhasilan" dari combinator pengurai.

Taktik memungkinkan untuk menggambarkan strategi penyempurnaan tujuan tertentu secara sistematis. Mereka ternyata cukup sukses sejak penemuan mereka di LCF pada tahun 1970/80-an, tetapi mereka menghasilkan skrip bukti yang terkenal tidak dapat dibaca.

Tinjauan umum baru-baru ini tentang beberapa aspek bahasa taktik diberikan dalam makalah oleh A. Asperti et al, PLMMS 2009, lihat proses lokakarya, halaman 22.

Mizar dan Isabelle / Isar telah disebutkan sebagai pendekatan alternatif untuk penalaran terstruktur yang dapat dibaca manusia , dan mereka tidak didasarkan pada taktik dalam pengertian itu. Mizar tidak terkait dengan keluarga LCF, jadi tidak tahu terminologi taktik itu. Isabelle / Isar menggabungkan tradisi taktis sampai batas tertentu, tetapi gagasannya tentang metode pembuktian sedikit lebih terstruktur (dengan konteks bukti Isar eksplisit, indikasi eksplisit fakta dirantai, dan menghindari peretasan tujuan internal dalam proses penalaran).

Banyak reformasi dan pertimbangan ulang bahasa taktik telah terjadi dalam beberapa dekade terakhir. Misalnya, cabang komunitas Coq baru-baru ini lebih menyukai SSReflect (oleh G. Gonthier) alih-alih Ltac tradisional.

Makarius
sumber
12

Bagaimana cara 'taktik' bekerja di asisten bukti?

Saya menduga jawaban ini akan sedikit mengoceh.

Pertama, tidak cukup untuk bertanya "bagaimana taktik bekerja dalam asisten bukti" karena mereka bekerja secara berbeda dalam asisten bukti yang berbeda. Ada dua kelas asisten utama yang digunakan saat ini: yang berasal dari LCF asli, seperti cahaya Isabelle, HOL dan HOL, dan asisten bukti berbasis teori tipe seperti Coq dan Matita. Dalam dua kelas asisten pembuktian yang berbeda, taktik ini bekerja dengan cara yang berbeda, suatu cerminan bahwa apa yang terjadi di bawah kap mesin misalnya Isabelle sangat berbeda dengan apa yang terjadi di bawah kap mesin misalnya Matita.

Tanyakan kepada diri Anda: apa yang terjadi ketika kami mencoba membuktikan proposisi P di Matita? Kami memperkenalkan X metavariable dengan tipe P. Kami kemudian memainkan permainan, jadi untuk berbicara, di mana kami memperbaiki X, menambahkan lebih banyak dan lebih banyak struktur ke istilah yang tidak lengkap, sampai kami mendapatkan istilah lambda lengkap (yaitu tidak mengandung lagi metavariabel). Setelah kami memiliki istilah lambda yang lengkap, kami mengetikkan periksa sehubungan dengan P, memastikan itu menghuni jenis yang diperlukan. Kita kemudian melihat bahwa dalam Coq dan Matita, sebuah taktik hanyalah fungsi dari istilah bukti yang tidak lengkap hingga istilah bukti yang tidak lengkap, yang diharapkan menambah sedikit struktur pada istilah setelah aplikasi (pengamatan ini telah memotivasi cukup banyak karya terbaru oleh misalnya Jojgov , Pientka, dan lainnya).

Misalnya, taktik "intro" Matita memperkenalkan abstraksi lambda atas istilah yang ada, "kasus" memperkenalkan ekspresi kecocokan dalam istilah tersebut, dan "menerapkan" memperkenalkan aplikasi dari satu istilah ke istilah lainnya. Taktik dasar ini dapat dirangkai menjadi satu, menggunakan fungsi tingkat tinggi, untuk membuat yang lebih kompleks. Gagasan dasarnya selalu sama: taktik selalu bertujuan untuk menambahkan sedikit struktur ke istilah bukti yang tidak lengkap.

Perhatikan bahwa, pelaksana bertujuan untuk memberikan kembali istilah yang mengetikan lagi setelah setiap aplikasi taktik. Sebenarnya, tidak ada persyaratan bagi mereka untuk melakukannya, karena semua yang penting untuk asisten bukti berdasarkan teori tipe adalah bahwa, ketika pengguna datang ke Qed bukti, kita memiliki istilah bukti yang menghuni proposisi P. Bagaimana kita sampai pada istilah bukti ini sebagian besar tidak relevan. Namun, baik Coq dan Matita bertujuan untuk memberikan pengguna kembali istilah bukti (mungkin tidak lengkap) yang diketik setelah setiap aplikasi taktik. Namun invarian ini dapat (dan seringkali memang) gagal, terutama sehubungan dengan dua pemeriksaan sintaksis yang harus dilaksanakan oleh asisten bukti berbasis CIC.

Secara khusus, kita dapat melakukan apa yang tampak sebagai bukti yang valid, menerapkan serangkaian taktik hingga tidak ada tujuan terbuka yang tersisa. Kami kemudian datang ke Qed bukti yang seharusnya, hanya untuk menemukan bahwa pemeriksa penghentian Matita, atau pemeriksa positivitasnya yang ketat, mengeluh, karena istilah pembuktian yang dihasilkan oleh taktik telah membatalkan salah satu dari pemeriksaan sintaksis ini (yaitu metavariabel dalam posisi argumen untuk panggilan rekursif dipakai dengan istilah yang secara sintaksis tidak lebih kecil dari argumen aslinya). Ini adalah refleksi bahwa teori jenis CIC, dalam beberapa hal, tidak "cukup kuat", dan tidak mencerminkan persyaratan sintaksis positif atau ukuran dalam jenisnya (pengamatan yang memotivasi tipe ukuran Habel, dan beberapa karya terbaru tentang jenis positif) ).

Di sisi lain, asisten bukti gaya LCF sangat berbeda. Di sini, kernel terdiri dari modul (biasanya diimplementasikan dalam varian ML), berisi tipe abstrak "thm", dan fungsi yang mengimplementasikan aturan inferensi logika asisten pembuktian, memetakan "thm" ke "thm", dan seterusnya sebagainya Kami mengandalkan disiplin pengetikan ML untuk memastikan bahwa satu-satunya cara membangun nilai tipe "thm" adalah melalui aturan inferensi ini (taktik dasar). Kernel Isabelle ada di sini .

Bukti kemudian terdiri dari serangkaian penerapan taktik dasar ini (atau lebih rumit, taktik yang lebih besar, yang sekali lagi dibuat dengan merangkai taktik yang lebih sederhana menggunakan fungsi tingkat tinggi --- di Isabelle, fungsi tingkat tinggi, yang disebut taktis, dapat terlihat di sini ). Tidak seperti asisten bukti berdasarkan teori tipe, tidak ada kebutuhan dalam asisten gaya LCF untuk menjaga saksi istilah bukti eksplisit berbaring di sekitar. Kebenaran bukti dijamin oleh konstruksi, dan kepercayaan kami pada disiplin pengetikan ML (banyak asisten, misalnya Isabelle, melakukan, bagaimanapun, menghasilkan istilah bukti untuk bukti mereka).

Dominic Mulligan
sumber