10/26/20201HORN子句10/26/20202HORN子句逻辑逻辑学家AlfredHorn定义如果一个子句中最多有一个正文字,则称此子句为Horn子句;由Horn子句构成的子句集,称为Horn集。三种类型的Horn子句(1)一个单一原子——常被称为一个“事实”。(2)一个蕴涵——常被称为一个“规则”——它的前件由一个肯定文字的合取组成,而它的后件由一个肯定的文字组成。(3)一个否定文字的集合——写成带有一个由肯定文字的合取组成的前件和一个空后件的蕴涵形式。常称为一个“目标”。Horn集描述的知识(事实与规则)恰好是知识工程中经常使用的知识表示方式。10/26/20203Horn子句PQ1Q2…Qn通常表示为PQ1,Q2,…,Qn。很显然,Horn子句必取下列四种形式之一:(1)PQ1,Q2,…,Qn(n0)称为过程,P称为过程名,Q1,,Qn称为过程体,Qi为过程调用。(2)P(上式中n0)----事实(3)Q1,Q2,…,Qn(n0)----目标,全部由过程调用组成,常用来表示询问(4)□----停机语句,表示程序执行(成功)终止。10/26/20204Horn子句逻辑,就是由Horn子句组成的一阶谓词演算系统的子系统.Horn子句逻辑程序就是指这样一些被称为过程、目标和事实的Horn子句集合。10/26/20205例已知“张三在哪儿,他的狗就在哪儿”,“张三在火车上”,询问:“张三的狗是否也在火车上?”过程AT(dog,x)AT(zhang,x)事实AT(zhang,train)目标AT(dog,train)10/26/20206程序执行过程:首先,目标中过程调用AT(dog,train)与过程名AT(dog,x)匹配(合一为{train/x}),调用过程AT(zhang,x){train/x},从而产生新的目标目标AT(zhang,train)它与事实AT(zhang,train)匹配,产生目标□,它标志原目标中过程调用AT(dog,train)成功,由于原目标中只有一个过程调用,程序执行终止,产生输出:是。容易看出,Horn子句逻辑程序的执行过程无异于归结过程,匹配操作实即归结操作。10/26/20207例.设有某家庭成员的集合{Lary,Linda,Bob,John,Mary,Allan,Nick,Kevin,Bill},我们已知他们之间的亲属关系为:Linda是Bob,John,Mary的母亲Mary是Bill的母亲Bob是Allan,Nick,Kevin的父亲Lary是Linda的丈夫询问:Allan是Nick的兄弟吗?Kevin是谁的兄弟?10/26/20208LindaBobJohnMaryAllanNickKevinBill10/26/20209Mother(x,y):x是y的母亲Father(x,y):x是y的父亲Husband(x,y):x是y的丈夫Brother(x,y):x是y的兄弟有Horn子句程序如下:(1)Mother(Linda,Bob)(2)Mother(Linda,John)(3)Mother(Linda,Mary)(4)Mother(Mary,Bill)(5)Father(Bob,Allan)(6)Father(Bob,Nick)(7)Father(Bob,Kevin)(8)Husband(Lary,Linda)10/26/202010(9)Brother(y,z)Mother(x,y),Mother(x,z)(10)Brother(y,z)Father(x,y),Father(x,z)(11)Brother(x,z)Brother(x,y),Brother(y,z)(12)Brother(Allan,Nick)(询问:Allan是Nick的兄弟吗?)(12)’Brother(Kevin,u)(询问:Kevin是谁的兄弟?)程序执行过程如下:(13)Brother(Allan,y),Brother(y,Nick)由(12),(11)(14)Father(x,Allan),Father(x,z),Brother(z,Nick)由(13),(10)(15)Father(Bob,z),Brother(z,Nick)由(14),(5)(16)Brother(Allan,Nick)由(14),(6)(17)Father(Bob,Allan)由(16),(15)(18)□由(17),(5)对询问(12)回答“是”。继续执行回答询问(12)’的程序。(13)’Father(x,Kevin),Father(x,u)由(12)’,(10)(14)’Father(Bob,u)(合一为{Bob/x})由(13)’,(7)(15)’□(合一为{Nick/u})由(11)’,(6)10/26/202011对询问(12)’回答是“u=Nick”即“Kevin是Nick的兄弟”。为提取这一回答,可采用停机谓词Print。这时(12)’可以改作Brother(Kevin,u),Print(u)最终程序终止于Print(Nick)。Note:本例中程序执行是人工干预的结果。为了使Horn子句真正成为“程序”,还应当给它赋予控制子句匹配的控制成分。