Доказательства корректности компилятора

20

Я ищу учебный материал, который охватывает доказательства корректности компилятора, предпочтительно с использованием денотационных методов, на уровне начинающего аспиранта.

В качестве альтернативы, вы знаете несколько простых примеров компилятора, которые я мог бы использовать для иллюстрации проблем? (Первым примером, который мне пришёл в голову, был переводчик с выражений из инфикса в постфикс. Но он не смог показать ничего интересного, кроме как сделать индукцию по синтаксису.)

Удай Редди
источник

Ответы:

10

Я не знаю хорошего учебного материала, но есть документы, которые являются достаточно элементарными для аспиранта (как я). Первое может быть то, что вы ищете (акцент мой).

Простые реляционные доказательства корректности для статического анализа и программных преобразований , Ник Бентон. 2004.

Мы показываем, как некоторые классические статические анализы для императивных программ и оптимизирующие преобразования, которые они допускают, могут быть выражены и доказаны правильными с использованием элементарных логических и денотационных методов . Ключевыми ингредиентами являются интерпретация свойств программы как отношений, а не предикатов, и осознание того, что, хотя многие программные анализы традиционно формулируются в очень интенциональных терминах, связанные преобразования фактически поддерживаются более либеральными экстенсиональными свойствами.

Эти документы также могут вас заинтересовать. Они мне очень помогли!

  1. Доказательство правильности оптимизации компилятора с помощью временной логики , Дэвид Лэйси, Нил Д. Джонс, Эрик Ван Вик, Карл Кристиан Фредериксен. Я бы подумал, что было больше материала с использованием бисимуляции в контексте оптимизации компилятора. Если ваша цель - действительно денотационные методы, вы, вероятно, можете закодировать эти доказательства, используя характеристики бисимуляции.
  2. Генерация оптимизаций компилятора из Proofs , Росса Тейта, Майкла Степпа и Сорина Лернера. Включает теоретическую формализацию категории их метода доказательства.
  3. Доказательство оптимизации Оптимизация с использованием параметризованной эквивалентности программы , Судипта Кунду, Захари Татлок и Сорин Лернер. Иди туда, если тебе нравятся логические отношения.
  4. Официально проверенный компилятор Back-end Xavier Leroy.
Виджай Д
источник
10

Вам нужно будет модернизировать нотацию, но « Правильность компилятора для арифметических выражений» Маккарти и Пейнтера проста и хороша, а также представляет исторический интерес (поскольку, насколько мне известно, это первая статья по этому вопросу).

Нил Кришнасвами
источник
7

Сертифицированный компилятор с сохранением типов от лямбда-исчисления до языка ассемблера Адама Члипалы кажется хорошим примером простого доказательства корректности компилятора с использованием денотационных методов, с дополнительным преимуществом полной формализации в помощнике по проверке.

Коди
источник
1
Это очень хорошая статья.
Нил Кришнасвами
7

У Грэма Хаттона есть небольшой пример в его книге «Программирование на Хаскеле», который является отличным местом для начала.

У меня также есть несколько механизированных доказательств (различные логики) компилятора McCarthy-Painter в отчете, который я сделал для моей докторской диссертации .

Джейсон Райх
источник
7

Возможно, это не самый простой пример, но Ксавье Леруа проделал большую работу в этой области, например, официально проверенный компилятор Си . Он провел презентацию в летней школе с использованием небольшого императивного языка IMP, который является доступным введением в более продвинутую работу.

Дэйв Кларк
источник