1、2、实验要求对于任意给定的一阶谓词逻辑所描述的定理,要求实现如下过程:(1) 谓词公式到子句集变换;(2) 替换与合一算法;(3) 在某简单归结策略下的归结。3、实验步骤步1 设计谓词公式及自居的存储结构,即内部表示。注意对全称量词x和存在量词x可采用其他符号代替;步2 实现谓词公式到子句集变换过程;步3 实现替换与合一算法;步4 实现某简单归结策略;步5 设计输出,动态演示归结过程,可以以归结树的形式给出;步6 实现谓词逻辑中的归结过程,其中要调用替换与合一算法和归结策略。4、代码谓词公式到子句集变换的源代码:#includesstreamstackqueueusing namespace
2、std;/一些函数的定义void initString(string &ini);/初始化string del_inlclue(string temp);/消去蕴涵符号string dec_neg_rand(string temp);/减少否定符号的辖域string standard_var(string temp);/对变量标准化string del_exists(string temp);/消去存在量词string convert_to_front(string temp);/化为前束形string convert_to_and(string temp);/把母式化为合取范式string
3、del_all(string temp);/消去全称量词string del_and(string temp);/消去连接符号合取%string change_name(string temp);/更换变量名称/辅助函数定义bool isAlbum(char temp);/是字母string del_null_bracket(string temp);/删除多余的括号string del_blank(string temp);/删除多余的空格void checkLegal(string temp);/检查合法性char numAfectChar(int temp);/数字显示为字符/主函数vo
4、id main() coutP)(#x)y(x)(x)x!b(x)(x!y)(a(b) string orign,temp; char command,command0,command1,command2,command3,command4,command5, command6,command7,command8,command9,command10; /=请输入(Y/y)初始化谓词演算公式 cincommand; if(command = y | command = Y) initString(orign); else exit(0);请输入(Y/y)消除空格command0; if(com
5、mand0 = | command0 = /del_blank(orign);/undone cout消除空格后是endl orign /= 请输入(Y/y)消去蕴涵项command1; if(command1 = | command1 = orign =del_inlclue(orign);消去蕴涵项后是请输入(Y/y)减少否定符号的辖域command2; if(command2 = | command2 = do temp = orign; orign = dec_neg_rand(orign); while(temp != orign);减少否定符号的辖域后是 请输入(Y/y)对变量进行
6、标准化command3; if(command3 = | command3 = orign = standard_var(orign);对变量进行标准化后是请输入(Y/y)消去存在量词command4; if(command4 = | command4 = orign = del_exists(orign);消去存在量词后是(w = g(x)是一个Skolem函数)请输入(Y/y)化为前束形command5; if(command5 = | command5= orign = convert_to_front(orign);化为前束形后是请输入(Y/y)把母式化为合取方式command6; i
7、f(command6 = | command6 = orign = convert_to_and(orign);把母式化为合取方式后是请输入(Y/y)消去全称量词command7; if(command7 = | command7 = orign= del_all(orign);消去全称量词后是请输入(Y/y)消去连接符号command8; if(command8 = | command8 = orign = del_and(orign);消去连接符号后是请输入(Y/y)变量分离标准化command9; if(command9 = | command9 = orign = change_name(orign);变量分离标准化后是(x1,x2,x3代替变量x) /=-完毕-(请输入Y/y)结束 do while( = getchar() | =getchar(); exit(0);void initString(stri
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1