我试图在序言逻辑中实现 AA 接地扩展的逻辑,但我不知道该怎么做。我有一些参数“argument(a)”、“argument(b)”和一些攻击攻击(a,b)。我不想检查参数是否属于接地扩展。定义是接地扩展是:
- 如果一组论点 S 不攻击自己并且攻击所有攻击 S 的论点,则它是可以接受的。
- 如果 S 是可接纳的并且包含它所辩护的所有论点,则 S 是完整的。(攻击攻击者)
- 接地集是完整集的最小集。
因此,例如参数(a),参数(b),参数(c),攻击(a,b),攻击(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).