引用
Polikarpova N, Kuraj I, Solar-Lezama A. Program synthesis from polymorphic refinement types[J]. ACM SIGPLAN Notices, 2016, 51(6): 522-538.
摘要
本文提出了一种合成递归函数的方法,该方法能够满足以多模态细化类型(Polymorphic Refinement Type)形式给出的规范。这类规范非常适合使用程序合成解决,其原因有二:首先,这些规范会提供表达能力和可判定性的独特组合,使针对非平凡(Nontrivial)程序的自动化验证变得可行,进而使非平凡程序的合成变为可能;其次,一种为程序指定的、基于类型的规范通常可以被有效地拆解成一系列独立的子规范,用于分别描述目标程序不同组件。由此,合成器可以考虑更少的组件这,并大大缩减搜索空间的规模。本文提出的程序合成过程的核心就是一种基于细化类型的、支持规范分解的全新算法。
本文对提出的合成算法进行了原型实现,并利用大量程序合成问题对其进行了评估。基于评估结果作者发现:相比于现有技术,本文的原型实现具备更加优秀的可拓展性和可用性、合成出的程序也更加复杂(合成的目标是排序算法、平衡搜索树相关操作)。此外,本文提出的原型实现还优化了许多现有程序合成基线问题的解决过程,体现为更加简洁直观的用户输入。
关键词:程序分析;函数式编程;细化类型;谓词抽象
引言
实现可扩展的程序合成的关键是实现模块化验证(Modular Verification)。模块化使得合成器能够独立地筛选候选子程序,从而缩减通过组合子程序得到的搜索空间的大小。
仅使用简单的粗粒度类型不足以精确地描述程序合成的目标。因此,现有的方法往往会利用一些其他的规范来补充类型信息,例如:输入输出示例(Input-output Examples)和前后置条件(Pre-Conditions and Post-Conditions)等。遗憾的是:目前,相应的验证过程很少能够达到和类型检查(Type Checking)对等的模块化程度,这从根本上限制了上述技术的可拓展性。
本工作实现