550 likes | 706 Views
第四章 机械化证明. 推理规则实际上是一个从其他谓词演算命题产生新的谓词演算命题的机械化方法。一个证明过程是一个推理规则和用于产生一组逻辑表达式的新命题的算法的结合。. 第一节 归结原理. 一、消解原理、归结推理方法. 1 命题归结方法 核心 一阶命题逻辑公式: A1∧A2∧A3 → B , A1∧A2∧A3∧ ~ B. 步骤: 1 、先把问题转换成合取范式。 2 、将合取范式写成集合表示形式,即子句集 S : S={ 子句 1 , 子句 2 , … , } 其中子句是析取项,即 A∨B , C∨D 等形式。
E N D
第四章 机械化证明 推理规则实际上是一个从其他谓词演算命题产生新的谓词演算命题的机械化方法。一个证明过程是一个推理规则和用于产生一组逻辑表达式的新命题的算法的结合。
第一节 归结原理 一、消解原理、归结推理方法 1 命题归结方法 核心 一阶命题逻辑公式: A1∧A2∧A3 → B, A1∧A2∧A3∧~B
步骤: 1、先把问题转换成合取范式。 2、将合取范式写成集合表示形式,即子句集S: S={子句1 , 子句2,…,} 其中子句是析取项,即A∨B,C∨D等形式。 例:P∧(Q∨R) ∧( P∨ Q) ∧(P∨ Q∨R) S={P, Q∨R, P∨ Q P∨ Q∨R}
3、归结式: 设有两个子句,C1=P∨C1’,C2==P∨C2’,从中消去互补对得到的新子句: R(C1,C2)=C1’∨C2’ 则称为C1和C2的归结式。 注意:没有互补对的两个子句没有归结式。 互补对:如 ~P和P则称互补对,即~P∨P=I 4、归结推理: 对子句集S中的子句使用归结法进行归结,如果归结为新子句则证明成功,否则为失败。
例证明((P → Q)∧~Q) → P 证明:(1)将命题化成合取范式: (P →Q)∧~Q∧~(~P) =(~P∨Q)∧~Q∧P (2)建立子句集:S={~P∨Q, Q,P} (3)对S进行归结: 1) ~P∨Q 2) Q 3) ~P 4) ~P 1)×2) 归结 5)□ 3)×4) 归结
二、谓词逻辑归结方法 1.化子句集(归结前的准备) (1)消去蕴涵符号 用~P∨Q 替换 P→Q (2)减少否定符号的辖域 每个否定符号~最多只作用在一个谓词符号上 (3)对变量标准化 每个变量仅受一个量词作用
(4)消去存在量词 设(QrXr) 1≤r≤n是第一个出现于 (Q1X1)…(QrXr)…(QnXn)M(X1…Xr1…Xn) 中的存在量词,即Q1,…,Qr-1均为全称量词。 1)若r=1,则将M(X1,…,Xn)中所有变元X1均以某个常量C代之,要求C不同于已出现在M(X1…Xn)中的任一常量,然后便可消去这个存在量词(Q1X1); 2)若1<r≤n,(QrXr)的左边有全称量词,则在M(X1,…,Xr,…,Xn)中的Xr项用前面全称量变元相关的一个函数代替Xr,最后消去这个存在量词,
如: ∀x∀y∃z(Q(x,y,z)∧M(x,y,z)), 取z=g(x,y),则有 ∀x∀y(Q(x,y,g(x,y))∧M(x,y,g(x,y)))。 这里要求所用的函数不能和原式中重复。 3)反复使用这个过程便得Skolem标准形。如上式中的g(x,y)称为Skolem函数。
(5)化为前束范式 前束范式:一个公式,如果量词均非否定地出现在公式的最前面,其辖域延伸到整个公式的末尾,且在公式中仅含有联结词~ ,∨,∧,则称此种形式为前束范式。 前束范式 = (前缀)(母式) 量词串 无量词公式
(6)化母式为合取范式 (7)消去全称量词 (8)消去连接词符号∧ 用{A,B}替代(A∧B)
例 ∀x{P(x)→{∀y[P(y)→ P(f(x,y))]∧ ~∀y[Q(x,y)→ P(y)]}} (1) ∀x{~P(x)∨{∀y[~P(y)∨P(f(x,y))]∧ ~∀y[~Q(x,y)∨P(y)]}} (2) ∀x{~P(x)∨{∀y[~P(y)∨P(f(x,y))]∧ ∃ y~[~Q(x,y)∨P(y)]}} ∀x{~P(x)∨{∀y[~P(y)∨P(f(x,y))]∧ ∃ y[Q(x,y)∧~P(y)]}}
(3) ∀x{~P(x)∨{∀y[~P(y)∨P(f(x,y))]∧ ∃ w[Q(x,w)∧~P(w)]}} (4) ∀x{~P(x)∨{∀y[~P(y)∨P(f(x,y))]∧ [Q(x,g(x))∧~P(g(x))]}} (5)∀x ∀y{~P(x)∨{[~P(y)∨P(f(x,y))]∧ [Q(x,g(x))∧~P(g(x))]}}
(6)∀x∀y{[~P(x)∨~P(y)∨P(f(x,y))]∧(6)∀x∀y{[~P(x)∨~P(y)∨P(f(x,y))]∧ [~P(x)∨Q(x,g(x))]∧ [~P(x)∨~P(g(x))]} (7)[~P(x)∨~P(y)∨P(f(x,y))]∧ [~P(x)∨Q(x,g(x))]∧ [~P(x)∨~P(g(x))] (8)[~P(x)∨~P(y)∨P(f(x,y))], [~P(x)∨Q(x,g(x))], [~P(x)∨~P(g(x))]
2.谓词逻辑的归结方法 (1)问题化成谓词逻辑公式; (2)谓词逻辑公式化成前束范式; (3)前束范式化成合取范式; (4)消存量词; (5)写出子句集; (6) 用归结方法进行归结,在此步中用置换因 子进行合一归结。
[例1]利用下面的公理证明a: (1) b∧C → a (2) b (3) d∧e →c (4) e∨f (5) d∧~ f 证明:1、先把上述公理化成子句形式:有 (1)~ b ∨ ~ c ∨ a (2) b (3)~ d ∨ ~ e ∨ c (4) e∨f (5) d (6)~f (7) ~a(目标a取反)
a∨~b∨~c ~a ~ b∨~c b ~c c∨~d∨~e ~d∨~e e∨f d ~d∨f f ~f
[例2] 命题:fido is a dog ,all dogs are animals ,all animals will die。 求证:fido will die 证明: 1、 先将问题化成谓词演算公式: (1) All dogs are animals: ∀x(Dog(x) → Animal(x)) (2) Fido is a dog : Dog(fido) (3) all animals will die :∀y(Animal(y)→Die(y)) (4) fido will die : Die(fido) 2、把谓词演算公式化成子句集有 (1)~Dog(x) ∨Animal(x) (2) Dog(fido) (3) Animal(y)∨Die(y) (4)~Die(fido) (目标取反)
~Dog(x) ∨Animal(x) Dog(fido) fido /X Animal(fido) Animal(y)∨Die(y) fido /y Die(fido) ~Die(fido)
[例3]“幸运学生”的故事 “任何通过了历史考试并中了彩票的人是快乐的。任何肯学习或幸运的人可以通过所有考试,John不学习但很幸运,任何人只要是幸运的就可以中彩。”John快乐吗? 证明:第一步把这些句子变成谓词形成: 条件:∀x(Pass(x,history )∧Win(x,lottery)→Happy(x)) ∀x∀y{[(Study(x)∨Lucky(x)]→Pass(x,y)} Study(John) ∧ Lucky(John) ∀x(Lucky(x)→Win(x,lottery) 结论:Happy(John)
第二步,将上述命题公式转化成子句形式 ~Pass(x,history)∨~Win(x,lottery)∨~Happy(x) ~Study(x) ∨ Pass(x,y) ~Lucky (x) ∨Pass(x,y) Study (John) Lucky (John) ~Lucky (x) ∨ Win (x,lottery) ~Happy(John) (目标的否定) 第三步,归结。
~Pass(x,history)∨~Win(x,lottery)∨Happy(x) ~Lucky (x) ∨Pass(x,y) ~Lucky (x) ∨ ~Win(x,lottery)∨Happy(x) ~Lucky (x) ∨ Win (x,lottery) ~Lucky (x) ∨Happy(x) Lucky (John) ~Happy(John) Happy(John)
[例4]激动人心的故事问题: 假设“所有不贫穷,并且聪明的人是快乐的。那些看书的人是聪明的。John能看书并且不贫穷,快乐的人过着激动人心的生活。你能发现谁过着激动人心的生活吗”? 证明:(1)把上述故事翻译成谓词演算表达式: ∀x((~Poor(x)∧ Smart(x))→Happy(x)) ∀y( Read(y)→Smart(y) ) Read(John)∧~Poor (John) ∀z(Happy(z)→Exciting(z)) 否定目标是: ~ ∃w(Exciting(w))
(2)写出子句集形式 Poor(x)∨~Smart(x)∨Happy(x) ~Read(y)∨Smart(y) Read(John) ~Poor(john) ~Happy(z)∨Exciting (z) ~Exciting(W)
(3)归结 Poor(x)∨~Smart(x)∨Happy(x) ~Poor(john) john / X ~Smart(john)∨Happy(john) ~Read(y)∨Smart(y) john / y ~Read(john)∨Happy(john) ~Happy(z)∨Exciting (z) john / z
~Read(john)∨Exciting (john) Read(John) Exciting (john) ~Exciting(w) john / w
[例5] 从消解否证中提取答案 方法: 1、保留目标的原始结论 2、归结原式中的合一因子 3、将归结式中的合一因子替代原目标式中的变元, 直到归结完,最后便得其答案。 问题:计算机在消解证明时要用额外的指针
at(fido,Z) {x/z} at(fido,Z) {library/z} at(fido,library) “Fido问题” “狗Fido无论主人John走到哪,就跟到哪儿,John在图书馆,Fido在哪里? 解: (1)将原式翻译成谓词 ∀x At(John,x)→At(fido,x) At(john, library) ∃z At(fido,z)(目标)
三、归结策略和简化技术 从上面的几个例子我们应当发现,在子句集S={a1,…,an}的子句中,我们并没有规定a1,…,an之间的顺序,在那里我们是随机地用两个子句ai,aj来进行归结,由此同学们可以看出,在选择ai与aj时就有n(n-1)种组合方法,依此类推,在选择另一个子句时则有n-2种组合方法,当把该式归结完时则所选子句的方法有: n(n-1)(n-2)…(n-m)种。
若用了m步归结完,则有O( nm),n≥2,m≥2 这样则出现了组合爆炸情况,为避免这种现象出现,必须研究归结策略,找出一种尽量不产生组合爆炸的归结方法。 原则:在S={a1,a2,…an,m}中,主要研究S1={a1,a2,…an,}和S2={m},看怎样组合更有优势。即S=S1∪S2
1.广度优先策略 原理:子句集S={a1,…,an, m}中的任何子句ai在第一轮都要和其他子句进行消解,此时可得子句S1={a1’,…,am’};在第二轮归结时,将第一轮产生的新子句S1,加入原子句集进行归结;…,在第n轮归结时,将先前所有产生的子句加到原始子句进行归结,即,S ’={S1,S2,…,Sn} 优点:①该策略能保证找到最短消解路径; ②该策略是一种完备的策略。
2、支持集策略 原理:对于一组输入子句集S,可以指定S的一个子集T,称T为支持集,这个策略要求每次消解结果要在支持集中有一个祖先,也就是说支持集使得消解作用的两个子句中至少一个或是否定目标式,或是一个在目标式上产生的消解结果子句。 即如果S是不满足的,并且S—T是满足的,那么T是不可满足的,并且(S—T)∧T也是不可满足。
exciting (W) happy(z)∨exciting (z) {z/w} happy(Z) Poor(x)∨ smart(X) ∨happy(X) {x/z} Poor(John) Poor(X) ∨ smart(X) {John/x} smart(John) read(Y) ∨smart(Y) {John/x} Read(John) read(John) { } 例:P56 图2.9
a a∨b b b∨C∨d C∨d 3、单位优先策略 原理:用一个只有一个子句的项进行消解。如图所示:
4、线性输入形式策略 原理:直接用否定目标和原始公理,对否定目标和一个公理进行消解得到一个新子句,这个结果子句再和一个公理消解得到另一个新子句,该新子句又和公理消解,这个过程一直持续到空子句出现。
小结: ①命题归结方法——基本恒等式 ②谓词归结方法——置换、合一,Skolem函数,存在量词的消去步骤 ③归结消解的基本方法 问题: (1)不确定归结方法 (2)模糊归结方法 (3)动态模糊归结方法: (4)归结策略的探讨:
讨论: (1)面向Agent的动态模糊逻辑 (2)面向Agent的DF归结方法 (3)随机归结理论 (4)归结的进化理论 (5)基图的归结理论 (6)基于DFL的机械化推理技术 (7)基于Agent的Turing测试床设计 (8)协调归结理论及应用 (9)DFL的归结方法(请参阅李凡长等人的相关文献)
六. 规则演绎系统 基于规则的演绎系统有两种不同形式的谓词公式 (1)事实:不含蕴含符号的谓词公式 (2)规则:含蕴含符号的谓词公式 即:A1∧A2∧…∧An→B or if A1∧A2∧…∧An then B 6.1 规则正向演绎系统(Forward Chaining) 1、事实表达式的与或形变换: 在基于规则的正向演绎系统中,把事实表示为非蕴含形式的与或形作为系统的总数据库,注意这些事实不要化为子句型,只要是谓词公式即可。
把一个公式化成与或形的步骤如下: ①利用W1→W2和(~W1∨W2)的等价关系,消去“→” ②利用De.Morgan定律把否定符号移进括号内,直到每个否定符号的辖域最多只含有一个谓词为止; ③对所得的表达式进行Skolem化和前束化; ④对全称量词辖域内的变量进行改名和变量标准比,而存在量词变量用Skolem函数代替。 ⑤删去全称量词。
[例]我们有事实表达式 ( u)( V){Q(u,v) ∧~[(R(V)∨P(V)) ∧ S(u,V)]}把它化为: Q(V,A) ∧{~R(V) ∧~P(V) ∨~S(A,V)} 对变量更名标准化,使得同一变量不出现在事实表达式的不同合取式中,更名后得到表达式。 Q(W,A)∧{[~R(V)∧~P(V) ]∨~S(A,V)} 注意:Q(V,A)中的变量V可用新变量W代替,而合取式[~R(V)∧~P(V) ]中的变量V却不可更名,因为后面也出现在析取式~S(A,V)中。
E1 … Ek E2 E1 … Ek E2 2、事实表达式的与或图表示; 注意:①事实表达式(E1∨…∨ Ek)的析取关系子表达式E1…Ek是用后继节点表示,并由一个k线连接符把它们连接到父辈节点上。 ②某个事实表达式(E1∧…∧Ek)的每个合取子表达式E1,E2,…,Ek是由单一的后继节点表示的,并由一个单线连接符接到父辈节点。
Q(W,A)∧{[~R(V) ∧~P(V) ]∨~S(A,V)} Q(W,A) [~R(V) ∧~P(V)] ∨~S(A,V) ~R(V)∧~P(V) ~S(A,V) ~R(V) ~P(V) 如上例可表示为: 由此得到的子句为: Q(W,A) ~S(A,V)∨~R(V) ~S(A,V)∨~P(V) 一个事实表达式的与或树表示
3、与或图的F规则变换 规则的标准形:L→W 其中L是单文字(单项),W为与或形的唯一公式。 变换规则是:先把这些变量的量词局部地调换到前项,然后再把全部存在量词Skolem化,下面举例说明:
[例] 规则 ( x){[( y)( z)P(x,y,z)→( u)Q(x,u)}可以通过下列步骤加以变换。 (1) 暂时消去蕴含符号: ( x){~ [( y)( z)[P(x,y,Z)] ∨( u)Q(x,u)} (2) 把否定符号移进第一个析取式中,调整变量的量词; ( x){( y)( z)[~P(x,y,z)] ∨( u)Q(x,u)} (3) 进行Skolem化 ( x){( y)[~P (x,y,f(x,y))] ∨( u)Q(x,u)} (4) 把所有全称量词移到前面然后消去 ~P(x,y,f(x,y)) ∨Q(x,u) (5)恢复蕴含式 P(x,y,f(x,y))→Q(x,u)
T V P Q S T∨V P∨Q R S∧(T∨V) (P∨Q)∧R [(P∨Q)∧R] ∨[S∧(T∨V)] (图1) X Y X∧Y Z P Q T V (X∧Y) ∨Z P∨Q R T∨V (P∨Q)∧R S S∧(T∨V) [(P∨Q)∧R] ∨[S∧(T∨V)] (图2) [例]如下图(1),若用规则S→(X∧Y) ∨z进行匹配,则得图(2)
由图1可知: [(P∨Q)∧R] ∨[S∧(T∨V)]的子句集为: P∨Q∨S, P∨Q∨T∨V, R∨S , R∨T∨V 由图3知: S→[(X∧Y)∨Z]的子句形为: ~S∨X∨Z ~S∨Y∨Z 应用两个规则子句中任一个对上述子句形中的S进行消解:
~S∨Y∨Z ~S∨X∨Z P∨Q∨S X∨Z∨P∨Q Y∨Z∨P∨Q ~S∨X∨Z R∨S ~S∨Y∨Z R∨X∨Z R∨Y∨Z ( 图3) 于是得到4个子句对S进行消解式的完备集为: X∨Z∨P∨Q Y∨Z∨P∨Q R∨X∨Z R∨Y∨Z 这些消解式全部包函在图2中
目标结点 ~A∨C ~C ~G ~B∨G C A∨B ~A ~B G C D B E G A B Nil A B 归结证明树 A∨B 满足终止条件的与或图 4、作为终止条件的目标公式:(正向推理) 正向推理:事实 目标 下面举例证明: [例] 事实:A∨B 规则:A→(C∧D),B→(E∧G) 目标:C∨G 例2:P50 图3-1
6.2 规则逆向演绎系统 基于规则的逆向演绎系统,其操作过程与正向演绎系相反,即从目标到事实的操作过程,从then到if的推过程。 1、目标表达式的与或形式 ①首先采用与变换事实表达式同样的过程,把目标公式化成与或形,即消去符号→,把否定符号移进符号内; ②对全称量词Skolem化,并删去存在量词 ③与或形的目标公式与或图表示:
E1 E2 … En E1 E2 … En 如目标表达式(E1∨E2∨…∨En)表示为: 如目标表达式(E1∧E2∧…∧En)表示为:
[例] 目标表达式 ( y)( x){P(x)→[Q(x,y) ∧~[R(x) ∧s(y)]]} 被化成与或形; ~P(f(y))∨{Q(f(y),y)∧[~R(f(y)) ∨~s(y)]} 式中:f(y)为一Skolem函数。 对目标的主要析取式中的变量分离标准化可得 ~P(f(z)) ∨{Q(f(y),y)∧[~R(f(y) ∨~S(y))]} 注意:不能对析取的子表达式内的变量y改名而使每个析取式具有不同的变量。