离散数学真值表计算

合集下载

离散数学上机实验指导

离散数学上机实验指导

离散数学上机实验指导徐凤生如果你需要索取源程序,请发邮件至xfs@。

实验11实验内容(1)求任意一个命题公式的真值表。

(2)利用真值表求任意一个命题公式的主范式。

(3)利用真值表进行逻辑推理。

注:(2)和(3)可在(1)的基础上完成。

2实验目的真值表是命题逻辑中的一个十分重要的概念,利用它几乎可以解决命题逻辑中的所有问题。

例如,利用命题公式的真值表,可以判断命题公式的类型、求命题公式的主范式、判断两命题公式是否等价,还可以进行推理等。

本实验通过编写一个程序,让计算机给出命题公式的真值表,并在此基础上进行命题公式类型的判定、求命题公式的主范式等。

目的是让学生更加深刻地理解真值表的概念,并掌握真值表的求解方法及其在解决命题逻辑中其他问题中的应用。

3算法的主要思想利用计算机求命题公式真值表的关键是:①给出命题变元的每一组赋值;②计算命题公式在每一组赋值下的真值。

真值表中命题变元的取值具有如下规律:每列中0和1是交替出现的,且0和1连续出现的个数相同。

n个命题变元的每组赋值的生成算法可基于这种思想。

含有n个命题变元的命题公式的真值的计算采用的方法为“算符优先法”。

为了程序实现的方便,约定命题变元只用一个字母表示,非、合取、析取、条件和双条件联结词分别用!、&、|、-、+来表示。

算符之间的优先关系如表1-32所示:为实现算符优先算法,另一个称作OPND,用以寄存操作数或运算结果。

算法的基本思想是:(1)首先设置操作数栈为空栈,符号“@”为运算符的栈底元素;(2)调用函数Divi(exp,myopnd)得到命题公式包含的命题变元序列myopnd(按字典序排列,同一个命题变元只出现一次);(3)依次读入命题公式中的每个字符,若是命题变元则其对应的赋值进OPND栈,若是运算符,则和OPTR栈的栈顶运算符比较后作相应操作,直至整个命题公式求值完毕。

实验21实验内容(1)求任意两个集合的交集、并集、差集。

(2)求任意一个集合的幂集。

离散数学部分概念和公式总结

离散数学部分概念和公式总结

离散数学部分概念和公式总结命题:称能判断真假的陈述句为命题。

命题公式:若在复合命题中,p、q、r等不仅可以代表命题常项,还可以代表命题变项,这样的复合命题形式称为命题公式。

命题的赋值:设A为一命题公式,p ,p ,…,p 为出现在A中的所有命题变项。

给p ,p ,…,p 指定一组真值,称为对A的一个赋值或解释。

若指定的一组值使A的值为真,则称成真赋值。

真值表:含n(n≥1)个命题变项的命题公式,共有2^n组赋值。

将命题公式A在所有赋值下的取值情况列成表,称为A的真值表。

命题公式的类型:(1)若A在它的各种赋值下均取值为真,则称A为重言式或永真式。

(2)若A在它的赋值下取值均为假,则称A为矛盾式或永假式。

(3)若A至少存在一组赋值是成真赋值,则A是可满足式。

主析取范式:设命题公式A中含n个命题变项,如果A得析取范式中的简单合取式全是极小项,则称该析取范式为A的主析取范式。

主合取范式:设命题公式A中含n个命题变项,如果A得析取范式中的简单合析式全是极大项,则称该析取范式为A的主析取范式。

命题的等值式:设A、B为两命题公式,若等价式A?B是重言式,则称A与B 是等值的,记作A<=>B。

约束变元和自由变元:在合式公式xA和 xA中,称x为指导变项,称A为相应量词的辖域,x称为约束变元,x的出现称为约束出现,A中其他出现称为自由出现(自由变元)。

一阶逻辑等值式:设A,B是一阶逻辑中任意的两公式,若A?B为逻辑有效式,则称A与B是等值的,记作A<=>B,称A<=>B为等值式。

前束范式:设A为一谓词公式,若A具有如下形式Q1x1Q2x2Qk…xkB,称A为前束范式。

集合的基本运算:并、交、差、相对补和对称差运算。

笛卡尔积:设A和B为集合,用A中元素为第一元素,用B中元素为第二元素构成有序对组成的集合称为A和B的笛卡尔积,记为A×B。

二元关系:如果一个集合R为空集或者它的元素都是有序对,则称集合R是一个二元关系。

离散数学(一)知识梳理

离散数学(一)知识梳理

离散数学(一)知识梳理•逻辑和证明部分o命题逻辑题型▪命题符号化问题将自然语言转为符号化逻辑命题▪用命题变量来表示原子命题▪用命题联结词来表示连词▪命题公式的类型判断判断命题公式是否是永真式、矛盾式、可能式▪利用真值表判断▪利用已知的公式进行推理判断▪利用主析取和合取范式判断▪定理:A为含有n个命题变元的命题公式,若A的主析取范式含有2^n个极小项,则A为重言式,若极小项在0到2^n之间,则为可满足式,若含有0个极小项,则A为矛盾式;若A的主合取范式含有2^n个极大项,则A为矛盾式,若极小项在0到2^n之间,则为可满足式,若含有0个极小项,则A为重言式▪翻译:一个命题公式化成主范式后,若所有项都分布在主析取范式中(主合取范式为1)则为重言式;若所有项都分布在主合取范式中(主析取范式为0)则为矛盾式;若均有分布,则为可满足式。

【思想来源:真值表法求主范式】▪一个质析取式是重言式的充要条件是其同时含有某个命题变元及其否定式;一个质合取式是矛盾式的充要条件是其同时含有某个命题变元及其否定式▪一个析取范式是矛盾式当且仅当它的每项都是矛盾式;一个合取范式是重言式当且仅当它的每项都是重言式▪求(主)析取或合取范式▪等值演算法▪ 1. 利用条件恒等式消除条件(蕴含和双条件)联结词,化简得到一个范式▪ 2. 在缺项的质项中不改变真值地添加所缺项,化简得到一个主范式▪ 3. 找出包含所有命题变元排列中剩余项,凑出另一个主范式(思想上类似于真值表法)▪真值表法▪ 1. 画出命题公式真值表▪ 2. 根据真值表结果求出主范式▪主析取范式:真值为1的所有项,每一项按对应01构成极小项▪主合取范式:真值为0的所有项,每一项按对应01构成极大项▪形式证明与命题推理利用推理规则构造一个命题公式的序列,证明结论▪形式证明:命题逻辑的论证是一个命题公式的序列,其中每个公式或者是前提,或者是由它之前的公式作为前提推得的结论,序列的最后一个是待证的结论,这样的论证也称为形式证明。

离散数学总结

离散数学总结
反例 设个体域为实数集合,A(x, y): x-y=1. 则 (x)(y)A(x, y)为真, 而(y)(x)A(x, y)为假, 所以(6)式反过来不成立.
总结下就是任意可以改成存在,存在不能变成 任意所以先做存在。 任意(推出ห้องสมุดไป่ตู้则先用德摩根律把推出给换了, 在把量词放进去! 有限集合中元素的个数称为集合的基数 (cardinality). 集合A的基数表示为|A|(或card(A)=n). n card(P(A)=2 )幂集 设A, B为两个集合,A=B当且仅当AB且B A. 即A=B(AB) (B A)
个人. 则命题符号化为:
(x)(y)(F(x) F(y) H(x, y) L(x, y))
(8) 每个自然数都有后继数.
解: 引入特性谓词 F(x) : x是自然数.并设 H(x, y):y是x的后继数. 则命题符号化为: (x)(F(x) (y) (F(y) H(x, y))
证: 任取x,则
xA∩ (B∪C) xA xB∪C xA (xB x C) (xA xB) (xA xC) x A∩B x A∩C
x (A∩B)∪(A∩C)
推广
三、集合中元素的计数
|A∪B∪C |A||B|| |A∩B ||A∩C||B∩C| |A∩B∩C | C| |
(x)A(x) (x)B(x)
量词转化律
E20
三、谓词演算的等价式与蕴含式
(三) 谓词演算中常见的蕴含式: (1)(x)A(x)(x)B(x) (x)(A(x)B(x)) (2)(x)(A(x)B(x)) (x)A(x)(x)B(x) (1), (2)两式反过来均不成立. 反例 设个体域为自然数集合, A(x): x为奇数. B(x): x为偶数.则 (1)(x)(A(x)B(x))为真, 而(x)A(x)为假, (x)B(x)为假, 故(x)A(x)(x)B(x)为假, 所以(1)式反过来不成立; (2)(x)A(x)为真,(x)B(x)为真, 故(x)A(x)(x)B(x)为真, 但(x)(A(x)B(x))为假, 所以(2)式反过来也不成立.

离散数学重要公式定理汇总

离散数学重要公式定理汇总
⑴ 交换律 对任何集合A、B,有AB=BA。 ⑵ 结合律 对任何集合A、B、C,有 (AB)C=A(BC)。教材里有证明。 ⑶ 同一律 对任何集合A,有AΦ=A。 ⑷ 对任何集合A,有AA=Φ。 ⑸ ∩对可分配 A∩(BC)=(A∩B)(A∩C)
关系的性质
一. 自反性
定义:设R是集合A中的关系,如果对于任意x∈A都 有<x,x>∈R (xRx),则称R是A中自反关系。 即 R是A中自反的关系x(xAxRx) 例如: 在实数集合中,“”是自反关系,因
离散数学重要公式定理汇总
大一上
Formula
基本的等价公式
⑴ 对合律 PP ⑵ 幂等律 P∨PP P∧PP ⑶ 结合律 P∨(Q∨R)(P∨Q)∨R P∧(Q∧R)(P∧Q)∧R ⑷交换律 P∨QQ∨P P∧QQ∧P ⑸分配律 P∨(Q∧R)(P∨Q)∧(P∨R) P∧(Q∨R)(P∧Q)∨(P∧R) ⑹ 吸收律 P∨(P∧Q)P P∧(P∨Q)P ⑺德.摩根定律 (P∨Q)P∧Q (P∧Q)P∨Q
2013-12-16 7
Formula
• 蕴含的性质
*若AB且A为重言式,则B必为重言式 *若AB且BC,则AC (传递性) *若AB且AC,则A(B ∧ C) *若AB且C B,则(A∨C) B 证明见书P22
2013-12-16
8
conjunction
一、全功能真值表
2013-12-16 10
normal form
主析取范式定义 析取范式 A1∨A2∨...∨An, , 其中每个Ai (i=1,2..n) 都是小项,称之为主析取范式。 思考:主析取范式与析取范式的区别是什么? 主析取范式的写法 方法Ⅰ:列真值表 ⑴列出给定公式的真值表。 ⑵找出真值表中每个“T”对应的真值指派再对 应的小项。 ⑶用“∨”联结上述小项,即可。

离散数学部分概念和公式总结

离散数学部分概念和公式总结

离散数学部分概念和公式总结命题:称能判断真假的陈述句为命题。

命题公式:若在复合命题中,p、q、r等不仅可以代表命题常项,还可以代表命题变项,这样的复合命题形式称为命题公式。

命题的赋值:设A为一命题公式,p ,p ,…,p 为出现在A中的所有命题变项。

给p ,p ,…,p 指定一组真值,称为对A的一个赋值或解释。

若指定的一组值使A的值为真,则称成真赋值。

真值表:含n(n≥1)个命题变项的命题公式,共有2^n组赋值。

将命题公式A在所有赋值下的取值情况列成表,称为A的真值表。

命题公式的类型:(1)若A在它的各种赋值下均取值为真,则称A为重言式或永真式。

(2)若A在它的赋值下取值均为假,则称A为矛盾式或永假式。

(3)若A至少存在一组赋值是成真赋值,则A是可满足式。

主析取范式:设命题公式A中含n个命题变项,如果A得析取范式中的简单合取式全是极小项,则称该析取范式为A的主析取范式。

主合取范式:设命题公式A中含n个命题变项,如果A得析取范式中的简单合析式全是极大项,则称该析取范式为A的主析取范式。

命题的等值式:设A、B为两命题公式,若等价式A↔B是重言式,则称A与B是等值的,记作A<=>B。

约束变元和自由变元:在合式公式∀x A和∃x A中,称x为指导变项,称A为相应量词的辖域,x称为约束变元,x的出现称为约束出现,A中其他出现称为自由出现(自由变元)。

一阶逻辑等值式:设A,B是一阶逻辑中任意的两公式,若A↔B为逻辑有效式,则称A与B是等值的,记作A<=>B,称A<=>B为等值式。

前束范式:设A为一谓词公式,若A具有如下形式Q1x1Q2x2Q k…x k B,称A为前束范式。

集合的基本运算:并、交、差、相对补和对称差运算。

笛卡尔积:设A和B为集合,用A中元素为第一元素,用B中元素为第二元素构成有序对组成的集合称为A和B的笛卡尔积,记为A×B。

二元关系:如果一个集合R为空集或者它的元素都是有序对,则称集合R是一个二元关系。

离散数学实验——求真值表

离散数学实验——求真值表

一实验目的 (1)二实验内容 (1)三实验环境 (1)四实验原理和实现过程(算法描述) (1)五实验数据及结果分析; (3)六源程序清单; (7)七其他收获和体会。

(16)一实验目的熟悉掌握命题逻辑中的联接词、真值表、主范式等,进一步能用它们来解决实际问题。

二实验内容1. 从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、条件和双条件的真值。

(A)2. 求任意一个命题公式的真值表(B,并根据真值表求主范式(C))三实验环境C或C++语言编程环境实现。

四实验原理和实现过程(算法描述)A:首先提示用户输入真值指派,然后判断用户输入的是否是0或者1,如果不是则利用while语句提示错误,然后提示重新输入直至输入正确,再根据用户输入的真值给代表合取,析取,蕴含,双条件的变量赋值,再以两行表格形式输出所得结果。

最后提示按#键退出,否则继续循环求真值。

B:主要思路:首先提示用户输入表达式,然后编写并调用一个函数将表达式转换为逆波兰式,在转换的同时,插入部分语句将表达式中的变量名存储到数组bianl[N]中,然后输出存好的各变量名及用户输入的表达式(建立表头),将每次的真值指派存在数组zhi[]中,编写函数zzhi()每次调用zzhi()时都使数组zhi[]中的真值加1,(利用递推实现加一时可能的进位,)然后编写并调用一函数qiuzhi ()计算每次真值指派下的逆波兰表达式的值,再输出各真值指派和求出的表达式的真值,然后调用函数zzhi()将真值指派的数组加1,最后外围利用while语句循环输出每个不同的真值指派和该指派下表达式的值。

将表达式转换成逆波兰式并将变量提取的算法:首先需要分配2个栈,一个作为临时存储运算符的栈fu[],一个作为输入逆波兰式的栈nibol[],从中缀式的左端开始取字符,逐序进行如下步骤:(1)若取出的字符是字母,则该字母直接送入nibol[]栈。

同时为了找出所有变量,将该变量名与数组bianl[]中已有的元素比较,如果bianl[]中还没有该字母,则该字母是新出现的变量,将其录入数组bianl[]中。

离散数学题目附标准答案

离散数学题目附标准答案

数理逻辑习题判断题1.任何命题公式存在惟一的特异析取范式 ( √) 2. 公式)(q p p →⌝→是永真式 ( √) 3.命题公式p q p →∧)(是永真式(√) 4.命题公式r q p ∧⌝∧的成真赋值为010 (×) 5.))(()(B x A x B x xA →∃=→∀(√)6.命题“如果1+2=3,则雪是黑的”是真命题 ( ×) 7.p q p p =∧∨)( ( √)8.))()((x G x F x →∀是永真式 ( ×) 9.“我正在撒谎”是命题 ( ×)10. )()(x xG x xF ∃→∀是永真式( √ )11.命题“如果1+2=0,则雪是黑的”是假命题 ( × ) 12.p q p p =∨∧)( ( √ )13.))()((x G x F x →∀是永假式 ( × )14.每个命题公式都有唯一的特异(主)合取范式(√) 15.若雪是黑色的:p ,则q →p 公式是永真式(√) 16.每个逻辑公式都有唯一的前束范式 ( × ) 17.q →p 公式的特异(主)析取式为q p ∨⌝ ( × ) 18.命题公式 )(r q p →∨⌝的成假赋值是110 ( √ ) 19.一阶逻辑公式)),()((y x G x F x →∀是闭式( × )单项选择题1. 下述不是命题的是( A )A.花儿真美啊! B.明天是阴天。

C.2是偶数。

D.铅球是方的。

2.谓词公式(∀y)(∀x)(P(x)→R(x,y))∧∃yQ(x,y)中变元y (B)A.是自由变元但不是约束变元B.是约束变元但不是自由变元C.既是自由变元又是约束变元D.既不是自由变元又不是约束变元3.下列命题公式为重言式的是( A )A.p→ (p∨q)B.(p∨┐p)→qC.q∧┐qD.p→┐q4.下列语句中不是..命题的只有(A)A.花儿为什么这样红?B.2+2=0C.飞碟来自地球外的星球。

离散数学1_3

离散数学1_3

定理 1.3 -1: 一个简单合取式是永假式, 当且仅当它含
有P ,P形式的两个因子。
证: 充分性 P∧P是永假式, 而Q∧FF, 所以含有
P和P形式的两个因子时, 此简单合取式是永假式。
必要性 用反证法。设简单合取式永假但不含P和P
形式的两个因子, 则给这个 简 单 合 取 式 中不带否定符的命
求公式的范式
例 求下列公式的析取范式与合取范式 (1) (pq)r (2) (pq)r
解 (1) (pq)r (pq)r pqr
(消去) (结合律)
最后结果既是析取范式(由3个简单合取式组成的 析取式),又是合取范式(由一个简单析取式组成 的合取式)
设公式A含命题变项p1,p2,…,pn
(1) 求A的析取范式A=B1 B2 … Bs , 其中Bj是简单 合取式 j=1,2, … ,s (2) 若某个Bj既不含pi, 又不含pi, 则将Bj展开成 Bj Bj(pipi) (Bjpi)(Bjpi) 重复这个过程, 直到所有简单合取式都是长度为n的 极小项为止 (3) 消去重复出现的极小项, 即用mi代替mimi (4) 将极小项按下标从小到大排列
范式概念
说明: 单个文字既是简单析取式,又是简单合取式 形如 PQR, PQR 的公式既是析取范式, 又是合取范式
范式的性质
定理 1.3 -1: 一个简单合取式是永假式, 当且仅当它含有 P ,P形式的两个因子。
定理 1.3 -2: 一个简单析取式是永真式, 当且仅当它含有 P ,P形式的两个因子。
极大项
定义: 在含有n个命题变项的简单析取式中,若每个 命题变项均以文字的形式在其中出现且仅出现一 次,而且 第i个文字出现在左起第i位(1in), 称这样的 简单析取式 为 极大项. 几点说明: n个命题变项有2n个极大项 2n个极大项均互不等值 用Mi表示第i个极大项,其中i是该极大项成假赋值的 十进制表示. Mi称为极大项的名称.

离散数学(1.4真值表与等价公式)

离散数学(1.4真值表与等价公式)
离散数学(Discrete Mathematics)
1
第一章 命题逻辑(Propositional Logic) 1.4真值 表与等价公式
1.4.1 真值表(Truth Table) 1.4.2 等价公式(Propositional Equivalences) 1.4.1 真值表 前面在定义联结词时,曾经使用过真值表,下面给出 真值表的定义. 定义1.4.1 (对公式的赋值或解释)设P1 , P2 ,…,Pn是出 现在公式A中的全部的命题变元, 给P1 , P2 ,…,Pn各指 定一个真值,称为对A的一个赋值或解释。若指定的 一组值使A的真值为真(假), 称这组值为A的成真(假)赋值.
练习2:构造公式 (P Q ∧Q 真值表。
P
F F T T
Q
F T F T
(P Q )
(P Q)
(P Q) ∧ Q
11
第一章 命题逻辑(Propositional Logic) 1.4真值 表与等价公式
练习2:构造公式 (P Q ∧Q 真值表。
P
F F T T
Q
F T F T
F F F F F
Q R P (Q R) (P ∧ Q R
T T F T T T T T T T T T T T T
T F T
T T F
F
T
T
F
T
F
T
F
Байду номын сангаас
T T T
T
T
T
T
17
第一章 命题逻辑(Propositional Logic) 1.4真值 表与等价公式
由真值表可知,两个公式为等价式。
F F T T
F T F T

离散数学实验报告命题逻辑—构造命题公式的真值表

离散数学实验报告命题逻辑—构造命题公式的真值表

【实验目的】使学生熟练掌握利用计算机语言实现逻辑运算的基本方法。

【实验内容】对给出的任意一个命题公式(不超过四个命题变元),使学生会用C语言的程序编程表示出来,并且能够计算它在各组真值指派下所应有的真值,画出其真值表。

【实验原理】给出任意一个命题公式,我们可以将它用C程序表示出来,并且能够计算它在各组真值指派下所应有的真值(或是逻辑运算的结果)。

这有多种方法。

上面我们已经给出了逻辑连结词的定义,根据这种定义方法,我们也可以把一个命题公式表示成为条件语句中的条件表达式,这样我们就可以得到该命题公式的逻辑运算结果了。

【程序代码】#include <bits/stdc++.h>using namespace std;int a[8][3]={{0,0,0},{0,0,1},{0,1,0},{0,1,1},{1,0,0},{1,0,1},{1,1,0},{1,1,1}};int b[8]={0,0,0,0,0,0,0,0};int xa[8]={0,0,0,0,0,0,0,0};int s(char c,int as,int i){//1 true;0 falseif(c=='|'){if(a[i][as]==1||a[i][as+1]==1){return 1;} else{return 0;}}if(c=='&'){if(a[i][as]==1&&a[i][as+1]==1){return 1;} else{return 0;}}if(c=='='){if(a[i][as]==a[i][as+1]){return 1;} else{return 0;}}if(c=='!'){if(a[i][as]==a[i][as+1]){return 0;return 1;}}if(c=='>'){if(a[i][as]==1||a[i][as+1]==0){return 0;} else{return 1;}}}int so(char c,int i,int as){if(c=='|'){if(xa[i]==1||a[i][as+1]==1){return 1;} else{return 0;}}if(c=='&'){if(xa[i]==1&&a[i][as+1]==1){return 1;} else{return 0;}}if(c=='='){if(xa[i]==a[i][as+1]){return 1;} else{return 0;}}if(c=='!'){if(xa[i]==a[i][as+1]){return 0;} else{return 1;}}if(c=='>'){if(xa[i]==1||a[i][as+1]==0){return 0;return 1;}}}int main(void) {string f;cin>>f;char c1=f[1];char c2=f[3];for(int i=0;i<8;i++){for(int j=0;j<3;j++){printf("%d ",a[i][j]);}printf("\n");}for(int i=0;i<8;i++){xa[i]=s(c1,0,i);}for(int i=0;i<8;i++){b[i]=so(c2,i,1);}for(int i=0;i<8;i++){printf("%d\n",b[i]);}return 0;}【实验结果】【实验心得】。

离散数学真值表的计算

离散数学真值表的计算

离散数学真值表的计算⼤⼀菜鸡肝了近两个⼩时的成果,⽤于计算真值表;拿来⽔⼀篇博客(并不);代码中⽐较重要的两部分是原式向后缀式的转换,遍历所有原⼦命题的可能取值;具体的细节看代码吧,尽量添加了注释;#include<bits/stdc++.h>using namespace std;const int maxn = 105;const int maxstr = 1e5 + 10;char s[maxstr],str[maxstr],Vstr[maxn];//依次为原式,后缀式,存放原⼦命题的符号bool var[maxn];//不同原⼦命题的真值map<char,int>v;//储存原⼦命题对应的编号void Print_true(bool b){//打印bool对应的真值符号if(b) printf("T\t");else printf("F\t");}int Priority(char c){//返回运算符的优先级int p;switch (c) {case '!': p = 5; break;case '&': p = 4; break;case '|': p = 3; break;case '-': p = 2; break;case '=': p = 1; break;default : p = 0; break;}return p;}bool ToPostfix(){//原式转化为后缀表达式int cnt = 0;int len = strlen(s);stack<char>ope;for(int i=0; i<len; i++){if(s[i] == '('){ope.push(s[i]);}else if(s[i] == ')'){if(ope.empty()) return false;while(ope.top() != '('){str[cnt++] = ope.top();ope.pop();if(ope.empty()) return false;}ope.pop();}else if(Priority(s[i]) == 0){str[cnt++] = s[i];}else {if(ope.empty()){ope.push(s[i]);}else {if(Priority(s[i]) > Priority(ope.top())){ope.push(s[i]);}else{while(!ope.empty() && ope.top() != '(' && Priority(s[i]) <= Priority(ope.top())) {str[cnt++] = ope.top();ope.pop();}ope.push(s[i]);}}}}while(!ope.empty()){str[cnt++] = ope.top();ope.pop();}str[cnt] = 0;return true;}bool Calculate(bool a, bool b, char ope){//进⾏真值的运算bool ans;if(ope == '&'){if(a == true && b == true) ans = true;else ans = false;}else if(ope == '|'){if(a == true || b == true) ans = true;else ans = false;}else if(ope == '-'){if(a == true && b == false) ans = false;else ans = true;}else if(ope == '='){if(a == b) ans = true;else ans = false;}return ans;}void init_var(int n, int sum){//对var数组初始化while(sum>0){bool x = sum%2;var[n--] = x;sum /= 2;}do{var[n--] = false;}while(n > 0);}bool Result(){//对后缀式进⾏计算stack<bool>res;int len = strlen(str);for(int i=0; i<len; i++){if(str[i] == '!'){if(res.empty()){printf("计算出现异常!\n");}else {bool f = res.top();// printf("text = %d\n",f);res.pop();res.push(!f);}}else if(Priority(str[i])){bool a,b;if(res.empty()) printf("计算出现异常!\n");else {b = res.top();res.pop();}if(res.empty()) printf("计算出现异常!\n");else {a = res.top();res.pop();}bool ans = Calculate(a, b, str[i]);res.push(ans);}else {res.push(var[v[str[i]]]);}}return res.top();}void Print_Out(){//打印提⽰语printf("您好,欢迎使⽤离散数学真值表计算V1.2版本。

离散数学-逻辑学-命题公式求真值表

离散数学-逻辑学-命题公式求真值表

离散逻辑学实验班级:10电信实验班学号:Q10600132 姓名:王彬彬一、实验目的熟悉掌握命题逻辑中的联接词、真值表、主范式等,进一步能用它们来解决实际问题。

二、实验内容1. 从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、条件和双条件的真值。

(A)2. 求任意一个命题公式的真值表(B,并根据真值表求主范式(C))三、实验环境C或C++语言编程环境实现。

四、实验原理和实现过程(算法描述)1.实验原理(1)合取:二元命题联结词。

将两个命题P、Q联结起来,构成一个新的命题P∧Q, 读作P、Q的合取, 也可读作P与Q。

这个新命题的真值与构成它的命题P、Q的真值间的关系为只有当两个命题变项P = T, Q = T时方可P∧Q =T, 而P、Q只要有一为F则P∧Q = F。

这样看来,P∧Q可用来表示日常用语P与Q, 或P并且Q。

(2)析取:二元命题联结词。

将两个命题P、Q联结起来,构成一个新的命题P∨Q, 读作P、Q的析取, 也可读作P或Q。

这个新命题的真值与构成它的命题P、Q的真值间的关系为只有当两个命题变项P = F, Q = F时方可P∨Q =F, 而P、Q只要有一为T则P∨Q = T。

这样看来,P∨Q可用来表示日常用语P或者Q。

(3)条件:二元命题联结词。

将两个命题P、Q联结起来,构成一个新的命题P→Q, 读作P条件Q, 也可读作如果P,那么Q。

这个新命题的真值与构成它的命题P、Q的真值间的关系为只有当两个命题变项P = T, Q = F时方可P→Q =F, 其余均为T。

(4)双条件:二元命题联结词。

将两个命题P、Q联结起来,构成一个新的命题P←→Q, 读作P双条件于Q。

这个新命题的真值与构成它的命题P、Q的真值间的关系为当两个命题变项P = T, Q =T时方可P←→Q =T, 其余均为F。

(5)真值表:表征逻辑事件输入和输出之间全部可能状态的表格。

列出命题公式真假值的表。

通常以1表示真,0 表示假。

离散数学

离散数学

离散数学复习题一. 有两个小题1.分别说明联结词⌝、∧、∨、→和↔的名称,再分别说明它们在自然语言中表示什么含义。

解:(1) ⌝叫做否定。

(2) ∧叫做合取。

(3) ∨叫做析取。

(4) →叫做蕴涵。

(5) ↔叫做等价。

“⌝”表示“…不成立”,“不…”。

“∧”表示“并且”、“不但…而且...”、“既…又...”等。

“∨”表示“或者”,是可兼取的或。

“→”表示如果… ,则…;只要… ,就…;只有… , 才…;仅当… 。

“↔”表示“当且仅当”、“充分且必要”。

2解:二. 将下面命题写成符号表达式。

(3,4题要使用句后给定的谓词。

)1.如果小张去,则小王与小李都不去,否则小王与小李不都去。

解:设P:小张去。

Q:小王去。

R:小李去。

此命题的表达式为:(P→(⌝Q∧⌝R))∧(⌝P→⌝(Q∧R))2.我们不能既划船又跑步。

解:令 P:我们划船。

Q:我们跑步。

此命题的表达式为⌝(P∧Q)3.有些运动员是大学生。

(L(x): x是运动员,S(x): x是大学生。

)解:∃x(L(x)∧S(x))4.每个运动员都钦佩一些教练。

( L(x):x是运动员,A(x,y):x钦佩y,J(x):x是教练。

)解:∀x(L(x)→∃y(J(y)∧A(x,y)))三. 有三个问题1.先说明什么叫永真式(也叫重言式)。

解:A(P1,P2,…,Pn) 是含有命题变元P1,P2,…, Pn的命题公式,如不论对P1,P2,…, Pn作任何指派,都使得A(P1,P2,…,Pn) 为真,则称之为重言式,也称之为永真式。

2.指出下面的命题公式中哪些是永真式(只写题号即可)。

(1). (P∨Q)→P (2). P→(P∨Q)(3). (P∧(P→Q))→Q (4). (P∧Q)→Q解:(2),(3),(4)为永真式。

3.然后对上面的永真式任选其中一个给予证明(方法不限)。

证明 (4). (P∧Q)→Q设前件(P∧Q)为真,则得Q为真。

所以(P∧Q)→Q是永真式。

离散数学第1章命题公式与翻译 真值表与等价公式

离散数学第1章命题公式与翻译 真值表与等价公式

这个合式公式的定义,是以递归形式给出的,其 中(1)称为基础,(2)(3)称为归纳,(4)称为界限。
按照定义,下列公式都是合式公式: ┐(P∧Q),┐(P→Q),(P→(P∨┐Q), (((P→Q)∧(Q→R)) (S T)) 而 (P→Q)→(∧Q),(P→Q,(P∧Q)→Q) 等都不是合式公式。
在这里,请注意和的区别与联系: 区别:

是逻辑联结词,它出现在命题公式中;
不是逻辑联结词,它表示两个命题公式的一种

关系,不属于这两个公式的任何一个公式中的符 号。

2、等价公式的证明方法: ⑴真值表法
例题5 证明 P Q (P→Q) ∧(Q→P) 证明 列出其值表 表 1-4.7
注意


由表1-4.4 (表1-4.2)可以看出,有一类公式不论命 题变元作何种指派,其真值永为真(假),我们把这 类公式记为T(F)。 在真值表中,命题公式真值的取值数目,决定于 分量(命题变元)的个数。例如,由2个命题变元 组成的命题公式共有四种可能的真值,由3个命题 变元组成的命题公式共有八种真值。一般说来,n 个命题变元组成的命题公式共有2n种真值情况。
同理(P∧Q)∨(┐P∧┐Q)与P 同,如表1-4.6所示。 表1-4.6 P Q P T T T F F T F F T F F T Q
Q对应的真值相
(P∧Q)∨(┐P∧┐Q) T F F T
二、等价公式
1.定义
定义1-4.2 给定两个命题公式A和B,设P1, P2,……,Pn为所有出现于A和B中的原子变 元,若给P1,P2,……,Pn任一组真值指派, A和B的真值都相同,则称A和B是等价的或逻 辑相等。记作A B。
P T T F F

离散数学真值表计算

离散数学真值表计算
{
r.pop();
y = s.top();
s.pop();
x = s.top();
s.pop();
x = huo(x,y);
s.push(x);
}
else if(r.top() == '<')
{
r.pop();
y = s.top();
s.pop();
x = s.top();
s.pop();
x = dengzhi(x,y);
int qie(int x,int y){
if(x == 1 && y == 1)
return 1;
else return 0;
}
int huo(int x,int y){
if(x == 0 && y == 0)
return 0;
else return 1;
}
int fei(int x){
if(x == 1)
{
if(r.top() == '(')//r.top栈r的栈顶元素
{
break;
}
else if(r.top() == '!')
{
if(a[i] != '!'){
r.pop();//销毁栈顶元素,即将符号!取出来
x = fei(s.top());//将s栈顶元素进行非运算
s.pop();//销毁s的栈顶元素(已经进行了非运算)
return 0;
else return 1;
}
int dengzhi(int x,int y){
if(x == y)
return 1;

离散数学部分概念和公式总结(考试专用)

离散数学部分概念和公式总结(考试专用)

命题:称能判断真假的陈述句为命题。

命题公式:若在复合命题中,p、q、r等不仅可以代表命题常项,还可以代表命题变项,这样的复合命题形式称为命题公式。

命题的赋值:设A为一命题公式,p ,p ,…,p 为出现在A中的所有命题变项。

给p ,p ,…,p 指定一组真值,称为对A的一个赋值或解释。

若指定的一组值使A的值为真,则称成真赋值。

真值表:含n(n≥1)个命题变项的命题公式,共有2^n组赋值。

将命题公式A在所有赋值下的取值情况列成表,称为A的真值表。

命题公式的类型:(1)若A在它的各种赋值下均取值为真,则称A为重言式或永真式。

(2)若A在它的赋值下取值均为假,则称A为矛盾式或永假式。

(3)若A至少存在一组赋值是成真赋值,则A是可满足式。

主析取范式:设命题公式A中含n个命题变项,如果A得析取范式中的简单合取式全是极小项,则称该析取范式为A的主析取范式。

主合取范式:设命题公式A中含n个命题变项,如果A得析取范式中的简单合析式全是极大项,则称该析取范式为A的主析取范式。

命题的等值式:设A、B为两命题公式,若等价式A↔B是重言式,则称A与B是等值的,记作A<=>B。

约束变元和自由变元:在合式公式∀x A和∃x A中,称x为指导变项,称A为相应量词的辖域,x称为约束变元,x的出现称为约束出现,A中其他出现称为自由出现(自由变元)。

一阶逻辑等值式:设A,B是一阶逻辑中任意的两公式,若A↔B为逻辑有效式,则称A与B是等值的,记作A<=>B,称A<=>B为等值式。

前束范式:设A为一谓词公式,若A具有如下形式Q1x1Q2x2Q k…x k B,称A为前束范式。

集合的基本运算:并、交、差、相对补和对称差运算。

笛卡尔积:设A和B为集合,用A中元素为第一元素,用B中元素为第二元素构成有序对组成的集合称为A和B的笛卡尔积,记为A×B。

二元关系:如果一个集合R为空集或者它的元素都是有序对,则称集合R是一个二元关系。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
s.pop();
x = s.top();
s.pop();
x = huo(x,y);
s.push(x);
}
else if(r.top() == '<')
{
r.pop();
y = s.top();
s.pop();
x = s.top();
s.pop();
x = dengzhi(x,y);
s.push(x);
if(a[i]=='('||a[i]==')'||a[i]=='<'||a[i]=='&'||a[i]=='|'||a[i]=='!'||a[i]=='-')//字符进入r栈
{
while(t >= priority(a[i]) && t != 3)
{
if(r.top() == '(')//r.top栈r的栈顶元素
i++;
}
else
for(k = 0; k < j; k ++)//数字进入s栈
if(a[i] == b[k]){
s.push(c[k]);
break;
}
printf("%d\n", s.top());
s.pop();
r.pop();
}
system("pause");
}
if(x == 1 && y == 1)
return 1;
else return 0;
}
int huo(int x,int y){
if(x == 0 && y == 0)
return 0;
else return 1;
}
int fei(int x){
if(x == 1)
return 0;
else return 1;
#include <iostream>
#include<cstdio>
#include<cstring>
#include <stack>
using namespace std;
stack<int>s;//建立栈s,用来储存数字
stack<int>r;//建立栈r,用来粗存符号
int qie(int x,int y){
}
int dengzhi(int x,int y){
if(x == y)
return 1;
else return 0;
}
int yunhan(int x, int y){
if(x == 1 && y == 0)
return 0;
else return 1;
}
int priority(char flag){//设置优先级
}
else break;
}
else if(r.top() == '&')
{
r.pop();
y = s.top();
s.pop();
x = s.top();
s.pop();
x = qie(x,y);
s.push(x);
}
else if(r.top() == '|')
{
r.pop();
y = s.top();
{
break;
}
else if(r.top() == '!')
{
if(a[i] != '!'){
r.pop();//销毁栈顶元素,即将符号!取出来
x = fei(s.top());//将s栈顶元素进行非运算
s.pop();//销毁s的栈顶元素(已经进行了非运算)
s.push(x);//将进行非运算的结果x加入s的栈顶
flag = 1;
break;
}
if(flag == 0){//如果该字母不存在就记录下来
b[j] = a[i];
printf("%c ", b[j]);
j ++;//记录字母个数
}
}
printf("\n");
flag = 1;
for(i = 0; i < j; i ++)
flag *= 2;
for(n = 0; n < flag; n ++){//建立真值表
if(t == 3 && a[i] == ')'){//如果()之间没有符号就直接丢弃两个括号
r.pop();
r.pop();
}
if(r.empty())//如果符号栈的元素没有了,让优先级t为最小优先级
t = -3;
else t = priority(r.top());
if(a[i]=='&' || a[i]=='|' || a[i]=='<' || a[i]=='-')//如果遇到由两个符号组成的运算符只要前面的符号
//如果不是运算符号就记录下来
if(a[i]!='('&&a[i]!=')'&&a[i]!='<'&&a[i]!='>'&&a[i]!='&'&&a[i]!='|'&&a[i]!='!'&&a[i]!='-'){
flag = 0;
for(k = 0; k < j; k ++)
if(a[i] == b[k]){//如果该字母已经存在丢弃
return 3;
else return -2;
}
int main()
{
int len, i, t, x, y, j = 0, k, flag, c[100], temp, n;
char b[100], a[100];
gets(a);
len = strlen(a);
for(i = 0; i < len; i ++)//比较所有字符
}
else if(r.top() == '-')
{
r.pop();
y = s.top();
s.pop();
x = s.top();
s.pop();
x = yunhan(x,y);
s.push(x);
}
if(r.empty())
t = -3;
else t = priority(r.top());
}
r.pt = -3;
for(k = 0; k < j; k ++){
c[j-k-1] = temp % 2;
temp /= 2;
}
for(k = 0; k < j; k ++)
printf("%d ", c[k]);
a[len] = ')';
for(i = 0; i <= len; i ++)
if(flag == ')')
return -1;
else if(flag == '<' || flag == '-')
return 0;
else if(flag=='&'||flag=='|')
return 1;
else if(flag=='!')
return 2;
else if(flag == '(')
相关文档
最新文档