人工智能 一种现代方法 第9章 一阶逻辑的推理
文章目录量词的推理规则代换(置换,substitution)全称量词实例化(UI规则)存在量词的实例化合一和提升一般假言推理规则合一归结一阶逻辑的合取范式CNF一阶逻辑的归结推理规则(消解原理)归结反驳(Resolution Refutation)前向链接与反向链接一阶限定字句(一阶确定子句)后向链接一阶逻辑语句翻译示例资源分享量词的推理规则在命题逻辑中,根据归结原理:可由P∨R, Q∨¬R...
文章目录
量词的推理规则
在命题逻辑中,根据归结原理:
可由P∨R, Q∨¬R 得到 P∨Q
可由P∨R(a), Q∨¬R(a) 得到 P∨Q
那么,可由P∨R(x), Q∨¬R(y) 得到P∨Q吗?
这里,首先需要了解代换(置换,substitution)。
代换(置换,substitution)
Subst(θ, α), θ is like {x/Michael, y/Bob},其中θ是substitution,α是centence。
- (∀x )( Man ( x ) ⇒ Mortal ( x ))
- Subst({ x / Michael }, (∀x)(Man(x) ⇒ Mortal(x)))
- Man(Michael) ⇒ Mortal(Michael)
只能将变元代换成常量,不能将常量代换成常量或者常量代换成变元。
- Subst({Michael/x}, Man(Michael) ⇒ Mortal(Michael))
= Max(x) ⇒ Mortal(x) no - Subst({Michael/Bob}, Man(Michael) ⇒ Mortal(Michael))
= Max(Bob) ⇒ Mortal(Bob) no - Subst({x/Bob}, Man(x) ⇒ Mortal(x))
= Max(Bob) ⇒ Mortal(Bob) yes
全称量词实例化(UI规则)
UI规则:用基项(没有变量的项)置换变量得到的语句。
注意:置换是用一个项(语法成分)替代某个变量,产生新语句,而解释则将变量映射到论域中的某个对象。
存在量词的实例化
Subst({Michael/x} ,∃x AtAI(x)∧Sleep(x)
=AtAI(Michael)∧Sleep(Michael)
上面替换y的不是skolem常量而是关于x的Skolem函词
例子:
Subst({m(y)/x},∀y∃xMother(x,y)
=∀y Mother(m(y),y)
在逻辑中,这个新的名称Michael在知识库中其他地方未出现过,把它称作Skolem常数。
存在量词实例化的过程叫做Skolem标准化。
上述的m(y)是一个Skolem函数。
全称量词实例化可以应用多次而得到不同的结果,而存在量词实例化只能应用一次,然后存在量化的语句就可以被抛弃。
一旦进行了去量词产生新语句的操作,就可能将一阶逻辑简化成为命题逻辑。
合一和提升
一般假言推理规则
对于原子语句 p i p_i pi、 p i ′ p_i' pi′和 q q q,存在置换 θ \theta θ使得对所有的i都有 S U B S T ( θ , p i ′ ) SUBST(\theta,p_i') SUBST(θ,pi′)成立,
p
1
′
,
p
2
′
,
.
.
.
,
p
i
′
,
(
p
1
∧
p
2
∧
.
.
.
∧
p
n
⇒
q
)
S
U
B
S
T
(
θ
,
q
)
\frac{p_1',p_2',...,p_i',(p_1 \wedge p_2 \wedge ... \wedge p_n \Rightarrow q )}{SUBST(\theta,q)}
SUBST(θ,q)p1′,p2′,...,pi′,(p1∧p2∧...∧pn⇒q)
该规则有n+1个前提:n个原子语句$p_i'$
和一个蕴含式。结论就是将置换应用于后项q得到的语句。
在邪恶的国王的例子中:
p
1
′
p_1'
p1′是King(John) p1是King(x)
p
2
′
p_2'
p2′是Gredy(y) p2是Gredy(x)
θ是{x/John,y/John} q是Evil(x)
SUBST(θ,q)是Evil(John)
一般化假言推理规则是假言推理规则的升级版本,它将假言推理规则从(没有变量的命题逻辑)提高到一阶逻辑。
合一
合一(Unification):找到使不同的逻辑表示变得相同的置换的过程。合一是所有一阶逻辑推理算法的关键。合一算法UNIFY以两条语句为输入,如果合一置换存在则返回它们的合一元(unifier)θ:
UNIFY(p,q)=θ where SUBST(θ,p)=SUBST(θ,q)
也有可能有多个合一元,即多种置换方式:
- UNIFY (Knows(John,x), Knows(y,z))
- unifier:{y/John, x/z} or {x/John, y/John, z/John}
- ⇒ Knows (John, z) or Knows (John, John)
上例的最一般合一置换是{y/John, x/z} 。
结果表明,对每对可合一的表达式,存在唯一的最一般合一置换(MGU)。不考虑变量的取名情况它是唯一的(如{x/John}和{y/John}是等价的,{x/John, y/John}和{x/John,y/x}也是等价的)。
归结
一阶逻辑的合取范式CNF
一阶逻辑的每个语句都可以转化成推理等价的CNF语句。特别是,CNF语句只有当原始语句不可满足时才不可满足,这是应用CNF语句上的反证法证明的基础。
转换成CNF的过程和命题逻辑类似。主要的不同在于一阶逻辑要消除存在量词。
步骤如下:
- Eliminate implications 消除蕴含词
- Move negation inwards 将¬内移
- Standardize variables 变量标准化
- Skolemize Skolem化
- Drop universal quantifiers 删除全称量词
- Distribute ∧ over ∨ 将∧分配到∨中
try:
∀ x { P ( x ) ⇒ [ ∀ y [ P ( y ) ⇒ P ( f ( x , y ) ) ] ∧ ¬ ∀ y [ Q ( x , y ) ⇒ P ( y ) ] ] } \forall x \left \{ P(x) \Rightarrow [\forall y [P(y) \Rightarrow P(f(x,y)) ] \wedge \neg \forall y[Q(x,y) \Rightarrow P(y)]] \right\} ∀x{P(x)⇒[∀y[P(y)⇒P(f(x,y))]∧¬∀y[Q(x,y)⇒P(y)]]}
一阶逻辑的归结推理规则(消解原理)
一阶逻辑的子句的归结规则简单而言就是命题逻辑归结规则的升级版本。
l
1
∨
.
.
.
∨
l
k
,
m
1
∨
.
.
.
∨
m
n
S
U
B
S
T
(
θ
,
l
1
∨
.
.
.
∨
l
i
−
1
∨
l
i
+
1
∨
,
.
.
.
,
∨
l
k
∨
m
1
∨
.
.
.
∨
m
j
−
1
∨
m
j
+
1
∨
.
.
.
∨
m
n
)
\frac{l_1 \vee... \vee l_k, m_1 \vee ... \vee m_n} {SUBST(\theta,l_1 \vee...\vee l_{i-1} \vee l_{i+1} \vee ,..., \vee l_k \vee m_1 \vee ... \vee m_{j-1} \vee m_{j+1} \vee ... \vee m_n )}
SUBST(θ,l1∨...∨li−1∨li+1∨,...,∨lk∨m1∨...∨mj−1∨mj+1∨...∨mn)l1∨...∨lk,m1∨...∨mn
其中
U
N
I
F
Y
(
l
i
,
¬
m
j
)
=
θ
UNIFY(l_i,\neg m_j)=\theta
UNIFY(li,¬mj)=θ
一个二元归结规则的例子如下,刚好可以对两个文字进行归结:
通过合一置换θ={u/G(x),v/x}消除互补文字Loves(G(x),x)和¬Loves(u,v),可以对两个子句进行归结:
[Animal(F(x))∨Loves(G(x),x)]和[¬Loves(u,v)∨¬Kills(u,v)]
产生归结子句:[Animal(F(x))∨¬Kills(G(x),x)]
全归结规则对每个可合一的子句中的文字子句进行归结。
另外一种方法是归并:去除冗余文字。命题逻辑的归并是指如果两个文字相同,则将这两个文字减少到一个;一阶逻辑的归并是指如果这两个文字可合一,则将这两个文字减少到一个。合一置换必须应用到整个子句。
归结反驳(Resolution Refutation)
证明:KB ╞ α
反证法思路:证明KB∧¬α不可满足,即推导出空语句
理发师悖论(Barber Paradox)
在某个城市中有一位理发师,他的广告词是这样写的:“本人的理发技艺十分高超,誉满全城。我将为本城所有不给自己刮脸的人刮脸,我也只给这些人刮脸。我对各位表示热诚欢迎!”来找他刮脸的人络绎不绝,自然都是那些不给自己刮脸的人。
可是,有一天,这位理发师从镜子里看见自己的胡子长了,他本能地抓起了剃刀,你们看他能不能给他自己刮脸呢?如果他不给自己刮脸,他就属于“不给自己刮脸的人”,他就要给自己刮脸,而如果他给自己刮脸呢?他又属于“给自己刮脸的人”,他就不该给自己刮脸。
证明:不存在这样的理发师
存在一个人只为每个不给自己刮胡子的人刮胡子。
∃p∀q S(p,q)⇔¬S(q,q)
∀x Horse(x)⇒ Animal(x)
等于∀x(¬ Horse(x)∨Animal(x))
不等于¬ ∀x(Horse(x)∨Animal(x))
庸医问题(quack problem)
前向链接与反向链接
在命题逻辑中,给出了命题逻辑限定子句的前向链接算法:从知识库中的原子语句出发,在前向推理中应用假言推理规则,增加新的原子语句,直到不能进行任何推理。
下面讨论在一阶逻辑中,如何应用于一阶限定子句,如何高效地实现。
一阶限定字句(一阶确定子句)
一阶限定子句和命题逻辑中的限定子句非常相似:它们是文字的析取,其中正好只有一个正文字。它可以是原子语句;或是蕴含语句,蕴含语句的前提是正文字的合取,结论是单个正文字。
例如:
King(x) ∧ Greedy(x) ⇒Evil(x)
King(John)
Greedy(y)
和命题逻辑文字不同,一阶限定子句中,一阶文字可以包含变量,假设变量是全称量化的,书写时省略全称量词
有些知识库可写成限定子句的集合,但并非每个知识库都可写为限定子句的集合(单一正文字的限制过于严格)。
考虑以下问题:
美国法律规定美国人贩卖武器给敌对国家是犯法的。美国的敌对国家Nono有一些导弹,所有这些导弹都是美国人West上校卖给他们的。
证明West是罪犯(criminal)。
用一阶限定子句来表示这些事实:
- (1)美国人贩卖武器给敌对国家是犯法的:American ( x )∧ Weapon ( y )∧ Sells ( x , y , z )∧ Hostile ( z ) ⇒Criminal ( x )
- Nono…有导弹:∃x Owns ( Nono , x )∧ Missile ( x )
- 消去存在量词被转换成两个限定子句:
- (2)Owns ( Nono , M1 )
- (3)Missile ( M1 )
- (4)所有该国的导弹都购自West上校:Missile ( x )∧ Owns ( Nono , x ) ⇒ Sells ( West , x , Nono )
- (5)还需要知道导弹是武器:Missile ( x ) ⇒ Weapon ( x )
- (6)还需要知道美国的敌人被称为“敌对的”:Enemy ( x , America ) ⇒ Hostile ( x )
- (7)West,一个美国人:American ( West )
- (8)Nono国,美国的敌人:Enemy ( Nono , America )
后向链接
一阶逻辑语句翻译示例
1.使用三个谓词:HeadOf(h,x)(h是x的头),Horse(x),Animal(x)
前提:马是动物
∀x Horse(x)⇒ Animal(x)
结论:一匹马的头是一只动物的头
∀x,h Horse(x)∧HeadOf(h,x) ⇒ ∃yAnimal(y) ∧ HeadOf(h,y)
资源分享
实验代码下载:
https://github.com/yyl424525/AI_Homework
人工智能-一种现代方法中文第三版pdf、课件、作业及解答、课后习题答案、实验代码和报告、历年考博题下载:https://download.csdn.net/download/yyl424525/11310392
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)