Perché è richiesto Proof Checker nel Codice di trasporto Proof


9

Nel classico documento PLDI'98 di Necula, "La progettazione e l'implementazione di un compilatore di certificazione", il verificatore di alto livello utilizza:

  1. VCGen per generare condizioni di verifica (predicati di sicurezza)
  2. Teorema della logica del primo ordine per dimostrare le condizioni
  3. Correttore di prove LF per verificare la prova dal passaggio (2)

Sono un po 'confuso dal passaggio (3). Perché è richiesto? Solo (1) e (2) non saranno sufficienti? Perché non ci fidiamo solo della dimostrazione generata da un teorema dimostratore?

Risposte:


19

Lo scopo del correttore di bozze è di ridurre al minimo la base informatica affidabile .

Avendo un correttore di prove, né il compilatore né il prover teorema devono essere corretti. L'articolo sottolinea questo punto a pagina 3:

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.

Un correttore di bozze è solo un paio di righe di codice e può essere controllato a mano per verificarne la correttezza. Al contrario, un prover automatizzato che funziona bene è estremamente complesso e difficilmente corretto, anche se con tester ben collaudati e ampiamente usati, gli errori saranno in casi limite che potrebbero non essere facili da innescare. Dai un'occhiata al codice LOC 30k LOC che costituisce Lingeling , un risolutore SAT all'avanguardia per vedere quanto possono essere complicati i dimostratori di teoremi automatizzati. Senza un correttore di prove, dovresti dimostrare che il teorema dimostratore ha ragione. Questo è al di là di ciò che possiamo fare economicamente nel 2015.


Sono sorpreso che le prove costruite dagli ATP possano essere difettose. (Pensavo che gli ATP potessero essere incompleti ma non male / buggy) Sono meno informato qui. Sarò felice di sapere se ci sono casi noti di errori costosi nelle prove generate dagli ATP.
Ram

3
@Ram Ci sono migliaia di minuscoli bug di solidità nella storia di qualsiasi serio proveratore di teoremi automatico. Vedi ad esempio stackoverflow.com/questions/12281085/… o la cronologia delle revisioni di tali strumenti su github.
cody

@Ram Oltre ai grandi consigli di Cody, consiglio di imparare dall'esperienza: scrivere un piccolo ATP come un solutore SAT di base. Questo può essere fatto in poche righe di codice. Quindi prova a farlo funzionare bene aggiungendo ad esempio l'apprendimento delle clausole, i letterali guardati o l'euristica di selezione delle variabili interessante. Quindi pensa all'esperienza ...
Martin Berger,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.