我有一个关于答案集编程的问题,关于如何使现有事实无效,当知识库中已经(也)存在默认语句时。
例如,有两个人seby
,andy
其中一个人可以同时开车。场景可能是seby
可以开车,如第 3 行所示,但假设在他的执照被取消后,他不能再开车了,因此我们现在有 4 到 7 行,同时andy
学习驾驶,如第 7 行所示。第 6 行仅显示一个一个人可以一次开车,除了表现seby
和andy
不一样。
1 person(seby).
2 person(andy).
3 drives(seby).
4 drives(seby) :- person(seby), not ab(d(drives(seby))), not -drives(seby).
5 ab(d(drives(seby))).
6 -drives(P) :- drives(P0), person(P), P0 != P.
7 drives(andy).
在上面的程序中,第 3 行和第 7 行与第 6 行相矛盾,并且 Clingo 求解器(我使用的)显然输出UNSATISFIABLE
.
说了这么多,请不要说删除第3行,问题就解决了。问这个问题的目的是想知道现在是否有可能让第 3 行以某种方式无效,让第 4 行履行职责。
但是,第 4 行也可以写成:
4 drives(P) :- person(P), not ab(d(drives(P))), not -drives(P).
提前非常感谢。