0

プロローグ ロジックで AA 接地拡張のロジックを実装しようとしていますが、その方法がわかりません。いくつかの引数 "argument(a)"、"argument(b)、およびいくつかの attack attack(a,b) があります。引数が固定拡張に属しているかどうかを確認したくありません。定義は固定拡張です。は:

  1. 引数のセット S は、それ自体を攻撃せず、S を攻撃するすべての引数を攻撃する場合に許容されます。
  2. S が許容可能であり、防御しているすべての引数を含む場合、S は完全です。(攻撃者を攻撃する)
  3. グラウンド セットは、完全なセットの最小セットです。

したがって、たとえば、argument(a)、argument(b)、argument(c)、attacks(a,b)、attacks(b,c) は次のようになります。

許容: (a)、(a,c) () 完全: (a,c) 接地: (a,c)


これまでのところ、私は試しました:

%noone is attacking you
admissible(X) :-
argument(X),
\+ attacks(_,X).

%Y is attacking you and you are attacking Y
admissible(X) :-
argument(X),
attacks(Y,X),
attacks(X,Y).

%Y is attacking you and Z is defending you
admissible(X) :-
argument(X),
attacks(Y,X),
attacks(Z,Y),
\+ attacks(Z,X),
\+ attacks(X,Z).

%If someone attacks you then you must be defended by someone of your set
complete(X) :-
admissible(X),
attacks(Y,X),
attacks(Z,Y),
\+ attacks(Z,X),
\+ attacks(X,Z).

%TO-DO: I attack Y, check if all Y attacks belong to my set
complete(X) :-
admissible(X),
attacks(X,Y),

attacks(Y,Z),
\+ attacks(Z,X),
\+ attacks(X,Z).

%TO-DO: How do you find the minimum set of complete?
grounded(X) :-
argument(X).
4

0 に答える 0