1

一個事實,我有一個關於答案集就如何使現有的其實無效,當已經有(又)一個默認聲明出現在編程問題知識庫。回答集編程 - 使無效

例如,有兩個人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行和7頂撞與線6和Clingo解算器(我使用)明顯輸出UNSATISFIABLE

說到這一切,請不要說刪除第3行,問題就解決了。問這個問題背後的意圖是要知道現在是否有可能使第3行無效以讓第4行完成其職責。

然而,4號線也可以寫爲:

4 drives(P) :- person(P), not ab(d(drives(P))), not -drives(P). 

非常感謝提前。

回答

0

我不完全理解這個問題。第3行和第4行是單獨的規則,即使第4行的前面是假行第3行仍然是真實的。換句話說,第4行似乎是多餘的。

看起來你想要一個選擇。我假設ab(d(驅動器(seby)))表示seby已經失去執照。所以,在第四條線以下,您僅限於駕駛駕照的人。第五行是選擇,因此默認情況下,andy或seby可以驅動,但不能同時驅動。在地面程序中注意第五行如何等同於驅動器(seby): - 不驅動器(安迪)。和驅動(安迪): - 不驅動(seby)。您也可以讓seby成爲使用優化語句的首選驅動程序(以下選擇規則就像優化語句)。

person(seby). 
person(andy). 
ab(d(drives(seby))). 
:- person(P), ab(d(drives(P))), drives(P). 
1{drives(P) : person(P)}1.