Skip to main content
QUICK REVIEW

[論文レビュー] Program Synthesis using Abstraction Refinement

Xinyu Wang, Işıl Dillig|arXiv (Cornell University)|Oct 21, 2017
Software Engineering Research被引用数 18
ひとこと要約

この論文では、抽象的有限木オートマトン(AFTA)を用いて同等の抽象的動作を示すプログラムをグループ化することで、探索空間を縮小する、抽象化精錬を用いた合成(SYNGAR)というプログラム合成手法を紹介する。誤りの証明を用いて反復的に抽象化を精錬することで、正しいプログラムを効率的に発見するか、その存在不可能性を証明できる。行列操作分野では、最先端のツールと比較して最大90倍の高速化を達成し、文字列変換分野ではFlashFillと比較しても有利な性能を示した。

ABSTRACT

We present a new approach to example-guided program synthesis based on counterexample-guided abstraction refinement. Our method uses the abstract semantics of the underlying DSL to find a program $P$ whose abstract behavior satisfies the examples. However, since program $P$ may be spurious with respect to the concrete semantics, our approach iteratively refines the abstraction until we either find a program that satisfies the examples or prove that no such DSL program exists. Because many programs have the same input-output behavior in terms of their abstract semantics, this synthesis methodology significantly reduces the search space compared to existing techniques that use purely concrete semantics. While synthesis using abstraction refinement (SYNGAR) could be implemented in different settings, we propose a refinement-based synthesis algorithm that uses abstract finite tree automata (AFTA). Our technique uses a coarse initial program abstraction to construct an initial AFTA, which is iteratively refined by constructing a proof of incorrectness of any spurious program. In addition to ruling out the spurious program accepted by the previous AFTA, proofs of incorrectness are also useful for ruling out many other spurious programs. We implement these ideas in a framework called ool. We have used the BLAZE framework to build synthesizers for string and matrix transformations, and we compare BLAZE with existing techniques. Our results for the string domain show that BLAZE compares favorably with FlashFill, a domain-specific synthesizer that is now deployed in Microsoft PowerShell. In the context of matrix manipulations, we compare BLAZE against Prose, a state-of-the-art general-purpose VSA-based synthesizer, and show that BLAZE results in a 90x speed-up over Prose.

研究の動機と目的

  • 膨大な探索空間による例示ガイドドプログラム合成のスケーラビリティ課題に対処する。
  • 具体的な意味論ではなく、同等の抽象的意味論を持つプログラムをグループ化することで探索空間を縮小する。
  • カスタマイズ可能な意味論を備えた、ドメインに依存しない合成フレームワークを構築する。
  • 誤ったプログラムに対して誤りの証明を用いて反復的に抽象化を精錬することで、正しさを保証する。
  • 従来の手法よりも著しく性能を向上させつつ、合成において整合性(soundness)と完全性(completeness)を達成する。

提案手法

  • 抽象的有限木オートマトン(AFTA)を用いて、抽象的意味論に基づくプログラムの同値類を表現する。
  • 初期段階で粗い抽象化を初期化し、同じ抽象的動作を示すプログラムを表す初期AFTAを構築する。
  • 誤りの証明を用いた反復的抽象化精錬(CEGAR)を適用し、抽象化下では例を満たすが、実際の意味論では満たさない偽のプログラム(spurious programs)を検出する。
  • 記号実行と述語強化を用いて、偽のプログラムだけでなく、類似したプログラムの類型まで除外できる誤りの証明を構築する。
  • AFTAで用いる述語の集合を拡張することで抽象化を精錬し、次の反復で偽のプログラムが除外されるように保証する。
  • コストベースのランク付け関数を用いてプログラム探索の優先順位を決定し、終了性と完全性を保証する。

実験結果

リサーチクエスチョン

  • RQ1具体的な意味論と比較して、抽象化精錬はプログラム合成における探索空間を著しく縮小できるか?
  • RQ2誤りの証明は、個々の偽のプログラムの除外に加え、類似したプログラムの類型までも除外できるか?
  • RQ3AFTAとCEGARに基づくドメインに依存しないフレームワークは、プログラム合成において整合性と完全性を両立できるか?
  • RQ4抽象化に基づく合成の性能は、FlashFill や Prose といった最先端のツールと比較して、実用的分野でどうなるか?
  • RQ5既存のツールが性能ボトルネックに直面する複雑な分野、たとえば行列変換分野において、この手法は効果的にスケーリングできるか?

主な発見

  • SYNGARの実装であるBlazeは、行列操作タスクにおいて、最先端のVSAベースの合成器であるProseと比較して90倍の高速化を達成した。
  • 文字列変換分野では、Microsoft PowerShellに広く導入されている合成器であるFlashFillと比較して、Blazeは少なくとも1桁の性能向上を達成した。
  • SYNGARは、文字列および行列の両分野において、他の2つの既存手法と比較して、少なくとも1桁の性能向上を一貫して達成した。
  • この手法は整合的かつ完全である:正しいプログラムが存在する場合、SYNGARは反復的な抽象化の精錬を通じて、最終的にそれを発見する。
  • 誤りの証明は、特定の偽のプログラムの除外に加え、類似した抽象的動作を示す多くの他のプログラムの除外に対しても効果的である。
  • 抽象的有限木オートマトンの使用により、プログラムの同値類の効率的表現と精錬が可能となり、探索すべきプログラムの数を著しく削減した。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。