Estoy interesado en compiladores verificados formalizados en la teoría de tipo Martin-Löf, es decir, Coq / Agda. Por el momento he escrito un pequeño ejemplo de juguete. Con eso puedo demostrar que mis optimizaciones son correctas. Por ejemplo, las adiciones con cero pueden eliminarse, es decir, expresiones como "x + 0".
¿Existen optimizaciones que son difíciles de realizar con un compilador normal, que servirían como un buen ejemplo? ¿Es posible probar ciertas propiedades de un programa que permiten optimizaciones que no son posibles de realizar con un compilador normal? (es decir, sin la inferencia que es posible con un probador de teoremas)
Me interesarían ideas o ejemplos y también referencias sobre el tema.
Una pregunta relacionada: pruebas de corrección del compilador
editar: Como Tsuyoshi lo puso muy bien en los comentarios: estoy buscando técnicas de optimización que son difíciles de implementar si un compilador está escrito en (digamos) C pero más fácil de implementar si un compilador está escrito en (digamos) Coq. A medida que Agda compila en C (a través de Haskell), es posible hacer todo lo posible en Agda también en C. Probablemente el único beneficio de los probadores de teoremas como Coq / Agda es que el compilador y las optimizaciones pueden verificarse.
edit2: Según lo sugerido por Vijay DI, escriba lo que he leído hasta ahora. Me centré principalmente en Xavier Leroy y el proyecto CompCert en INRIA (creo que hay un documento de 80 páginas que es una buena lectura). Un segundo interés estaba en el trabajo de Anton Setzer en programas interactivos. Pensé que tal vez su trabajo podría usarse para probar propiedades sobre los programas IO y la bisimulación de los programas IO. Gracias por mencionar a Sewell. Escuché su charla "Cuentos de la jungla" en ICFP y leí quizás 2-3 de sus documentos. Pero no he visto específicamente su trabajo y el de sus coautores.
Todavía no descubrí por dónde empezar ni busqué documentos sobre la optimización de compiladores; por ejemplo, qué optimizaciones sería interesante observar en la configuración de un compilador verificado.