实验4:字句集消解实验
文章目录
- 实验目的
- 实验内容
- 参考代码:
- 系列文章:
实验目的
(1)熟悉子句集化简的九个步骤;
(2)理解消解规则,能把任意谓词公式转换成子句集。
实验内容
在谓词逻辑中,任何一个谓词公式都可以通过应用等价关系及推理规则化成相应的子句集。
用python实现以下6个步骤
其化简步骤如下:
(3)对变元标准化
在一个量词的辖域内,把谓词公式中受该量词约束的变元全部用另外一个没有出现过的任意变元代替,使不同量词约束的变元有不同的名字。
(4)化为前束范式
化为前束范式的方法:把所有量词都移到公式的左边,并且在移动时不能改变其相对顺序。
(5)消去存在量词
(6)化为Skolem标准形
对上述前束范式的母式应用以下等价关系
(7)消去全称量词
(8)消去合取词
在母式中消去所有合取词,把母式用子句集的形式表示出来。其中,子句集中的每一个元素都是一个子句。
(9)更换变量名称
对子句集中的某些变量重新命名,使任意两个子句中不出现相同的变量名。
参考代码:
'''
字句集消解实验
'''
'''
->:>
析取:%
合取:^
全称:@
存在:#
'''
# 1.消去>蕴涵项 a>b变为~a%b
def del_inlclue(orign):ind = 0flag=0orignStack=[]right_bracket = 0while (ind < len(orign)):orignStack.append(orign[ind])if ((ind+1<len(orign)) and (orign[ind+1]=='>')):flag=1if orign[ind].isalpha():#是字母orignStack.pop()orignStack.append('~')orignStack.append(orign[ind])orignStack.append('%')ind=ind+1if orign[ind]==')':right_bracket=right_bracket+1tempStack = []while(right_bracket!=-1):tempStack.append(orignStack[-1])if orignStack[-1]=='(':right_bracket=right_bracket-1orignStack.pop()right_bracket = right_bracket + 1tempStack.pop()#去掉'('orignStack.append('(~')tempStack.reverse()for i in tempStack:orignStack.append(i)orignStack.append('%')ind=ind+1ind=ind+1if flag==1:a=''for i in orignStack:a=a+ireturn aelse:return orign#2.处理否定连接词
def dec_neg_rand(orign):#处理~(@x)p(x) 变为(#x)~p(x)#####################################ind = 0flag = 0orignStack = []left_bracket = 0while (ind < len(orign)):orignStack.append(orign[ind])if orign[ind]=='~':if orign[ind+1]=='(':if orign[ind+2]=='@' or orign[ind+2]=='#':flag=1ind=ind+1orignStack.pop()#去掉前面的~orignStack.append(orign[ind])if orign[ind+1]=='@':orignStack.append('#')else:orignStack.append('@')orignStack.append(orign[ind+2])#'x'orignStack.append(orign[ind+3])#')'orignStack.append('~')ind=ind+3ind=ind+1if flag==1:a=''for i in orignStack:a=a+iorign2=aelse:orign2=orign#print('orign2',orign2)# 处理~(p%q) 变为(~p^~q)#####################################ind = 0flag = 0flag2 = 0 # 判断是否进入while left_bracket>=1:循环 ,若进入,出来后ind再减1orignStack = []left_bracket = 0while (ind < len(orign2)):orignStack.append(orign2[ind])if orign2[ind] == '~':if orign2[ind + 1] == '(':orignStack.pop()ind=ind+2#此时为pleft_bracket=left_bracket+1orignStack.append('(~')while left_bracket>=1:flag2=1orignStack.append(orign2[ind])if orign2[ind]=='(':left_bracket=left_bracket+1if orign2[ind]==')':left_bracket=left_bracket-1if left_bracket==1 and orign2[ind+1]=='%' and orign2[ind+2]!='@' and orign2[ind+2]!='#':flag=1orignStack.append('^~')ind=ind+1if left_bracket == 1 and orign2[ind + 1] == '^' and orign2[ind + 2] != '@' and orign2[ind + 2] != '#':flag = 1orignStack.append('%~')ind = ind + 1ind=ind+1if flag2==1:ind=ind-1flag2=0ind=ind+1if flag==1:a=''for i in orignStack:a=a+iorign3=aelse:orign3=orign2#print('orign3',orign3)# 处理~~p 变为p#####################################ind = 0flag = 0bflag = 0orignStack = []while (ind < len(orign3)):orignStack.append(orign3[ind])if orign3[ind] == '~':if orign3[ind + 1] == '~':flag = 1orignStack.pop()ind = ind + 1ind = ind + 1if flag == 1:a = ''for i in orignStack:a = a + iorign4 = aelse:orign4 = orign3# print('orign4', orign4)# 处理~(~p) 变为p#####################################ind = 0flag = 0bflag=0orignStack = []while (ind < len(orign4)):orignStack.append(orign4[ind])if orign4[ind] == '~':if orign4[ind + 1] == '(':left_bracket = 1if orign4[ind+2]=='~':flag=1orignStack.pop()ind=ind+2while left_bracket>=1:orignStack.append(orign4[ind+1])if orign4[ind+1]=='(':left_bracket=left_bracket+1if orign4[ind+1]==')':left_bracket=left_bracket-1if orign4[ind+1]=='%' or orign4[ind+1]=='^':bflag=1ind=ind+1orignStack.pop()ind = ind + 1if flag==1 and bflag==0:a=''for i in orignStack:a=a+iorign5=aelse:orign5=orign4#print('orign5',orign5)return orign5#3.命题变量标准化,使后面y=w
def standard_var(orign):#对变量标准化,简化,不考虑多层嵌套flag = 1desOri=[]des=['w','k','j']j=0orignStack = []left_bracket=0ind = 0while flag!=0:flag=0while (ind < len(orign)):orignStack.append(orign[ind])if orign[ind] == '@' or orign[ind]=='#':x=orign[ind+1]#保存xif orign[ind+1] in desOri:orignStack.append(des[j])desOri.append(des[j])j=j+1orignStack.append(')')ind=ind+3if ind<len(orign):if orign[ind].isalpha():#(@x)p(x,y)这种情况orignStack.append(orign[ind])#pind = ind + 1if orign[ind]=='(':left_bracket = left_bracket + 1orignStack.append(orign[ind])ind=ind+1while left_bracket>0:if orign[ind]== ')':left_bracket = left_bracket - 1if orign[ind]== '(':left_bracket=left_bracket+1if orign[ind]== x:flag=1orignStack.append(des[j-1])else:orignStack.append(orign[ind])ind=ind+1ind=ind-1if ind<len(orign):if orign[ind] == '(' :left_bracket = left_bracket + 1orignStack.append(orign[ind])ind = ind + 1while left_bracket > 0:if orign[ind] == ')':left_bracket = left_bracket - 1if orign[ind] == '(':left_bracket = left_bracket + 1if orign[ind] == x:flag = 1orignStack.append(des[j - 1])else:orignStack.append(orign[ind])ind = ind + 1ind=ind-1else:desOri.append(orign[ind+1])ind=ind+1a=''for i in orignStack:a=a+iorign2=areturn orign2#4.消去存在量词(skolem化)
def del_exists(orign):ind = 0flag = 1orignStack = []x=''y=''# 第1种情况:前面有全称量词 (@x)((#y)p(x,y))变为(@x)p(x,f(x))while flag!=0: #为了嵌套的情况出现flag=0while (ind < len(orign)):orignStack.append(orign[ind])if orign[ind] == '(' and orign[ind+1] == '@' and orign[ind+4]=='(' :x=orign[ind+2]orignStack.append(orign[ind+1:ind+5])ind=ind+5#指向while orign[ind]!='#':orignStack.append(orign[ind])ind=ind+1orignStack.pop()y=orign[ind+1]#为yind=ind+2#指向pflag=1ind = ind + 1if flag==1:orignStack2=[]for i in orignStack:if i==y:orignStack2.append('g(')orignStack2.append(x)orignStack2.append(')')else:orignStack2.append(i)a = ''for i in orignStack2:a = a + iorign2 = aind = 0flag = 1orignStack = []# 第2种情况:前面没有全称量词 (#y)p(x,y)变为p(x,A)while flag != 0: # 为了嵌套的情况出现flag = 0while (ind < len(orign2)):orignStack.append(orign2[ind])if orign2[ind] == '#' :y=orign2[ind+1]orignStack.pop()orignStack.pop()ind=ind+2#指向')'flag=1ind = ind + 1if flag==1:orignStack2 = []for i in orignStack:if i == y:orignStack2.append('A')else:orignStack2.append(i)a = ''for i in orignStack2:a = a + iorign2 = areturn orign2#5.前束化
def convert_to_front(orign):#化为前束形ind = 0orignStack = []tempStack=[]#存放全称量词while (ind < len(orign)):orignStack.append(orign[ind])if orign[ind]=='(' and orign[ind+1]=='@':orignStack.pop()tempStack.append(orign[ind:ind+4])ind=ind+3ind = ind + 1orignStack=tempStack+orignStacka=''for i in orignStack:a = a + iorign2 = areturn orign2#6.消去全称量词
def del_all(orign):ind = 0orignStack = []###########开始1#############return orign[8:]###########结束1#############import sys
codeIn = sys.stdin.read()
orign=codeIn
#orign = '(@x)(p(x)>((@y)(p(y)>p(f(x,y)))^~(@y)(Q(x,y)>p(y))))'
print('orign:',orign)
a=del_inlclue(orign)
print('1.去除蕴含后:',a)
a=dec_neg_rand(a)
print('2.处理否定连接词后:')
print(a)
a=standard_var(a)
print('3.变量命名标准化后:')
print(a)
a=del_exists(a)
print('4.消去存在量词后:')
print(a)
a=convert_to_front(a)
print('5.前束化后:')
print(a)
a=del_all(a)
print('6.消去全称量词后:')
print(a)
系列文章:
实验1:猴子摘香蕉问题的Python编程实现
实验2:编程实现简单恐龙识别系统的知识表示
实验3:搜索算法求解8数码问题
实验4:字句集消解实验
实验5:简单恐龙识别系统的产生式推理
实验6:蚁群算法在TSP问题中的实现
实验7:粒子群优化算法实验
实验8:遗传算法在TSP问题中的实现
实验9:BP神经网络实验
实验4:字句集消解实验相关推荐
- 南邮计算机实验报告合集【非常全】
南邮计算机实验报告合集 GitHub上自取,可以借鉴,请勿直接抄袭 南京邮电大学数据结构实验,南京邮电大学离散数学实验,南京邮电大学操作系统实验,南京邮电大学电工电子基础实验B实验,南京邮电大学汇编语 ...
- 计算机网络应用和ps的实训报告,大学计算机网络实验报告(合集).doc
大学计算机网络实验报告(合集) 实验一 一.实验名称: 传输时延与传播时延的比较 二.实验目的 深入理解传输时延与传播时延的概念以及区别 掌握传输时延与传播时延的计算方法 三.实验环境 运行Windo ...
- 【模式识别与人工智能】【实验报告合集】Bayes + Fisher + PCA + Decision Tree + KNN + K-Means + SVM
目录 实验一 Bayes分类器设计 一.实验目的 二.实验原理 三.实验内容 四.实验要求 五.实验结果 六.实验分析 实验二 基于Fisher准则的线性分类器设计 一.实验目的 二.实验原理 三 ...
- linux虚拟机主从实验,主从模型的ipvs高可用集群实验
主从模型的ipvs高可用集群实验 一.实验拓图 二.实验环境 本实验是keepalived+lvs-dr的高可用负载均衡实验 本实验是在虚拟机上完成,因此如上拓扑图需要准备至少四台虚拟机 1.各节点的 ...
- 微波消解仪使用原理和功能特性TFN FG30L 微波消解仪 智能密闭式 6罐扫描控温控压 高端高压微波消解 实验前处理设备
1.微波 微波是一种电磁波,是频率在300MHz-300GHz的,即波长在100cm至1mm范围内的电磁波,也就是说波长在远红外线与无线电波之间.微波波段中,波长在1-25cm 的波段专门用于雷达,其 ...
- 操作系统实验一到实验九合集(哈工大李治军)
操作系统实验 作者寄语 操作系统实验的学习是一个循序渐进的过程,初次看linux-0.11中的代码,看着满屏的汇编语言,确实头疼.但通过学习赵炯博士的Linux内核0.11完全注释,结合着王爽老师的汇 ...
- 大学模电实验合集丨实验六 比例求和运算电路
目录 一.实验目的 二.实验仪器 三.实验要求 五.根据实验报告回答下列问题 一.实验目的 1.掌握用集成运算放大电路组成比例.求和电路的特点及性能. 2.学会上述电路的测试和分析方法. 二.实验仪器 ...
- 大学模电实验合集丨实验三 两级交流放大电路
目录 一.实验目的 二.实验仪器 三.预习要求 四.实验内容及步骤 五.根据实验报告回答下列问题 一.实验目的 1.掌握如何合理设置静态工作点. 2.学会放大电路频率特性测试方法. 3.了解放大电路的 ...
- 【Python语言程序设计】20级实验参考合集
文章目录 实验1 Python程序控制结构 实验目的及要求: 问题1: 问题2: 问题3: 问题4: 实验2 组合数据类型的应用 实验目的及要求: 问题1: 问题2: 问题3: 问题4: 实验3 函数 ...
最新文章
- golang 字符串比较 不区分大小写
- useradd -g mysql mysql_Linux —— useradd -g mysql mysql解析及useradd详解
- 在html中怎么在按回车的时候换到下一个文本框_史上最全的HTML、CSS知识点总结,浅显易懂。适合入门新手...
- Jquery中表单序列化提交到后台是怎样进行URL解码查看参数
- php使用zeromq
- Uncaught TypeError: Cannot read property 'value'' of null
- 扩展Python模块系列(二)----一个简单的例子
- 快来!前端君喊你加入快驾网智囊团
- ceph rbd双挂载导致ext4文件系统inode链接数据污染
- 【数据结构】严蔚敏版--学习复习笔记
- Qt QLabel双击编辑接口
- RGB 与 RGBA 与 16进制 与 HSL 之间的简单转换
- MACH SYSTEMS—总线接口转换工具
- 体外肿瘤细胞敏感性分析试剂盒 实验原理
- 语句覆盖、判定覆盖、条件覆盖、路径覆盖
- matlab求解rl电路,matlab课程设计--RC串联电路与RL并联电路频率响应
- 修改intellij IDEA 项目编码
- 第四届高教杯计算机绘图教程,第三届“高教杯”机械类计算机绘图试卷(三维).pdf...
- Java笔试面试-JVM
- | JavaScript脚本注入,完成Selenium 无法做到的那些事
热门文章
- 【Visual C++】游戏开发笔记四十五 浅墨DirectX教程十三 深度测试和Z缓存专场
- 在路径为……的上下文中,servlet[....]的Servlet.service()引发异常
- mysql 全文搜索
- 阿里巴巴取消 CTO
- 云服务器文件电脑版,UCloud云主机文件管理工具
- 22 链表中倒数第k个节点
- 在连锁餐厅门店,智能自助收银终端的应用
- 推酷上一些比较好的文章
- 微信小程序 | 10.wx.request( )发送请求
- python读取数据文件、并把里面的数据变成x的二维坐标_python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法...