我对以Martin-Löf类型理论(即Coq / Agda)形式化的经过验证的编译器感兴趣。目前,我已经写了一个小玩具示例。因此,我可以证明我的优化是正确的。例如,可以消除具有零的加法运算,即“ x + 0”之类的表达式。
有没有用常规编译器难以执行的优化,可以作为一个很好的例子?是否可以证明程序的某些属性,这些属性允许使用常规编译器无法执行的优化?(即没有定理证明者可能的推论)
我将对这个想法或示例以及该主题的参考感兴趣。
一个相关问题: 编译器正确性证明
编辑:正如Tsuyoshi在评论中很好地指出的那样:我正在寻找优化技术,如果使用(例如)C编写编译器,则难以实现,但是如果使用(例如)Coq编写编译器,则更容易实现。随着Agda编译为C(通过haskell),有可能在Agda中也可以在C中完成所有可能的工作。定理证明如Coq / Agda的唯一好处可能是可以验证编译器和优化。
edit2:按照Vijay DI的建议,写我到目前为止所读的内容。我主要关注INRIA的Xavier Leroy和CompCert项目(我认为有80页的论文很好阅读)。第二个兴趣是Anton Setzer在交互式程序上的工作。尽管我也许他的工作可以用来证明有关IO程序和IO程序的双重仿真的特性。感谢您提及Sewell。我在ICFP听到了他的演讲“丛林传说”,并阅读了2-3篇论文。但是我还没有专门研究他和他的合著者的作品。
我还没有找到从哪里开始,也没有找到关于优化编译器的论文。例如,在经过验证的编译器设置中,哪些优化最有趣。