可废止逻辑编程:规则、冲突与优先级解析
1. 可废止规则与推定
在逻辑编程中,可废止规则是一种重要的推理方式。例如,我们可以设定 “will_be_elected(wolf) := true.” ,这使得我们能够区分推定和事实。推定是基于一定的假设得出的结论,而事实则是明确已知的情况。
还有一类重要的陈述,如 “Wolf might not win if there is a poor voter turn - out.” 这类 “might” 规则。当出现选民投票率低的情况时,并不能直接得出 Wolf 不会获胜的结论。这类规则的作用是干扰我们原本可能得出的结论,而不是让我们得出新的结论。当出现选民投票率低的情况时,我们关于 Wolf 会获胜的推定就会被击败,此时推理引擎既不应得出 Wolf 会获胜,也不应得出 Wolf 不会获胜的结论。
可废止规则有两种被击败的方式:
- 反驳(rebut) :存在普通的 Prolog 规则或另一个可废止规则支持相反的结论,此时第二个规则反驳第一个规则。例如,两个结论相反的可废止规则会相互反驳。
- 削弱(undercut) :像 “might” 规则这类,它们不支持相反的结论,只是指出被其击败的规则可能不适用的情况。我们将这种不支持任何结论的击败者称为削弱击败者,简称为击败者。
为了表示击败者、可废止规则和推定,我们引入了新的运算符 “:^” 来连接击败者的头部和主体。例如,在选举示例中,击败者可以表示为 “neg will_be_elected(wolf) :^ voter_turn_out_is_poor.”
<