Estou interessado em compiladores verificados formalizados na teoria do tipo Martin-Löf, ou seja, Coq / Agda. No momento, escrevi um pequeno exemplo de brinquedo. Com isso, posso provar que minhas otimizações estão corretas. Por exemplo, adições com zero podem ser eliminadas, ou seja, expressões como "x + 0".
Existem otimizações difíceis de executar com um compilador regular, que serviriam como um bom exemplo? É possível provar certas propriedades de um programa que permitem otimizações que não são possíveis de serem executadas com um compilador regular? (ou seja, sem a inferência possível com um provador de teoremas)
Eu estaria interessado em idéias ou exemplos e também em referências sobre o tópico.
Uma questão relacionada: Provas de correção do compilador
edit: Como Tsuyoshi bem comentou: Estou procurando técnicas de otimização que são difíceis de implementar se um compilador é escrito em (digamos) C, mas mais fácil de implementar se um compilador é escrito em (digamos) Coq. Enquanto o Agda compila para C (via haskell), é possível fazer tudo o que é possível no Agda e também no C. Provavelmente, o único benefício de provadores de teoremas como Coq / Agda é que o compilador e as otimizações podem ser verificados.
edit2: Conforme sugerido por Vijay DI, escreva o que li até agora. Eu me concentrei principalmente em Xavier Leroy e no projeto CompCert no INRIA (acho que há um artigo de 80 páginas que é uma boa leitura). Um segundo interesse estava no trabalho de Anton Setzer em programas interativos. Eu achava que talvez o trabalho dele pudesse ser usado para provar propriedades sobre programas de IO e bisimulação de programas de IO. Obrigado por mencionar Sewell. Eu ouvi sua palestra "Contos da selva" no ICFP e li talvez 2-3 de seus artigos. Mas não olhei especificamente para o trabalho dele e de seus co-autores.
Ainda não descobri por onde começar ou procurei artigos sobre como otimizar compiladores; por exemplo, quais otimizações seria interessante observar na configuração de um compilador verificado.