逻辑与数据挖掘技术详解
一阶逻辑
在逻辑编程中,我们可以将原始目标转化为更接近解决方案的新目标。反驳是一系列目标 (G, G_1, G_2, \cdots, G_n),其中 (G) 是原始目标,每个 (G_i) 是通过将 (G_{i - 1}) 与程序 (P) 中的子句进行消解得到的,并且 (G_n = \bot)。这样的反驳表明 (P \cup {G}) 是不一致的,因此 (P \models \neg G)。
寻找反驳实际上是一个搜索问题,因为通常有多个程序子句可以与当前目标进行消解。几乎所有的 Prolog 解释器都采用深度优先搜索过程,从左到右搜索目标文字,从上到下搜索程序子句。一旦找到反驳,就将所有消解步骤中收集的替换组合起来,得到答案替换。逻辑编程的一个独特特点是,一个目标可能有多个(或少于一个)反驳和答案替换。
以下是一个 Prolog 程序示例,用于定义 Peano 算术的加法:
peano_sum(0,Y,Y).
peano_sum(s(X),Y,s(Z)) :- peano_sum(X,Y,Z).
在这个程序中,变量以大写字母开头, :- 表示反向蕴含或“如果”。一元函子 s 表示后继函数。第一个规则表示“0 和任意数 (y) 的和是 (y)”,第二个规则表示“如果 (x) 和 (y) 的和是 (z),那么 (x + 1) 和 (y) 的和是 (z + 1)”。
例如,目标 :- peano_sum(s(0),s(s(0)), Q)
超级会员免费看
订阅专栏 解锁全文
4448

被折叠的 条评论
为什么被折叠?



