Prova Taşıma Kodunda Prova Denetleyicisi neden gereklidir?


9

Necula'nın "Sertifikasyon derleyicisinin tasarımı ve uygulanması" adlı klasik PLDI'98 belgesinde, üst düzey doğrulayıcı şunları kullanır:

  1. VCGen doğrulama koşulları üretecek (güvenlik tahminleri)
  2. Koşulları ispatlamak için birinci dereceden mantık teoremi
  3. Adım 2'deki kanıtı kontrol etmek için LF geçirmez kontrol cihazı

Adım (3) ile biraz kafam karıştı. Neden gerekli? Sadece (1) ve (2) yeterli olmayacak mı? Neden sadece bir teorem kanıtlayıcının yarattığı kanıtlara güvenmiyoruz?

Yanıtlar:


19

Prova denetleyicisinin amacı güvenilir bilgi işlem tabanını en aza indirmektir .

Bir kanıt denetleyicisine sahip olmakla, ne derleyici ne de teorem kanıtlayıcının doğru olması gerekmez. Makale bu noktayı Sayfa 3'te göstermektedir:

Neither the compiler nor the prover need to be correct in order to be guaranteed to   
detect incorrect compiler output. This is a significant advantage since the VCGen and  
the  proof checker are significantly simpler than the compiler and the prover.

Prova denetleyicisi yalnızca birkaç satır koddur ve doğruluk açısından elle denetlenebilir. Buna karşılık, iyi performans gösteren otomatik bir kanıtlayıcı son derece karmaşıktır ve doğru olma olasılığı düşüktür, ancak iyi test edilmiş ve yaygın olarak kullanılan kanıtlayıcılarda, hatalar tetiklenmesi kolay olmayabilecek uç durumlarda olacaktır. Otomatik teoremin ne kadar karmaşık olabileceğini görmek için son teknoloji ürünü bir SAT çözümleyicisi olan Lingeling'i oluşturan 30k LOC C koduna bir göz atın . Bir kanıt denetleyicisi olmadan, bu teorem kanıtlayıcısının doğru olduğunu kanıtlamanız gerekir. Bu, 2015 yılında ekonomik olarak yapabileceğimiz şeyin ötesinde.


ATP'ler tarafından oluşturulan kanıtların buggy olabileceğine şaşırdım. (ATP's eksik ama sağlıksız / buggy olmayabilir düşündüm) Ben burada daha az bilgilendirilir. ATP'ler tarafından üretilen kanıtlarda bilinen pahalı hata örnekleri olup olmadığını bilmek beni mutlu edecektir.
Ram

3
@Ram Ciddi bir otomatik teorem prover'ın tarihinde binlerce küçük ses hatası var. Bkz. Örneğin stackoverflow.com/questions/12281085/… veya github üzerindeki bu tür araçların revizyon geçmişine bakın .
cody

@Ram Cody'nin harika tavsiyesine ek olarak, deneyimden öğrenmenizi de tavsiye ederim: temel bir SAT çözücü gibi küçük bir ATP yazın. Bu, birkaç kod satırında yapılabilir. Sonra, yan tümce öğrenme, izlenen değişmez değerler veya ilginç değişken seçim sezgisel tarama ekleyerek iyi performans göstermeye çalışın. Sonra deneyimi düşünün ...
Martin Berger
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.