抽象的解釈は非常に一般的な概念であり、多目的な概念は複数の見方を認めているため、あなたが尋ねた人に応じて、異なる説明を受け取ります。この回答の見解は私のものであり、それが一般的であるとは思いません。
動機としての計算の硬度
解決策が次のような構造を持つ決定問題から始めましょう。
多くの場合、この手順にはNPハードの下限があります。プログラムのセマンティックプロパティをチェックすることさえ決定不可能です。私たちは何ができる?
2つの観察を行いましょう。まず、一般的な問題を解決できない場合でも、特定の問題のインスタンスを解決できることがあります。第二に、コンパイラー最適化のようなアプリケーションは、非効率の原因のすべてではないが一部を排除するコンパイラーが有用であるという点で、近似を許容します。この直感を正確にするには、次のように答える必要があります。
- すべてではなく一部の問題を解決することは、正式にはどういう意味ですか?
- 意思決定問題の近似解は何ですか?
抽象解釈のアイデア1:問題の記述を変更する
私にとって、抽象解釈の主な洞察は、問題の定式化を変更することです。これにより、はい/いいえの答えを求める代わりに、はい/いいえ/たぶん答えを求めます。
結果として、すべての問題には、取るに足らない、一定の時間の解決策があります(出力Maybe)。これで、常にMaybeを生成するとは限らない手順の導出に注意を向けることができます。上記の質問に戻ると、一部の問題のインスタンスで機能する解決策は、解決できない問題で多分返されるものです。また、たぶんの近似ではいといいえ 、私たちはその答えが何であるかを特定できませんので。
このアイデアは、意思決定の問題に限定されません。プログラムに関するこれらの問題を考慮してください。
- プログラムのどのコード行が死んでいますか(実行されません)?
- プログラムのどの変数に定数値がありますか?
- プログラムのどのアサーションに違反していますか?
これらすべての状況で、不確実性のあるソリューションを検討することで、正確なソリューションから近似的なソリューションに移行できます。
- 死んだ一連のコード行とは何ですか?
- 定数値を持つプログラム内の変数のセットとは何ですか?
- 違反していないプログラムのアサーションのセットは何ですか?
生成されるセットは最大である必要はありません。この考え方は非常に一般的で、プログラム分析とはほとんど関係のない問題に当てはまります。
- メートルん[ a 、b ]
- メートルんk
- 式への満足のいく割り当てを求める代わりに、満足のいく割り当てを含むセットを要求することができます。
元の問題に対する解決策は変更後の問題に対する解決策であるため、問題を変更しただけでなく、厳密に一般化しました。大きな未回答の質問は、次のとおりです。どのようにして近似解を見つけることができますか?
抽象解釈のアイデア2:元のソリューションの固定小数点特性
tsR e a c h(s)stR e a c h(s)
バツ= { s } ∪ { w | v は Xにあります そして (v 、w ) はエッジです}
んんs
固定小数点の特性評価は設計上の決定です。一連のソリューションにはさまざまな特性があります。それらのそれぞれに異なる利点があります。プログラミング言語の場合、グラフを処理する以上の構造があります。私たちが気にする固定小数点方程式は、入力プログラムの構造に関する帰納法によって定義できます。このアイデアはプログラムに固有のものではありません。文法、論理式、プログラム、算術式などの構造化言語の要素に抽象的な解釈を適用する場合、構文オブジェクトの構造に帰納法を使用して固定小数点を定義できます。
この定点特性を与えることにより、私たちはコンピューティングソリューションの特定の方法に取り組んでいます。この固定小数点は、元の問題を解決するのと同じくらい難しいので、実際には計算しません。次のステップに進みます。
抽象解釈のアイデア3:固定小数点近似
FLGMMLML
LMFG
固定小数点転送の背後にある直観は洞察に満ちているかもしれません。固定点は、要素の(おそらくは無限)連鎖の限界と考えることができます。近似解を計算すると、この限界に近づくことになります。これは、チェーンの要素を近似することで実行できます。
stst
抽象解釈のアイデア4:固定小数点近似アルゴリズム
これまでに見たものはすべて、数学的存在の結果です。最後のステップは、近似を計算することです。近似の格子が有限である場合(または昇順/降順のチェーン条件が満たされている場合)、単純な反復手順を使用できます。ラティスが無限である場合、固定小数点の計算はまだ決定可能かもしれませんが、反復手順では不十分な場合があります。この状況では、多くの手法を使用して解をさらに近似したり、単純な反復アルゴリズムよりも正確な解にすばやくジャンプしたりします。ソリューションの計算のコンテキストでは、拡大、縮小、戦略の反復、加速などの用語を聞きます。
概要
私の意見では、抽象的解釈は、数学的論理が推論の数学的基礎を提供するのと同じ方法で、抽象化の概念の数学的基礎を提供します。私たちが気にする多くの問題の解決策には、固定点としての特性があります。この観察は、プログラミング言語の問題だけでなく、コンピュータサイエンスにも限定されません。近似解は、固定小数点の近似として特徴付けることができ、特殊なアルゴリズムで計算されます。これらの特性とアルゴリズムは、問題のインスタンスの構造を利用します。プログラムの場合、この構造は言語の構文によって与えられます。
自然な測定基準を持たない問題の近似値を計算することは、開業医によって常に開発および改良された技術です。抽象解釈は、この芸術の背後にある科学の数学的理論の1つです。
参考資料
抽象解釈に関するいくつかの優れたチュートリアルを読むことができます。
- Abstract Interpretation、Patrick Cousot(Radhia Cousotとの共同作業)、システム生物学と形式手法に関するワークショップ(SBFM'12)のカジュアルな紹介
- 抽象解釈によるコンピューターシステムの正式な検証の穏やかな紹介、PatrickおよびRadhia Cousot、Marktoberdorf Summer School 2010。
- 講義13:抽象化パートI、Patrick Cousot、抽象解釈、MITコース。
- アブストラクトインタープリテーション入門、サムソンエイブラムスキーとクリスハンキン、宣言型言語のアブストラクトインタープリテーション、1987年。
- 抽象的解釈と論理プログラムへの適用、Patrick and Radhia Cousot、1992。最初の2つのセクションには、いくつかの例を含む一般的な高レベルの概要があります。