我有一个关于答案集编程的问题,关于如何使现有事实无效,当知识库中已经(也)存在默认语句时。
例如,有两个人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 行和第 4 行相互矛盾,并且 Clingo 求解器(我使用的)显然输出UNSATISFIABLE
.
说了这么多,删除第 3 行并解决问题并不是我所期待的。问这个问题的目的是想知道现在是否有可能让第 3 行以某种方式无效,让第 4 行履行职责。
但是,第 4 行也可以写成:
4个驱动器(P):-人(P),不是ab(d(驱动器(P))),不是-驱动器(P)。
提前非常感谢。