2

の概念に基づいて、純粋で単調な Prolog プログラムにおける予期しない普遍的な非終了を説明するための診断ツールを実装しています。

論文「障害スライスを使用した非終了ロジック プログラムの理由のローカライズと説明false/0」で紹介されているように、説明候補のプログラム フラグメント サイズを縮小するために (非終了を維持しながら)、いくつかのプログラム ポイントに目標が追加されます。

これまでのところ、とても良いです...だからここに私の質問があります1

N 個の目標を持つ条項に N+1 個のプログラム ポイントがあるのはなぜですか?

または、より正確には:

なぜ N ポイントでは足りないのでしょうか? (N+1) 番目のプログラム ポイントが必要になることはありますか?

false代わりに、懸念の述語の各使用にそれを移すことはできませんか?

また、プログラムフラグメントは次のようなクエリにのみ使用されることがわかっています?- G, false.

脚注 1:foo(bar,baz).各事実は規則とみなされると仮定します。foo(bar,baz) :- true.

4

1 に答える 1

1

N 個の目標を持つ条項に N+1 個のプログラム ポイントがあるのはなぜですか? なぜ N ポイントでは足りないのでしょうか?

多くの例では、すべてのポイントが実際に役立つわけではありません。単一節の述語の頭部の後の点がその例です。しかし、プログラム ポイントは、どのプログラムでも使用できるようになっています。

いくつかの例を試してみましょう。

N = 0

ファクトは、ゼロ ゴールの句です。現在、事実でさえ、非終了に貢献する場合としない場合があります。次のように:

?- p.

p :-
  q(1).
  p.

q(1).
q(2).

最小q/1の失敗スライスが

?-p、。

p :-
   q(1)、
   p、。

q(1)。
q(2) :- false

N = 1

p :-
   チ、
   p。
p :-
   p。

q :-
   秒。

秒。
s :-
   秒。

ここで質問です: に 2 つのプログラム ポイントが必要q/0ですか? そうです、さまざまな独立した障害スライスがあります。false初めにあるときもあれば、最後にあるときもあります。

少し紛らわしいのは、最初のプログラム ポイント (クエリ内のポイント) が常にtrueであり、最後のプログラム ポイントが常に であることfalseです。falseしたがって、それらを削除することもできますが、最後にある a はとにかくPrologに入力する必要があるため、それらを残す方が明確だと思います。付録の例を参照してください。P0 = 1, P8 = 0ハードコーディングされています。

于 2016-02-15T14:46:52.343 に答える