Otomatik Teorem Kanıtlama Öğrenme


44

Ben öğreniyorum otomatik teorem ispatlama / SMT çözümleyici / Kanıtı Yardımcıları başıma ve burada başlayan süreci hakkında sorular, bir dizi yayınlamak.

Bu konuların (matematiksel) mantıkta bir arka plan olmadan kolayca sindirilmediğini unutmayın. Temel terimlerle ilgili sorunlarınız varsa, lütfen bunları okuyunuz, örneğin M. Huth ve M. Ryan tarafından Bilgisayar Bilimi Mantıkları (özellikle bir, iki ve dördüncü bölümler) veya P ile Matematik Mantığa Giriş ve Tip Teorisine bakınız . Andrews.
Yüksek mertebeden mantığa (HOL) kısa bir giriş için buraya bakınız .

Coq'a baktım ve diğerlerinin yanı sıra Isabelle'in ilk girişimini okudum ; Otomatik Teorem Provers Türleri

Prolog'u birkaç yıldır tanıyorum ve şimdi F # öğreniyorum, yani ML, O'Caml ve LISP bir bonus. Haskell farklı bir canavar.

Aşağıdaki kitaplara sahibim

Alan Robinson ve Andrei Vornkov tarafından düzenlenen "Otomatik Muhakeme El Kitabı"

"Pratik Mantık ve Otomatik Muhakeme El Kitabı" John Harrison

Franz Baader ve Tobias Nipkow'dan "Terim Yeniden Yazma ve Her Şey"

  1. Coq ve Isabelle arasındaki farklar nelerdir?

  2. Isabelle mi yoksa Coq mu, yoksa ikisini de mi öğrenmeliyim?

  3. Önce Isabelle'i ya da Coq'u öğrenmenin bir avantajı var mı?

Serinin bir sonraki sorusunu burada bulabilirsiniz .


7
Bahsettiğiniz araçların otomatik kanıtlar değil, kanıt yardımcıları olduklarını (kendi başlarına kolay şeyler ispatlayabilseler de) not etmek önemlidir.
Raphael

@DaveClarke Çoğalt?
Raphael

@Raphael: Evet (şu an hariç cevabım yeni veriler içeriyor).
Dave Clarke

@DaveClarke Bunu kapatıp ikisini birleştirmemiz gerektiğini düşünüyor musunuz?
Raphael

@Raphael: Evet. Buradaki cevabın metnini başka bir sorunun cevabına kopyaladım.
Dave Clarke

Yanıtlar:


25

Tercihim Coq için, ancak başkalarının Isabelle'i tercih ettiğini hayal ediyorum. Isabelle hakkında bulduğum tuhaf şeylerden biri, tanımlarınızın bazılarının çift tırnak içinde olması gereken iki seviyeli bir sözdizimi olduğudur. Coq'da böyle bir saçmalık yoktur.

Sonuçta, sizin için en uygun olanı kanıtlamak istediğinize bağlı olabilir. Her iki dilde çok sayıda kütüphane desteği ve her türlü geliştirme ve örnek teoriyi yapan aktif topluluklar vardır. Eğer bir dil, geliştirmek istediğiniz teori için yeterli kütüphane (veya diğer) destek sağlarsa, o dili seçerdim.

Stratejilerden biri, her iki dilde de basit bir öğretici yapmak ve en iyisini düşünen kişiyi takip etmektir. Örneğin,

İşte sonuçta Isabelle'i tercih eden biri tarafından ikisini kısaca karşılaştıran bir blog yazısı.

Komut satırında bir şeyler yapmak yerine, uygun bir IDE ( ProofGeneral gibi ) kullandığınızdan emin olun .

Coq içine almak için başka bir yolu da online kitap denemektir Yazılım Vakıflar Benjamin Pierce ve arkadaşları tarafından. Sağlanan ayrıntıların bir sürü ile mükemmel bir öğretici sağlar. Odak noktası çoğunlukla programlama dili anlamındadır, ancak Coq ve yarı otomatik teorem kanıtlamanın temelleri (ve ötesi) yol boyunca ele alınmıştır.


4
ProofGeneral harika, bir kez evcilleştirdin! Isabelle sözdizimi ile ilgili olarak: iirc, çift alıntıdaki şeyler, bahsettiğiniz şeyler, formüllerdir. Geriye kalan her şey kontrol kontrolüdür. Açıkça net bir ayrımın güzel olmasına rağmen, çift tırnak (ve tırnak içinde vurgulanan sözdizimi eksikliğinin ortaya çıkması) muhtemelen bunu uygulamanın en iyi yolu değildir.
Raphael

4
Geçen sene bir kursa bir Isabelle / HOL wiki kurduk ; Aksi takdirde gelmesi zor bazı güzel bakışlar vardır.
Raphael

18

İlgi çekici bulacağınızı düşündüğüm bir şey, "teorem ispatlama" teriminin, bulunduğunuz alana bağlı olarak büyük ölçüde değişiklik gösterdiğidir. Bunlar soyutken - biraz ilişkili, pratik teorem ispatları (sizin gibi) Otomatik Muhakeme El Kitabında ayrıntılandırıldığını görün), düşündüğünüzden daha azının Coq veya Isabelle ile ilgisi yok.

Teoremle ilgili konuları ispat etmeyi öğrenmeye başladığımda, okuduğum ilk kitap (şimdi oldukça tarihçeli olmasına rağmen?) Melvin Fitting'in mükemmel First Order Logic ve Automated Theorem Proving oldu. Bu kitap, gerçekten makul miktarda otomasyon alabileceğiniz daha düşük dereceli mantıkla ilgili gördüğünüz konu türlerini kapsayan mükemmel bir kitaptı. Öğrendiğiniz mantık türü neye sebep olmak istediğinizi belirlemeli ve bunun uğruna bir teoremi kanıtlamamalıdır. Örneğin, birinci dereceden mantık size adil bir ifade ve akıl yürütme yeteneği sunarken, programlama dilleri topluluğunun çoğu (bu günlerde sona erdiğim yer) eski teorem kanıtlama ve model kontrol okulundan ayrıldı (ki bu daha karar verilebilir fakat daha az anlamlı olan şeylerin kovası).

Bunu , yani birinci dereceden gerekçelendirme ve model kontrolü gibi şeylerin pratikte son derece yararlı olmadığı anlamına gelmez. Onlar olmuştur! ACL2'ye, endüstriyel alanda şaşırtıcı bir başarıya imza atan birinci dereceden bir mantığın üzerine inşa edilmiş bir kanıtlayıcı örneği olarak bakabilirsiniz. Bununla birlikte, SMT çözmede inanılmaz bir gelişme oldu. Modern SMT çözücüler, çok güçlü SAT çözücülerinin üzerine inşa edilmiştir (çoğunlukla DPLL'deki iyileştirmeler için son yirmi yıldaki keşifler yoluyla) ve sembolik yürütme gibi şeylerde büyük miktarda kullanım görmüştür.

Ancak dediğim gibi, daha geleneksel "teorem ispat" bitinin eğlenceli olmasına rağmen , öğrenmesi gereken çok şey var . Coq Öğrenme - örneğin - size verdiği otomasyon araçlarını öğrenmekle ilgili çok az şey var ve dayandığı tip teorisini (coinductive konstrüksiyonların tahmini hesabı) öğrenmekle daha çok ilgisi var. Yapıcı mantığa, körili howard izomorfizmine ya da tip teorisine alışık değilseniz, bu araçları öğrenmek için heyecan verici bir zamana sahip olacaksınız, ancak ilk ciltte gördüğünüz şeylerle çok yakından ilgili olduklarını sanmıyorum. El kitabının

Bu yüzden ne yapmak istediğinize karar verin: modelleri ve teoremleri birinci dereceden mantıkla doğrulayın veya programlarınızın (veya yapıcı mantıktaki teoremlerin) doğruluğu konusunda güçlü bir tip teorisi kullanın. İlki ise, daha otomatik çıkarım temelli teknikler hakkında bilgi edinin, ikincisi ise Coq, HOL, vb. Hakkında daha fazla bilgi edinin. Bu arada, eğer Coq öğrenmek istiyorsanız, yukarıdaki referanslar iyi olsa da, bence Coq öğrenmek için iki temel referans var:

Benjamin Pierce'in yazılım temelleri kitabı (Dr. Pierce mükemmel bir yazardır ve henüz yapmadıysanız, daha popüler olan "tuğla kitabı" na da bakmanızı öneririm).

Bağımlı Türlerle Sertifikalı Programlama (Adam Chlipala da oldukça iyi yazıyor; ancak kitapları, Pierce'in belki de daha basit tanıtımından biraz daha olgunluk ve zekaya sahip.)


15

İnteraktif Teorem Kanıtlaması (ITP) için çeşitli sistemler vardır - bu adın konferansına da bakınız - Coq, Isabelle, HOLs, ACL2, PVS vs.

Hepsinin öğrenmesi nispeten zor, ve her birinin kendine özgü bir kültürü var. Yabancı dil öğrenmek gibi bir şey: Şimdiden İngilizce bildiğinizi ve ardından Fransızca, Almanca, İtalyanca, İspanyolca, Portekizce seçeneklerinin olduğunu söyleyelim. Hepsi bir şekilde ilişkili - bu Çinli değil - ama çok az insan tüm bunları aynı anda yönetiyor. Bu yüzden her kültür ve topluluk için bir tat almaya çalışmalı ve sonra bir taahhüt vermelisiniz.

İşiniz için gerçekten ihtiyacınız olan "katil özelliği" de olabilir.

Aynı zamanda, bu sistemlerden biri konusunda uzman arkadaşlara yardımcı olur.

  • Coq ve Isabelle arasındaki farklar nelerdir?

Her ikisi de Stanford / Edinburgh / Cambridge’ten gelen LCF sisteminin torunlarıdır. 1985 yılında G. Huet ve L. Paulson Cambridge LCF'nin son versiyonunda birlikte çalışıyorlardı. Ardından, bölünme Fransa'da Coc / CIC / COQ (şimdi Coq) ve Cambridge ve Münih'te Isabelle'de gerçekleşti. HOL4, HOL-Light, HOL-XYZ'nin LCF'nin ilgili diğer torunları olduğuna dikkat edin.

20 yıldan daha uzun bir süre önce Coq ile Isabelle arasındaki ayrım mantıklı temellere göre yapılmış olacaktı: Burada Bağımlı Olarak Yazılan Yapıcı Mantık, Burada Simpl-Yazılan Klasik Mantık. Günümüzde pratikte bunun üzerinde şaşırtıcı bir etkisi yoktur, çünkü ilave araçlar ve kütüphaneler de dahil olmak üzere her bir resmi sistemin üzerine daha fazla katman eklenmiştir.

  • Isabelle mi yoksa Coq mu, yoksa ikisini de mi öğrenmeliyim?

Her ikisine de bakmalı ve eğer daha fazla Şarap ve Peynir ya da Bratwurst ve Lahana turşusu seviyorsanız bir şeyler hissetmeye çalışmalısınız. (Isabelle'in arkasındaki çocuklardan biri olarak, ancak şu anda Fransa'da, ne kadar Fransız'ın Sauerkraut'u evlerinde özel olarak gördükleri ve hiç kimse bakmadıklarını gerçekten sevdiklerini şaşırdım.

  • Önce Isabelle'i ya da Coq'u öğrenmenin bir avantajı var mı?

Sanmıyorum İlkini denediğinizle, ikinciyi denemeyince veya ilkini çok erken hayal kırıklığına uğratıp çok erken reddetme tehlikesi olabilir. Her durumda, her iki sistemde de üretken olmak için zamana ve sürekliliğe ihtiyacınız olacak.

Genel olarak "IDE" olarak Genel Prooftan bahsedildiğinden beri: Genel Proof / Emacs, Coq ve Isabelle için uzun yıllar boyunca standart birleştirici arayüz olarak kullanılırdı, ama ben asla IDE demedim. Ayrıca adında "IDE" olan CoqIDE da var, ancak Gtk widget'larının tepesinde göreceli olarak temel bir editör. Mevcut Isabelle, kendi adına "IDE" bulunmayan Isabelle / jEdit'i içerir, ancak Java kodu yerine ispat metinleri için Netbeans veya IntelliJ IDEA'da düzenli olarak gördüğünüz şeyleri belirtmek anlamına gelir.


10

İşte Andrej Bauer tarafından hazırlanan bazı güzel Coq eğiticileri. Tamamlanmadı, ama bence iyi bir giriş.


1
Harika! "Coq ile yapılan ilk kanıt" daki merkezi bir cümleyi not edin: "Bunu kağıt üzerinde nasıl yapacağınızı düşünün." Şimdiye kadarki en iyi tavsiye.
Raphael

4

Isabelle'e bu giriş oldukça ayrıntılı.

Ayrıca bu girişe Isabelle'e bakınız.

Genel olarak, Isabelle ile başlamak çok kolaydır, çünkü birçok mevcut örnek vardır. Örneğin, resmi web sitesinde

PS - Ben hiçbir şekilde Isabelle'e bağlı değilim, resmi yöntemlerde teorisyenim ama Isabelle'in sık sık varsayılan bir başlangıç ​​noktası olarak geldiğini biliyorum.


1
“Isabelle'in sık sık varsayılan bir başlangıç ​​noktası olarak geldiğini biliyorum.”: HOL’un sık sık varsayılan bir başlangıç ​​noktası olarak geldiğini ve ispat asistanı olarak geldiğini söyleyeceğim, bu genellikle varsayılan olarak gelen Coq. Bunu düşünmek, komik…… en ünlü mantık (CoC'dan daha ünlü HOL) ve en ünlü ispat asistanı (Isabelle'den daha ünlü Coq) eşleşmiyor (Coq, HOL'de CoC ve Isabelle'e dayanıyor).
Hibou57

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.