A key challenge in example-based program synthesis is the gigantic search space of programs. To address this challenge, various work proposed to use abstract interpretation to prune the search space. However, most of existing approaches have focused only on forward abstract interpretation, and thus cannot fully exploit the power of abstract interpretation. In this paper, we propose a novel approach to inductive program synthesis via iterative forward-backward abstract interpretation. The forward abstract interpretation computes possible outputs of a program given inputs, while the backward abstract interpretation computes possible inputs of a program given outputs. By iteratively performing the two abstract interpretations in an alternating fashion, we can effectively determine if any completion of each partial program as a candidate can satisfy the input-output examples. We apply our approach to a standard formulation, syntax-guided synthesis (SyGuS), thereby supporting a wide range of inductive synthesis tasks. We have implemented our approach and evaluated it on a set of benchmarks from the prior work. The experimental results show that our approach significantly outperforms the state-of-the-art approaches thanks to the sophisticated abstract interpretation techniques.
翻译:示例程序合成中的一个关键挑战是程序的庞大搜索空间。为了解决这一挑战,各种工作提出使用抽象解释来剪枝搜索空间。然而,大多数现有方法仅关注前向抽象解释,因此无法充分利用抽象解释的强大能力。在本文中,我们提出了一种新颖的通过迭代前向-后向抽象解释进行归纳式程序合成的方法。前向抽象解释计算给定输入情况下程序可能的输出结果,而后向抽象解释则计算给定输出结果情况下程序可能的输入数据。通过交替进行两种抽象解释的迭代,我们可以有效地确定任何部分程序作为候选的完整性是否能满足输入-输出例子。我们将我们的方法应用于语法指导合成 (SyGuS) 的标准制定问题,因此支持广泛的归纳式合成任务。我们实现了我们的方法,并在以前的工作的一组基准测试中进行了评估。实验结果表明,由于复杂的抽象解释技术,我们的方法显著优于最先进的方法。