Je m'intéresse aux compilateurs vérifiés formalisés en théorie de type Martin-Löf, c'est-à-dire Coq / Agda. En ce moment, j'ai écrit un petit exemple de jouet. Ainsi, je peux prouver que mes optimisations sont correctes. Par exemple, les ajouts avec zéro peuvent être éliminés, c'est-à-dire des expressions comme "x + 0".
Y a-t-il des optimisations difficiles à réaliser avec un compilateur classique, qui pourraient servir de bon exemple? Est-il possible de prouver certaines propriétés d'un programme qui permettent des optimisations impossibles à réaliser avec un compilateur classique? (c'est-à-dire sans l'inférence qui est possible avec un prouveur de théorème)
Je serais intéressé par des idées ou des exemples et aussi des références sur le sujet.
Une question connexe: preuves d'exactitude du compilateur
edit: Comme Tsuyoshi l'a bien dit dans les commentaires: je recherche des techniques d'optimisation difficiles à implémenter si un compilateur est écrit en (disons) C mais plus faciles à implémenter si un compilateur est écrit en (disons) Coq. Comme Agda compile en C (via haskell), il est possible de faire tout ce qui est possible dans Agda également en C. Probablement le seul avantage des prouveurs de théorèmes comme Coq / Agda est que le compilateur et les optimisations peuvent être vérifiés.
edit2: Comme suggéré par Vijay DI, écrivez ce que j'ai lu jusqu'à présent. Je me suis principalement concentré sur Xavier Leroy et le projet CompCert à l'INRIA (il y a un papier de 80 pages qui est une bonne lecture, je pense). Un deuxième intérêt était dans le travail d'Anton Setzer sur les programmes interactifs. Je pensais que peut-être son travail pourrait être utilisé pour prouver les propriétés des programmes IO et la bisimulation des programmes IO. Merci d'avoir mentionné Sewell. J'ai entendu son discours "Contes de la jungle" à l'ICFP et lu peut-être 2 à 3 de ses articles. Mais je n'ai pas spécifiquement regardé son travail et celui de ses co-auteurs.
Je ne savais pas encore par où commencer ni chercher des articles sur l'optimisation des compilateurs; par exemple, quelles optimisations seraient intéressantes à examiner dans le cadre d'un compilateur vérifié.