Это интересный вопрос! Как подсказывает ответ Энтони, можно использовать обычные подходы к составлению независимого функционального языка, если у вас уже есть переводчик для оценки терминов для проверки типов .
Это подход, принятый Эдвином Брейди. Теперь это концептуально проще, но оно теряет преимущества компиляции по скорости при выполнении проверки типов. Это было решено несколькими способами.
Во-первых, можно реализовать виртуальную машину, которая на лету компилирует термины в байт-код для проверки преобразования. Эта идея vm_compute
реализована в Coq Бенджамином Грегуаром . По-видимому, есть и этот тезис Дирка Клеблатта на эту конкретную тему, но на самом деле о машинном коде, а не о виртуальной машине.
Во-вторых, можно генерировать код на более традиционном языке, который после выполнения проверяет все преобразования, необходимые для проверки типа программы с зависимой типизацией. Это означает, что мы можем использовать Haskell, скажем, для проверки типа модуля Agda. Код может быть скомпилирован и запущен, и, если он его принимает, можно предположить, что код на языке зависимого типа является хорошо типизированным (за исключением ошибок реализации и компиляции). Впервые я услышал об этом подходе, предложенном Матье Боесфлюгом .
*
ocamlopt
или GHC :-) (кстати, это подход Coq и Agda.)