一個事實,我有一個關於答案集就如何使現有的其實無效,當已經有(又)一個默認聲明出現在編程問題知識庫。回答集編程 - 使無效
例如,有兩個人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).
非常感謝提前。