Чому в Кодексі перевірки необхідна перевірка перевірки


9

У класичному документі PLDI'98 Некули, "Розробка та реалізація сертифікуючого компілятора", верифікатор високого рівня використовує:

  1. VCGen для створення умов підтвердження (предикати безпеки)
  2. Логічна теорема першого порядку підтверджує умови
  3. LF-перевірка для перевірки доказів із кроку (2)

Я трохи плутаю крок (3). Чому це взагалі потрібно? Чи не буде достатньо лише (1) та (2)? Чому ми просто не довіряємо доказу, сформованому доказом теореми?

Відповіді:


19

Метою перевірки перевірки є мінімізація надійної обчислювальної бази .

Маючи перевірку перевірки, ні компілятор, ні доказ теореми не повинні бути правильними. У статті зазначено це на сторінці 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.

Контрольна перевірка - це лише пара рядків коду, і її можна перевірити на предмет правильності. На відміну від цього, автоматизований довідник, який працює добре, надзвичайно складний і навряд чи буде правильним, хоча при добре перевірених і широко використовуваних доказів помилки будуть у крайніх випадках, які можуть бути непростими. Погляньте на кодекс LOC C 30k, який складається з Лінґелінга , найсучасніший вирішувач SAT, щоб побачити, наскільки складними є автоматизовані докази теореми. Без перевірки перевірки вам доведеться довести правильність цієї теореми. Це виходить за рамки того, що ми можемо зробити економічно у 2015 році.


Я здивований, що докази, побудовані за допомогою АТФ, можуть бути помилковими. (Я думав, що ATP може бути неповним, але не неналежним / баггі) Мене тут менше інформують. Я буду радий дізнатись, чи є відомі випадки дорогих помилок у доказуванні, отриманих ATP.
Рам

3
@Ram Існує тисяча крихітних помилок в історії надійності будь-якої серйозної автоматичної теореми. Дивіться, наприклад, stackoverflow.com/questions/12281085/… або історію редагування будь-якого подібного інструменту на github.
коді

@Ram Окрім чудової поради Коді, я рекомендую вчитися на досвіді: напишіть трохи ATP, наприклад базовий вирішувач SAT. Це можна зробити за допомогою декількох рядків коду. Потім спробуйте зробити це добре, додаючи, наприклад, навчання в застереженнях, переглянуті літерали чи цікаву евристику вибору змінних. Тоді подумайте про досвід ...
Мартін Бергер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.