目录
表示语言
一阶逻辑和命题逻辑的本体论约定(关于世界本质的假设)不同:
一阶逻辑的模型
量词与连接词
数据库语义
命题推理与一阶推理
全称量词实例化推理规则(UI规则)
存在量词实例化推理规则(EI规则)skolem化
在全称量词辖域内的存在量词
前向链接
高效的前向链接
规则前提与已知事实进行匹配:合取排序
增量前向链接
避免产生无关的事实
表示语言
程序
表示的是计算
过程
,程序中的
数据结构
可以表示
事实
。程序设计语言
缺少
从事实推导出
其他事实的
通用
机制,数据结构的每次更新都需要特定领域的
专门
过程完成。
命题逻辑
是
描述性
语言,知识和推理是
分开的
,推理完全
独立
于领域。命题逻辑的缺点是无
法描述有很多
对象
的环境。
命题逻辑难以表示
部分
或
全部
对象
一阶逻辑语言
结合形式语言和自然语言
的优势 ,围绕对象和关系建立,可以表示关于部分或
全部对象的事实。
一阶逻辑和命题逻辑的本体论约定(关于世界本质的假设)不同:
◼
命题逻辑假定
世界中的事实要么成立要么不成立
。
每个事实只能处于真或假两种状态之一,每个模型对每个命题符号赋值true
或
false
◼
一阶逻辑假设
世界由对象构成,对象之间的某种关系或者成立或者不成立
。
一阶逻辑的模型
包含一个非空对象集合以及一个解释。解释将常量符号映射到对象 、谓词符号映射到对象之间的关系、函词映射到对象上的函数。
量词与连接词
一阶逻辑描述“有的病人喜欢所有的医生,但是没人喜欢庸医。”
F1:(∃x)(P(x)∧(∀y)(D(y)=>L(x,y)))
F2:(∀x)(P(x)=>(∀y)(Q(y) =>┓L(x,y)))
等词:两个项指代同一个对象
数据库语义
◼
关键字假设:
坚持每个常量符号指代一个不同的对象
◼
论域闭包:
每个模型只包括常量符号指代的对象。
◼
封闭世界假设:
假设我们不知道的所有原子语句事实上都为假。
数据库语义
区分于标准的
一
阶逻辑语义
命题推理与一阶推理
全称量词实例化推理规则(UI规则)
全称量化的语句可以推理出用
没有变量的项(基项)
代换全称量化变量得到的语句。
存在量词实例化推理规则(EI规则)skolem化
存在量化的语句可以推理出
skolem常量
代换存在量化变量得到的语句
g在知识库里;而k没有在知识库的其他地方出现过,是一个新的名称。
全称量词实例化可以多次应用获得不同的结果;
存在量词实例化只能应用一次,然后在量化的语句就可以被抛弃。
在全称量词辖域内的存在量词
利用谓词逻辑表示下列知识(包括已知和结论),然后化成子句集:
(1)凡是清洁的东西就有人喜欢;
(2)人们都不喜欢苍蝇
求证:苍蝇是不清洁的。
证:现定义如下谓词 L(x,y)------某人 x 喜欢某物 y; P(y)------ 某物 y 是清洁的东西
当知识库中包含函词时,
基项置换集
可能是无限的,因为
可以构造无限多个嵌套项
如果某个语句被原始的一阶知识库蕴涵,则存在一个
只涉及命题化知识库的有限
子集。
一
阶逻辑的蕴涵问题是
半
可判定的——
存在算法能够证明被蕴涵的语句,不存在算法否定不被蕴涵的语句。
前向链接
限定子句
:正好只有一个正文字的子句。
◼
它可以是原子语句; 或是蕴含语句,蕴含语句的前提是正文字的合取, 结论是单个正文字。
命题逻辑中,建立在限定子句上的
前向链接算
法
:从知识库中的原子语句出发,在前向推理
中应用
假言推理规则
,增加新的原子语句,直到不能进行任何推理。
一
阶限定子句
中,假设变量是全称量化的,书写时省略全称量词
有些知识库可写成限定子句的集合,但并非每 个知识库都可写为限定子句的集合(
单一正文字的限制过于严格)
。
数据日志类知识库不包含函词。数据日志是一种受限于没有函词的一阶限定语句的语言。没有函词的推理更容易。
数据日志可以表示由关系数据库生成的语句类型。
前向链接是可靠的,完备的。
从统计可能添加的事实开始,该数值决定了迭代的最大次数。令k表示谓词的最大元数(参数的个数),p表示谓词的数量,n表示常量符号的数量。显然,不重复的基本事实不会多于p n^k个,所以经过多次迭代后,算法一定能到达某个不动点。
高效的前向链接
规则前提与已知事实进行匹配:合取排序
合取排序问题
:对规则前提的合取项进行排序 ,使总成本最小。
寻求最优排序是
NP
难题但有好的启发式可用。例如CSP
的
最少剩余值(
MRV
)
启发式建议
增量前向链接
避免重复匹配
;逐步完成不完全匹配
增量前向链接
:
必须使用前一
次迭代中得到的事实
进行本次迭代的推理得到新的事实
改进:
保留
并逐步完成不完整匹配
,而不是舍弃。
命题逻辑的前向链接使用 count 实现了不完整匹配。
避免产生无关的事实
利用目标信息重写规则集
,从而在前向推理过程中只考虑相关的变量绑定——
魔法集
后向链接算法
后向链接是一种深度优先搜索算法
一旦合取式中的某个子目标得以成功实现,它的置换要用于后续子目标。
一类与或搜索:
或:目标查询可以被知识库的规则证明
与:子句中的合取项列表必须被证实
归结
转换成CNF步骤:
1. 删除蕴含词: D(y)=>L(x,y) ┓D(y)∨L(x,y)
2. ┓否定内移,量词转换
3. 标准化变量:去重用的变量
4. Skolem化 (∃x)(P(x) P(a)
5. 将所有量词移到左边
6. 删除全称量词
7. 利用分配律∨内移,∧外移
将以下语句转化为合取范式:
(∃x)(P(x)∧(∀y)(D(y)=>L(x,y)))
(∃x)(P(x)∧(∀y)(┓D(y)∨L(x,y)))
P(a)∧(∀y)(┓D(y)∨L(a,y))
(∀y)(P(a)∧(┓D(y)∨L(a,y)))
P(a), ┓D(y)∨L(a,y)
归结推理:
用归结导出 KB为空:
归结步骤:问题转化为FOL,再转化为CNF,加上询问句a的反,使用规则导出空,从而证明了a
归结策略:
单元优先:优先对包含一个单文字(也称单元子句)的语句进行归结
最佳优先搜索:权重(与规模和难度相关)小的优先执行
支撑集:归结的每一步都须涉及至少一个特殊子句集(支撑集)的元素,支撑集的错误选择将会使得算法不完备
输入归结/包容法:清除所有被知识库中的已有语句包容(比该语句更特例)的语句