我正在寻找涵盖编译器正确性证明的教程材料,最好是在初等研究生的水平上使用指称方法。
另外,您是否知道一些我可以用来说明问题的简单编译器示例?(我想到的第一个示例是从infix到postfix表达式的转换器。但是除了如何对语法进行归纳之外,它没有显示出任何有趣的东西。)
我正在寻找涵盖编译器正确性证明的教程材料,最好是在初等研究生的水平上使用指称方法。
另外,您是否知道一些我可以用来说明问题的简单编译器示例?(我想到的第一个示例是从infix到postfix表达式的转换器。但是除了如何对语法进行归纳之外,它没有显示出任何有趣的东西。)
Answers:
我不知道好的教程材料,但是有些论文对于像我这样的研究生来说已经足够基础了。第一个可能是您要寻找的(重点是我的)。
静态分析和程序转换的简单关系正确性证明,Nick Benton。2004年。
我们展示了如何使用基本逻辑和指称技术表达和证明对命令式程序进行的一些经典静态分析以及它们所实现的优化转换是正确的。关键要素是将程序属性解释为关系而不是谓词,并且认识到尽管传统上许多程序分析都是用非常严格的术语来表述的,但相关的转换实际上是通过更自由的扩展属性来实现的。
这些论文也可能使您感兴趣。他们极大地帮助了我!
Adam Chlipala的“从Lambda微积分到汇编语言的经过认证的类型保留编译器”似乎是使用指称方法进行的简单编译器正确性证明的一个很好的例子,其另外的优点是已在证明助手中完全形式化。
格雷厄姆·赫顿(Graham Hutton)在他的著作《在Haskell中编程》中有一个小例子,这是一个很好的起点。