谓词逻辑归结原理源代码

合集下载

人工智能第6章 谓词逻辑与归结原理

人工智能第6章 谓词逻辑与归结原理

• 当量词仅对谓词的个体(变量)起限定作用,即谓词名视
为常量时,称其为一阶谓词(First Order Predication
Logic ).
• 若量词对个体和谓词都有限定作用时,称其为高阶谓词。 – 例如: Qy Q(y) 是二阶谓词; xyP( x, y) 是一阶谓词。 • 通常我们约定连接词和量词的优先级为:~, , 最高; 次
–连接 词: –量词:
全称量词
~ 否定(非); 合取(与); 析取(或); 蕴涵(IF......TH EN); 等价(双条件)
表示所有的,例如,对于所有个体x, 谓词F(x)均成立时,可表示为 x F ( x ) 表示存在某一些,例如,若存在某些个体x, 使谓词F(x)成立时,可表示为 x F ( x )
由于事先不知道哪两个子句可以进行归结更不知道通过对哪些子句对的归结可以尽快地得到空子句因而必须对子句集中的所有子句逐对地进行比较对任何一对可归结的子句对都进行归结这样的效率是很低的
第六章 谓词逻辑与归结原理
• 6.1 一阶谓词逻辑基础 • 6.2 归结法(消解Resolution) • 6.3 归结反演系统
4. 若A是合式公式,x是个体变量,则x(A)、
x(A)是合式公式。

所有合式公式都是有限次应用规则1~4得到的。
(1)谓词公式的解释
• 在应用谓词逻辑解决问题时,必须对谓词公式进行解释,即 人为地给谓词公式指派语义。
• 一阶谓词公式P的解释可有多种,其中一些解释可使P为真,
而另一些解释则可使P为假。
• 推理过程:反复使用谓词演算的基本等价式及推理规则, 对已知谓词公式进行变换,得到所需逻辑结论的过程。
6.1.6 谓词公式的规范化
为了方便使用WFF进行定理证明和逻辑推理,需要把 WFF变换为便于使用的规范形式,称为WFF范式。典型的 范式包括:前束范式,SKOLEM范式。

第三章_谓词逻辑与归结原理

第三章_谓词逻辑与归结原理

例:P∨~P

矛盾式或永假式 contradictory

设A为任一命题公式,若A在它的各种赋值下取值均为假,则称 A是永假式。
例: P∧~P
3.1 命题逻辑

可满足式 satisfiable


设A为任一命题公式,如果存在一组取值使A为真,则A为可满 足式。 即:对于命题公式A,若A不是矛盾式,则称A是可满足式。
3.1 命题逻辑

命题公式的赋值

对命题公式中的所有的命题变量各赋给一个值0,1。
真值表 p 0 0 1 1 q 0 1 0 1 ~p p∧q p∨q p→q p ↔q
1 1 0 0
0 0 0 1
0 1 1 1
1 1 0 1
1 0 0 1
3.1 命题逻辑

复合命题的真值
例:
p: 周杰伦是一个流行歌手 q: 人工智能是计算机科学的一个分支 r: 牛在天上飞 求下列复合命题的真值

将命题从语言表述转换为命题公式
step1、找出简单命题,并用符号表示 step2、分析简单命题间的逻辑关系,用联结符号进行描述

4、只要不下雨,我就骑自行车上班 令p表示“天下雨”,q表示“骑自行车上班” 2、教室里有30名男生和10名女生 1、3不是偶数 3、如果天下雨,出门带伞 ~p→q 令:p表示“教室里有30名男生”, 令:p表示“3是偶数”,~p 令p表示“天下雨”,q表示“出门带 q表示“教室里有10名女生” 伞” 5、只有不下雨,我才骑自行车上班 p∧q p→q 令p表示“天下雨”,q表示“骑自行车上班” q →~p
怪物洞穴

智能体行动的关键是要 根据获得的信息推理, 从而判断那个房间有怪 物,那个房间有陷阱, 那个房间是安全的 房间[4,2]和[2,3]有陷阱, 房间[3,4]有怪物,房间 [4,3]有金子

5-谓词逻辑与归结原理

5-谓词逻辑与归结原理
❖若天气凉,则小王就不去游泳。天气凉,所 以小王没去游泳 ❖如果我上街,我一定去书店。我没上街,所 以我没去书店 ❖如果我上街,我一定去书店。我没去书店, 所以我没上街
31
sspu 王帅
32
sspu 王帅
主要内容
▪概述 ▪命题逻辑的归结法 ▪谓词归结子句形 ▪归结原理 ▪归结过程的策略控制 ▪Herbrand定理
(1)根据归结原理,将待证明公式转化成待归结命题公式:
(P → Q) ∧~(~Q → ~P) (2)分别将公式前项化为合取范式:
P → Q = ~P ∨ Q 结论求~后的后项化为合取范式:
~(~Q → ~P)= ~(Q∨~P) = ~Q ∧ P 两项合并后化为合取范式: (~P ∨ Q)∧~Q ∧ P (3)则子句集为:
(2)x Q(x), 其中Q(x)表示x活到一百岁以上。
在个体域D是全总个体域时,
引入特殊谓词R(x)表示x是人,可符号化为:
(1)x(R(x) → P(x)),
其中,R(x)表示x是人;P(x)表示x是要死的。
而例如:1. 快点走吧!
2. 到那去?
3. x+y>10
等等句子,都不是命题。
17
sspu 王帅
命题表示公式(1)
将陈述句转化成命题公式。 如:设“下雨”为p,“骑车上班”为q,, 1.“只要不下雨,我骑自行车上班”。~p 是 q的充分条件, 因而,可得命题公式: ~p → q 2.“只有不下雨,我才骑自行车上班”。~p 是 q的必要条件, 因而,可得命题公式:q → ~p
▪ 冲突消解策略
❖若同时出现多条可匹配知识时,系统必须按一定策略解决冲突, 从中挑选出一条知识用于当前推理
▪ 求解策略

用python做归结演绎推理

用python做归结演绎推理

用python做归结演绎推理归结演绎推理是一种常用的逻辑推理方式,可以用Python实现。

下面我们将介绍Python如何实现归结演绎推理。

归结演绎推理基于逆否命题原理,即若一个命题的逆否命题成立,则该命题也成立。

首先,我们需要定义元素和谓词。

元素是指所涉及的对象,谓词则是描述元素的属性。

例如,元素可以是“苹果”,谓词是“红色”。

接下来,我们需要定义规则集合。

规则是对元素和谓词之间的关系进行描述的语句。

例如,“苹果是红色的”可以表示为规则。

规则集合由多个规则组成,它们共同描述一个问题的特征。

下一步是定义问题的查询语句。

查询语句是指用户想要得出结论的问题。

例如,查询“这个苹果是否是红色的?”就是一个查询语句。

最后,我们将使用Python实现归结演绎推理算法。

该算法通过对规则进行逆否命题,从而向前推导并验证查询语句。

具体实现过程如下:1. 定义元素和谓词:```element = ['苹果', '橙子', '白菜']predicate = ['红色', '橙色', '绿色']```2. 定义规则集合:```rules = [('苹果', '红色'), ('橙子', '橙色'), ('白菜', '绿色')] ```3. 定义逆否命题函数:```def inverse(pred):if "不" in pred:pred = pred[1:]else:pred = "不" + predreturn pred```4. 定义归结函数:```def resolution(goal):new_goal = inverse(goal)while True:flag = Falsefor rule in rules:if rule[1] == new_goal:new_goal = rule[0]flag = Trueif not flag:breakif new_goal == goal:return Trueelse:return False```5. 最终推理过程:```# 查询“这个苹果是否是红色的?”goal = ("苹果", "红色")if resolution(goal):print("是的,这个苹果是红色的!") else:print("不是的,这个苹果不是红色的!") ```至此,我们已经成功实现了用Python进行归结演绎推理的过程。

人工智能第三章谓词逻辑与归结原理

人工智能第三章谓词逻辑与归结原理
• 如P(x) ∨ Q(y)与~P(a) ∨ R(z)
• 所以要考虑置换与合一。即对变量 作适当的替换。
《人工智能》第三章 谓词逻辑与归结原理
置换
• 置换:可以简单的理解为是在一个谓词公式中用 置换项去置换变量。
• 定义: 置换是形如{t1/x1, t2/x2, …, tn/xn}的有限集合。其 中,x1, x2, …, xn是互不相同的变量,t1, t2, …, tn是 不同于xi的项(常量、变量、函数);ti/xi表示用ti 置换xi,并且要求ti与xi不能相同,而且xi不能循环 地出现在另一个ti中。
例如: {a/x,c/y,f(b)/z}是一个置换。 {g(y)/x,f(x)/y}不是一个置换。
《人工智能》第三章 谓词逻辑与归结原理
置换的合成
• 设={t1/x1, t2/x2, …, tn/xn}, ={u1/y1, u2/y2, …, un/yn},是两个置换。 则与的合成也是一个置换,记作·。它是从集合
• 最一般合一求取方法
– 令W={F1,F2} – 令k=0,W0=W, σ0=ε – 如果Wk已合一,停止, σk=mgu,否则找Dk – 若Dk中存在元素vk和tk,其中,vk不出现在tk中,转下一
步,否则,不可合一。 – 令σk+1= σk.{tk/vk},Wk+1=Wk{tk/vk}=W σk+1 – K=k+1转第3步。
《人工智能》第三章 谓词逻辑与归结原理
谓词归结子句形
• 子句与子句集
– 文字:不含任何连接词的谓词公式。 – 子句:一些文字的析取(谓词的和)。 – 空子句:不含任何文字的子句。记作NIL或
□ – 子句集:所有子句的集合。 – 对于任何一个谓词公式G,都可以通过

人工智能导论课件:第四章 谓词逻辑与归结原理

人工智能导论课件:第四章 谓词逻辑与归结原理
5
谓词逻辑
是一种形式语言,具有严密的理论体系 是一种常用的知识表示方法, 例:
City(北京) City(上海) Age(张三,23) (X)(Y)(Z)(father(X, Y)father(Y,
Z)gf(X, Z)
6
归结原理
归结原理是一种定理证明方法,1965年由 J.A.Robinson提出,从理论上解决了定理证明 问题。当时被认为是人工智能领域的重大突破。
例如:令E为p(x,y,f(a))
={b/x,f(x)/y},则 E= ?
E=p(b,f(x),f(a)) 此例显示了同时置换的含义. 可以看到E是
在E上的作用,也就是将E中的(i=1, ,n)同时换成相 应的ti所得到的公式.
34
ห้องสมุดไป่ตู้
置换乘法
定义 令 ={s1/y1,,sm/ym}, ={t1/x1,,tn/xn},则与的复合是
32
置换
定义: 置换是形如{t1/x1,,tn/xn}的有限集,其中xi是 互不相同的变量,ti是不等于xi的项,且xi与ti互不循环 出现. 如果ti都是不含变量的项(基项),称该置换为基置换. 若={ },则称为空置换(表示不做置换),记为.
例如:1) {a/x,g(y)/y,f(g(b))/z}是一个置换? (是, 但不是基置换).
F1F2…Fn~W为永假,可以通过证明F所 对应的子句集S=S0∪{~W}是不可满足的。
22
命题: P|=F P{F}是不可满足的。 证明: ① 若P {~F}是不可满足的,则 P|= F ② 若P|=F 则 P {~F}是不可 满足的。(反证法)
23
归结原理
基本思想 将待证明的逻辑公式的结论(F),通过 等值公式转换成附加前提,再证明该逻 辑公式是不可满足的。

谓词逻辑与归结原理2

谓词逻辑与归结原理2

开始: (1)消去蕴涵符号 只应用∨和~符号,以~A∨B替换AB。
16/57
(2) (x){~P(x)∨{(y)[~P(y)∨P(f(x,y))]
∧(y)[Q(x,y)∧~P(y)]}}
(2) 减少否定符号的辖域 每个否定符号~最多只用到一个谓词符号上,并 反复应用狄· 摩根定律。
(3) (x){~P(x)∨{(y)[~P(y)∨P(f(x,y))]
20/57
谓词归结子句形( Skolem 标准形)


量词消去原则: 消去存在量词“”,略去全程量词 “”。
注意:左边有全程量词的存在量词,消去
时该变量改写成为全程量词的函数;如没有, 改写成为常量。
21/57
谓词归结子句形( Skolem 标准形)



( x )( P(x) ∨ Q) <=> ( x ) P(x) ∨ Q ( x )( P(x) Λ Q) <=> ( x ) P(x) Λ Q ( x )( P(x) → Q) <=> ( x ) P(x) → Q ( x )(Q → P(x) ) <=>Q → ( x ) P(x) ( x )( P(x) ∨ Q) <=> ( x ) P(x) ∨ Q ( x )( P(x) Λ Q) <=> ( x ) P(x) Λ Q ( x )( P(x) → Q) <=> ( x ) P(x) → Q ( x )(Q → P(x) ) <=>Q → ( x ) P(x)
文字:不含任何连接词的谓词公式。 子句:一些文字的析取(谓词的和)。 子句集S的求取: G → SKOLEM标准形 → 消去存在变量 → 以“,”取代“Λ”,并表示为集合形式 。

谓词演算及应用

谓词演算及应用

命题逻辑基础
基本等值式(1) 摩根率: ~ (p∨q) <=> ~ p Λ ~ q ; ~ (p Λq) <=> ~ p ∨ ~ q 吸收率: p∨(pΛq ) <=> p ; p Λ(p∨q ) <=> p 同一律: p∨0 <=> p ; pΛ1 <=> p 蕴含等值式:p → q <=> ~ p∨q 假言易位式: p → q <=> ~ p → ~ q
消去量词等值式:设个体域为有穷集合(a1, a2, …an)
( x ) P(x) <=> P( a1 ) Λ P( a2 ) Λ …Λ P( an )
( x )P(x) <=> P( a1 ) ∨ P( a2 ) ∨ …

P( an )
谓词归结原理基础
量词辖域收缩与扩张等值式:
( x )( P(x) ∨ Q) <=> ( x ) P(x) ∨ Q ( x )( P(x) Λ Q) <=> ( x ) P(x) Λ Q ( x )( P(x) → Q) <=> ( x ) P(x) → Q ( x )(Q → P(x) ) <=>Q → ( x ) P(x) ( x )( P(x) ∨ Q) <=> ( x ) P(x) ∨ Q ( x )( P(x) Λ Q) <=> ( x ) P(x) Λ Q ( x )( P(x) → Q) <=> ( x ) P(x) → Q ( x )(Q → P(x) ) <=>Q → ( x ) P(x)
命题表示公式(1)
将陈述句转化成命题公式。 如:设“下雨”为p,“骑车上班”为q,, 1 .“只要不下雨,我骑自行车上班”。~ p 是 q的充分条件, 因而,可得命题公式: ~p → q 2.“只有不下雨,我才骑自行车上班”。~ p 是 q的必要条件, 因而,可得命题公式:q → ~p
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include<iostream.h>#include<string.h>#include<stdio.h>#define null 0typedef struct{char var;char *s;}mgu;void strreplace(char *string,char *str1,char *str2) {char *p;while(p=strstr(string,str1)){int i=strlen(string);int j=strlen(str2);*(string+i+j-1)='\0';for(int k=i-1;(string+k)!=p;k--)*(string+k+j-1)=*(string+k);for(i=0;i<strlen(str2);i++)*(p++)=*(str2+i);}}void sort(mgu *u,int count){int j=count;int k=j;if(count==1)return;for(int i=1;i<count;i++){if(!((u+i)->s))continue;if((u+i)->var==(u+j)->var){delete (u+j)->s;(u+j)->s=null;k--;j=i;}if(((u+i)->s)&&((u+i)->var==*((u+i)->s))) {delete (u+i)->s;(u+i)->s=null;k--;}}j=count;if(k==j)return;count=k;for(int i=1;i<j&&k>0;i++){if((u+i)->s)continue;while(!((u+j)->s))j--;(u+i)->var= (u+j)->var;(u+i)->s= (u+j)->s;(u+j)->s=null;k--;}cout<<"gjvjkhllknkln";}class unifier{char *string;mgu unit[50];int count;public:int num;unifier();void input();int differ(int n);int change(int i,int j,int n);void print();~unifier(){delete string;}};unifier::unifier(){count=0;unit[0].s=null;}void unifier::input(){cout <<endl<< "请输入原子谓词公式的个数(输入0退出) "; cin>>num;string=new char[num*50];cout<<"请注意:公式的输入不能出错!"<<endl;for(int j=1;j<=num;j++){cout << "请输入第" << j << "个原子谓词公式(字符个数不超过50个)" <<endl; cin>>(string+(j-1)*50);}}int unifier::change(int i,int j,int n){char temp[2][10];temp[0][0]=string[i++];temp[1][0]=string[j++];if(string[i]!='(')temp[0][1]='\0';else{int k=1,flag=1;temp[0][k++]=string[i++];while((flag!=0)&&k<10){if(string[i]=='(')flag++;else if(string[i]==')')flag--;temp[0][k++]=string[i++];}temp[0][k]='\0';}temp[1][1]='\0';if(strlen(temp[1])==1){if(strstr(temp[0],temp[1]))return 2;strreplace(string+n*50,temp[1],temp[0]);strreplace(string+(n+1)*50,temp[1],temp[0]);count++;int m=count;unit[m].var=temp[1][0];char *p=new char[strlen(temp[0])+1];unit[m].s=p;strcpy(p,temp[0]);}return 1;}int unifier::differ(int n){int i=n*50,j=(n+1)*50;while((string[i]!='\0')&&(string[j]!='\0')&&(string[i]==string[j])) {i++;j++;}if(string[i]=='\0'||string[j]=='\0')return 1;int k;if(string[i+1]=='(')k=change(i,j,n);else if(string[j+1]=='(')k=change(j,i,n);else if(string[j]=='x'||string[j]=='y'||string[j]=='z'||string[j]=='u'|| string[j]=='v'||string[j]=='w')k=change(i,j,n);elsek=change(j,i,n);if(k==2)return k;j=count;char c[2],*p;for(i=1;i<j;i++){c[0]=unit[j].var;c[1]='\0';if(!strstr(unit[i].s,c))continue;p=new char[strlen(unit[j].s)+strlen(unit[i].s)+1];strcpy(p,unit[i].s);strreplace(p,c,unit[j].s);delete unit[i].s;unit[i].s=p;}sort(unit,count);return 0;}void unifier::print(){cout <<"The MGU is ";for(int i=1;i<count+1;i++){cout <<(unit[i]).s<<"/"<<unit[i].var;if(i<count)cout<<",";}}int once(){unifier form;form.input();if(form.num<2){cout<<"The MGU is empty!"<<endl;return form.num;}int k=form.differ(0);if(k==1&&form.num==2){cout<<"The MGU is empty!"<<endl;return form.num;}if(k==2){cout<<"The MGU is not exist!"<<endl;return form.num;}else if(k==0&&form.num==2){while(k!=1){k=form.differ(0);if(k==2){cout<<"The MGU is not exist!"<<endl;return form.num;}}form.print();return form.num;}for(k=0;k<form.num-1;k++){if(form.differ(k)==2){cout<<"The MGU do not exist!"<<endl;return form.num; }}form.print();}int main(){int i=once();while(i!=0)i=once(); return 0;}。

相关文档
最新文档