版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
应用离散数学命题逻辑PAGE杭电-周丽、方景龙第一章PAGE3第1章上机练习编写下列程序并计算至少1个算例1.已知命题变元和的真值,求它们的合取式、析取式、蕴涵式、等值式的真值。解:(1)运算规则说明设命题变元为p、q(真值:True为真、False为假),四种核心逻辑运算规则:合取式p∧q:p、q同时为真,结果为真,否则为假析取式p∨q:p、q任意一个为真,结果为真,否则为假蕴涵式p→q:仅当p为真、q为假时结果为假,其余情况均为真等值式p↔q:p、q真值相同为真,真值不同为假(2)完整程序代码(Python)#定义命题逻辑四则运算函数deflogic_operation(p,q):#合取运算conjunction=pandq#析取运算disjunction=porq#蕴涵运算p→q:等价于notporqimplication=notporq#等值运算p↔q:等价于p==qequivalence=(p==q)#输出运算结果print(f"命题p真值:{p}")print(f"命题q真值:{q}")print(f"合取式p∧q真值:{conjunction}")print(f"析取式p∨q真值:{disjunction}")print(f"蕴涵式p→q真值:{implication}")print(f"等值式p↔q真值:{equivalence}")#测试算例:自定义p、q真值,可自由修改if__name__=="__main__":#算例1:p为真,q为假logic_operation(p=True,q=False)(3)算例运行结果测试算例:p=True(真),q=False(假)程序输出结果:命题p真值:True命题q真值:False合取式p∧q真值:False析取式p∨q真值:True蕴涵式p→q真值:False等值式p↔q真值:False2.打印出由命题变元和组成的命题公式的真值表。解:(1)运算规则说明设命题变元为p、q(真值:True为真、False为假),四种核心逻辑运算规则:合取式p∧q:p、q同时为真,结果为真,否则为假析取式p∨q:p、q任意一个为真,结果为真,否则为假蕴涵式p→q:仅当p为真、q为假时结果为假,其余情况均为真等值式p↔q:p、q真值相同为真,真值不同为假设二元命题变元为p、q,规定真值:1代表真,0代表假。二元命题共有4组真值指派。本程序为通用型二元命题公式真值表生成程序,可自定义任意复合命题公式,自动遍历所有真值组合,计算并输出完整标准真值表,适配所有二元命题公式真值求解实验需求。本次演示经典公式:(p→q)∧(q→p)(等值公式)。命题公式运算逻辑:分别计算p→q与q→p,再将两个蕴涵结果进行合取运算,得到最终命题公式真值。(2)完整程序代码(Python)defprint_formula_truth_table():#真值定义:0=假,1=真val=[0,1]#打印标准表头print("p\tq\tp→q\tq→p\tF=(p→q)∧(q→p)")print("-"*45)#遍历p、q全部4种真值组合forpinval:forqinval:#自定义任意二元命题公式(可自行修改)p_impl_q=1if(p==0orq==1)else0q_impl_p=1if(q==0orp==1)else0f=p_impl_q&q_impl_p#格式化输出真值表print(f"{p}\t{q}\t{p_impl_q}\t{q_impl_p}\t{f}")#程序入口if__name__=="__main__":print_formula_truth_table()(3)算例运行结果本程序遍历命题变元p、q全部4种真假组合,自动生成完整命题公式真值表,运行输出结果如下:pqp→qq→pF=(p→q)∧(q→p)001110110010010111113.打印出由命题变元、和组成的命题公式的真值表。(1)实验原理设三元命题变元为p、q、r,规定真值:1代表真,0代表假。三元命题共有8组真值指派。本程序为通用型三元命题公式真值表生成程序,可自定义任意三元复合命题公式,自动遍历所有真值组合,计算并输出完整标准真值表,适配所有三元命题公式真值求解实验需求。本次演示经典公式:(p∧q)→r。命题公式运算逻辑:先计算合取式p∧q,再以此为前件、r为后件计算蕴涵式,最终得到三元复合命题公式的真值(2)完整程序代码(Python)defprint_formula_truth_table():#真值定义:0=假,1=真,严格遵循教材标准顺序val=[0,1]#打印标准表头print("p\tq\tr\tp∧q\tF=(p∧q)→r")print("-"*35)#遍历p、q、r全部8种真值组合forpinval:forqinval:forrinval:#分步计算命题公式(可自行修改任意三元公式)pq_and=p&q#核心三元命题公式f=1if(pq_and==0orr==1)else0#格式化输出真值表print(f"{p}\t{q}\t{r}\t{pq_and}\t{f}")#程序入口if__name__=="__main__":print_formula_truth_table()(3)算例运行结果本程序遍历命题变元p、q全部4种真假组合,自动生成完整命题公式真值表,运行输出结果如下:pqrp∧qF=(p∧q)→r0000100101010010110110001101011101011111本程序为通用可修改三元模板,只需替换代码中公式计算部分,即可实现任意p、q、r三元复合命题公式真值表生成。4.测试两个由命题变元和组成的命题公式是否等价。(1)实验原理命题公式等价定义:对于命题变元p、q的所有赋值,若两个命题公式的真值完全相同,则称两个命题公式等价。本程序采用真值表法,遍历p、q全部4种真值组合(1代表真,0代表假),逐一对两个命题公式进行真值计算,对比所有取值下的结果,自动判断公式是否等价。(2)完整程序代码defjudge_equivalence():#定义命题变元所有真值组合:1真、0假val=[1,0]print("p\tq\tp→q\t¬p∨q")print("-"*30)is_equal=True#遍历所有赋值forpinval:forqinval:#计算公式1:p→qformula1=1if(p==0orq==1)else0#计算公式2:¬p∨qnot_p=1-pformula2=not_p|qprint(f"{p}\t{q}\t{formula1}\t{formula2}")#存在真值不同则不等价ifformula1!=formula2:is_equal=False#输出判定结果ifis_equal:print("\n判定结果:两个命题公式等价")else:print("\n判定结果:两个命题公式不等价")#程序入口if__name__=="__main__":judge_equivalence()(3)测试算例测试对象公式1:A=p→q公式2:B=¬p∨qpqp→q¬p∨q0011011110001111判定结果:两个命题公式等价5.测试两个由命题变元、和组成的命题公式是否等价。(1)完整程序代码defjudge_equivalence():#定义命题变元真值:1真、0假val=[1,0]print("p\tq\tr\t(p∧q)∧r\tp∧(q∧r)")print("-"*40)is_equal=True#遍历p、q、r全部8种真值组合forpinval:forqinval:forrinval:#计算公式1:(p∧q)∧rformula1=(p&q)&r#计算公式2:p∧(q∧r)formula2=p&(q&r)print(f"{p}\t{q}\t{r}\t{formula1}\t\t{formula2}")#存在任意一组真值不同则不等价ifformula1!=formula2:is_equal=False#输出最终判定结果ifis_equal:print("\n判定结果:两个命题公式等价")else:print("\n判定结果:两个命题公式不等价")#程序入口if__name__=="__main__":judge_equivalence()(3)测试算例测试对象公式1:A=(p∧q)∧r公式2:B=p∧(q∧r)pqr(p∧q)∧rp∧(q∧r)0000000100010000110010000101001100011111判定结果:两个命题公式等价6.给定一个元真值函数,构造这个函数的标准析取范式和标准合取范式。(1)程序代码defget_normal_form():#真值取值集合,按教材标准顺序:0假、1真val=[0,1]min_term=[]#存储最小项编号(函数真值为1)max_term=[]#存储最大项编号(函数真值为0)min_expr=[]#存储最小项字符表达式print("p\tq\tF(p,q)")print("-"*20)#按标准真值表顺序遍历所有4种真值组合forpinval:forqinval:#定义二元真值函数:蕴涵式F=p→qf=1if(p==0orq==1)else0print(f"{p}\t{q}\t{f}")#标准最小项编号计算:p(2¹)q(2⁰)idx=p*2+q*1#构造最小项文字表达式term=""term+="¬p"ifp==0else"p"term+="∧¬q"ifq==0else"∧q"iff==1:min_term.append(idx)min_expr.append(term)else:max_term.append(idx)#输出标准析取范式print("\n1.标准析取范式(主析取范式)")print(f"最小项编号:m{min_term}")print(f"范式表达式:F={'∨'.join(min_expr)}")#输出标准合取范式print("\n2.标准合取范式(主合取范式)")print(f"最大项编号:M{max_term}")print(f"范式简写:F=∧M({','.join(map(str,max_term))})")if__name__=="__main__":get_normal_form()本程序为通用二元真值函数求解程序,适配任意二元逻辑公式,仅需修改代码中f的逻辑表达式,即可自动生成对应真值表、最小项、最大项及标准范式(2)测试算例测试对象:F(p,q)=p→qpqF(p,q)0010111001111.标准析取范式(主析取范式)最小项编号:m[0,1,3]范式表达式:F=(¬p∧¬q)∨(¬p∧q)∨(p∧q)2.标准合取范式(主合取范式)最大项编号:M[2]范式表达式:¬p∨q7.给定一个元真值函数,只用否定和析取这两个逻辑连结词构造对应于这个真值函数的命题公式。(1)实验原理逻辑联结词完备集:{否定(¬)、析取(∨)}是完备联结词集,任意n元真值函数都可以仅通过这两种联结词构造对应的命题公式。本实验选取三元真值函数(p∧q)→r作为测试算例,摒弃合取、蕴涵、等值联结词,仅使用否定、析取构造等价命题公式。构造方法:采用标准析取范式思想,筛选所有真值函数为真的最小项,每个最小项通过否定词修饰变元,最终所有最小项通过析取词联结,全程仅使用否定、析取两种联结词,保证公式与原真值函数完全等价。(2)程序代码defbuild_formula_by_not_or():val=[0,1]min_terms=[]#存储真值为1的最小项表达式(仅含否定、析取)print("p\tq\tr\tF(p,q,r)")print("-"*25)#遍历所有8组真值指派forpinval:forqinval:forrinval:#定义目标真值函数F=(p∧q)→rf=1ifnot(pandqandnotr)else0print(f"{p}\t{q}\t{r}\t{f}")#仅收集函数为真的最小项iff==1:term=""#仅使用否定词构造单变元项term+="¬p"ifp==0else"p"term+="∨¬q"ifq==0else"∨q"term+="∨¬r"ifr==0else"∨r"min_terms.append(f"({term})")#所有最小项通过析取联结,全程仅用否定、析取ifmin_terms:final_formula="∨".join(min_terms)else:final_formula="永假式,无成真赋值"print("\n✅仅使用否定、析取构造的等价命题公式:")print(f"F={final_formula}")#程序入口if__name__=="__main__":build_formula_by_not_or()(3)测试算例pqrF(p,q,r)00010011010101111001101111001111✅仅使用否定、析取构造的等价命题公式:F=(¬p∨¬q∨¬r)∨(¬p∨¬q∨r)∨(¬p∨q∨¬r)∨(¬p∨q∨r)∨(p∨¬q∨¬r)∨(p∨¬q∨r)∨(p∨q∨r)本程序为通用二元模板,可自行修改真值函数表达式,自动生成仅含否定、析取的标准命题公式8.给定一个元真值函数,只用否定和合取这两个逻辑连结词构造对应于这个真值函数的命题公式。(1)实验原理逻辑联结词完备集:{否定(¬)、合取(∧)}是完备联结词集,任意二元真值函数均可仅通过这两种联结词构造等价命题公式。本实验选取经典二元真值函数p→q作为测试算例,全程不使用析取、蕴涵、等值联结词,仅依靠否定、合取构造逻辑等价命题公式。构造原理:利用标准合取范式,找出真值函数所有成假赋值,写出对应最大项,所有最大项通过合取联结。全程只使用否定、合取,保证公式与原真值函数完全等价。(2)程序代码defbuild_formula_by_not_and():val=[0,1]max_terms=[]#打印真值表头print("p\tq\tF(p,q)")print("-"*20)#遍历二元p、q所有4种真值组合forpinval:forqinval:#定义二元真值函数F=p→qf=0if(p==1andq==0)else1print(f"{p}\t{q}\t{f}")#对成假赋值构造最大项(仅用否定、合取)iff==0:#最大项规则:变量为1取原变量,变量为0取否定变量term=""term+="p"ifp==1else"¬p"term+="∧q"ifq==1else"∧¬q"max_terms.append(f"({term})")#合取所有最大项,仅含否定、合取ifmax_terms:final_formula="∧".join(max_terms)else:final_formula="永真式"print("\n✅仅使用否定、合取构造的等价命题公式:")print(f"F={final_formula}")if__name__=="__main__":build_formula_by_not_and()(3)测试算例pqF(p,q)001011100111✅仅使用否定、合取构造的等价命题公式:F=(p∧¬q)本程序为通用二元模板,可自行修改真值函数表达式,自动生成仅含否定、合取的标准命题公式9.测试由命题变元和组成的一个命题公式是否是另一个由命题变元和组成的命题公式的逻辑结论。(1)实验原理逻辑结论定义:设A、B是两个命题公式,若凡是使公式A为真的赋值,都能使公式B为真,则称B是A的逻辑结论(也就是A⇒B)。等价判定方法:构建蕴涵式A⟶B,若该式为永真式(所有真值指派下结果均为1),则B是A的逻辑结论。本次实验设置两组对比经典算例:正向算例(成立):验证B=p是A=p∧q的逻辑结论;反向算例(不成立):验证B=q是A=p⟶q的逻辑结论(用于对比)。(2)程序代码defcheck_logic_conclusion():val=[0,1]#第一组:正向算例(逻辑结论成立)A=p∧q,B=pprint("=====算例1:验证p∧q⇒p(成立)=====")print("p\tq\tA=p∧q\tB=p\tA→B")print("-"*35)flag1=Trueforpinval:forqinval:A=p&qB=pimply=1if(A==0orB==1)else0print(f"{p}\t{q}\t{A}\t\t{B}\t\t{imply}")ifA==1andB==0:flag1=False#第二组:反向算例(逻辑结论不成立)A=p→q,B=qprint("\n=====算例2:验证p→q⇒q(不成立)=====")print("p\tq\tA=p→q\tB=q\tA→B")print("-"*35)flag2=Trueforpinval:forqinval:A=1if(p==0orq==1)else0B=qimply=1if(A==0orB==1)else0print(f"{p}\t{q}\t{A}\t\t{B}\t\t{imply}")ifA==1andB==0:flag2=False#统一输出判定结果print("\n【最终判定结果】")print(f"1.p∧q⇒p:{'成立,是逻辑结论'ifflag1else'不成立,不是逻辑结论'}")print(f"2.p→q⇒q:{'成立,是逻辑结论'ifflag2else'不成立,不是逻辑结论'}")if__name__=="__main__":check_logic_conclusion()(3)测试算例=====算例1:验证p∧q⇒p(成立)=====pqA=p∧qB=pA→B00001010011001111111=====算例2:验证p→q⇒q(不成立)=====pqA=p→qB=qA→B00100011111000111111【最终判定结果】1.p∧q⇒p:成立,是逻辑结论2.p→q⇒q:不成立,不是逻辑结论程序通用性极强,可自由修改两组算例的前提公式A、结论公式B,自动判定任意两个二元命题公式的逻辑结论关系,正反案例结合可直观验证逻辑推理规则10.测试由命题变元、和组成的一个命题公式是否是另一个由命题变元、和组成的命题公式的逻辑结论。(1)程序代码defcheck_logic_conclusion_3var():val=[0,1]#算例1:三元逻辑结论成立A=p∧q,B=p∨rprint("=====算例1:验证p∧q⇒p∨r(成立)=====")print("p\tq\tr\tA=p∧q\tB=p∨r\tA→B")print("-"*45)flag1=Trueforpinval:forqinval:forrinval:A=p&qB=p|rimply=1if(A==0orB==1)else0print(f"{p}\t{q}\t{r}\t{A}\t\t{B}\t\t{imply}")#存在前真后假则不成立ifA==1andB==0:flag1=False#算例2:三元逻辑结论不成立A=p→q,B=rprint("\n=====算例2:验证p→q⇒r(不成立)=====")print("p\tq\tr\tA=p→q\tB=r\tA→B")print("-"*45)flag2=Trueforpinval:forqinval:forrinval:A=1if(p==0orq==1)else0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教版新高一化学专题预习2026年新题-氧气与空气
- 高中数学 加练 专题8 第84练 齐次化
- 杭州微信营销方案(3篇)
- 步道改造项目施工方案(3篇)
- 池塘垃圾清理施工方案(3篇)
- 浇注柱混凝土施工方案(3篇)
- 渡槽预制专项施工方案(3篇)
- 物业供电突发应急预案(3篇)
- 皮肤破溃的应急预案(3篇)
- 移动卡校园营销方案(3篇)
- 港口危险货物2026年版安全管理人员部分机考试题及答案
- 《低钾血症诊治与管理专家共识(2026)》解读课件
- 2026-2030中国槟榔果行业未来发展趋势及投资风险分析研究报告
- 《选煤厂安全规程》全文
- 2026山东青岛海检集团有限公司招聘1人笔试历年难易错考点试卷带答案解析
- 2026年郑州电力职业技术学院教师招聘考试备考试题及答案解析
- TSG08-2026《特种设备使用管理规则》全面解读课件
- 宁夏冷凉蔬菜实施方案
- Q-TH 103005-2018 阀门喷塑检验规范
- 《学记》原文全文及翻译解读
- 加油站钥匙管理制度规范
评论
0/150
提交评论