一种不完善函数语言的验证编译器

亚当·克利帕拉.一个经过验证的Impure函数语言编译器。会议记录第37届ACM SIGPLAN-SIGACT编程语言原理研讨会(POPL'10).2010年1月。

PDF格式的纸张,纸张作为PS


我们将一个经过验证的编译器从一个小型的、没有类型化的函数语言(具有可变的引用和异常)转换为一个理想的汇编语言。编译器是在Coq证明助手中编程的,并且对于源语言和目标语言的大步骤操作语义具有完全正确性的证明。编译是分阶段的,包括标准阶段,如转换为连续传递样式和闭包转换,以及通用子表达式消除优化。在这项工作中,我们的重点是发现和使用技术,使我们的证明易于工程和维护。虽然大多数与证明助手一起工作的编程语言使用非常手动的证明样式,但我们所有的证明都是作为Coq策略语言中的自适应程序实现的,这使得在添加新的语言功能时可以不改变地重用证明。

在本文中,我们特别关注使用嵌套变量绑定器重新排列语法结构的编译阶段。在过去的编译器验证项目中,这一方面一直是一个关键的挑战领域,与标准的铅笔和纸的证明相比,在与活页夹相关的引理的语句和证明方面花费了更多的精力。我们展示了如何利用参数化高阶抽象语法为了避免证明任何关于活页夹操作的常见引理,通常会导致证明实际上比铅笔和纸的类似物短。我们的策略基于一种新的编码操作语义的方法,该方法将所有关于替换的问题委托给元语言,而不使用与通用类型理论(如Coq逻辑)不兼容的功能。

软件/证明源代码和文档

我在POPL'10的演讲中有幻灯片[办公套件,PDF格式]和WMM'09[办公套件,PDF格式].