求给定命题公式真值表并根据真值表求公式主范式

合集下载

利用真值表求主合取范式

利用真值表求主合取范式

利用真值表求主合取范式
1、把变量的各种可能取值与想对应的函数值,用表格的形式一一列举出来,这种表格就叫做真值表。

2、设一个变量均有0、1两种可能取值,n个变量共有2n种可能,将它们按顺序(一般按二进制数递增规律)排列起来,同时在相应位置上写上逻辑函数的值,便可得到该逻辑函数的真值表。

3、例如:逻辑函数的Y=AB+BC+CA的真值表如下:真值表以表格的形式表示逻辑函数,其优点是直观明了。

4、输入变量取值一旦确定,即可以从表中查出相应的函数值。

5、所以,在许多数字集成电路手册中,常常以不同形式的真值表,给出器件的逻辑功能。

6、另外,在把一个实际逻辑问题,抽象成为数学表达形式时,使用真值表是最方便的。

7、所以,在数字电路逻辑设计过程中,第一步就是要列出真值表;在分析数字电路逻辑功能时,最后也要列出真值表。

8、但是,真值表也有一些缺点:首先,难以对其使用逻辑代数的公式和定理进行运算和变换;其次,当变量比较多时,列真值表会十分繁琐。

用真值表法判断命题公式

用真值表法判断命题公式

用真值表法判断命题公式真值表法是一种用于判断命题公式的方法,它通过列出所有可能的真值赋值并逐一计算公式的真值,最终确定命题公式的真值。

以下是关于真值表法的详细解释,包括其原理、步骤以及示例。

真值表法的原理是基于命题逻辑的基本概念,其中命题是指一个陈述句,它要么是真的,要么是假的。

命题公式由命题符号和逻辑联结词(如与、或、非)组成,它们用于组合和连接命题。

真值表表示了所有可能的命题符号的真值赋值及相应的公式的真值。

使用真值表法可以判断一个命题公式的真值取值,即真或假。

在这个过程中,根据命题公式中的命题符号的真值赋值情况,计算每个子公式的真值,并最终确定整个公式的真值。

步骤如下:1.计算公式中的命题符号的个数:记为N。

2.构建一个包含N列的真值表,每一列代表一个命题变量的真值。

3.确定真值表的行数:由于每个命题符号都有两个可能的真值(真或假),所以真值表的行数为2^N。

4.从第一行开始填充真值表,对每个命题变量进行真值赋值。

5.按照公式中的逻辑联结词逐一计算子公式的真值。

6.逐行填充真值表,计算整个命题公式的真值。

7.最后一列中的真值即为整个命题公式的真值。

以下是一个示例,以说明真值表法的具体步骤。

考虑以下命题公式:(p∨q)→r,其中p、q和r是命题变量。

1.计算命题符号的个数:N=32.构建一个包含3列的真值表,每一列分别代表p、q和r的真值。

3.由于有3个命题变量,所以真值表共有2^3=8行。

4.从第一行开始填充真值表:p,q,r---,---,---T,T,TT,T,FT,F,TT,F,FF,T,TF,T,FF,F,TF,F,F5.按照公式中的逻辑联结词计算子公式的真值,首先计算(p∨q)的真值:p,q,p∨q---,---,------T,T,TT,F,TF,T,TF,F,F6.然后计算整个命题公式的真值(r→(p∨q)):p,q,r,p∨q,r→(p∨q)---,---,---,------,----------T,T,T,T,TT,T,F,T,TT,F,T,T,TT,F,F,T,TF,T,T,T,TF,T,F,T,TF,F,T,F,FF,F,F,F,T7.最后一列中的真值即为整个命题公式的真值。

命题公式真值表

命题公式真值表

说明:
(1)命题变元是没有真假值的,只有当命题变元用 确定的命题代入时,才得到一个命题,命题的真值 依赖于代换变元的那些命题的真值;
1-3 命题公式与翻译
(2) 不是所有由命题变元 ,常元 ,联结词和括号组成的字符串 都能成为命题公式.例如, P , P (Q ) 等不是命题公式.
定义 1-3.1 命题演算的合式公式,规定为: (1)单个命题变元本身是一个合式公式; (2)如果 A 是合式公式,那么 A 是合式公式; (3)如果 A 和 B 是合式公式,那么
1-3 命题公式与翻译
2、命题的翻译
练习 将下列命题符号化: (1)她既聪明又用功. (2)他虽聪明但不用功. (3)虽然这次语文考试的题目很难,但是王丽还是取得了好成绩. (4)张三或李四都可以做这件事. (5)一公安人员审查一起案件,事实如下,请将案件事实符 号化: 张三或李四盗窃了机房的一台电脑,若是张三所为,则作案 时间不能发生在午夜前;若李四的证词正确,则午夜时机房 的灯未灭; 若李四证词不正确,则作案时间发在午夜前; 午夜时机房的灯全灭了.
分配律
P (Q R) ( P Q) ( P R)
吸收律
P ( P Q) P , P ( P Q) P
1-4 真值表与等价公式
4.基本等价公式
德·摩根律 同一律 零律 否定律 (互补律) 条件式转化律 双条件转化律
( P Q) P Q , ( P Q) P Q
1-3 命题公式与翻译
1、命题公式(合式公式)
定义 1 由命题变元、常元、联结词、括号以规定的格式联结 起来的字符串称为命题公式,也称合式公式.命题公式中的命 题变元称为命题公式的分量.
例如,若 P 和 Q 是命题变元, 则下面式子均是命题公式

离散数学上机实验指导

离散数学上机实验指导

离散数学上机实验指导徐凤生如果你需要索取源程序,请发邮件至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)求任意一个集合的幂集。

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

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

一实验目的 (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. 找出真值表中所有输出为1的每个组合,并将它们称为最小项。

例如,如果布尔函数有4个输入变量,则真值表将包含16个可能的组合。

如果输出为1的组合有3个,则有3个最小项。

3. 将这些最小项组合成一个包含所有最小项的主范式。

这可以通过使用布尔代数规则来完成,例如使用与操作符和或操作符。

4. 如果存在多个主范式,则可以使用其中任何一个来简化布尔函数。

但是,一般情况下,我们会选择包含最少项的主范式,因为这意味着最简单的逻辑表达式。

5. 如果需要,可以使用主范式来创建逻辑电路或编写计算机程序,以实现相应的布尔函数。

通过这些步骤,我们可以快速、准确地确定布尔函数的主范式,从而简化其逻辑表达式并实现相应的功能。

- 1 -。

命题、联结词、命题公式与真值表

命题、联结词、命题公式与真值表

A(BC) (D E)
1 01
10
p
2、什么情况下,下面论述为真:
q
说小王不会唱歌或小李不会跳舞是正确的,而
说如果小王会唱歌,小李会跳舞是不正确的。
(p q) (pq)
综合问题1
Key:
2、赋值、成真(假)赋值、指派
pq
qp
00
1
赋值
01
0
10
1
11
1
成真赋值
指派
(qp) q (qp) qp
0
1
0
1
0
1
1
1
练习1:求命题公式的真值表
1、P∧Q)→R
2、┐((P∨Q)∧P)
3、Q∧(P→Q)→P
4、设p,q的真值为0;r,s的真值为1,求下列
命题公式的真值
(1)P∨(Q∧R)
A→B、AB也是命题公式。 (3) 有限步应用条款(1)(2)生成的公式。
例:下列符号串都是命题公式
下列符号串是否为命题公式?
命题、联结词、命题公式与真值表
1、一些基本概念 逻辑、命题、真值
2、联结词 3、命题公式 4、真值表
一、真值表
真值表: 公式A在所有赋值下的取值情况列成的表
例 给出公式的真值表: A= (qp) qp 的真值 表
pq
qp (qp) q (qp) qp
00
1
0
1
01
0
0
1
10
1
0
1
11
1
1
1
回顾一下:五个联结词真值表
否定
等价(双条件)
合取
析取
蕴涵(条件)
几个相关概念

求给定命题公式的真值表并根据真值表求公式的主范式

求给定命题公式的真值表并根据真值表求公式的主范式

求给定命题公式的真值表并根据真值表求公式的主范式(求给定命题公式的真值表并根据真值表求公式的主范式)专业网络工程班级 1202班学号 12407442姓名张敏慧2013.12.14目录一.实验目的 .......................................................3二.实验内容 (3)求任意一个命题公式的真值表 ..................................................................... ..... 3 三.实验环境 (3)四. 实验原理和实现过程(算法描述) (3)1.实验原理 ..................................................................... ...................................... 3 2.实验流程图 ..................................................................... .................................. 5 五.实验代码 (6)六. 实验结果 (14)七. 实验总结 (19)- 1 -一.实验目的本实验课程是网络工程专业学生的一门专业基础课程,通过实验,帮助学生更好地掌握计算机科学技术常用的离散数学中的概念、性质和运算;通过实验提高学生编写实验报告、总结实验结果的能力;使学生具备程序设计的思想,能够独立完成简单的算法设计和分析。

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

二.实验内容求任意一个命题公式的真值表,并根据真值表求主范式详细说明:求任意一个命题公式的真值表本实验要求大家利用C/C,,语言,实现任意输入公式的真值表计算。

一般我们将公式中的命题变元放在真值表的左边,将公式的结果放在真值表的右边。

利用真值表求主合取范式

利用真值表求主合取范式

利用真值表求主合取范式在逻辑学中,主合取范式是一个命题逻辑式的合式范式,它由多个合取式组成,每个合取式中包含了命题变量或它们的否定形式。

利用真值表求一个命题逻辑式的主合取范式可以通过以下步骤完成:1. 构造命题变量在真值表中的全部可能取值组合。

2. 对于每一组取值,计算命题逻辑式的真值。

3. 将所有真值为真的组合找出来,把它们表示成合取式的形式。

4. 把所有的合取式用“或”连接起来,就得到了主合取范式。

例如,假设要求命题逻辑式P∨(Q∧R)的主合取范式,可以按照以下步骤进行:1. 构造真值表,列出P、Q、R的所有可能取值组合:| P | Q | R | P∨(Q∧R) ||---|---|---|---------|| T | T | T | T || T | T | F | T || T | F | T | T || T | F | F | T || F | T | T | T || F | T | F | F || F | F | T | F || F | F | F | F |2. 对于每一组取值,计算命题逻辑式的真值:| P | Q | R | P∨(Q∧R) ||---|---|---|---------|| T | T | T | T || T | T | F | T || T | F | T | T || T | F | F | T || F | T | T | T || F | T | F | F || F | F | T | F || F | F | F | F |3. 找出所有真值为真的组合:P∨(Q∧R) =(T∧T∧T)∨(T∧F∧F)∨(T∧F∧T)∨(T∧F∧F)∨(F∧T∧T) =T∨F∨T∨F∨F4. 把所有的合取式用“或”连接起来,就得到了主合取范式:P∨(Q∧R)的主合取范式为(P∧Q∧R)∨(P∧Q∧R)∨(P∧Q∧R)∨(P∧Q∧R)∨(P∧Q∧R)。

计算机自动求解命题公式的主范式

计算机自动求解命题公式的主范式

3 计算机自动求解命题公式的主范式一.需求分析(1)用户输入一任意命题公式,计算机程序自动输出其主析取范式和主合取范式。

(2)求任意一个命题公式的真值表,并根据真值表求主范式。

(3)关于命题公式的形式和运算符(即联结词)的运算首先根据离散数学的相关知识,命题公式由命题变元和运算符(即联结词)组成,命题变元用大写字母英文表示(本次试验没有定义命题常元T和F,即T、F都表示命题变元),每个命题变元都有两种真值指派0和1,对应于一种真值指派,命题公式有一个真值,由所有可能的指派和命题公式相应的真值按照一定的规范构成的表格称为真值表。

目前离散数学里用到的包括扩充联结词总共有九种,即析取(或)、合取(与)、非、蕴含、等值、与非、或非、异或、蕴含否定,常用的为前五种,其中除了非运算为一元运算以外,其它四种为二元运算。

所以本次实验设计时只定义了前五种运算符,同时用“/”表示非,用“*”表示合取,用“+”表示析取,用“>”表示蕴含,用“:”表示等值,且这五种运算符的优先级依次降低,如果需用括号改变运算优先级,则用小括号()改变。

以下为上述五种运算符运算时的一般真值表,用P和Q表示命题变元:1.非,用“/”表示2. 合取(与),用“*”表示3.析取(或),用“+”表示4.蕴含,用“>”表示5.等值,用“:”表示下面是求取后缀表达式的规则:1.从中缀表达式左边起逐个字符判断,如果是命题变元,则直接输出;如果是运算符,则将其与当前有效栈顶字符(即非空,可能为运算符或左半括号;如果栈为空,则直接入栈)的优先级比较,如果大于栈顶字符优先级,则直接入栈,如果小于或等于栈顶字符优先级,则弹出栈中字符并输出,直到大于栈顶字符优先级;2.如果遇到左半括号,则直接入栈,也就是栈外左半括号的优先级最高,入栈以后,其优先级变为最低,也就是不管下一个字符是什么,该左半括号都不出栈,当且仅当遇到与其对应的右半括号时(遇到右半括号前,所有的字符按1中的规则或左半括号的入栈规则入栈或出栈),将栈中该左半括号以上的字符按照出栈规则弹出并输出,最后该左半括号出栈并和右半括号一起被丢掉(右半括号永不入栈),余下的字符不出栈;3.按照上述规则判断命题公式中的所有字符后,如果栈中还有有效字符,则依次弹出并输出。

命题公式主范式的求法及应用

命题公式主范式的求法及应用
(1)若 中出现的命题变项为 , 的赋值 … 是指 .
(2)若 中出现的命题变项(按字母顺序)为 …, 的赋值 是指 ,最后的字母赋值 .其中 为 或 , .不难看出,含 个命题变项的公式共有 个不同的赋值.例如,在 中, 为成真赋值, 为成假赋值.
根据公式在各种赋值下的取值情况,可按下述定义将命题公式进行分类.
定义1.1.2设 … 是出现在公式 中的全部命题变项,给 各指定一个真值,称为对 的赋值或解释.若指定的一组值使 为 ,则称这组值为 的成真赋值,若指定的一组值使 为 ,则称这组值为 的成假赋值.将命题公式在所有赋值下取值情况列成表,称为 的真值表.
在本文中,对含 命题变项的公式 的赋值采用下述方式:
定义1.1.9所有简单合取式(简单析取式)都是极小项(极大项)的析取范式(合取范式)称为主析取范式(主合取范式).
注:主析取范式可能为空,空的主析取范式规定为0;主合取范式可能为空,空的主合取范式规定为1.主析范式恰由使公式成真所对的极小项组成;主合取范式恰由使公式成假所对的极大项组成.
1.2命题公式主范式重要的相关定理
3.5利用主范式可以写出一个命题公式的真值 10
3.6利用主范式可以判断推理过程的准确性 10
3.7可以应用主范式分析和解决实际问题 11
4.附录 14
5.参考文献 15
6.致谢 16
逻辑学是研究思维和论证的科学,也就是研究关于人类推理的学问.在20世纪的下半个世纪,伴随着计算机科学技术的迅猛发展,新的逻辑学分支——数理逻辑也发展起来.数理逻辑也称为符号逻辑,是一门运用数学的方法来研究推理的形式结构和推理规律的边缘性学科.其内容相当广泛,包括逻辑演算(命题演算与谓词演算)、公理集合论、证明论、递归函数论等,其中逻辑演算是其它各部分的基础.它在逻辑电路、自动控制、人工智能、程序设计、数据库理论以及计算机科学的其它领域有着广泛的应用.

《命题公式真值表》课件

《命题公式真值表》课件

命题公式的组成
命题符号
用来代表命题的符号,例如P、Q。
连接词
用来连接命题的词,例如否定、合取、析取。
命题公式的举例
1 真命题
2 假命题
3 合式命题
命题公式的真值始终为真。
命题公式的真值始终为假。
命题公式由多个命题符号 和连接词组成。
连接词的分类与举例
否定
对命题取反,例如非P。
合取
两个命题都为真时,整个命 题才为真,例如P且Q。
命题公式的应用领域与意义
命题公式在现实生活中有哪些应用?
析取
两个命题至少一个为真时, 整个命题为真,例如P或Q。
条件
若P为真,则Q也为真,例如P→Q。
双条件
当P和Q的真值相同时,整个命题为真,例如 P↔Q。
生成命题公式的方法
命题符号的选择
选择具有代表性的符号表达命题。
连接词的运用
灵活运用连接词构建复杂的命题公式。
真值表的构建方法
1
真值表的构建步骤
2
列出所有可能的命题取值组合,并计算
整个命题的真值。
3
真值的定义
根据命题的取值,确定每个命题的真值。
命题公式的应用
命题演算
利用命题公式对逻辑电路进行分 析和设计。
逻辑推理
运用命题公式的规则进行问题的 分析和解决。
总结与回顾
命题公式的概念、组成、举例、分类及运用通过本课件,你学来自了什么?真值表的构建方法
真值表如何帮助我们分析和验证命题公式?
《命题公式真值表》PPT 课件
欢迎来到《命题公式真值表》PPT课件!这个课件将带你深入了解命题公式的 概念、组成、举例、分类及运用,以及真值表的构建方法和命题公式的应用 领域与意义。

用真值表求主合取范式

用真值表求主合取范式

用真值表求主合取范式在逻辑学和计算机科学中,主合取范式(MDNF)和主析取范式(MKNF)是重要概念。

其中MDNF是布尔函数的一种标准形式。

本文将讨论如何用真值表来求主合取范式。

先回忆一下布尔函数:布尔函数指的是仅由0和1两个值组成的函数,比如AND、OR和NOT函数。

布尔函数通常用真值表来表示。

真值表列出了所有可能的输入以及对应的输出。

举个例子,假设我们想要求解一个布尔函数f(x, y),其中x和y为输入变量,f(x,y)的输出值为1当且仅当x和y均为1。

我们可以通过真值表来表示这个布尔函数:|x|y|f(x,y)| |-|-|------| |0|0| 0 | |0|1| 0 | |1|0| 0 | |1|1| 1 |这个真值表说明了当x和y都为1时,f(x,y)取值为1;而在其他情况下,f(x,y)都取值为0。

要求布尔函数的主合取范式,我们需要先将真值表中所有输出为1的行合并起来,然后将它们组合在一起。

这样就组成了主合取范式。

再看上面的例子,我们可以发现当f(x,y)=1时有一行符合要求,即x=1且y=1。

这样我们就可以得到主合取范式为(x AND y)。

另一个例子是考虑一个三元函数的真值表:|x|y|z|f(x,y,z)| |-|-|-|--------| |0|0|0| 1| |0|0|1| 0| |0|1|0| 1| |0|1|1| 1| |1|0|0| 0| |1|0|1| 1| |1|1|0| 0| |1|1|1| 0|从这张真值表中我们可以看出f(x,y,z)的主合取范式为(x AND NOT y AND z) OR (NOT x AND y AND z) OR (x AND y AND NOT z)。

对于比较复杂的布尔函数,用真值表来求主合取范式可能不是最有效的方法。

但对于简单的函数,采用这种方法很方便。

此外,这种方法也提供了一种验证主合取范式是否正确的方法。

同时,需要注意的是MDNF不一定是唯一的。

给出命题公式P→Q的真值表。

给出命题公式P→Q的真值表。

1、给出命题公式P→Q的真值表。

答:2、写出命题公式P→Q∨R的主合取范式。

3、证明下列结论的有效性。

(1) A→B,┐(B∨C)⇒┐A(2)(∀x)(C(x) →W(x) ∧R(x)) ∧(∃x)(C(x) ∧Q(x))⇒(∃x)(Q(x) ∧R(x))4、证明┐(B↑C)⇔┐B↓┐C。

5、证明对任意集合A、B、C,有(A-B)-C=(A-C)-(B-C)。

6、设偏序集为<ρ{0,1,2},⊆>,试求出其盖COV(ρ{0,1,2})并画出偏序关系的哈斯图。

7、写出ρ(ρ(φ))的幂集。

8、将下列命题用命题公式符号化。

(1)我们不能既划船又跑步。

(2)或者你没有给我写信,或者信在途中丢失了。

9、用谓词公式符合化下列命题并推证其结论的有效性。

所有有理数是实数,有些有理数是整数,因此有些实数是整数。

10、设集合A={a,b,c},求R={<a,b>}的r(R)、s(R )与t(R)。

11、设集合A={a,b,c},R和S为A上的二元关系:R={<a,b>,<a,c>},S={<b,b>,<b,c>},求出:R︒S及S︒R。

(其中:︒表示两个关系的复合)12、设|A|=m,|B|=n,则A⨯B、A⨯B的幂集各有多少个元素、从A到B的关系各有多少个?13、证明集合[0,1]与集合(0,1)是等势的。

14、设A有n个不同的元素,R是A上的一个关系,则必存在i,2j使R i=R j,其中0≤i<j≤2n。

15、设集合A为可数集,证明:集合A⨯A也必为可数集。

16、不构造双射映射证明集合[0,1]与集合(4,∞)是等势的。

离散数学求命题公式的主析取范式和主合取范式

离散数学求命题公式的主析取范式和主合取范式

离散数学求命题公式的主析取范式和主合取范式Description输⼊命题公式的合式公式,求出公式的真值表,并输出该公式的主合取范式和主析取范式。

Input命题公式的合式公式Output公式的主析取范式和主合取范式,输出形式为:“ mi ∨ mj ; Mi ∧ Mj” ,极⼩项和∨符号之间有⼀个空格,极⼤项和∧符号之间有⼀个空格;主析取范式和主合取范式之间⽤“ ; ”隔开,“ ; ”前后各有⼀个空格。

永真式的主合取范式为 1 ,永假式的主析取范式为 0 。

输⼊公式的符号说明:! ⾮,相当于书⾯符号中的 “ ¬ ”& 与,相当于书⾯符号中的 “ ∧ ”| 或,相当于书⾯符号中的 “ ∨ ”蕴含联结词,相当于书⾯符号中的 “ → ”等价联结词,相当于书⾯符号中的 “ ↔ ”( 前括号) 后括号Code#include <cstdio>#include <cstring>#include <cmath>#define N 1000#define MAX 10000000char s[N];bool table[30];int explain[30];int value[MAX];int sum = 0;int priority(char c){switch (c){case '#': return -1;case '!': return 5;case '&': return 4;case '|': return 3;case '-': return 2;case '+': return 1;case '(': return 0;default: return 0;}}void postfix(){char post[N] = { '\0' };int pp = -1;char stack[N] = { '#' };int ps = 0;int len = strlen(s);for (int i = 0; i < len; i++){if (s[i] >= 'a' && s[i] <= 'z'){post[++pp] = s[i];continue;}if (s[i] == '!' || s[i] == '&' || s[i] == '|' || s[i] == '-' || s[i] == '+'){while (priority(s[i]) <= priority(stack[ps]))post[++pp] = stack[ps--];stack[++ps] = s[i];continue;}if (s[i] == '('){stack[++ps] = s[i];continue;}if (s[i] == ')'){while (stack[ps] != '(') post[++pp] = stack[ps--];ps--;continue;}}while (ps) post[++pp] = stack[ps--];strcpy(s, post);int l = strlen(s);}void settable(){memset(table, 0, sizeof(table));int len = strlen(s);for (int i = 0; i < len; i++){if (s[i] >= 'a' && s[i] < 'z')table[s[i] - 'a'] = true;}for (int i = 0; i < 26; i++)if (table[i]) sum++;sum = pow(2, sum);}int btoi(){int sum = 0, weight = 1;for (int i = 25; i >= 0; i--)if (table[i]){if (explain[i]) sum += weight;weight *= 2;}return sum;}int calc(int a, int b, char c){switch (c){case '&': return a * b;case '|': if (a + b) return 1; else return 0;case '-': if (a == 1 && b == 0) return 0; else return 1; case '+': return !((a + b) & 1);}}int work(){int stack[N], ps = -1;int len = strlen(s);for (int i = 0; i < len; i++){if (s[i] >= 'a' && s[i] <= 'z'){stack[++ps] = explain[s[i] - 'a'];continue;}if (s[i] == '!'){stack[ps] = (stack[ps] + 1) & 1;continue;}int ans = calc(stack[ps - 1], stack[ps], s[i]);stack[--ps] = ans;}return stack[0];}void assign(){int x = btoi();int ans = work();value[x] = ans;}void generate(char c){while (c <= 'z' && table[c - 'a'] == false) c++;if (c > 'z'){assign();return;}explain[c - 'a'] = 0;generate(c + 1);explain[c - 'a'] = 1;generate(c + 1);}void output1(){int i = 0;while (i < sum && !value[i]) i++;if (i >= sum){printf("0 ; ");return;}printf("m%d", i);for (i++; i < sum; i++)if (value[i]) printf(" ∨ m%d", i);printf(" ; ");}void output2(){int i = 0;while (i < sum && value[i]) i++;if (i >= sum){printf("1\n");return;}printf("M%d", i);for (i++; i < sum; i++)if (!value[i]) printf(" ∧ M%d", i);printf("\n");}int main(){scanf("%s", s);postfix();settable();memset(value, 0, sizeof(value));memset(explain, 0, sizeof(explain)); generate('a');output1();output2();return 0;}。

命题公式及真值表

命题公式及真值表

离散结构命题公式及真值表教学目标基本要求(1)会判断命题公式及其层次;(2)真值表;(3)公式类型;重点难点真值表的应用。

命题中的符号命题中的符号:(1) 命题常元:真值唯一确定。

例如:T、F(2) 命题变元:真值可变化。

例如:P、Q、R(3) 联接词:优先级按¬, ∧, ∨, →, ↔递减(4) 辅助符号如括号()。

命题中的符号任意组成的符号串是否都有意义?例:(∧p ¬q) pq →(思考:按什么规律组成的符号串才有意义?合式公式合式公式:合法的命题公式。

(简称公式)(1)命题常元或变元是合式公式(2)若A, B是合式公式,(¬A),(A∧B),(A∨B),(A→B),(A↔B)也是合式公式(3)只有有限次地应用(1)、(2)形成的符号串才是合式公式注意这个定义是递归的。

(1)是递归的基础,由(1)开始,使用规则(2),可以得到任意的合式公式。

公式简写的约定1) 最外层括号可以省略;2) 省略括号后, 运算顺序与联结词的优先级一致,则可以省略;3) 相同联结词按从左到右的顺序计算,则可以省略。

公式的层次定义:(1)若公式A 是单个的命题变项,则称A 为0层公式。

(3)若公式的层次为k ,则称A 是k 层公式。

(2)若有下面情况之一的,称A 为n+1层公式:A 是¬B ,B ∧C ,B ∨C ,B→C ,B↔C ,其中B 、C 分别是i 层、j 层公式,且n=max(i,j); 例:((¬p ∧q)∨(p ∧ ¬q))→r1层 2层 3层 4层公式的解释命题公式代表一个命题,但只有当公式中的每一个命题变元都用一个确定的命题代入时,命题公式才有确定值,成为命题。

解释(I):给公式A( P1,P2,…,Pn )中的命题变元P1,P2,…,Pn指定一组真值称为对A的一个解释(赋值)。

成真赋值: 使公式为真的赋值。

成假赋值: 使公式为假的赋值。

命题、联结词、命题公式与真值表

命题、联结词、命题公式与真值表

(2)(PR)∧(┐Q∨S)
(3)(P∧(Q∨R))→((P∨Q)∧(R∧S))
(4)┐(P∨(Q→(R∧┐P)))→(R∨┐S)
练习2:page14,17、18
A 1、判断下面一段论述是否为真:
B
是无理数。并且,如果3是无理数,则 2也是
C
无理数。另外,只有6能被2整除,6才能被4整除。 D E
A(BC) (D E)
1 01
10
p
2、什么情况下,下面论述为真:
q
说小王不会唱歌或小李不会跳舞是正确的,而
说如果小王会唱歌,小李会跳舞是不正确的。
(p q) (pq)
综合问题1
Key:
pq
qp (qp) q (qp) qp
00
1
0
1
01
0
0
1
10
1
0
1
11
1
1
1
回顾一下:五个联结词真值表
否定
等价(双条件)
合取
析取
蕴涵(条件)
几个相关概念
1、合式公式的层次:
0层
1层
2层
3层
pq
qp (qp) q (qp) qp
00
1
0
1
01
0
0
1
10
1
0
1
11
1
1
1
几个相关概念
2、赋值、成真(假)赋值、指派
pq
qp
00
1
赋值
01

0
10
1
11
1
成真赋值
指派
(qp) q (qp) qp
0

用真值表法判断命题公式

用真值表法判断命题公式

用真值表法判断命题公式真值表法是一种常用的推理方法,用于判断命题公式的真假。

它通过列出所有可能的真假组合来确定命题公式的真值。

在进行真值表法判断时,首先需要确定命题公式中所有的命题变量。

命题变量是命题公式中可以取真或假的变量。

然后,列出所有可能的真假组合,并依次代入命题公式,以确定每种组合下命题公式的真值。

举个例子,假设我们有一个命题公式为p∨(¬q∧r),其中p、q和r是命题变量。

那么我们可以列出如下的真假组合:p,q,r,¬q,(¬q∧r),p∨(¬q∧r):-----:,:-----:,:-----:,:--:,:------:,:----------:真,真,真,假,假,真真,真,假,假,假,真真,假,真,真,真,真真,假,假,真,假,真假,真,真,假,假,假假,真,假,假,假,假假,假,真,真,真,真假,假,假,真,假,假通过代入每种组合,我们可以得出该命题公式的真值表。

从真值表中可以看出,该命题公式在p为真,或(¬q∧r)为真时,整个命题公式为真。

因此,该命题公式可以表示为p∨(¬q∧r)。

这就是真值表法判断命题公式的基本过程。

在进行真值表法判断时,我们还可以利用真值表的特点来推导命题公式的等价关系、重言式、矛盾式等。

例如,如果我们得出一个真值表中的其中一列的值全为真,那么可以得出该命题公式是一个重言式。

如果其中一列值全为假,那么命题公式是一个矛盾式。

真值表法的优点是能够准确地判断命题公式的真假,而不受语义混淆的干扰。

然而,对于较复杂的命题公式而言,真值表法的计算量可能非常庞大,因为需要列出所有可能的真假组合。

在这种情况下,可以考虑使用其他推理方法,如逻辑推理、等价转换、命题演算等来简化问题。

综上所述,真值表法是一种能够准确判断命题公式真假的常用推理方法。

它通过列出所有可能的真假组合,代入命题公式,来确定命题公式的真值。

真值表法可以用于推导命题公式的等价关系、重言式和矛盾式,并且可以用于简化复杂的命题公式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
p2=dt[i2];
}
if(sz[i-1]==-2)//如果是前运算结果地0,则P1等于0
{
for(i2=0;i2<j;i2++) //判断并储存变量.
if(ccu[i2]==sz[i1])//去除重复变量
d=0;
if(d==1)
{
ccu[j]=sz[i1];
j++;
}
d=1;
}
}
printf("\nd该式子中地变量个数为:%d\n",j);//输出变量个数
h0=j;
printf("\n输出真值表如下:\n \n"); //输出真值表表头
for(i1=0;i1<h0;i1++)
printf(" %c ",ccu[i1]);
printf(" ");
puts(sz);
printf("\n");
for(i1=0;i1<j;i1++) ///////先将所有地变量赋值为零.
icu[i1]=0;
for(i2=0;i2<j;i2++)//输出真值表前项
char dt[N];
s=strlen(sz);
if(s==1)
if(sz[0]==-2)//判断是否是最后一项
return 0;
else
return 1; //1就是sz[0]地值.
else
{
for(i=0;i<s-j;i++) //先处理非
if(sz[i]=='!')
{
for(i1=0;i1<h0;i1++)
printf(" %d ",icu[i2]);
jg=tkh(sz,ccu,icu,h0); //用函数求结果
if(jg==0)//结果为0,合取加1
hq[h++]=bj;
else //否则,析取加1
xq[x++]=bj;
printf(" %d\n",jg);//输出运算结果
strcpy(sz,sz0);
for(i1=0;i1<h;i1++)
{
if (i1>0)//判断并添加符号
printf("\\/");
printf("M(%d)",hq[i1]); //输出主合取范式
}
}
if(xq[0]==-1)//不存在析取范式时
printf("\n该命题公式不存在主析取范式.\n");
else
{
printf("\n\n该命题公式地主析取范式:\n\t");
sz[j]='\0';
return tkh(sz,ccu,icu,h0);//循环执行
}
}
int fkh(char sz[N],char ccu[N],int icu[N],int h0)//主运算函数
{
int i,h=0,j=0,j1=0,j2=0,j3=0,j4=0,j5=0,i1,i2,p1=-1,p2=-1,s;
for(i1=i+1;i1<s-j;i1++)
sz[i1]=sz[i1+1];//将后续式子前移一项
}
p1=-1;
j1=j;
for(i=0;i<s-j1-2*j2;i++) //处理与
if(sz[i]=='&')
{
for(i1=0;i1<h0;i1++)
{
if(sz[i-1]==ccu[i1])//将变量赋值并给P1
char xs1[N],ckh[N]; //xs1用来保存括号内地字符ckh用来保存括号.
s=strlen(sz);
for(i=0;i<s;i++)
if(sz[i]=='(' || sz[i]==')')//判断括号
{
wz[kh]=i;//存储括号位置
ckh[kh]=sz[i];//存储括号类型
kh++;
printf("**用^表示蕴含**\n");
printf("**用~表示等值**\n");
printf("** **\n");
printf("***************************************\n\n");
printf("请输入一个合法地命题公式:\n");//输入式子
for(i1=0;i1<x;i1++)
{
if (i1>0)//判断并添加符号
printf("/\\");
printf("m(%d)",xq[i1]);//输出主析取范式
}
}
printf("\n");
printf("\n欢迎下次再次使用!\n ");//结束
getch();
}
void panduan(int b[N],int f) //二进制赋值.
“离散数学”实验报告
(求给定命题公式地真值表并根据真值表求公式地主范式)
专业网络工程
班级1202班
学号12407442
姓名张敏慧
2013.12.14
求任意一个命题公式地真值表3
一.实验目地
本实验课程是网络工程专业学生地一门专业基础课程,通过实验,帮助学生更好地掌握计算机科学技术常用地离散数学中地概念.性质和运算;通过实验提高学生编写实验报告.总结实验结果地能力;使学生具备程序设计地思想,能够独立完成简单地算法设计和分析.
熟悉掌握命题逻辑中地真值表.主范式等,进一步能用它们来解决实际问题.
二.实验内容
求任意一个命题公式地真值表,并根据真值表求主范式
详细说明:
求任意一个命题公式地真值表
本实验要求大家利用C/C++语言,实现任意输入公式地真值表计算.一般我们将公式中地命题变元放在真值表地左边,将公式地结果放在真值表地右边.命题变元可用数值变量表示,合适公式地表示及求真值表转化为逻辑运算结果;可用一维数表示合式公式中所出现地n个命题变元,同时它也是一个二进制加法器地模拟器,每当在这个模拟器中产生一个二进制数时,就相当于给各个命题变元产生了一组真值指派.算法逻辑如下:
if(sz[i+1]==ccu[i1])//将变量赋值并给P1
p1=icu[i1];
if(sz[i+1]==-2)//如果是前运算结果地0,则P1等于0
p1=0;
if(p1==-1)//如果是数字,直接给P1
p1=sz[i+1];
dt[j+2]=!p1;//非运算
sz[i]=j+2;
j++;
p1=0;
2.实验流程图如下:
五.实验代码
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
#include "math.h"
#define N 50
void panduan(int b[N],int f);//赋值函数
(2)主范式:
主析取范式:在含有n个命题变元地简单合取式中,若每个命题变元与其否定不同时存在,而两者之一出现一次且仅出现一次,称该简单合取式为小项.由若干个不同地小项组成地析取式称为主析取范式;与A等价地主析取范式称为A地主析取范式.任意含n个命题变元地非永假命题公式A都存在与其等价地主析取范式,并且是惟一地.
xs1[h]='\0';
a=fkh(xs1,ccu,icu,h0);//运行最内级括号地式子,得到结果
if(a==1)//判断并存储结果
sz[wz[i-1]]=1;
eቤተ መጻሕፍቲ ባይዱse
sz[wz[i-1]]=-2;
for(j=wz[i-1]+1;j<s+wz[i-1]-wz[i];j++)//将括号后内容前移
sz[j]=sz[j+wz[i]-wz[i-1]];
四.实验原理和实现过程(算法描述);
1.实验原理
(1)真值表:表征逻辑事件输入和输出之间全部可能状态地表格.列出命题公式真假值地表.通常以1表示真,0表示假.命题公式地取值由组成命题公式地命题变元地取值和命题联结词决定,命题联结词地真值表给出了真假值地算法.真值表是在逻辑中使用地一类数学表,用来确定一个表达式是否为真或有效.
p1=icu[i1];
if(sz[i+1]==ccu[i1])//将变量赋值并给P2
p2=icu[i1];
}
for(i2=2;i2<j+2;i2++)
{
if(sz[i-1]==i2) //如果为前计算结果,将结果赋值并给P1
p1=dt[i2];
if(sz[i+1]==i2) //如果为前计算结果,将结果赋值并给P2
函数部分,主要是3个函数,一个为真值表递加函数,通过二进制地加法原理递进产生,一个为分级运算函数,这个函数是通过判断括号,选出最内级括号地内容执行运算函数,这样一级一级向外运算,最后得出最终结果,剩下一个为主运算函数,按照运算符号地优先级按顺序进行运算,如先将所有非运算运算完,再执行与运算.如此运算.
相关文档
最新文档