Я вижу пару различных исследовательских групп и, по крайней мере, одну книгу, в которой рассказывается об использовании Coq для разработки сертифицированных программ. Существует ли консенсус относительно того, что такое определение сертифицированной программы? Из того, что я могу сказать, все это на самом деле означает, что программа была доказана общей и введите правильный. Теперь тип программы может быть чем-то действительно экзотическим, например, списком с доказательством того, что он непусто, отсортирован со всеми элементами >= 5 и т.д. Однако, в конечном счете, это сертифицированная программа, только одна из которых показывает Coq, является полной и безопасной по типу, где все интересные вопросы сводятся к тому, что было включено в окончательный тип?
Изменить 1
На основании ответа wjedynak я взглянул на статью Ксавьера Лероя "Формальная проверка реалистического компилятора", которая приведена в ответах ниже. Я думаю, что это содержит некоторую хорошую информацию, но я думаю, что более информативная информация в этой последовательности исследований может быть найдена в статье Механизированная семантика для подмножества Cight C Язык Сандрин Блази и Ксавьер Лерой. Это язык, на который добавлена оптимизация "Формальная проверка". В нем Blazy и Leroy представляют синтаксис и семантику языка Clight, а затем обсуждают валидацию этой семантики в разделе 5. В разделе 5 приведен список различных стратегий, используемых для проверки компилятора, что в некотором смысле дает обзор различных стратегий создания сертифицированной программы. Это:
- Обзор руководства
- Доказательные свойства семантики
- Проверенные переводы
- Тестирование исполняемой семантики
- Эквивалентность с альтернативной семантикой
В любом случае, возможно, есть моменты, которые могут быть добавлены, и мне бы хотелось услышать больше.
Возвращаясь к моему первоначальному вопросу о том, какое определение имеет сертифицированная программа, мне все еще немного неясно. Ответ Wjedynak дает ответ, но на самом деле работа Лероя включала создание компилятора в Coq, а затем, в некотором смысле, его удостоверение. Теоретически это позволяет теперь доказывать вещи о программах на С, так как теперь мы можем перейти в C- > Coq- > proof. В этом смысле кажется, что этот поток работ, где мы могли
- Напишите программу на языке X
- Форма модели программы с шага 1 в Coq или какой-либо другой инструмент помощника доказательства. Это может быть связано с созданием модели языка программирования в Coq или может потребовать непосредственного создания модели программы (т.е. Перезаписи самой программы в Coq).
- Докажите некоторое свойство о модели. Возможно, это доказательство ценности. Может быть, это доказательство эквивалентности утверждений (например, 3 = 1 + 2 или f (x, y) = f (y, x), что угодно.)
- Затем, основываясь на этих доказательствах, вызовите сертифицированную исходную программу.
В качестве альтернативы мы могли бы создать спецификацию программы в инструменте поддержки доказательств, а затем доказать свойства спецификации, но не самой программы.
В любом случае, я все еще заинтересован в том, чтобы слышать альтернативные определения, если кто-то их имеет.