【人工智能原理及其应用】习题二(4)


前言

参考/参照书籍:
《人工智能原理及其应用(第4版)》,王万森编著,北京-电子工业出版社,2018.8
ISBN 978-7-121-34443-5


(补充)【常用等价式】

①¬ ¬P⇔P
②P∨Q⇔Q∨P,P∧Q⇔Q∧P
③(P∨Q)∨R⇔P∨(Q∨R)
 (P∧Q)∧R⇔P∧(Q∧R)
④P∨(Q∧R)⇔(P∨Q)∧(P∨R)
 P∧(Q∨R)⇔(P∧Q)∨(P∧R)
⑤¬P∨Q⇔¬P∧¬Q
 ¬P∧Q⇔¬P∨¬Q
⑥P∨(P∧Q)⇔P,P∧(P∨Q)⇔P
⑦P∨¬P⇔T,P∧¬P⇔F
⑧P→Q⇔¬P∨Q
 P↔Q⇔(P→Q)∧(Q→P)
 P↔Q⇔(P∧Q)∨(¬Q∧¬P)
⑨¬(∃x)P(x)⇔(∀x)(¬P(x))
 ¬(∀x)P(x)⇔(∃x)(¬P(x))
⑩(∀x)(P(x)∧Q(x))⇔(∀x)P(x)∧(∀x)Q(x)
 (∃x)(P(x)∨Q(x))⇔(∃x)P(x)∨(∃x)Q(x)

(补充)【常用永真蕴涵式】

①P∧Q⇒P,P∧Q⇒Q
②P⇒P∨Q,Q⇒P∨Q
③¬P,P∨Q⇒Q
④P,P→Q⇒Q
⑤¬Q,P→Q⇒¬P
⑥P→Q,Q→R⇒P→R
⑦P∨Q,P→R,Q→R⇒R
⑧(∀x)P(x)⇒P(y)
⑨(∃x)P(x)⇒P(y)

2.31 什么是置换?什么是合一?

置换:
在不同谓词公式中,往往会出现多个谓词的谓词名相同但个体不同的情况,此时推理过程是不能直接进行匹配的,需要先进行变元的替换。这种利用项对变元进行替换叫置换。

合一:
利用置换使两个或多个谓词的个体一致。

2.32 判断下列公式是否为可合一,若可合一,则求出其相应的置换。

(1)P(a,b),P(x,y)
(2)P(f(x),b),P(y,z)
(3)P(f(x),y), P(y,f(b))
(4)P(f(y),y,x),P(x,f(a),f(b))
(5)P(x,y),P(y,x)

(1)可合一,其置换为:θ={a/x,b/y}。
(2)可合一,其置换为:θ={y/f(x),b/z}。
(3)可合一,其置换为:θ={f(b)/y,b/x}。
(4)不可合一。
(5)可合一,其置换为:θ={y/x}。

2.33 什么是自然演绎推理?它所依据的推理规则是什么?

自然演绎推理:从一组已知为真的事实出发,运用经典逻辑中的推理规则得到的结论。
依据的推理规则:假言推理、拒取式推理、假言三段论等经典逻辑中的推理规则。

2.34 什么是谓词公式的可满足性?什么是谓词公式的不可满足性?

对于谓词公式P,如果至少存在D上的一个解释,使得公式P在此解释下的真值为T,则称公式P在D上是可满足的。按照此定义,对谓词公式P,如果不存在任何解释,使得P的取值为T,则称公式为不可满足的。

2.35 什么是谓词公式的前束范式?什 么是谓词公式的Skolem 范式?

设F为一谓词公式,如果其中的所有量词均非否定地出现在公式的最前面,而它们的辖域为整个公式,则称F为前束范式。一般地,前束范式可写成:(Q1x1)(Q2x2)(Qmxm)M(x1, x2, ···, xn)
如果前束范式中所有的存在量词都在全称量词之前,则称这种形式的谓词公式Skolem范式。

2.36 什么是子句集?如何将谓词公式化为子句集?

文字:原子谓词公式及其否定。
子句:任何文字的析取式。
空子句:不含任何文字的子句。
子句集:由空子句构成的集合。

子句集的化简步骤:
(1)消去谓词公式中的连接词“→”和“↔”符号
(2)把否定符号移到紧靠谓词的位置上
(3)变量标准化
(4)化为前束范式
(5)消去存在量词
(6)化为Skolem标准形
(7)消去全称量词
(8)消去合取词
(9)子句变量标准化,即,使每个子句中的变量符号不同

2.37 把下列谓词公式化成子句集

(1)(∀x)(∀y)(P(x,y)∧Q(x,y))
(2)(∀x)(∀y)(P(x,y)→Q(x,y))
(3)(∀x)(∃y)(P(x,y)∨(Q(x,y)→R(x,y)))
(4)(∀x)(∀y)(∃z)(P(x,y)→Q(x,y)∨R(x,z))

(1)由于(∀x)(∀y)(P(x,y)∧Q(x,y))已经是Skolem标准型,且P(x,y)∧Q(x,y)已经是合取范式,所以可直接消去全称量词、合取词,得
{P(x,y),Q(x,y)}
再进行变元换名得子句集:
S={P(x,y),Q(u,v)}

(2)对谓词公式(∀x)(∀y)(P(x,y)→Q(x,y)),先消去连接词“→”得:
(∀x)(∀y)(¬P(x,y)∨Q(x,y))
此公式已为Skolem标准型,再消去全称量词得子句集:
S={¬P(x,y)∨Q(x,y)}

(3)对谓词公式(∀x)(∃y)(P(x,y)∨(Q(x,y)→R(x,y))),先消去连接词“→”得:
(∀x)(∃y)(P(x,y)∨(¬Q(x,y)∨R(x,y)))
此公式已为前束范式,再消去存在量词即用Skolem函数f(x)替换y得:
(∀x)(P(x,f(x))∨¬Q(x,f(x))∨R(x,f(x)))
此公式已为Skolem标准型,再消去全称量词得子句集:
S={P(x,f(x))∨¬Q(x,f(x))∨R(x,f(x))}

(4)对谓词公式(∀x)(∀y)(∃z)(P(x,y)→Q(x,y)∨R(x,z)),先消去连接词“→”得:
(∀x)(∀y)(∃z)(¬P(x,y)∨Q(x,y)∨R(x,z))
此公式已为前束范式,再消去存在量词即用Skolem函数f(x,y)替换z得:
(∀x)(∀y)(¬P(x,y)∨Q(x,y)∨R(x,f(x,y)))
此公式已为Skolem标准型,再消去全称量词得子句集:
S={¬P(x,y)∨Q(x,y)∨R(x,f(x,y))}

2.38 鲁滨逊归结原理的基本思想是什么?

鲁滨逊归结原理的基本思想是:
首先把欲证明问题的结论否定,并加入子句集,得到一个扩充的子句集S’;然后设法检验子句集S’是否含有空子句,若含有空子句,则表明S是不可满足的;若不含有空子句,则继续使用归结法,在子句集中选择合适的子句进行归结,直至导出空子句或不能继续归结为止。

2.39 判断下列子句集中哪些是不可满足的。

(1){¬P∨Q,¬Q,P,¬P}
(2){P∨Q,¬P∨Q,P∨¬Q,¬P∨¬Q}
(3){P(y)∨Q(y),¬P(f(x))∨R(a)}
(4){¬P(x)∨Q(x),¬P(y)∨R(y),P(a),S(a),¬S(z)∨¬R(z)}
(5){¬P(x)∨Q(f(x),a),¬P(h(y))∨Q(f(h(y)),a)∨¬P(z)}
(6){P(x)∨Q(x)∨R(x),¬P(y)∨R(y),¬Q(a),¬R(b)}
(1)是不可满足,其归结过程为:
在这里插入图片描述

(2)是不可满足,其归结过程为:
在这里插入图片描述

(3)不是不可满足,原因是不能由它导出空子句

(4)是不可满足,其归结过程为:
在这里插入图片描述
(5)不是不可满足,原因是不能由它导出空子句

(6)是不可满足,其归结过程为:
在这里插入图片描述

2.40 对下列各题分别证明G是否为F1,F2,···,Fn的逻辑结论:

(1)F:(∃x)(∃y)P(x,y)
  G:(∀y)(∃x)P(x,y)
(2)F:(∀x)(P(x)∧(Q(a)∨Q(b)))
  G:(∃x)(P(x)∧Q(x))
(3)F:(∃x)(∃y)(P(f(x))∧(Q(f(y)))
  G: P(f(a))∧P(y)∧Q(y)
(4)F1:(∀x)(P(x)→(∀y)(Q(y)→¬L(x,y)))
  F2:(∃x)(P(x)∧(∀y)(R(y)→L(x,y)))
G:(∀x)(R(x)→¬Q(x))
(5)F1:(∀x)(P(x)→(Q(x)∧R(x)))
  F2:(∃x)(P(x)∧S(x))
  G:(∃x)(S(x)∧R(x))

(1)先将F和G化成子句集:
S={P(a,b),P(x,b)}再对S进行归结:
在这里插入图片描述
所以,G是F的逻辑结论

(2)先将F和G化成子句集
由F得:S1={P(x),(Q(a)∨Q(b))}
由于G为:(∃x)(P(x)AQ(x)),即
(∀x)(P(x)∨Q(x)),
可得:S2={P(x)∨Q(x)}
因此,扩充的子句集为:
S={P(x),(Q(a)∨Q(b)),P(x)∨Q(x)}再对S进行归结:
在这里插入图片描述

所以,G是F的逻辑结论
同理可求得(3)、(4)和(5),其求解过程略。

2.41 设已知【v是u的祖父】

(1)如果x是y的父亲,y是z的父亲,则x是z的祖父;
(2)每个人都有一个父亲。
试用归结演绎推理证明:对于某人u,一定存在一个人v,v是u的祖父。

先定义谓词
F(x,y):x是y的父亲
GF(x,z):x是z的祖父
P(x):x是一个人
再用谓词把问题描述出来:
已知
F1:(∀x)(∀y)(∀z)(F(x,y)∧F(y,z))→GF(x,z))
F2:(∀y)(P(x)→F(x,y))
求证结论G:(∃u)(∃v)(P(u)→GF(v,u))
然后再将F1,F2和G化成子句集:
①¬F(x,y)∨¬F(y,z)∨GF(x,z)
②¬P®∨F(s,r)
③P(u)
④¬GF(v,u))
对上述扩充的子句集,其归结推理过程如下:
在这里插入图片描述

2.42 设已知【有些很聪明的人并不识字】

(1)能阅读的人是识字的;
(2)海豚不识字;
(3)有些海豚是很聪明的。
请用归结演绎推理证明:有些很聪明的人并不识字。
解:第一步,先定义谓词,
设R(x):x是能阅读的;
K(y):y是识字的;
W(z):z是很聪明的;
第二步,将已知事实和目标用谓词公式表示出来
能阅读的人是识字的:(∀x)(R(x))→K(x))
海豚不识字:(∀y)¬K(y)
有些海豚是很聪明的:(∃z)W(z)
有些很聪明的人并不识字:(∃x)(W(z)∧¬K(x))
第三步,将上述已知事实和目标的否定化成子句集:
①¬R(x))∨K(x)
②¬K(y)
③W(z)
④¬W(z)∨K(x)
第四步,用归结演绎推理进行证明
在这里插入图片描述

(补充)【假设张被盗,公安局派出5个人去调查】

案情分析时,侦查员A说:“赵与钱中至少有一个人作案”,侦查员B说:“钱与孙中至少有一个人作案”,侦查员C说:“孙与李中至少有一个人作案”,侦查员D说:“赵与孙中至少有一个人与此案无关”,侦查员E说:“钱与李中至少有一个人与此案无关”。如果这5个侦察员的话都是可信的,使用归结演绎推理求出谁是盗窃犯。
解:(1)先定义谓词和常量
设C(x)表示x作案,Z表示赵,Q表示钱,S表示孙,L表示李
(2)将已知事实用谓词公式表示出来
赵与钱中至少有一个人作案:C(Z)∨C(Q)
钱与孙中至少有一个人作案:C(Q)∨C(S)
孙与李中至少有一个人作案:C(S)∨C(L)
赵与孙中至少有一个人与此案无关:(C(Z)∧C(S)),即C(Z)∨C(S)
钱与李中至少有一个人与此案无关:(C(Q)∧C(L)),即C(Q)∨C(L)
(3)将所要求的问题用谓词公式表示出来,并与其否定取析取。
设作案者为u,则要求的结论是C(u)。将其与其否)取析取,得:
¬C(u)∨C(u)
(4)对上述扩充的子句集,按归结原理进行归结,其修改的证明树如下:在这里插入图片描述
因此,钱是盗窃犯。实际上,本案的盗窃犯不止一人。根据归结原理还可以得出:
在这里插入图片描述
因此,孙也是盗窃犯。

(补充)【例2.34 “快乐学生”问题】

假设:任何通过计算机考试并获奖的人都是快乐的,任何肯学习或幸运的人都可以通过所有考试,马不肯学习但他是幸运的,任何幸运的人都能获奖。求证:马是快乐的。

先将问题用谓词表示如下:
“任何通过计算机考试并获奖的人都是快乐的”
(∀x)(Pass(x,computer)∧Win(x,prize)→Happy(x))
“任何肯学习或幸运的人都可以通过所有考试”
(∀x)(∀y)(Study(x)∨Lucky(x)→Pass(x,y))
“马不肯学习但他是幸运的”
¬Study(Ma)∧Lucky(Ma)
“任何幸运的人都能获奖”
(∀x)(Lucky(x)→Win(x,prize))
目标“马是快乐的”的否定
¬Happy(Ma)

将上述谓词公式转化为子句集如下:
①¬Pass(x,computer)∨¬Win(x,prize)∨Happy(x)
②Study(y)∨Pass(y,z)
③¬Lucky(u)∨Pass(u,v)
④¬Study(Ma)
⑤Lucky(Ma)
⑥¬Lucky(w)∨Win(w,prize)
⑦¬Happy(Ma)(本子句为结论的否定)

按谓词逻辑的归结原理对此子句集进行归结,其归结反演树如图2.37所示。
在这里插入图片描述

(补充)【例2.35 “激动人心的生活”问题。】

假设:所有不贫穷并且聪明的人都是快乐的。那些看书的人是聪明的。黎明能看书且不贫穷。快乐的人过着激动人心的生活。求证:黎明过着激动人心的生活。
解:先将问题用谓词表示如下:
“所有不贫穷并且聪明的人都是快乐的”
(∀x)((¬Poor(x)∧Smart(x))→Happy(x))“那些看书的人是聪明的”
(∀y)(Read(y)→Smart(y))“黎明能看书且不贫穷”
Read(LiMing)-Poor(LiMing)“快乐的人过着激动人心的生活”
(∀z)(Happy(z)→Exciting(z))
目标“黎明过着激动人心的生活”的否定
¬Exciting(LiMing)
将上述谓词公式转化为子句集如下:
①Poor(x)∨-Smart(x)∨Happy(x)
②¬Ready)∨ Smart(y)
③Read(LiMing)
④-Poor(LiMing)
⑤¬Happy(z)∨Exciting(z)
⑥¬Exciting(LiMing)
按谓词逻辑的归结原理对此子句集进行归结,其归结反演树如图2.38所示。
在这里插入图片描述

好的,我理解您想要我使用归结演绎推理来证明"有些很聪明的人并不识字",并用Python编程实现这个逻辑推理过程。我会按照您的要求来完成这个任务。 首先,让我们定义命题并构建知识库: 1. 能阅读的人是识字的。 (∀x)(R(x) → L(x)) 2. 海豚不识字。 (∀x)(D(x) → ¬L(x)) 3. 有些海豚是很聪明的。 (∃x)(D(x) ∧ C(x)) 4. 人不是海豚。 (∀x)(H(x) → ¬D(x)) 5. 需要证明的结论: 有些很聪明的人并不识字。 (∃x)(H(x) ∧ C(x) ∧ ¬L(x)) 现在,让我们用Python来实现这个推理过程: ```python from kanren import run, eq, membero, var, lall from kanren.core import lany # 定义变量 x = var() # 定义知识库 rules = lall( # 1. 能阅读的人是识字的。 (eq, (lall((membero, ('R', x), ('L', x)))), True), # 2. 海豚不识字。 (eq, (lall((membero, ('D', x), (lnot, ('L', x))))), True), # 3. 有些海豚是很聪明的。 (membero, ('D', x), ('C', x)), # 4. 人不是海豚。 (eq, (lall((membero, ('H', x), (lnot, ('D', x))))), True) ) # 需要证明的结论 goal = (membero, ('H', x), (membero, ('C', x), (lnot, ('L', x)))) # 使用归结演绎推理进行证明 solutions = run(0, x, rules, goal) # 输出结果 if solutions: print(f"证明成功! 解: {solutions}") else: print("证明失败!") ``` 这个Python程序使用了`kanren`库来进行逻辑编程和推理。程序中定义了知识库和需要证明的结论,然后使用归结演绎推理来寻找满足条件的解。 运行这个程序,如果输出"证明成功! 解: [...]",则说明我们成功地证明了"有些很聪明的人并不识字"这个结论。 需要注意的是,由于逻辑编程的特性,这个程序可能需要一些时间来运行。另外,`kanren`库可能需要先安装(`pip install kanren`)才能运行这个程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值