1.1 命题逻辑

原文:Foundations of Computation

译者:飞龙

协议:CC BY-NC-SA 4.0

自豪地采用谷歌翻译

一个命题是一个或真或假的陈述。 在命题逻辑中,我们将命题看做基础,看看我们能做什么。 既然这是数学,我们需要能够谈论命题,而不是说我们在说什么特定的命题,所以我们用符号来代表它们。 我们始终使用小写字母,如pqr来表示命题。 以这种方式使用的字母称为命题变量。 记住,当我说“假设p是一个命题”的时候,我的意思是“对于讨论其余部分,让符号p代表一些特定的陈述,它是真的或假的(虽然我现在没有做出 关于它的任何假设)。讨论具有数学一般性,因为p可以代表任何陈述,并且无论它代表什么语句,讨论都是有效的。

我们用命题做的事情是,将它们与逻辑运算符组合起来。 逻辑运算符可以应用于一个或多个命题,来产生新的命题。 新命题的真值完全由运算符和所应用命题的真值确定 [1]。在中文中,逻辑运算符用“和”,“或”和“非”表示,例如,“我想离开并且我离开了”,这个命题由两个简单的命题通过“和”组合而成。在“我离开了”这个命题中加上“非”一词表示“我没有离开” (经过一点必要的语法调整)。

[1] 句子的真值可以根据其组成部分的真值确定,并不总是真的。 例如,如果p是一个命题,那么“莎拉·佩林认为p”也是一个命题,所以“莎拉·佩林认为”是某种运算符。 然而,它不算作逻辑运算符,因为知道p是否为真,我们根本就不知道“莎拉·佩林认为p”是否为真。

但自然语言对于数理逻辑来说有点太丰富了。 当你读“我想离开并且我离开了”这个句子时,你可能会看到一个因果关系的内涵:我离开了,因为我想离开。 这个含义并不符合“我想离开”和“我离开了”这两个命题的真值的逻辑组合。或者考虑“我想离开但我没有离开”这个命题的逻辑组合,在这里, “但”具有与“和”一词相同的逻辑含义,但内涵却非常不符。 因此,在数理逻辑中,我们使用符号来表示逻辑运算符。 这些符号不具有超出其定义的逻辑意义的任何内涵。 对应于中文词语“和”,“或”和“非”的逻辑运算符是¬

定义 1.1:假设pq都是命题,那么p∧qp∨q¬p也都是命题,它们的真值由以下规则确定:

  • pq都是真时,p∧q是真,否则是假。
  • pq至少一个是真时,p∨q是真,否则是假。
  • p时假时¬p是真,反之亦然。

运算符¬分别被称为合取,析取和否定。 (请注意,p∧q读为“pq”,p∨q读为“pq”,¬p读为“非p”)。

这些运算符可以用于更复杂的表达式,如p∧(¬q)(p∨q)∧(q∨r)。 由简单的命题和逻辑运算符组成的命题被称为复合命题。 可以在复合表达式中使用括号来表示运算符的求值顺序。 在没有括号的情况下,求值顺序由优先规则确定。 对于上面定义的逻辑运算符,规则是¬具有较高优先级,次之并优先于(就像乘法优先于加法)。 这意味着在没有括号的情况下,首先对任何¬运算符进行求值,其次是任何运算符,最后是任何运算符。

例如,表达式¬p∨q∧r等价于表达式(¬p)∨(q∧r),而p∨q∧q∨r等效于p∨(q∧q)∨r。 实际上,当你构造自己的表达式时,通常最好放在括号中,使你的意思清楚。 记住,即使你省略括号,你的表达也有明确的含义。 如果你的意思是¬(p∧q),那么你说成¬p∧q就错了!

这仍然没有说明表达式∧q∧r中哪个运算符首先求值的问题。 这通过以下规则来解决:当没有括号的情况下,出现几个相等优先级的运算符时,它们从左到右求值。 因此,表达式p∧q∧r等于(p∧q)∧r而不是p∧(q∧r)。 在这种特殊情况下,事实上,首先求解哪个运算符是不重要的,因为两个复合命题(p∧q)∧rp∧(q∧r)总是具有相同的值, 不管命题pqr有什么逻辑值。 我们说是一个结合性运算。 我们将在下一节中详细介绍运算的结合性和其他属性。

假设我们要验证,(p∧q)∧rp∧(q∧r)实际上总是具有相同的值。 为此,我们必须考虑pqr的值的所有可能的组合,并检查对于所有这些组合,两个复合表达式确实具有相同的值。 将此计算组织成一个真值表是很方便的。 真值表是一个表,其中显示了所包含的命题变量值的每个可能组合的,一个或多个复合命题的值。 图1.1是一个真值表,将p∧(q∧r)的值与pqr的所有可能值进行比较。 表中有八行,因为分配给pqr的真值正好有八种不同的组合方式 [2]。在这个表中,我们看到最后两列,表示(p∧q)∧rp∧(q∧r)相同。

[2] 一般来说,如果有n个变量,那么有2^n个不同的方法来为变量赋值真值。 如果你尝试提出一个方案,系统地列出所有可能的值集合,这可能会变得清楚。 如果没有,你将在本章后面找到严格的事实证明。

p     q     r     p∧q   q∧r   (p∧q)∧r p∧(q∧r)
false false false false false false   false
false false true  false false false   false
false true  false false false false   false
false true  true  false true  false   false
true  false false false false false   false
true  false true  false false false   false
true  true  false true  false false   false
true  true  true  true  true  true    true

图1.1:一个真值表,证明了(p∧q)∧rp∧(q∧r)的逻辑等价性。 该表的最后两列相同的事实表明,这两个表达式对于pqr的值的所有八种可能的组合具有相同的值。

更一般地说,我们说如果它们总是具有相同的值,则两个复合命题在逻辑上是等价的,无论它们包含的命题变量是什么真值。 如果命题变量的数量很少,则很容易使用真值表,来检查两个命题是否在逻辑上等价。

除了¬之外,还有其他的逻辑运算符。 我们将考虑条件运算符,双向运算符,和异或运算符 [3],这些运算符可以由真值表完全定义,它显示了pq的真值的四种可能组合的值。

[3] 请注意,本书中为逻辑运算符使用的符号不是通用的。 是相当标准的,¬通常由~代替,有时由表示。 异或甚至更不标准,但是它通常不如运算符那么重要。

p     q     p → q p ↔ q p⊕q
false false true  true  false
false true  true  false true
true  false false false true
true  true  true  true  false

当这些运算符在表达式中使用时,如果没有括号表示求值顺序,则使用以下优先规则:异或运算符具有相同的优先级。 条件运算符具有比¬更低的优先级,因此在它们之后进行求值。 最后,双向运算符具有最低的优先级,因此最后求值。 例如,表达式p→q∧r↔¬p⊕s求值为(p→(q∧r))↔((¬p)⊕s)

为了高效处理逻辑运算符,你需要更多了解它们的含义,以及它们与自然语言表达式的关系。

命题p→q称为蕴含或条件。它通常读作“p蕴含q”。在自然语言中,p→q通常表示为“若pq”。例如,如果p表示命题“比尔·盖茨是穷人”,q表示“月亮是绿色奶酪制成的”,然后p→q可以表示为“如果比尔·盖茨是穷人,那么月亮是绿色奶酪制成的”。在这个例子中,p是假的,q也是假的。检查p→q的定义,我们看到p→q是一个真实的陈述。大多数人会同意这一点。类似的例子值得一看。假设我断言“如果 Mets 是一个伟大的团队,那么我就是法国的国王”,这个说法就是m→k,其中m是“Mets 是一个伟大的团队”,k是命题“我是法国的国王”,现在我显然不是法国的国王,所以k是假的。因为k是假的,所以m→k为真的唯一方法是,m也是假的。 (检查表中的的定义!)所以,通过断言m→k,我确实认为 Mets 不是一个伟大的团队。

或者考虑这个陈述,“如果聚会在星期二,那么我会参加”。如果我主张这个陈述,我该怎么说?我认为p→q是真的,其中p代表“聚会在星期二”,q表示“我将参加聚会”。假设p是真实的,那就是聚会实际上在星期二。检查的定义,我们看到,在p为真且p→q为真的唯一情况下,q也为真。所以从“如果聚会在星期二,我将参加聚会”和“派对实际上在星期二”的事实,你可以推断,“我将参加聚会”也是正确的。但是,另一方面,假设聚会实际上在星期三。那么p是假的。当p为假并且p→q为真时,p→q的定义允许q为真或假。所以,在这种情况下,你不能对我是否参加聚会做任何推导。陈述“如果聚会在星期二,那么我会参加”不会宣布,如果聚会在星期二之外的其他日子会发生什么。

蕴含(¬q)→(¬p)被称为p→q的逆否。 一个蕴含在逻辑上等同于它的逆否。 “如果今天是星期二,那么我们在比利时”的逆否是“如果我们不在比利时,那么今天不是星期二”。这两个句子断言了完全一样的东西。

注意,p→q在逻辑上不等同于q→p。 蕴含q→p称为p→q的逆。 “如果今天是星期二,那么我们在比利时”的逆是“如果我们在比利时,那么今天是星期二”。请注意,这些陈述中的任何一个是可以的,而另一个是假的。 在自然语言中,我可以表达这样的一个事实,即“如果今天是星期二,那么我们在比利时,反之亦然”。在逻辑上,这可以使用(p→q)∧(q→p)来表示。

双向条件运算符与条件运算符密切相关。事实上,p↔q在逻辑上等同于(p→q)∧(q→p)。 命题p↔q通常读取为“p当且仅当q”(“pq”部分表示q→p,而“p仅当q”是另一种断言p→q的方式)。 也可以表示为“若pq,反之亦然”。有时候在中文中,“如果…那么”的真实含义是“当且仅当”,例如,如果一个父母告诉一个孩子 “如果你听话,圣诞老人会带给你玩具”,父母可能真的意味着说“圣诞老人会带给你玩具,当且仅当你听话”(父母可能不会回应孩子的完全合乎逻辑的辩解:“但是你从来没有说过,如果我不听话就会发生什么事情”)。

最后,我们转向异或运算符。 中文的“或”其实有些含糊不清。 两个运算符表示这个单词的两个可能的含义。 命题p∨q可以明确地表示为“pq或都有”,而p⊕q表示“pq,但不能同时存在”。如果菜单说可以选择汤或沙拉, 这意味着你不能同时拥有这两个。 在这种情况下,“或”是异或。 另一方面,“如果你吸烟或喝酒,那么你有心脏病的风险”,或是包容性的,因为如果你吸烟并且喝酒,你肯定会陷入困境。 在数学中,“或”这个词总是表达为p∨q的包容性含义。

现在,使用任何运算的任何复合命题,都可以重写为仅使用¬的逻辑等效命题。 很容易检查p→q在逻辑上等同于(¬p)∨q。 (只需检查(¬p)∨q的真值表)。同样,p↔q可以表示为((¬p) ∨q) ∧((¬q) ∨p),所以在严格的逻辑意义上,是不必要的。 (不过,它们是实用和重要的,我们不会放弃它们。)

更是如此:在严格的逻辑意义上,我们可以没有合取运算符。 很容易检查p∧q在逻辑上等同于¬p∨¬q,所以使用的任何表达式都可以重写为仅使用¬的表达式。 或者,我们可以没有,并以¬来编写一切。

某些类型的命题,将在我们进一步的逻辑使用中发挥特殊的作用。 特别是,我们定义的重言式和矛盾如下:

定义1.3。 一个复合命题是重言式,当且仅当对于它包含的命题变量的真值的所有可能组合,它都是真的。 一个复合命题是矛盾,当且仅当对于它包含的命题变量的真值的所有可能组合,它都是假的。

例如,命题((p∨q)∧-q)→p是一个重言式。 这可以用真值表检查:

p     q     p∨q   ¬q    (p∨q)∧¬q ((p∨q)∧¬q) → p
false false false true  false    true
false true  true  false false    true
true  false true  true  true     true
true  true  true  false false    true

最后一列中的所有条目都为真的事实告诉我们,这个表达式是一种重言式。 注意,对于任何复合命题PP是重言式,当且仅当¬P是矛盾时。 (这里和以后我用大写字母代表复合命题,P代表由简单命题,命题变量和逻辑运算符组成的任何公式。)逻辑等价可以根据重言式定义:

定义1.4。 当且仅当命题P↔Q是重言式时,两个复合命题PQ被认为是逻辑等价的。

在逻辑上等同于Q的断言,象征性地表示为P≡Q。例如,(p→q)≡(¬p∨q)p⊕q≡(p∨q)∧¬(p∧q)

练习

一、给出三个真值表,定义逻辑运算符¬

二、将括号插入以下复合命题中,来展示运算符求值顺序:

a) ¬p∨q b) p∧q∨¬p c) p∨q∧r d) p∧¬q∨r

三、列出四个命题变量spqr的真值的16种可能的组合。 尝试找出一个系统的方式来列出值。 (提示:就像图1.1中的真值表那样,从pqr的八个值的组合开始,现在,解释为什么五个变量可能组合的值有32个,并描述如何系统地列出它们)。

四、以下复合命题中,一些是重言式,一些是矛盾,一些都不是。 对于每个情况,使用真值表来判断命题属于哪一类:

a) (p∧(p → q)) → q b) ((p → q)∧(q → r)) → (p → r)
c) p∧(¬p) d) (p∨q) → (p∧q)
e) p∨(¬p) f) (p∧q) → (p∨q)

五、使用真值表来证明,以下每个命题在逻辑上等同于p↔q

a) (p → q)∧(q → p) b) (¬p) ↔ (¬q)
c) (p → q)∧((¬p) → (¬q)) d) ¬(p⊕q)

六、是结合运算嘛? 也就是(p→q)→r在逻辑上等同于p→(q→r)嘛? 是结合运算嘛?

七、让p代表“你离开”的命题,让q代表“我离开”的命题。使用pq将以下句子表示为复合命题,并表明它们在逻辑上等价:

a) 要么你离开,要么我离开(或者都是)。
b) 如果你不离开,我就离开。

八、假设m代表“地球移动”的命题,c代表“地球是宇宙的中心”,而g代表“伽利略被抓了”。将以下复合命题翻译成中文:

a) ¬g ∧c b) m →¬c c) m ↔¬c d) (m → g)∧(c →¬g)

九、给出以下每个中文句子的逆和逆否:

a) 如果你听话,圣诞老人会给你玩具。
b) 如果包裹重量大于一盎司,你需要付额外的邮费。
c) 如果我有选择,我就不吃茄子。

十、在普通的 52 张扑克牌组中,有多少张卡满足条件:

a) 这张卡是红桃 10。
b) 这张卡是红桃,或者 10。
c) 如果这种卡是 10,那么它是红桃。
d) 这张卡是 10,当且仅当它是红桃。

十一、定义逻辑运算符,使得p↓q在逻辑上等同于¬(p∨q)。 (这个操作符通常被称为“或非”)。 证明每个命题¬pp∧qp∨qp→qp↔qp⊕q可以重写为逻辑等价命题,使用作为其唯一运算符。

计算理论入门 1.1 命题逻辑相关推荐

  1. 【计算理论】计算复杂性 ( NP 完全问题 | 顶点覆盖问题 | 哈密顿路径问题 | 旅行商问题 | 子集和问题 )

    文章目录 一.顶点覆盖问题 二.哈密顿路径问题 三.旅行商问题 四.子集和问题 五.NP 完全问题 一.顶点覆盖问题 顶点覆盖 ( Vertex Cover ) : 给定一个 无向图 G\rm GG ...

  2. 【计算理论】图灵机 ( 图灵机引入 | 公理化 | 希尔伯特纲领 | 哥德尔不完备定理 | 原始递归函数 )

    文章目录 一.图灵机引入 二.公理化 三.希尔伯特纲领 四.哥德尔不完备定理 五.哥德尔 原始递归函数 一.图灵机引入 计算理论分为 形式语言与自动机 , 可计算部分 , 计算复杂性部分 ; 之前博客 ...

  3. 仿真必修课:计算电磁学入门(附件参考文献与笔记)

    转载自电磁CAEer ,作者:刘兵 "作为一个电磁设计师,有必要了解计算电磁学吗?" 答案是肯定的.电磁计算从业人员按照分工大致可以分为两类:一类从事CEM(计算电磁学),一类从事 ...

  4. WebRTC理论入门

    开篇导读,这篇是从 https://www.html5rocks.com/en/tutorials/webrtc/basics/ 搬运翻译过来的,属于WebRTC理论入门,感觉属于把webrtc说得比 ...

  5. 赠书啦!人类视觉计算理论经典著作,豆瓣评分9.7,中文版惊鸿面世!

    今天给大家介绍一本豆瓣评分高达9.7分.成书于40多年前的神书: Vision:A Computational Investigation into the Human Representation ...

  6. 【逻辑与计算理论】λ演算与组合子逻辑概念简介

    [逻辑与计算理论]λ演算与组合子逻辑概念简介 一.λ演算基本概念入门 1. 通过我们前面的讨论可知:有两种函数,一种是一阶谓词逻辑中存在着的特殊函数--真值函数:另一类则是我们所熟悉的数学函数.通过学 ...

  7. 超维计算理论可以让AI具有记忆和反应

    https://www.toutiao.com/a6692917368655446536/ 图片来自网络 马里兰大学的一组科学家最近提出了一个超维计算理论,可以给机器人记忆和反应.这可以打破我们似乎与 ...

  8. 视觉计算理论简介【转】

    一:视觉计算理论与算法研究( 由×××自动化研究所马颂德等完成) "视觉计算理论与算法研究"的目标主要是研究计算机视觉,以使计算机具有通过二维图像感知三维环境信息的能力,包括感知. ...

  9. 负荷计算的时候assert失败_负荷计算的入门基础知识,小白入门必备!

    负荷计算是电气设计人员必须掌握的一必修课,选导体.设备还有保护开关的选择,电网系统分析,都离不开负荷计算的内容,为此小编特意总结9个负荷计算的入门基础知识,分享给大家,希望能在工作和学习中作为一份参考 ...

最新文章

  1. java动态添加view
  2. linux下利用C或C++语言调用需要root权限的函数
  3. 使用Java WebSockets,JSR 356和JSON映射到POJO的
  4. 【Java线程池】Java线程池汇总,看这一篇文章就够了
  5. 虚拟化五、KVM虚拟化技术2
  6. kafka架构、基本术语、消息存储结构
  7. 正版卡巴斯基安全部队2011激活码1年
  8. 我国启动新型数据保护密码算法研究
  9. “做人难,人难做,难做人,做男人更难啊!
  10. NB-IoT无线通信模块与Lora无线通信协议技术分析与前景展望
  11. CAD工具栏不见了怎么显示出来/CAD面板不见了怎么显示出来
  12. 2017-2018-1 20155314 20155323 实验二 固件程序设计
  13. C4D模型工具—连接点/边
  14. 服务器 ssd虚拟内存设置,ssd虚拟内存怎么设置最好
  15. 小米手表如何优雅听歌?
  16. Linux应用-加密和安全
  17. iOS App Thinning
  18. 节假日读取接口_节假日API接口,2018年,直接计算好的
  19. JVM内存结构和垃圾回收机制
  20. 不谈高级原理,只用简单的语言来聊聊机器学习

热门文章

  1. 太空java游戏_JavaSpaceWar 一个基于 语言编写的太空战争游戏,包含所有图像和声音资源,便 习理解使用 Game Program 238万源代码下载- www.pudn.com...
  2. 28.Qt获取路径问题
  3. Python学习-将list列表写入文件并读取方法汇总
  4. java corba_Java编写CORBA的一个简单例子(CORBA入门)
  5. java 保存的代码怎么写_java实现写入并保存txt文件的示例代码
  6. 《深入理解 Spring Cloud 与微服务构建》第九章 熔断器 Hystrix
  7. 【JVM】第四章 Java内存模型
  8. struts和struts2-面试题
  9. tcp、http协议的长连接和短连接
  10. 【转】真正理解ViewState