シンボリック実行は抽象解釈の例ですか?


回答:


22

シンボリック実行と抽象解釈の比較に関する論文を知りません。必要だとは思いません。これら2つの手法の元の説明を読むだけで十分です。

  • キング、シンボリック実行およびプログラムテスト、1976
  • Cousot、Cousot、抽象解釈:不動点の近似の構築によるプログラムの静的解析のための統合格子モデル、1977

(逆に、予期しない接続がある場合、それは説明する価値があります。しかし、私はこれが事実であるかどうか非常に疑います。)

シンボリック実行の主な考え方は、実行の任意の時点で、すべての変数の値を初期値の関数として表現できるということです。抽象解釈の主な考え方は、一連の過剰な近似によってプログラムのすべての実行を体系的に探索できるということです。(以前の近似値でうなり声をあげるAI愛好家が何人か聞こえます。)

したがって、少なくとも元の定式化では、シンボリック実行は、可能なすべての実行の調査に関係していませんでした。これはタイトルでも見ることができます。「テスト」という単語が含まれています。しかし、セクション8の詳細は次のとおりです。「無限の実行ツリーを持つプログラムの場合、シンボリックテストは網羅的ではなく、正確性の絶対的な証拠は確立できません。」

対照的に、抽象解釈は、すべての実行を調査することを目的としています。そのために、いくつかの成分を使用しますが、そのうちの1つは、シンボリック実行の主なアイデアに非常に似ています。これらの成分は、(1)抽象状態、(2)結合および拡大(したがって、タイトルの「格子」)です。

抽象状態。特定の時点でのプログラムの具体的な状態は、基本的にメモリ内容のスナップショットです(プログラムコード自体とプログラムカウンターを含む)。これには多くの詳細があり、追跡するのは困難です。特定のプロパティを分析する場合、具体的な状態の大部分を無視することができます。または、特定の変数が負、ゼロ、または正であるかどうかだけを気にし、正確な値は気にしたくない場合があります。一般に、具体的な状態の抽象的なバージョンを検討する必要があります。これを解決するには、可換性プロパティが必要です。具体的な状態を取得し、ステートメントを実行して、結果の状態を抽象化する場合、初期状態を抽象化してから同じ結果を実行する必要がありますステートメントですが、抽象状態です。この可換図は両方の論文に掲載されています。これは一般的な考え方です。繰り返しますが、抽象解釈はより一般的です。それは、状態を抽象化する方法を指示するものではないためです。対照的に、シンボリック実行では、初期値に言及する(シンボリック)式を使用します。

参加と拡大。プログラムの実行が2つの異なる方法で特定のステートメントに到達した場合、シンボリック実行は2つの分析をマージしようとしません。そのため、上記の引用では、ダグではなく実行ツリーについて説明しています。しかし、抽象解釈はすべての実行を網羅することを望んでいることを忘れないでください。したがって、2つの実行の分析を同じプログラムカウンターを持つポイントでマージする方法を求めます。(結合一般に、結合自体は、すべての実行の分析を最終的に完了することを保証するには不十分です。({a} join {b} = {a、b})(特に、前述のダム結合は機能しません。)ループのあるプログラムを考えてみましょう: "n = input(); for i in range(n):dostuff()"。ループを何回繰り返して参加し続ける必要がありますか?決まった答えは機能しません。したがって、何か他のものが必要であり、それは拡張的であり、ヒューリスティックと見なすことができます。ループを3回繰り返して、「i = 0 or i = 1 or i = 2」と学習したとします。そして、次のように言います:うーん、...広げてみましょう、そして「i> = 0」を取得します。繰り返しますが、抽象解釈は拡張の方法を示すものではなく、拡張する必要のあるプロパティを示すだけです。

(この長い答えはごめんなさい:短くする時間は本当にありませんでした。)


5

これは非常に浅い意味であると思います。抽象解釈の最初のステップは、具体的な収集セマンティクスを識別することです。単一の状態の進化を記述するのではなく、セマンティクスの収集は状態のセットの進化を記述します。シンボリック実行は状態のセットの表現に関するものであるため、プログラムの具体的なセマンティクスを表すと主張することができます。より正確な対応が行われていることを知りません。


ありがとうございました。しかし、SEが具体的なセマンティクスを表す場合、抽象セマンティクスとは何ですか。抽象セマンティクスがなければ、AIの場合とは言えません。もう少し説明してもらえますか?ところで、私はあなたの論文を読んで、SATソルバーはAIであり、それは本当に面白いです。
qsp

3
まず、抽象化は再帰的な概念です。つまり、すべての構造は、アイデンティティ関数を介したそれ自体の些細な抽象化です。第二に、シンボリック実行では具体的なセマンティクス全体が計算されないため、一部のプログラムパスのみが調査されるため、この意味で、抽象化が不十分です。
ヴィジェイD

2

Patrick Cousotを参照してください。点の構築と近似の方法の反復法は、単調で単調な操作を修正し、プログラムのセマンティックを分析します(格子上の単調演算子の固定点の構築と近似の反復法、プログラムの静的分析)。これらのES科学Mathématiques、大学ジョセフ・フーリエ、グルノーブル、フランス、1978年3月21日 https://cs.nyu.edu/~pcousot/publications.www/CousotTheseEsSciences1978.pdf (残念ながらフランス語で)、ページ(3)-27に(3)-29

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.