答案集编程 - 使事实无效

人工智能 知识表示 逻辑 声明式编程
2021-10-20 02:08:51

我有一个关于答案集编程的问题,关于如何使现有事实无效,当知识库中已经(也)存在默认语句时。

例如,有两个人sebyandy其中一个人可以同时开车。场景可能是seby可以开车,如第 3 行所示,但假设在他的执照被取消后,他不能再开车了,因此我们现在有 4 到 7 行,同时andy学习驾驶,如第 7 行所示。第 6 行仅显示一个一个人可以一次开车,除了表现sebyandy不一样。

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)。

提前非常感谢。

0个回答
没有发现任何回复~