实现基于谓词逻辑得归结原理.doc
《实现基于谓词逻辑得归结原理.doc》由会员分享,可在线阅读,更多相关《实现基于谓词逻辑得归结原理.doc(23页珍藏版)》请在三一办公上搜索。
1、某某城建学院人工智能实验报告实验名称:实现基于谓词逻辑的归结原理成绩:_专业班级:学 号:某某:实验日期 :实验器材: 一台装PC机。1、 实验目的熟练掌握使用归结原理进展定理证明的过程,掌握基于谓词逻辑的归结过程中,子句变换过程、替换与合一算法、归结过程与简单归结策略等重要环节,进一步了解机器自动定理证明的实现过程。2、 实验要求对于任意给定的一阶谓词逻辑所描述的定理,要某某现如下过程:(1) 谓词公式到子句集变换;(2) 替换与合一算法;(3) 在某简单归结策略下的归结。3、 实验步骤步1 设计谓词公式与自居的存储结构,即内部表示。注意对全称量词x和存在量词$x可采用其他符号代替;步2 实
2、现谓词公式到子句集变换过程;步3 实现替换与合一算法;步4 实现某简单归结策略;步5 设计输出,动态演示归结过程,可以以归结树的形式给出;步6 实现谓词逻辑中的归结过程,其中要调用替换与合一算法和归结策略。4、 代码谓词公式到子句集变换的源代码:#include#include#include#includeusing namespace std;/一些函数的定义void initString(string &ini);/初始化string del_inlclue(string temp);/消去蕴涵符号string dec_neg_rand(string temp);/减少否认符号的辖域st
3、ring standard_var(string temp);/对变量标准化string del_exists(string temp);/消去存在量词string convert_to_front(string temp);/化为前束形string convert_to_and(string temp);/把母式化为合取X式string del_all(string temp);/消去全称量词string del_and(string temp);/消去连接符号合取%string change_name(string temp);/更换变量名称/辅助函数定义bool isAlbum(char
4、 temp);/是字母string del_null_bracket(string temp);/删除多余的括号string del_blank(string temp);/删除多余的空格void checkLegal(string temp);/检查合法性char numAfectChar(int temp);/数字显示为字符/主函数void main()cout-求子句集九步法演示-P);/orign = (#x)y(x);/orign = (x)x!b(x);/orign = (x!y);/orign = (a(b);string orign,temp;char mand,mand0,m
5、and1,mand2,mand3,mand4,mand5,mand6,mand7,mand8,mand9,mand10;/=cout请输入(Y/y)初始化谓词演算公式mand;if(mand = y | mand = Y)initString(orign);elseexit(0);/=cout请输入(Y/y)消除空格mand0;if(mand0 = y | mand0 = Y)/del_blank(orign);/undonecout消除空格后是endlorignendl;elseexit(0);/=cout请输入(Y/y)消去蕴涵项mand1;if(mand1 = y | mand1 = Y
6、)orign =del_inlclue(orign);cout消去蕴涵项后是endlorignendl;elseexit(0);/=cout请输入(Y/y)减少否认符号的辖域mand2;if(mand2 = y | mand2 = Y)dotemp = orign;orign = dec_neg_rand(orign);while(temp != orign);cout减少否认符号的辖域后是endlorignendl;elseexit(0);/=cout请输入(Y/y)对变量进展标准化mand3;if(mand3 = y | mand3 = Y)orign = standard_var(ori
7、gn);cout对变量进展标准化后是endlorignendl;elseexit(0);/=cout请输入(Y/y)消去存在量词mand4;if(mand4 = y | mand4 = Y)orign = del_exists(orign);cout消去存在量词后是(w = g(x)是一个Skolem函数)endlorignendl;elseexit(0);/=cout请输入(Y/y)化为前束形mand5;if(mand5 = y | mand5= Y)orign = convert_to_front(orign);cout化为前束形后是endlorignendl;elseexit(0);/=
8、cout请输入(Y/y)把母式化为合取方式mand6;if(mand6 = y | mand6 = Y)orign = convert_to_and(orign);cout把母式化为合取方式后是endlorignendl;elseexit(0);/=cout请输入(Y/y)消去全称量词mand7;if(mand7 = y | mand7 = Y)orign= del_all(orign);cout消去全称量词后是endlorignendl;elseexit(0);/=cout请输入(Y/y)消去连接符号mand8;if(mand8 = y | mand8 = Y)orign = del_and
9、(orign);cout消去连接符号后是endlorignendl;elseexit(0);/=cout请输入(Y/y)变量别离标准化mand9;if(mand9 = y | mand9 = Y)orign = change_name(orign);cout变量别离标准化后是(x1,x2,x3代替变量x)endlorignendl;elseexit(0);/=cout-完毕-endl;cout(请输入Y/y)完毕endl;dowhile(y = getchar() | Y=getchar();exit(0);void initString(string &ini)char manda,mand
10、b;cout请输入您所需要转换的谓词公式endl;cout需要查看输入帮助(Y/N)? manda;if(manda = Y | manda = y)cout,全称量词为,存在量词为#,endl取反为,吸取为!,合取为%,左右括号分别为( 、 ),函数名请用一个字母endl;cout请输入(y/n)选择是否用户自定义mandb;if(mandb =Y| mandb=y)cinini;elseini = (x)(P(x)(y)(P(y)P(f(x, y)%(y)(Q(x,y)P(y);cout原始命题是endlini蕴涵项/ab变为a!bchar ctemp100=;string output;
11、int length = temp.length();int i = 0,right_bracket = 0,falg= 0;stack stack1,stack2,stack3;strcpy(ctemp,temp.c_str();while(ctempi != 0 & i = ctempi+1)/如果是ab如此用a!b替代falg = 1;if(isAlbum(ctempi)/如果是字母如此把ctempi弹出stack1.pop();stack1.push();stack1.push(ctempi);stack1.push(!);i = i + 1;else if() = ctempi)ri
12、ght_bracket+;doif( = stack1.top()right_bracket-;stack3.push(stack1.top();stack1.pop();while(right_bracket != 0);stack3.push(stack1.top();stack1.pop();stack1.push();while(!stack3.empty()stack1.push(stack3.top();stack3.pop();stack1.push(!);i = i + 1;i+;while(!stack1.empty()stack2.push(stack1.top();sta
13、ck1.pop();while(!stack2.empty()output += stack2.top();stack2.pop();if(falg = 1)return output;elsereturn temp;string dec_neg_rand(string temp)/减少否认符号的辖域char ctemp100,tempc;string output;int flag2 = 0;int i = 0,left_bracket = 0,length = temp.length();stack stack1,stack2;queue queue1;strcpy(ctemp,temp.
14、c_str();/复制到字符数组中while(ctempi != 0 & i =0);queue1.push();while(!queue1.empty()tempc = queue1.front();queue1.pop();stack1.push(tempc);i +;while(!stack1.empty()stack2.push(stack1.top();stack1.pop();while(!stack2.empty()output += stack2.top();stack2.pop();if(flag2 = 1)temp = output;/*/char ctemp1100;st
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实现 基于 谓词 逻辑 归结 原理
链接地址:https://www.31ppt.com/p-1091225.html