Esta é uma pergunta interessante! Como a resposta de Anthony sugere, é possível usar as abordagens usuais para compilar uma linguagem funcional não dependente, desde que você já tenha um intérprete para avaliar os termos da verificação de tipo .
Essa é a abordagem adotada por Edwin Brady. Agora isso é conceitualmente mais simples, mas perde as vantagens de velocidade da compilação ao executar a verificação de tipo. Isso foi tratado de várias maneiras.
Primeiro, é possível implementar uma máquina virtual que compila termos para código de bytes em tempo real para executar a verificação de conversão. Esta é a idéia por trás vm_compute
implementada no Coq por Benjamin Gregoire . Aparentemente, há também essa tese de Dirk Kleeblatt sobre esse assunto exato, mas abaixo do código de máquina real, em vez de uma máquina virtual.
Segundo, pode-se gerar código em uma linguagem mais convencional que, após a execução, verifica todas as conversões necessárias para verificar um programa digitado de forma digitada. Isso significa que podemos usar Haskell, digamos, para verificar um tipo de módulo Agda. O código pode ser compilado e executado e, se aceitar, pode ser assumido que o código na linguagem do tipo dependente seja bem digitado (exceto erros de implementação e compilador). Eu ouvi pela primeira vez essa abordagem sugerida por Mathieu Boesflug .
∗
ocamlopt
ou GHC :-) (a propósito, esta é a abordagem Coq e Agda.)