逻辑命题公式计算

合集下载

命题公式及其真值表

命题公式及其真值表

第二节 命题公式及其真值表在上节中,用,,p q r L 表示确定的简单命题。

简单命题又称为命题常项或命题常元。

命题常项有确定的真值。

在数理逻辑中,不仅要研究具体的逻辑关系,还要研究抽象的逻辑关系,因而不仅要有命题常项,还要有命题变项。

称真值可以变化的简单陈述句为命题变项或命题变元,仍然用,,p q r L 表示命题的变项。

命题常项、命题变项及联结词可按下述定义合式的公式。

定义2.1 (1)单个的命题变项(或常项)是合式公式;(2)若A 是合式公式,则(¬A )也是合式公式;(3)若A ,B 是合式公式,则(A ∧B ),(A ∨B ),(A →B ),(A ↔B )也是合式公式;(4)有限次地应用(1)~(3)形成的符号串都是合式公式。

这样定义的合式公式也称为命题公式,简称公式。

单独使用(¬A ),(A ∧B ),(A ∨B ),(A →B ),(A ↔B )时,外层括号可以省去,即可写成¬A ,A ∧B ,A ∨B ,A →B ,A ↔B 。

在定义 2.1.中出现的A ,B L 是用来表示任意的合式公式的。

在以下的论述中出现的A ,B ,C 等也同样是用来表示任意公式的。

定义2.2 设1p ,2p L ,n p 是出现在公式A 中的全部的命题变项,给1p ,2p L ,np 各指定一个真值,称为A 的一个赋值或解释。

若指定的一组真值使A 的真值为1,则称这组真值为A 的成真赋值(或成真解释)。

若指定的一组真值使A 的真值为0,则称这组真值为A 的成假赋值(或成假解释)。

本书中对含n 个命题变项的公式的赋值形式做如下规定:(1)设A 中含的命题变项为1p ,2p L ,n p ,赋值12n a a a L (i a 为0或1)是指11p a =,22p a =,L ,n n p a =。

(2)若出现在A 中的命题变项为p ,q ,r ,L ,赋值12n a a a L 是指1p a =,2q a =,L ,即按字典顺序赋值。

逻辑推理公式

逻辑推理公式

直言命题所有的都是上反对必有一假所有的都不是包容矛盾包容有的是必有一真下反对有的不是所有的A是B 上反对必有一假所有的A都不是B 包容矛盾包容有的A是B 必有一真下反对有A的不是B三段论A→BB→CA→B 有的B是CA→C 有的C是B—B →—A 逆否(A→B的矛盾关系A∧—B)A→B 有的A→B有的B→A—A∨BB→C充分假言:前推后(A推B),肯前肯后,否后否前如果A,那么B;只要A,就B 若A,则B所有A,是B 凡是A,是B 为了A,一定B 为了A,必须B A指的就是B 除非不A,否则B必要假言B推A只有A,才B 没有A,就没有B 不A,不B除非A,否则不B A是B的前提,保障,基础,条件/谁是条件谁在后选言命题P、Q √相容性P∨Q —P、Q √P、—Q √选言—P、—Q ×不相容性P∕Q 要么P要么Q不是P就是QP∨Q的矛盾命题—(P∨Q)→—P ∧—QP∨Q= —P →Q—Q →PP∨Q 排中律排除一个选中一个必须先排—A∨B = A→B (鲁宾逊定律)—A∨B的矛盾命题是A∧—B A→B的矛盾命题是A∧—B模态命题必然P 上反对必有一假必然非P 包容矛盾包容可能P 必有一真下反对可能非P模态命题的具体关系“并非必然P”等值于“可能非P”,即:不必然=可能不;“并非必然非P”等值于“可能P”,即:不必然不=可能;“并非可能P”等值于“必然非P”,即:不可能=必然不;“并非可能非P”等值于“必然P”,即:不可能不=必然;模态命题与非模态命题的推出关系必然P→P →可能P ;必然非P →非P→可能非P。

命题逻辑基本推理公式

命题逻辑基本推理公式

命题逻辑基本推理公式(1) P∧Q⇒P .(2)¬( P→Q)⇒P .(3)¬(P→Q)⇒¬Q.(4) P⇒P ∨Q.(5)¬P⇒P →Q.(6) Q⇒P →Q.(7) ¬P∧(P∨Q) ⇒Q.选言推理否定式(8) P∧(P→Q) ⇒Q. 假言推理肯定前件式(9) ¬Q∧(P→Q) ⇒¬P .假言推理否定后件式(10) (P→Q)∧(Q→R) ⇒P→R. 三段论(11) (P↔ Q)∧(Q↔R) ⇒P↔R. 双条件三段论(12) (P→R)∧(Q→R)∧( P ∨Q) ⇒R. 二难推理(13) (P→Q)∧(R→S) ∧(P ∨R)⇒Q∨S. 二难推理(14) (P→Q)∧(R→S) ∧¬(Q∨¬S)⇒¬P ∨¬R. 破坏二难推理(15) (Q→R) ⇒(( P∨Q)→(P ∨R)) .(16) (Q→R) ⇒(( P→Q)→(P→R)) .使用真值表法证明这些推理公式是容易的。

若从语义上给予直观说明也是不难的. 如公式(2), ¬(P →Q) ⇒P . 公式( 3), ¬(P →Q)⇒Q. 意思是说, 若P →Q 不成立( 取假), 必有 P 为真, 还有 Q 为假. 这从P →Q 的定义可知, 因只有当 P = T 而 Q = F 时, P →Q = F. 又如公式( 7), ¬P ∧(P ∨Q)⇒Q. 意思是说, P 不对, 而P ∨Q 又对, 必然有 Q 对.公式( 8) , P ∧(P →Q) ⇒Q 常称作假言推理, 或称作分离规则, 是最常使用的推理公式。

公式(10) , (P →Q) ∧(Q→R)⇒P →R 常称作三段论。

日常语言运用:(1) 此人既呆又笨为真,则此人笨为真。

(2)(3)并非“犯错蕴涵失败“,即是说,”如果犯错,那么失败“为假命题,则必有犯错且不失败的例子。

07 命题逻辑等值式

07 命题逻辑等值式

离散数学基础2017-11-17•定义:命题逻辑等值式−给定两个命题公式 A、B,设 p1, p2,…… p n 为所有出现于 A、B 中的命题变量。

若对 p1, p2,…… p n 中的任何一组逻辑解释,A 和 B 的真值都相同,则称 A、B 是等值的或逻辑相等的。

记为 A ⇔ B。

−p1, p2,…… p n 的所有逻辑解释总数为 2n 个。

•定义:命题逻辑等值式−若两个命题公式 A、B 在任意的真值赋值函数 t : Var→{0,1} 下取得相同的真值,则称 A、B 是等值的(或逻辑相等的)。

记为 A ⇔ B。

上述定义是前一个定义的等价定义, 利用了之前定义复合语句的真值时引用的真值赋值函数 t。

我们马上意识到,使用真值表可以判断两个逻辑公式的等值性。

•定义:命题逻辑等值式−例:证明 ¬p∨q ⇔ p→qp q¬p¬p∨q p→q00111011111000011011在每个解释下, ¬p∨q 和 p→q 取相同的真值, 所以是一对等值式•等值的基本性质−对公式 A、B、C,按照等值的定义显然有:»A ⇔ A;(自反性)»若 A ⇔ B 则 B ⇔ A;(对称性)»若 A ⇔ B 且 B ⇔ C 则 A ⇔ C。

(传递性)−具有自反性、对称性和传递性的关系称为等价关系。

所以命题逻辑公式的等值性通常也称为等价性。

•定理:等值定理−设命题公式 A、B,则 A ⇔ B iff A↔B 是重言式。

−证:⇒ 若 A ⇔ B,则 A 与 B 在任意解释下都有相同的真值。

由“↔”的定义,A↔B 只能取值1,即 A↔B 是重言式。

⇐ 若 A↔B 只取值1,由“↔”的真值表, A 与 B 在任意解释下都有相同的真值。

由“⇔”的定义,有 A ⇔ B。

−定理给出验证两个命题公式相等的一种基本方法。

•命题逻辑的等值演算−当命题公式所含的命题变量个数较多时,使用真值表方法判断公式的等价性有困难。

逻辑最基本的公式

逻辑最基本的公式

逻辑最基本的公式
蕴含是逻辑中最基本的重要概念之一,可以用符号“→”表示。

蕴含的定义是:“如果命题P成立,则命题Q也成立”。

这可以用以下公式表示:
P→Q
其中,P被称为前提,Q被称为结论。

这个公式意味着如果前提P成立,那么结论Q也必定成立。

蕴含有几个重要的特性:
1.反身性:一个命题蕴含它本身。

即,P→P是恒成立的。

2.假言推理:如果有一个蕴含P→Q成立,又知道P成立,那么我们可以推断Q也成立。

这被称为假言推理,也是常见的逻辑推理形式。

3.合成性:如果有两个蕴含P→Q和Q→R成立,那么我们可以推断出P→R也成立。

这被称为合成性,表示多个蕴含的传递性。

此外,逻辑中还有一个重要的公式是“等价”。

等价表示两个命题之间具有相同的真值,可以用符号“↔”表示。

等价的定义是:“如果命题P成立,则命题Q也成立;反之亦然”。

这可以用以下公式表示:P↔Q
等价命题具有以下几个特性:
1.反身性:一个命题等价于它自身。

即,P↔P是恒成立的。

2.传递性:如果有两个等价P↔Q和Q↔R成立,那么我们可以推断出P↔R也成立。

3.双向假设推理:如果有一个等价P↔Q成立,我们可以根据其中一个命题的真值推断另一个命题的真值。

以上是逻辑中最基本的公式,蕴含和等价。

它们是逻辑推理的基础,适用于许多领域,如数学、哲学、计算机科学等。

透彻理解和应用这些公式,有助于我们进行严密的逻辑思考和推理。

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

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

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
回顾一下:五个联结词真值表
否定
等价(双条件)
合取
析取
蕴涵(条件)
几个相关概念

逻辑判断推理中常用的逻辑公式

逻辑判断推理中常用的逻辑公式

逻辑命题与推理必然性推理(演绎推理):对当关系推理、三段论、复合命题推理、关系推理和模态推理可能性推理:归纳推理(枚举归纳、科学归纳)、类比推理命题直言命题的种类:(AEIOae)⑴全称肯定命题:所有S是P(SAP)⑵全称否定命题:所有S不是P(SEP)⑶特称肯定命题:有的S是P(SIP)⑷特称否定命题:有的S不是P(SOP)⑸单称肯定命题:某个S是P(SaP)⑹单称否定命题:某个S不是P(SeP)直言命题间的真假对当关系:矛盾关系、(上)反对关系、(下)反对关系、从属关系矛盾关系:具有矛盾关系的两个命题之间不能同真同假。

主要有三组:SAP与SOP之间。

“所有同学考试都几个了”与“有些同学考试不及格”SEP与SIP之间。

“所有同学考试不及格”与“有些同学考试及格”SaP与SeP之间。

“张三考试及格”与“张三考试不及格”上反对关系:具有上反对关系的两个命题不能同真(必有一假),但是可以同假。

即要么一个是假的,要么都是假的。

存在于SAP与SEP、SAP与SeP、SEP与SaP之间。

下反对关系:具有下反对关系的两个命题不能同假(必有一真),但是可以同真。

即要么一个是真的,要么两个都是真的。

存在于SIP与SOP、SeP与SIP、SaP与SOP之间。

从属关系(可推出关系):存在于SAP与SIP、SEP与SOP、SAP与SaP、SEP与SeP、SaP与SIP、SeP与SOP六种直言命题之间存在的对当关系可以用一个六角图形来表示,“逻辑方阵图”SAP SEPSaP SePSIP SOP直言命题的真假包含关系全同关系、真包含于关系、真包含关系、交叉关系、全异关系复合命题:负命题、联言命题、选言命题、假言命题负命题的一般公式:并非P联言命题公式:p并且q “并且、…和…、既…又…、不但…而且、虽然…但是…”选言命题:相容的选言命题、不相容的选言命题相容的选言命题公式:p或者q“或、或者…或者…、也许…也许…、可能…可能…”【一个相容的选言命题是真的,只有一个选言支是真的即可。

逻辑判断推理中常用的逻辑公式

逻辑判断推理中常用的逻辑公式

逻辑命题与推理必然性推理(演绎推理):对当关系推理、三段论、复合命题推理、关系推理与模态推理可能性推理:归纳推理(枚举归纳、科学归纳)、类比推理命题直言命题得种类:(AEIOae)⑴全称肯定命题:所有S就是P(SAP)⑵全称否定命题:所有S不就是P(SEP)⑶特称肯定命题:有得S就是P(SIP)⑷特称否定命题:有得S不就是P(SOP)⑸单称肯定命题:某个S就是P(SaP)⑹单称否定命题:某个S不就是P(SeP)直言命题间得真假对当关系:矛盾关系、(上)反对关系、(下)反对关系、从属关系矛盾关系:具有矛盾关系得两个命题之间不能同真同假。

主要有三组:SAP与SOP之间。

“所有同学考试都及格了"与“有些同学考试不及格”SEP与SIP之间、“所有同学考试不及格”与“有些同学考试及格"SaP与SeP之间。

“张三考试及格”与“张三考试不及格”上反对关系:具有上反对关系得两个命题不能同真(必有一假),但就是可以同假、即要么一个就是假得,要么都就是假得、存在于SAP与SEP、SAP与SeP、SEP与SaP之间。

下反对关系:具有下反对关系得两个命题不能同假(必有一真),但就是可以同真。

即要么一个就是真得,要么两个都就是真得。

存在于SIP与SOP、SeP与SIP、SaP与SOP之间。

从属关系(可推出关系):存在于SAP与SIP、SEP与SOP、SAP与SaP、SEP与SeP、SaP与SIP、SeP与SOP 六种直言命题之间存在得对当关系可以用一个六角图形来表示,“逻辑方阵图”SAPSEPSaP SePSIP SOP直言命题得真假包含关系全同关系、真包含于关系、真包含关系、交叉关系、全异关系复合命题:负命题、联言命题、选言命题、假言命题负命题得一般公式:并非P联言命题公式:p并且q“并且、…与…、既…又…、不但…而且、虽然…但就是…”选言命题:相容得选言命题、不相容得选言命题相容得选言命题公式:p或者q“或、或者…或者…、也许…也许…、可能…可能…”【一个相容得选言命题就是真得,只有一个选言支就是真得即可。

常用的命题等价公式

常用的命题等价公式
0 0 1 0 1 1 1 0 0 1 1 0 1 0 1 1 0 1 0 0 1 0 0 1 1 1 1
0
成立
练习 :用真值表判断下列等价公式是否成立 1 (1)p (q r ) ( p q ) r 成立
p 0 0 0 0 1 1 1 1 q 0 0 1 1 0 0 1 1 r 0 1 0 1 0 1 0 1 q→r 1 p∧q 0 p→(q → r) ( p∧q )→ r 1 1 1 1 1 1 1 1 0 1 1 1 1 1
证明 1):( p q) r (p q ) r ( (p q ) r ( p q ) r ( q p ) r
(2) p q r p r q r
(2) p q r p r q r
(2)( p q) p q r 解 : ( p q) p q r (p q) p q r (p p) (q p) q r 0 (q p) q r (q p) q r (q p) q r (q p) q r q p q r 1 r 0 r 0 该公式是永假式
练习4:利用基本等价公式判断下列公式的类型
(1) ( p q ) q p (2)( p q) p q r 解(1): p q) q p (
( p q ) q p (p q ) (q q ) p ( p q ) 0 p ( p q ) p (p q ) p ( p q ) p p q p 1 该公式是永真式
由于日本和中国不能并列第一,日本不能既第一又第三, 韩国和日本不能并列第三,即第一、第三和第四为0,所以 (R1 Q 3 P 1 R3) 1 ⑷

逻辑判断推理中常用的逻辑公式

逻辑判断推理中常用的逻辑公式

逻辑命题与推理必然性推理(演绎推理):对当关系推理、三段论、复合命题推理、关系推理和模态推理可能性推理:归纳推理(枚举归纳、科学归纳)、类比推理命题直言命题的种类:(AEIOae)⑴全称肯定命题:所有S是P(SAP)⑵全称否定命题:所有S不是P(SEP)⑶特称肯定命题:有的S是P(SIP)⑷特称否定命题:有的S不是P(SOP)⑸单称肯定命题:某个S是P(SaP)⑹单称否定命题:某个S不是P(SeP)直言命题间的真假对当关系:矛盾关系、(上)反对关系、(下)反对关系、从属关系矛盾关系:具有矛盾关系的两个命题之间不能同真同假。

主要有三组:SAP与SOP之间。

“所有同学考试都及格了”与“有些同学考试不及格”SEP与SIP之间。

“所有同学考试不及格”与“有些同学考试及格”SaP与SeP之间。

“张三考试及格”与“张三考试不及格”上反对关系:具有上反对关系的两个命题不能同真(必有一假),但是可以同假。

即要么一个是假的,要么都是假的。

存在于SAP与SEP、SAP与SeP、SEP与SaP之间。

下反对关系:具有下反对关系的两个命题不能同假(必有一真),但是可以同真。

即要么一个是真的,要么两个都是真的。

存在于SIP与SOP、SeP与SIP、SaP与SOP之间。

从属关系(可推出关系):存在于SAP与SIP、SEP与SOP、SAP与SaP、SEP与SeP、SaP与SIP、SeP与SOP 六种直言命题之间存在的对当关系可以用一个六角图形来表示,“逻辑方阵图”SAP SEPSaP SePSIP SOP直言命题的真假包含关系全同关系、真包含于关系、真包含关系、交叉关系、全异关系复合命题:负命题、联言命题、选言命题、假言命题负命题的一般公式:并非P联言命题公式:p并且q “并且、…和…、既…又…、不但…而且、虽然…但是…”选言命题:相容的选言命题、不相容的选言命题相容的选言命题公式:p或者q“或、或者…或者…、也许…也许…、可能…可能…”【一个相容的选言命题是真的,只有一个选言支是真的即可。

逻辑代数的公式与基本定理

逻辑代数的公式与基本定理

逻辑代数的公式与基本定理逻辑代数是一门研究命题和命题逻辑关系的数学分支。

它通过符号表示和操作来研究命题的逻辑结构。

在逻辑代数中,有一些重要的公式和基本定理,它们对于理解和应用逻辑代数具有重要的意义。

一、公式1. 吸收律(Absorption Law):a∨(a∧b)=aa∧(a∨b)=a这个定律表明,当两个命题中一个包含另一个时,可以通过去除其中一个命题来简化表达式。

2. 结合律(Associative Law):(a∨b)∨c=a∨(b∨c)(a∧b)∧c=a∧(b∧c)这个定律表明,当有多个命题连接在一起时,可以改变它们的组合方式而不改变逻辑等价关系。

3. 分配律(Distributive Law):a∨(b∧c)=(a∨b)∧(a∨c)a∧(b∨c)=(a∧b)∨(a∧c)这个定律表明,当一个命题与两个命题的逻辑运算混合时,可以通过改变运算的顺序来简化表达式。

4. 归纳法则(Inductive Law):a∨¬a=1a∧¬a=0这个定律表明,任何命题与其否定的逻辑运算结果为真或假。

二、基本定理1. 双重否定定理(Double Negation Theorem):¬(¬a)=a这个定理表明,一个命题的否定再次否定后与原命题等价。

2. 德·摩根定理(De Morgan's Theorem):¬(a∨b)=¬a∧¬b¬(a∧b)=¬a∨¬b这个定理表明,一个命题的合取或析取的否定可以分别表示为各个命题的否定的合取或析取。

3.等幂律(Law of Identity):a∧1=aa∨0=a这个定理表明,一个命题与恒等元素进行合取或析取运算后仍等于原命题。

4. 否定消除律(Law of Noncontradiction):a∨¬a=1a∧¬a=0这个定理表明,一个命题与其否定进行合取或析取运算后结果为真或假。

命题公式分配律变形

命题公式分配律变形

命题公式分配律变形哎呀,说到命题公式分配律变形,这可真是个有趣又有点烧脑的话题呢。

咱们先来说说啥是命题公式分配律。

简单来讲,就像你分糖果一样,把一堆糖果按照不同的方式分组,最后得到的总数是不变的。

在命题逻辑里,这分配律就是把逻辑运算符按照一定的规则进行组合和变形。

比如说,“(A∧(B∨C)) 等价于 ((A∧B)∨(A∧C))”,这就是其中一种分配律的形式。

咱们来仔细瞅瞅这个式子,想象一下 A 是你喜欢的苹果,B 是甜甜的香蕉,C 是酸酸的橙子。

那么“A∧(B∨C)”就好像是说,你既要有苹果,还要在香蕉和橙子里面挑一个或者都要。

而“((A∧B)∨(A∧C))”呢,则是说要么你同时有苹果和香蕉,要么你同时有苹果和橙子。

你看,不管怎么分,其实本质上都是在说你能得到的水果组合。

我还记得有一次给学生们讲这个知识点的时候,有个小家伙怎么都理解不了。

我就跟他说:“你想想啊,周末妈妈说带你出去玩,要么去公园和吃冰淇淋,要么去游乐场和吃冰淇淋。

这和妈妈说带你去公园玩并且能吃冰淇淋,或者去游乐场玩并且能吃冰淇淋,是不是一个意思呀?”这小家伙眨巴眨巴眼睛,突然就开窍了,那高兴的样子,让我也觉得特有成就感。

再来说说分配律变形的应用。

在解决逻辑推理问题的时候,它可真是个大帮手。

比如说判断一个复杂的命题是否为真,通过巧妙地运用分配律变形,就能把复杂的式子变得简单清晰,就像把一团乱麻理得整整齐齐。

而且啊,这分配律变形在计算机编程里也有大用处。

当我们写程序判断一些条件的时候,用好了分配律变形,能让代码更简洁高效,运行起来更快更准确。

咱们学习命题公式分配律变形,可不能死记硬背那些公式,得真正理解它背后的道理。

就像学骑自行车,你光记住怎么蹬腿可不行,得掌握平衡的技巧,才能真正骑得又稳又快。

总之,命题公式分配律变形虽然有点小复杂,但只要咱们用心去琢磨,多做几道题练练手,就一定能把它拿下!相信大家在今后的学习和生活中,都能灵活运用这个知识,让自己的思维更加敏捷,解决问题更加得心应手!。

逻辑命题公式计算

逻辑命题公式计算

逻辑命题公式计算本页仅作为文档页封面,使用时可以删除This document is for reference only-rar21year.March题号:第一题题目:电梯模拟1,需求分析:计算命题演算公式的真值所谓命题演算公式是指由逻辑变量(其值为TRUE或FALSE)和逻辑运算符∧(AND)、∨(OR)和┐(NOT)按一定规则所组成的公式(蕴含之类的运算可以用∧、∨和┐来表示)。

公式运算的先后顺序为┐、∧、∨,而括号()可以改变优先次序。

已知一个命题演算公式及各变量的值,要求设计一个程序来计算公式的真值。

要求:(1)利用二叉树来计算公式的真值。

首先利用堆栈将中缀形式的公式变为后缀形式;然后根据后缀形式,从叶结点开始构造相应的二叉树;最后按后序遍历该树,求各子树之值,即每到达一个结点,其子树之值已经计算出来,当到达根结点时,求得的值就是公式之真值。

(2)逻辑变元的标识符不限于单字母,而可以是任意长的字母数字串。

(3)根据用户的要求显示表达式的真值表。

2,设计:2.1 设计思想:<1>,数据结构设计:(1) 线性堆栈1的数据结构定义typedef struct{DataType stack [MaxStackSize];int top; /* 当前栈的表长*/} SeqStack;用线性堆栈主要是用来存储输入的字符,它的作用就是将中缀表达式变成后缀表达式。

(2) 线性堆栈2的数据结构定义typedef struct{BiTreeNode *stack [MaxStackSize];int top; /* 当前栈的表长*/} TreeStack;这个堆栈和上面的堆栈的唯一不同就是它们存储的数据的类型不同,此堆栈存储的是树节点,它的作用是将后缀表达式构成一棵二叉树。

(3)树节点数据结构定义typedef struct Node{DataType data;struct Node *leftChild;struct Node *rightChild;}BiTreeNode;<2>算法设计详细思路如下:首先实现将中缀表达式变成后缀表达式:在将中缀表达式变成后缀表达式的时候会用到堆栈,因此首先需要初始化一个堆栈。

命题逻辑公式的化简

命题逻辑公式的化简

命题公式的化简
有时可用AA1引入变元 (pq)(qr)(prs) (pq)(qr)((prs)(qq)) (pq)(qr)(pqrs) (pqrs) (pq)(qr)

命题公式的化简

3. 主析取范式法
用AAA (AB)(AB) 1等 s (pq)(pq)(pq) ((pq)(pq))((pq)(pq)) qp 可用卡诺图化简
卡诺图
卡诺图



① 如果相邻的两个小方格同时为“1”,可以合 并一个两格组(用圈圈起来),合并后可以消 去一个取值互补的变量,留下的是取值不变的 变量。 ② 如果相邻的四个小方格同时为“1”,可以 合并一个四格组,合并后可以消去二个取值互 补的变量,留下的是取值不变的变量。 ③ 如果相邻的八个小方格同时为“1”,可以合 并一个八格组,合并后可以消去三个取值互补 的变量,留下的是取值不变的变量。
命题逻辑公式的化简逻辑函数化简公式公式法化简逻辑函数用公式法化简逻辑函数逻辑化简公式逻辑表达式化简公式命题逻辑公式逻辑否命题转化命题公式根号化简公式
命题逻辑公式的化简
命题公式的化简
1. 并项法 利用公式AA1或(AB)(AB) A将两项合并,并消去一个变元。 例如: (pqr)(pqr) (pq)(rr) (pq) (pqr)(p(qr)) p

命题公式的化简
利用公式A(AB) AB (pq)(pr)(qr) (pq)((pq)r) (pq)((pq)r) (pq)r

命题公式的化简
2. 吸收法 利用公式A(AB)A,消去多余的变元。 例如: (pq)(pqrs(tu)) pq p(qpr) p
卡诺图

画圈的原则是: ①圈的个数要尽可能的少(因一个圈 代表一个乘积项) ②圈要尽可能的大(因圈越大可消去 的变量越多,相应的乘积项就越简)。 ③每画一个圈至少包括一个新的“1” 格,否则是多余的,所有的“1”都要 被圈到。

逻辑代数基本公式

逻辑代数基本公式

逻辑代数基本公式逻辑代数是一种用于逻辑项的数学工具。

在逻辑代数中,有许多基本公式,这些公式是我们进行逻辑运算必须掌握并灵活运用的工具。

首先,我们要介绍逻辑代数的基本运算符:与(∧)、或(∨)、非(¬)。

其中,“与”表示两个命题都成立的情况,“或”表示两个命题中至少有一个成立的情况,“非”则是指命题的否定。

接下来,我们要介绍逻辑代数的基本公式:1.德摩根定律德摩根定律是逻辑代数中最经典的公式之一。

它的形式如下:(¬A)∨(¬B)=¬(A∧B)(¬A)∧(¬B)=¬(A∨B)这个定律的意义在于,将“非”运算符从一个命题移到另一个上时,必须同时改变并置换“与”和“或”运算符。

例如:“既不是A也不是B”等价于“不是(A和B)”。

2.分配律分配律的形式如下:A∧(B∨C)=(A∧B)∨(A∧C)A∨(B∧C)=(A∨B)∧(A∨C)分配律在进行逻辑运算时非常实用。

例如,可以将一个复杂的命题转化为一个简单的命题,从而更容易理解。

3.结合律结合律的形式如下:(A∧B)∧C=A∧(B∧C)(A∨B)∨C=A∨(B∨C)结合律指的是,多个有相同运算符的命题可以成员结合在一起。

例如,(A∧B)∧C 等价于A∧(B∧C)。

4.交换律交换律的形式如下:A∧B=B∧AA∨B=B∨A交换律指的是命题中多个项之间可以交换位置,而不影响命题的结论。

例如,A∧B 等价于B∧A。

5.对偶原理对偶原理是基于真值表同构的,它用于将一个表达式的真值表中0 和 1 互换,统称为互为对偶。

其公式如下:¬(A∧B) = ¬A ∨ ¬B¬(A∨B) = ¬A ∧ ¬B其中,左侧是原式,右侧是公式的对偶形式。

逻辑代数中的这些基本公式,可以帮助我们更加容易地进行逻辑运算,简化逻辑命题,并且在实践中具有广泛的应用。

我们应该认真学习这些公式,并对其进行灵活的运用。

可满足命题

可满足命题

可满足命题
可满足命题是数理逻辑中的一个概念,它指的是在给定的命题逻辑公式中,存在一种赋值方式,使得该公式为真。

换句话说,这个公式在某些情况下是可以被满足的。

在命题逻辑中,一个命题可以是原子命题,也可以是由原子命题组合而成的复合命题。

而一个命题逻辑公式则是由命题和逻辑运算符(如非、与、或等)组合而成。

判断一个命题逻辑公式是否可满足,可以使用真值表或推理等方法。

举个例子,假设有一个命题逻辑公式P = (A∨B)∧(A∨C),其中A、B和C分别为原子命题。

我们可以通过列出真值表来判断命题逻辑公式P是否可满足。

首先,我们需要列出所有原子命题的可能取值组合,然后根据逻辑运算规则计算整个公式的真值。

例如,当A为真、B为假、C为真时,命题逻辑公式P的值为真。

因此,这个命题逻辑公式是可满足的。

在实际应用中,可满足命题有着广泛的应用。

例如,在计算机科学中,可满足性问题是一个重要的研究领域。

它涉及到寻找一个命题逻辑公式的可满足赋值,或者确定一个命题逻辑公式是否无解。

这个问题在硬件设计、软件验证、人工智能等领域都有着重要的应用。

此外,可满足命题还与谓词逻辑和模型理论有关。

谓词逻辑是一种推理的形式,它可以用于描述对象之间的关系和属性。

模型理论是研究形式化逻辑中模型的属性和性质的一门学科。

在这些领域中,可满足命题的概念也起到了重要的作用。

总之,可满足命题是数理逻辑中一个基本的概念,它涉及到判断一个命题逻辑公式是否存在一种赋值方式使其为真。

在实际应用中,可满足命题有着广泛的应用,对于推理、计算机科学和模型理论等领域具有重要意义。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题号:第一题题目:电梯模拟1,需求分析:计算命题演算公式的真值所谓命题演算公式是指由逻辑变量(其值为TRUE或FALSE)和逻辑运算符∧(AND)、∨(OR)和┐(NOT)按一定规则所组成的公式(蕴含之类的运算可以用∧、∨和┐来表示)。

公式运算的先后顺序为┐、∧、∨,而括号()可以改变优先次序。

已知一个命题演算公式及各变量的值,要求设计一个程序来计算公式的真值。

要求:(1)利用二叉树来计算公式的真值。

首先利用堆栈将中缀形式的公式变为后缀形式;然后根据后缀形式,从叶结点开始构造相应的二叉树;最后按后序遍历该树,求各子树之值,即每到达一个结点,其子树之值已经计算出来,当到达根结点时,求得的值就是公式之真值。

(2)逻辑变元的标识符不限于单字母,而可以是任意长的字母数字串。

(3)根据用户的要求显示表达式的真值表。

2,设计:2.1 设计思想:<1>,数据结构设计:(1) 线性堆栈1的数据结构定义typedef struct{DataType stack [MaxStackSize];int top; /* 当前栈的表长*/} SeqStack;用线性堆栈主要是用来存储输入的字符,它的作用就是将中缀表达式变成后缀表达式。

(2) 线性堆栈2的数据结构定义typedef struct{BiTreeNode *stack [MaxStackSize];int top; /* 当前栈的表长*/} TreeStack;这个堆栈和上面的堆栈的唯一不同就是它们存储的数据的类型不同,此堆栈存储的是树节点,它的作用是将后缀表达式构成一棵二叉树。

(3)树节点数据结构定义typedef struct Node{DataType data;struct Node *leftChild;struct Node *rightChild;}BiTreeNode;<2>算法设计详细思路如下:首先实现将中缀表达式变成后缀表达式:在将中缀表达式变成后缀表达式的时候会用到堆栈,因此首先需要初始化一个堆栈。

又由于逻辑变元可能是字符也可能是字符串,所以它又不同于将单字符的逻辑变元的中缀表达式变成后缀表达式。

我的设计是这样的,我将中缀表达式变成后缀表达式的过程分成了两部:化简(将一维的复杂的中缀表达式变成一维的简单的中缀表达式,并将字符串逻辑变元存放在二维数组中),转化(将化简后的中缀表达式变成后缀表达式)。

(1)化简:先用一个字符数组存放输入的中缀表达式(表达式以‘#’号结束),然后将一维的中缀表达式中的字符串逻辑变元用一个字符进行标识,这样我们就可以将原来复杂的中缀表达式变成熟悉而又简单的中缀表达式,同时用二维数组存放那些字符串逻辑变元。

实现的过程就是首先扫描一维中缀表达式,如果遇到逻辑符号,那么记住这个逻辑符号在数组中的相对位置用一个变量存放,然后继续扫描中缀表达式直到再次遇到逻辑符号,再一次记住它在中缀表达式中的相对位置,这两个逻辑符号之间的部分就是一个完整的逻辑变元,将这个字符串逻辑变元用一个字符代替并将这个字符串逻辑变元保存在二维数组中。

这个过程的实现我把它放在change()函数中。

(2)转化:在实现该功能时,首先需要定义各符号的优先级,即:'(' 和')' 的优先级最高;'!'(逻辑非号)的优先级次之;'&'(逻辑与号)的优先级又低一级,'|'(逻辑或号)的优先级跟低;'#' (他不是逻辑符号,只是为了方便使用堆栈而设置)的优先级最低,接着将'#'压入堆栈。

在这之后就是正式的转化了,其过程为:当读到的是逻辑变元时直接输出,并保存到保存后缀表达式的数组中,当读到的单词为运算符时,令x1为当前栈顶运算符的变量,x2为当前扫描到的简单中缀表达式的运算符的变量,把当前读入的单词赋予变量x2,然后比较x1和x2的优先级。

若x1的优先级高于x2的优先级,将x1退栈作为后缀表达式的一个单词输出,然后接着比较新的栈顶运算符x1的优先级与x2的优先级;若x1的优先级低于x2的优先级,将x2的值进栈,然后接着读下一个单词;若x1的优先级等于x2的优先级且x1为“(”,x2为“)”,将x1退栈,然后接着读下一个单词;若x1的优先级等于x2的优先级且x1为“#”,x2为“#”,算法结束。

这个过程我把它放在InToPost()函数中。

然后用后缀表达式构造出二叉树:在这个过程中,我用到了之前所定义的存放树的堆栈。

具体实现为:扫描后缀表达式,如果遇到逻辑变元然后将这个变元变成一个树节点,它的实现就是将该逻辑变元赋给树的data域,然后将它的左右子树赋为NULL,然后将这个树节点压入相应的堆栈;接着继续扫描,如果遇到的是单目运算符(非号“!”)也将它构造成一个树节点然后从堆栈里面弹出一个树形节点,将弹出的元素的作为它的左子树,右子树设置为NULL,然后将这个树节点压入相应的堆栈;如果扫描到的是双目运算符(与号“&”或者或号“|”)将它也构造成一棵树,然后将这个树节点压入相应的堆栈,然后从栈中弹出两个元素,一个作为它的左子树,一个作为它的右子树,如此重复n(n为后缀表达式的长度)次。

这个过程我把它放在Maketree()函数中。

最后打印真值表:打印真值表也用到了前面的简单的后缀表达式,其实现的基本思想为和构造二叉树差不多,它实现了每到一个根节点就计算一个运算的值。

在打印之前需要统计字符的个数,有m个字符则要打印2^m行,因为他有这么多情况。

具体实现为:用一个字符型的数组来存放每个元素的一次取值,然后扫描后缀表达式,如果遇到逻辑变元就通过这个标识将相应的取值赋给它,然后它压入堆栈;接着继续扫描,如果遇到的是单目运算符(非号“!”)则从堆栈里面弹出一个元素,并对它进行非运算,然后又将这个运算后的值压入堆栈;如果扫描到的是双目运算符(与号“&”或者或号“|”)则从栈中弹出两个元素,并对这两个元素进行相应的运算,然后将这个运算后的值压入堆栈,如此重复n(n为后缀表达式的长度)次。

这个过程我把它放在Print()函数中。

其中第一,二过程的流程图描述分别为:<1>, 函数调用关系及函数说明:change()函数原型为:void change(char prefixStr1[],char prefixStr[],int length[],char store[][10],int* row,int* k )该函数含有有六个参数,其中prefixStr1[]为用户输入的中缀表达式,prefixStr[]为即将转化成为的简单中缀表达式,length[]为二维数组中存放的各个字符串的的长度store[][10]用来存放中缀表达式中的逻辑变元,row就是逻辑变元的个数,k简化后的中缀表达式的长度。

该函数的功能就是将复杂的中缀表达式变成简单的中缀表达式。

InToPost()函数原型为:void InToPost(char prefixStr[],char postfixStr[],SeqStack* myStack,int* n,int k)该函数函数有五个参数prefixStr[]为中缀表达式,postfixStr[]为简化后的后缀表达式,myStack为在转化过程中用到的堆栈,n为后缀表达式的字符长度,k为中缀表达式的字符长度。

该函数的功能就是将简单的中缀表达式变成简单的后缀表达式。

Maketree()函数原型为:void Maketree(BiTreeNode *root,TreeStack* myTree,char postfixStr[],int n)该函数共有四个参数,其中root为所建立的树的根节点,myTree是在构造树时所用到的堆栈,另外两个参数和前面的同名参数具有相同意义。

这个函数的功能就是将简单的中缀表达式变成简单的后缀表达式。

Precede()函数原型为:DataType Precede(DataType x1,DataType x2)该函数有两个参数,返回值类型为DataType型,其中x1和x2就是要进行优先级比较的两个两个字符。

x1为栈顶元素,x2为扫描到的元素。

该函数的功能就是比较x1和x2的优先级并将比较结果返回给调用函数。

Print()函数原型为:void Print(char postfixStr[],char store[][10],int length[],int row,int n,SeqStack* myStack) 该函数有六个参数,其中myStack是在输出真值表过程中要用到的堆栈,其余的参数和前面介绍的函数中的同名参数具有相同的意义。

该函数的功能就是打印真值表。

<2> 函数接口说明:函数的调用关系在上面的图中已经显示出来了,整个程序就是由一些子函数的集合,他们之间按所要实现的功能不同而调用不同的函数。

在这些函数中除主函数外,其它函数的级别相同。

2.3详细设计:(1),定义所需要的结构体,前面已经介绍了;(2),我将中缀表达式变成后缀表达式的过程分成了两部:化简(将一维的复杂的中缀表达式变成一维的简单的中缀表达式,并将字符串逻辑变元存放在二维数组中),转化(将化简后的中缀表达式变成后缀表达式)。

其中化简部分将要用伪代码描述为while(prefixStr1[m]!='#'){扫描中缀表达式while(prefixStr1[m]不为运算'符){继续扫描,直到扫描到运算符;}扫描到运算符后{构造简化的中缀表达式;得到这个字符串的长度;将这个字符串存放在store[][10]中;}}转化部分用伪代码描述为:循环扫描中缀表达式{if(扫描到逻辑变元)保存到后缀表达式中;else{StackTop(myStack,&x);res=Precede(x,扫描到的运算符);if(res=='>') x退栈;if(res=='<') 扫描到的运算符进栈;if(res=='=' && x=='(') 退栈if(res=='=' && x=='#') 结束;}}(3),构造二叉树,其思想就是将逻辑变元作为叶子节点,运算符作为根节点,用堆栈实现,用伪代码简单描述为:循环扫描后缀表达式{if(扫描到逻辑变元')讲逻辑变元进栈;else{if('扫描到双目运算符){StackPop1(myTree,&x1);StackPop1(myTree,&x2);将x1,x2作为它的左右子树;StackPush1(myTree,p);}else{StackPop1(myTree,&x1);将x1作为它的左子树,又子树为空;StackPush1(myTree,p);}}StackPop1(myTree,&x1);root->leftChild=x1;}(4),打印二叉树,其基本思想就是每到一个根节点就计算一个值,如此重复,直到总根节点,用伪代码简单描述为:循环赋值{if(扫描到逻辑变元'){赋值进栈;}else{if(扫描到双目运算符){从栈中弹出两数对两数进行相应的运算;将运算结构进栈;;}else{从栈中弹出两数;对两数进行非运算;将运算结构进栈;}每循环一次输出一个结构;}3,调试分析:<1>,调试过程中遇到的问题与解决方案:这个题我个人觉的是这几个中最麻烦的一个,因为它有几个难点去分析与实现:首先就是中缀表达式中的逻辑变元不是单个字符而是一些字符串,这样在将中缀表达式转化成后缀表达式的时候就会比较麻烦,起初我也不太清楚该怎么处理他,后来经过一番分析与调试后,我觉得用二维数组存放比较好,那样实现起来就会比较简单,当然虽然这么说,其实实现起来也还是有一定的困难的,比如怎样去找到一个完整的字符串逻辑变元,找到之后又怎样存放等等。

相关文档
最新文档