minlog тоже, потому что основана на реализуемости. ACL2 тоже, потому что это аппликативный фрагмент Лиспа. Но, всё равно, не особо и взлетело. Хотя, вроде как, ACL2 используют в индустрии.
Почему это важно для компиляторов? Потому что у нас есть другие логики, которые можно использовать во всяких разных доказательствах свойств на разных стадиях оптимизации кода.
Но вот, кстати, у minlog даже может быть преимущество именно для описания вычислительных процедур, потому что это параконсистентная логика, которая не боится рекурсивностей и брадобреев.
Я тут смотрел простенькие доказательства на ACL2 -- очень трудно разобраться. И это как раз из-за автоматизации и "заметания под ковёр" пруф-термов. Оказывается, на практике это не так здорово, как кажется. Многим и доказательства тактиками не нравятся, а тут вообще без "опорного конспекта".
Ну, в ACL2 и нет proof-термов в обычном понимании. Там есть целевой терм, к которой идут эвристики, и которым надо подсказывать, как идти. Вот кстати, очень похоже на то, что делают оптимизаторы.
Вот на практике это создаёт проблемы, так ACL2 и не пользуется оглушительной популярностью.
Кроме того, композициональность получается "интересная": при наличии лемм, теорема доказывается, а без них -- нет. Хотя леммы сами по себе доказываются автоматически, то есть ACL2 как бы может вывести всё, что нужно. Но не вместе, а только частями. Размер которых заранее совершенно не понятен.
Почему внутренние? Есть всякие тесты, spec-и, fuzzing и т.д. и т.п. Ну, то есть, есть технологии для самых разных языков, которые позволяют повышать качество тем или иным способом. Сложные типы -- одна из технологий. А время и объёмы -- очень индивидуально. Вроде как, пытались такие исследования проводить, но они ничего особого не показывают, кроме того, что есть хорошие и плохие программисты.
Зависит от рабочего процесса. Типы, всё равно, не решают всех проблем и тестировать необходимо. Хотя бы по той причине, что сами спецификации могут содержать ошибки. Примеров уйма. Я не отрицаю пользу типов, но одними типами не обойтись.
Есть определённые исследования того, как бы описать самореферентный язык, в тусовке параконсистентных логиков, но параконсистентность — это просто отсутствие принципа взрыва (и желательно также взрыва негаций), который никак не связан ни с семантическими парадоксами, ни с парадоксами [наивной] теории множеств.