Меня интересуют проверенные компиляторы, формализованные в теории типов Мартина-Лёфа, т.е. Coq / Agda. На данный момент я написал небольшой игрушечный пример. Тем самым я могу доказать, что мои оптимизации верны. Например, могут быть исключены дополнения с нуля, например, выражения типа «x + 0».
Существуют ли оптимизации, которые сложно выполнить с помощью обычного компилятора, которые могут служить хорошим примером? Можно ли доказать определенные свойства программы, которые допускают оптимизации, которые невозможно выполнить с обычным компилятором? (т.е. без вывода, который возможен с доказательством теоремы)
Мне были бы интересны идеи или примеры, а также ссылки на эту тему.
Смежный вопрос: доказательства корректности компилятора
редактирование: как Цуёси замечательно выразил в комментариях: я ищу методы оптимизации, которые сложно реализовать, если компилятор написан на (скажем) C, но проще в реализации, если компилятор написан на (скажем) Coq. Поскольку Agda компилируется в C (через haskell), можно делать все, что возможно в Agda, также и в C. Вероятно, единственное преимущество средств доказательства теорем, таких как Coq / Agda, заключается в том, что компилятор и оптимизации могут быть проверены.
edit2: В соответствии с предложением Vijay D я пишу то, что я прочитал до сих пор В основном я сосредоточился на Ксавье Леруа и проекте CompCert в INRIA (я думаю, что есть статья на 80 страниц, которая хорошо читается). Второй интерес был к работе Антона Сетцера по интерактивным программам. Я думал, что, возможно, его работа может быть использована для доказательства свойств программ ввода-вывода и бисимуляции программ ввода-вывода. Спасибо за упоминание Сьюэлл. Я слышал его выступление «Сказки из джунглей» в ICFP и читал, возможно, 2-3 его статьи. Но я специально не смотрел на его работу и работу его соавторов.
Я еще не выяснил, с чего начать или искать статьи по оптимизации компиляторов; например, какие оптимизации было бы интересно посмотреть в настройках проверенного компилятора.