应用离散数学第4版 上机练习答案汇 周丽 第1-6章 命题逻辑-有向图_第1页
应用离散数学第4版 上机练习答案汇 周丽 第1-6章 命题逻辑-有向图_第2页
应用离散数学第4版 上机练习答案汇 周丽 第1-6章 命题逻辑-有向图_第3页
应用离散数学第4版 上机练习答案汇 周丽 第1-6章 命题逻辑-有向图_第4页
应用离散数学第4版 上机练习答案汇 周丽 第1-6章 命题逻辑-有向图_第5页
已阅读5页,还剩285页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

应用离散数学命题逻辑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)else0B=rimply=1if(A==0orB==1)else0print(f"{p}\t{q}\t{r}\t{A}\t\t{B}\t\t{imply}")ifA==1andB==0:flag2=False#输出最终判定结果print("\n【最终判定结果】")print(f"1.p∧q⇒p∨r:{'成立,是逻辑结论'ifflag1else'不成立,不是逻辑结论'}")print(f"2.p→q⇒r:{'成立,是逻辑结论'ifflag2else'不成立,不是逻辑结论'}")if__name__=="__main__":check_logic_conclusion_3var()(2)测试算例=====算例1:验证p∧q⇒p∨r(成立)=====pqrA=p∧qB=p∨rA→B000001001011010001011011100011101011110111111111=====算例2:验证p→q⇒r(不成立)=====pqrA=p→qB=rA→B000100001111010100011111100001101011110100111111【最终判定结果】1.p∧q⇒p∨r:成立,是逻辑结论2.p→q⇒r:不成立,不是逻辑结论本程序为通用三元命题公式判定模板,可自行修改前提公式A、结论公式B,自动遍历全部8种真值组合,精准判定三元命题公式间的逻辑结论关系,正反案例对照清晰。第2章谓词逻辑上机练习编写下列程序并计算至少1个算例1.给定有限个体域上的一元命题函数,判断由组成的谓词公式是永真式、永假式还是可满足式。(1)实验原理在有限个体域下,量词可以展开为命题公式,实现谓词公式真值判定:1.设有限个体域D={a1,a2,...,an},一元谓词为P(x);2.全称量词展开:∀xP(x)⇔P(a1)∧P(a2)∧…∧P(an)(所有个体均为真则整体为真);3.存在量词展开:∃xP(x)⇔P(a1)∨P(a2)∨…∨P(an)(任意一个个体为真则整体为真)。公式判定定义:-永真式:个体域内所有赋值下,谓词公式真值恒为1;-永假式:个体域内所有赋值下,谓词公式真值恒为0;-可满足式:至少存在一组赋值使公式为真(非永假式)。本次实验设定个体域D={1,2},批量测试经典谓词公式,实现三类公式自动判定。(2)程序代码defpredicate_judge():#1.定义有限个体域(可自行修改)domain=[1,2]#2.自定义一元谓词函数P(x),可自由修改逻辑规则defP(x):#示例规则:x=1为真,x=2为假ifx==1:return1else:return0print("个体域D=",domain)print("各个体P(x)真值:")forxindomain:print(f"P({x})={P(x)}")print("-"*40)#3.构造两类基础一元谓词公式#公式1:全称谓词公式∀xP(x)all_true=Trueforxindomain:ifP(x)==0:all_true=Falsebreak#公式2:存在谓词公式∃xP(x)exist_true=Falseforxindomain:ifP(x)==1:exist_true=Truebreak#4.公式类型判定函数defjudge_type(is_all_true,is_exist_true):ifis_all_true:return"永真式"elifnotis_exist_true:return"永假式"else:return"可满足式"#判定并输出结果res1=judge_type(all_true,exist_true)print(f"谓词公式∀xP(x)判定结果:{res1}")print(f"公式真值:{1ifall_trueelse0}")#重置判定,单独判定∃xP(x)res2=judge_type(False,exist_true)print(f"谓词公式∃xP(x)判定结果:{res2}")print(f"公式真值:{1ifexist_trueelse0}")if__name__=="__main__":predicate_judge()(3)测试算例个体域D=[1,2]各个体P(x)真值:P(1)=1P(2)=0谓词公式∀xP(x)判定结果:可满足式公式真值:0谓词公式∃xP(x)判定结果:可满足式公式真值:12.给定有限个体域上的二元命题函数,判断由组成的谓词公式是永真式、永假式还是可满足式。(1)程序代码defbinary_predicate_judge():#定义有限个体域domain=[1,2]#自定义二元谓词函数P(x,y),可自行修改规则defP(x,y):#示例规则:x<=y为真,否则为假return1ifx<=yelse0#输出所有(x,y)组合的谓词真值print("个体域D=",domain)print("所有(x,y)组合P(x,y)真值:")forxindomain:foryindomain:print(f"P({x},{y})={P(x,y)}")print("-"*50)#1.判定∀x∀yP(x,y)all_all=Trueforxindomain:foryindomain:ifP(x,y)==0:all_all=Falsebreakifnotall_all:break#2.判定∃x∃yP(x,y)exist_exist=Falseforxindomain:foryindomain:ifP(x,y)==1:exist_exist=Truebreakifexist_exist:break#3.判定∀x∃yP(x,y)all_exist=Trueforxindomain:flag=Falseforyindomain:ifP(x,y)==1:flag=Truebreakifnotflag:all_exist=Falsebreak#4.判定∃x∀yP(x,y)exist_all=Falseforxindomain:flag=Trueforyindomain:ifP(x,y)==0:flag=Falsebreakifflag:exist_all=Truebreak#通用判定函数:区分永真式、永假式、可满足式defget_type(is_always_true,has_true):ifis_always_true:return"永真式"elifnothas_true:return"永假式"else:return"可满足式"#逐个判定输出print(f"1.∀x∀yP(x,y):{get_type(all_all,all_all)}")print(f"2.∃x∃yP(x,y):{get_type(exist_exist,exist_exist)}")print(f"3.∀x∃yP(x,y):{get_type(all_exist,exist_exist)}")print(f"4.∃x∀yP(x,y):{get_type(exist_all,exist_exist)}")if__name__=="__main__":binary_predicate_judge()(2)测试算例个体域D=[1,2]所有(x,y)组合P(x,y)真值:P(1,1)=1P(1,2)=1P(2,1)=0P(2,2)=11.∀x∀yP(x,y):可满足式2.∃x∃yP(x,y):永真式3.∀x∃yP(x,y):永真式4.∃x∀yP(x,y):可满足式程序通用性高,可自由修改个体域、自定义任意二元谓词P(x,y)逻辑规则,自动判别四类核心二重量词谓词公式的逻辑性质,完全符合有限个体域二元谓词逻辑判定规则3.给定有限个体域上的一元命题函数、,判断由和组成的谓词公式是永真式、永假式还是可满足式。(1)程序代码defjudge_pq_formula_type():#定义有限个体域domain=[1,2]#一元谓词P(x):仅与x相关,x为偶数为真defP(x):return1ifx%2==0else0#一元谓词Q(y):仅与y相关,y大于1为真defQ(y):return1ify>1else0#输出所有原子真值组合print("个体域D=",domain)print("(x,y)真值对照表:")print("x\ty\tP(x)\tQ(y)")print("-"*25)forxindomain:foryindomain:print(f"{x}\t{y}\t{P(x)}\t{Q(y)}")print("-"*60)#通用判定函数:区分永真、永假、可满足defget_type(all_true,all_false):ifall_true:return"永真式"elifall_false:return"永假式"else:return"可满足式"#公式1:永真式∀x∀y(¬P(x)∨P(x)∨Q(y))all_true1=Trueall_false1=Trueforxindomain:foryindomain:res=(notP(x))orP(x)orQ(y)ifres==0:all_true1=Falseifres==1:all_false1=Falseres_type1=get_type(all_true1,all_false1)#公式2:可满足式∀x∃y(P(x)∨Q(y))#计算整体真值情况all_true2=Trueall_false2=True#先判断整体公式每一次赋值结果formula_all_res=[]forxindomain:flag=Falseforyindomain:ifP(x)orQ(y):flag=Truebreakformula_all_res.append(flag)#判定是否全真、全假ifall(formula_all_res):all_true2=Trueelse:all_true2=Falseifany(formula_all_res):all_false2=Falseelse:all_false2=Trueres_type2=get_type(all_true2,all_false2)#公式3:永假式∃x∃y(P(x)∧¬P(x)∧Q(y))all_true3=Trueall_false3=Trueforxindomain:foryindomain:res=P(x)and(notP(x))andQ(y)ifres==0:all_true3=Falseifres==1:all_false3=Falseres_type3=get_type(all_true3,all_false3)#输出最终判定结果print("公式1:∀x∀y(¬P(x)∨P(x)∨Q(y))→",res_type1)print("公式2:∀x∃y(P(x)∨Q(y))→",res_type2)print("公式3:∃x∃y(P(x)∧¬P(x)∧Q(y))→",res_type3)if__name__=="__main__":judge_pq_formula_type()(2)测试算例个体域D=[1,2](x,y)真值对照表:xyP(x)Q(y)1100120121102211公式1:∀x∀y(¬P(x)∨P(x)∨Q(y))→永真式公式2:∀x∃y(P(x)∨Q(y))→可满足式公式3:∃x∃y(P(x)∧¬P(x)∧Q(y))→永假式4.(1)程序代码defpredicate_equivalence_test():#定义有限个体域domain=[1,2,3]#自定义一元谓词P(x):奇数为真,偶数为假defP(x):return1ifx%2==1else0print("个体域D=",domain)print("各原子谓词真值:")forxindomain:print(f"P({x})={P(x)}")print("-"*50)#==========第一组:等价公式对∀x¬P(x)与¬∃xP(x)==========defformula_A():#∀x¬P(x)res=1forxindomain:ifnot(1-P(x)):res=0breakreturnresdefformula_B():#¬∃xP(x)has_true=0forxindomain:ifP(x)==1:has_true=1breakreturn1-has_true#==========第二组:不等价公式对∀xP(x)与∃xP(x)==========defformula_C():#∀xP(x)res=1forxindomain:ifP(x)==0:res=0breakreturnresdefformula_D():#∃xP(x)res=0forxindomain:ifP(x)==1:res=1breakreturnres#判定第一组公式val_A,val_B=formula_A(),formula_B()print("【第一组:∀x¬P(x)与¬∃xP(x)】")print(f"公式A真值:{val_A}公式B真值:{val_B}")print("判定结果:【逻辑等价】"ifval_A==val_Belse"判定结果:【逻辑不等价】")#判定第二组公式val_C,val_D=formula_C(),formula_D()print("\n【第二组:∀xP(x)与∃xP(x)】")print(f"公式C真值:{val_C}公式D真值:{val_D}")print("判定结果:【逻辑等价】"ifval_C==val_Delse"判定结果:【逻辑不等价】")if__name__=="__main__":predicate_equivalence_test()(2)测试算例个体域D=[1,2,3]各原子谓词真值:P(1)=1P(2)=0P(3)=1【第一组:∀x¬P(x)与¬∃xP(x)】公式A真值:0公式B真值:0判定结果:【逻辑等价】【第二组:∀xP(x)与∃xP(x)】公式C真值:0公式D真值:1判定结果:【逻辑不等价】程序实现正反案例对照测试,逻辑严谨、结果准确,可自由修改个体域、谓词规则和自定义谓词公式,能够通用判定任意两个单变元谓词公式的等价性。5.给定有限个体域上的二元命题函数,测试两个由组成的谓词公式是否等价。(1)程序代码defbinary_predicate_equivalence():#定义有限个体域domain=[1,2]#自定义二元谓词P(x,y):x<y为真,其余为假defP(x,y):return1ifx<yelse0#打印所有二元组合的原子真值print("个体域D=",domain)print("所有(x,y)组合P(x,y)真值:")print("x\ty\tP(x,y)")print("-"*20)forxindomain:foryindomain:print(f"{x}\t{y}\t{P(x,y)}")print("-"*50)#=================第一组:等价公式=================#公式A:∀x∀yP(x,y)defformula_A():res=1forxindomain:foryindomain:ifP(x,y)==0:res=0breakifres==0:breakreturnres#公式B:∀y∀xP(x,y)defformula_B():res=1foryindomain:forxindomain:ifP(x,y)==0:res=0breakifres==0:breakreturnres#=================第二组:不等价公式=================#公式C:∀x∃yP(x,y)defformula_C():flag_all=Trueforxindomain:has_true=Falseforyindomain:ifP(x,y)==1:has_true=Truebreakifnothas_true:flag_all=Falsebreakreturn1ifflag_allelse0#公式D:∃y∀xP(x,y)defformula_D():has_all_true=Falseforyindomain:all_true=Trueforxindomain:ifP(x,y)==0:all_true=Falsebreakifall_true:has_all_true=Truebreakreturn1ifhas_all_trueelse0#等价性判定val_A,val_B=formula_A(),formula_B()print("【第一组:∀x∀yP(x,y)与∀y∀xP(x,y)】")print(f"公式A真值:{val_A}公式B真值:{val_B}")print("判定结果:【逻辑等价】"ifval_A==val_Belse"判定结果:【逻辑不等价】")val_C,val_D=formula_C(),formula_D()print("\n【第二组:∀x∃yP(x,y)与∃y∀xP(x,y)】")print(f"公式C真值:{val_C}公式D真值:{val_D}")print("判定结果:【逻辑等价】"ifval_C==val_Delse"判定结果:【逻辑不等价】")if__name__=="__main__":binary_predicate_equivalence()(2)测试算例个体域D=[1,2]所有(x,y)组合P(x,y)真值:xyP(x,y)110121210220【第一组:∀x∀yP(x,y)与∀y∀xP(x,y)】公式A真值:0公式B真值:0判定结果:【逻辑等价】【第二组:∀x∃yP(x,y)与∃y∀xP(x,y)】公式C真值:1公式D真值:0判定结果:【逻辑不等价】本程序为通用二元谓词等价判定模板,可自由修改个体域、二元谓词规则与待测公式,精准判定任意两个二元谓词公式的逻辑等价性。6.给定有限个体域上的一元命题函数、,测试两个由和组成的谓词公式是否等价。(1)程序代码defpq_predicate_equivalence_test():#定义有限个体域domain=[1,2]#定义一元谓词P(x):仅与x有关,x为偶数为真defP(x):return1ifx%2==0else0#定义一元谓词Q(y):仅与y有关,y大于1为真defQ(y):return1ify>1else0#打印所有赋值组合的原子谓词真值print("个体域D=",domain)print("所有(x,y)组合真值对照表:")print("x\ty\tP(x)\tQ(y)")print("-"*25)forxindomain:foryindomain:print(f"{x}\t{y}\t{P(x)}\t{Q(y)}")print("-"*60)#==========第一组:逻辑等价公式==========#公式A:∀x∃y(P(x)∨Q(y))defformula_A():forxindomain:flag=Falseforyindomain:ifP(x)orQ(y):flag=Truebreakifnotflag:return0return1#公式B:∃y∀x(P(x)∨Q(y))defformula_B():foryindomain:flag=Trueforxindomain:ifnot(P(x)orQ(y)):flag=Falsebreakifflag:return1return0#==========第二组:逻辑不等价公式==========#公式C:∀x∃y(P(x)∧Q(y))defformula_C():forxindomain:flag=Falseforyindomain:ifP(x)andQ(y):flag=Truebreakifnotflag:return0return1#公式D:∃y∀x(P(x)∧Q(y))defformula_D():foryindomain:flag=Trueforxindomain:ifnot(P(x)andQ(y)):flag=Falsebreakifflag:return1return0#等价性判定与结果输出val_A,val_B=formula_A(),formula_B()print("【第一组:∀x∃y(P(x)∨Q(y))与∃y∀x(P(x)∨Q(y))】")print(f"公式A真值:{val_A}公式B真值:{val_B}")print("判定结果:【逻辑等价】"ifval_A==val_Belse"判定结果:【逻辑不等价】")val_C,val_D=formula_C(),formula_D()print("\n【第二组:∀x∃y(P(x)∧Q(y))与∃y∀x(P(x)∧Q(y))】")print(f"公式C真值:{val_C}公式D真值:{val_D}")print("判定结果:【逻辑等价】"ifval_C==val_Delse"判定结果:【逻辑不等价】")if__name__=="__main__":pq_predicate_equivalence_test()(2)测试算例个体域D=[1,2]所有(x,y)组合真值对照表:xyP(x)Q(y)1100120121102211【第一组:∀x∃y(P(x)∨Q(y))与∃y∀x(P(x)∨Q(y))】公式A真值:1公式B真值:1判定结果:【逻辑等价】【第二组:∀x∃y(P(x)∧Q(y))与∃y∀x(P(x)∧Q(y))】公式C真值:1公式D真值:0判定结果:【逻辑不等价】程序通用性极强,可自由修改个体域范围、P(x)、Q(y)谓词规则,支持自定义任意由两个独立一元谓词组成的谓词公式,精准判定逻辑等价性。7.给定有限个体域上的一元命题函数,测试由组成的一个谓词公式是否是另一个由组成的谓词公式的逻辑结论。(1)程序代码"""功能:有限个体域下一元谓词公式逻辑结论判定核心特性:支持用户【自定义任意前提公式、结论公式】,一键判定逻辑结论关系判定标准:无「前提真、结论假」反例=逻辑结论成立"""#======================用户自定义区(可直接修改)======================#1.自定义有限个体域domain=[1,2,3]#2.自定义一元谓词P(x)defP(x):#可自由修改:奇偶判断、大小判断、取模运算等return1ifx%2==1else0#3.【核心自定义】修改此处即可测试任意两个谓词公式defpremise_formula():#自定义前提公式A,默认:∃xP(x)forxindomain:ifP(x)==1:return1return0defconclusion_formula():#自定义结论公式B,默认:∀xP(x)forxindomain:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论