次のプログラムがあるとします。
human(socrates).
day(tomorrow).
die(X) :- human(X).
may_go_to_school(Y) :- day(Y),
not holiday(Y).
プログラムの回答セットを取得するために clingo を実行すると、次のようになります。
Answer: 1
human(socrates) day(tomorrow) die(socrates) may_go_to_school(tomorrow)
グラウンダーは最初にすべての変数を定数にインスタンス化することがわかっているので、グラウンディング後のプログラムは次のようになります。
human(socrates).
day(tomorrow).
die(socrates) :- human(socrates).
may_go_to_school(tomorrow) :- day(tomorrow),
not holiday(tomorrow).
私はGelfondの本を読んで、回答セットを取得するための3つのルールを提供しています:
Π の規則を満たします。言い換えれば、ルールの本体を信じるなら、ルールの頭を信じてください。
矛盾を信じないでください。
「強制されていないものは信じない」という「合理性の原則」を遵守してください。</p>
ここにルールがあります:
may_go_to_school(tomorrow) :- day(tomorrow),
not holiday(tomorrow).
失敗として否定を得たnot holiday(tomorrow)
この本に示されているように:
シンボル
not
は、デフォルトの否定 (または失敗としての否定) と呼ばれる新しい論理接続詞です。not l は、「l が真実であるとは信じられない」と読まれることがよくあります。これは、l が偽であると信じられていることを意味するものではないことに注意してください。合理的な推論者が陳述p
もその否定も信じないということは、実際にはごく普通のことであると考えられ¬p
ます。
次に、ルール 1 に基づいて、 、どちらも信じてはならないのでbelieve in the head of a rule if you believe in its body
、体を信じるべきですか?not holiday(tomorrow).
holiday(tomorrow).
¬holiday(tomorrow).
答えによると、私は信じるべきです¬holiday(tomorrow).
- では、なぜこの否定を失敗として必要とするのでしょうか?
- 古典的な否定をそのまま使えますか?