简介:《离散数学及其应用(原书第8版)》奇数题目答案是 Rosen 教材的配套习题解答,面向高校计算机、数学相关专业学生及自学者,用于练习后核对答案、梳理命题逻辑等章节的解题思路,弥补原版教材奇数题缺少参考解答的不便。资源包仅含 1 个 PDF 文件,约 6.34MB,篇幅集中,便于在电脑或平板上按章节检索查阅。目前已有 7607 人学习下载。内容按教材章节编排,从命题逻辑的基本联结词、真值判断、语句符号化,到逻辑等价、量词与推理规则等均给出对应题号的答案,并以完整英文陈述呈现,便于读者对照题干理解每一步转换,而不是只得到最终真假值。对于需要完成课后作业、准备考试或自学复习的读者,可把它当作逐题校验与查漏补缺的参考,配合教材使用能更快定位概念盲区。
1. 从一页答案看第 1 章:命题逻辑的知识地图
不少人第一次翻《离散数学及其应用》的奇数题目答案,是抱着“对答案”的心态去的,翻开才发现这张答案页本身就相当于半本教材:一张真值表挨着一张真值表,一行推演挨着一行推演,还夹着一堆骑士、无赖和逻辑谜题。这份原书第 8 版的奇数题答案,覆盖第 1 章命题逻辑的三个小节——命题与联结词、命题的应用(翻译、规格、检索、谜题)、命题等价。它适合两类人:正在系统学这门课、需要对照自己推导过程的;以及期末或考试复习、想把第 1 章一次串成地图的。下面按“符号怎么落地、表怎么造、谜题怎么建模、坑在哪”的顺序重排一遍。
2. 命题与联结词:从自然语言到符号的翻译链路
这一章是整个第 1 章的地基。答案页前几十题看着零碎,其实在反复练同一件事:把一句人话无损地压成符号串,或者把一串符号还原成人话。压不准,后面真值表、等价推演、逻辑谜题全是空中楼阁。
2.1 命题判定的三个硬条件
答案第 1 题的形式很典型:a) Yes, T b) Yes, F c) Yes, T d) Yes, F e) No f) No。题目考的是“是不是命题”加“真值是多少”,两问合一。判定要过三道关:第一,必须是陈述句,疑问句、感叹句、祈使句直接出局;第二,必须是二值的,不允许“半真半假”或“七分真”;第三,真值必须已经确定,含未约束变量的式子(比如“x 加 1 等于 2”)不算命题,因为 x 没定,真值悬空。
最容易含糊的是第三关的边界。答案页后半段那组“100 条语句互相指涉”的题,结论是“这不可能发生,它是个悖论,说明这些不能成为命题”。注意这里的措辞:不是“假命题”,而是“不能成为命题”。这两者在考试里是两种完全不同的答案,前者是 F,后者是“不是命题”。判断题干时先问自己一句:这句话的真值到底有没有唯一答案,没有就归到“非命题”那一类。
2.2 五个联结词的真值约定
第 1.1 节真正要背下来的只有一张表。下面这张是手写笔记里最值得抄一遍的版本,重点看→那一列:
| p | q | ¬p | p ∧ q | p ∨ q | p ⊕ q | p → q | p ↔ q |
|---|---|---|---|---|---|---|---|
| T | T | F | T | T | F | T | T |
| T | F | F | F | T | T | F | F |
| F | T | T | F | T | T | T | F |
| F | F | T | F | F | F | T | T |
→的约定是“善意推定”:只有前件真、后件假时才为假,前件假时整个蕴含式一律为真。这条是初学者最容易在心里嘀咕的地方——“如果猪会飞,那么我就是百万富翁”在命题逻辑里是真命题,因为前件假。↔则是“同真同假为真,一真一假为假”。
优先级顺序是¬最高,接着∧,再∨,然后→,最后↔。实际书写时答案页几乎全靠括号消歧义,别指望读者记得优先级。笔记里可以记一条:拿不准就加括号,加括号不扣分,靠优先级猜才扣分。
2.3 自然语言翻译的四类高频句式
答案第 3、5、7、9 题集中练否定,第 11 题把同一句话变出八种写法,第 25、27 题练条件和双条件。归纳下来就四类。
否定的坑在作用域。“并非两者都”是¬(p ∧ q),“两者都不”是¬p ∧ ¬q,一字之差,真值表完全不同。答案里那句“夏天不热或者不出太阳”对应的是¬p ∨ ¬q,它和¬(p ∧ q)等价,但和¬p ∧ ¬q不等价。
合取的关键词不止 and,but、although、however、moreover 在逻辑里一律译成∧,它们只带语气不带真假。析取的坑留到第 5 章细说,这里只记一句:∨默认是相容或。
条件句要分清四种写法:if p then q、p only if q、q if p、unless。前三个里,只有only if是反着来的——p only if q译成p → q,q 是必要条件,落在后件;q if p也译成p → q,if 后面跟的是充分条件。答案第 11 题那组八连改写,本质上就是把一句话在“否定、合取、析取、条件、双条件”之间来回换,能独立复现这八句,翻译关基本就过了。
2.4 位串与逻辑运算的对应
第 1.1 节末尾出现了位运算题,把逻辑联结词搬到二进制串上逐位操作。规则很直白:按位 OR 是“有一位为 1 就取 1”,按位 AND 是“两位全 1 才取 1”,按位 XOR 是“两位不同取 1,相同取 0”。答案给出的三组结果对应 OR、AND、XOR 三个输出,做题时要求三条都写。
真正的坑不在规则,在对齐。两个长度不同的串必须先补前导零到等长,再从最右端往左逐位对齐,短的那一头空出来的位置就是 0。手工算的时候建议把两个串上下写齐、位数标出来,算完再核对一次位数有没有变。位运算在后续章节里会反复出现(集合、关系矩阵、布尔矩阵乘法都用得上),这里对齐习惯养坏了,后面会一路错下去。
3. 真值表与逻辑等价:三条证明路径和一张等价律表
第 1.3 节是整章的重头戏,答案页在这里的密度也最高:2 变元 4 行、3 变元 8 行、4 变元 16 行的表轮番上阵,后面还跟着一长串“证明这两个式子等价”。这一节真正要掌握的不是算表,而是“什么时候用表、什么时候用推演、什么时候用反证”。
3.1 真值表的列结构与构造顺序
一张规范的真值表分三段:左边是变元列,中间是子公式列,最右边是主联结词那一列。构造顺序有讲究:变元列按二进制计数顺序写(TT、TF、FT、FF),不要随手排;子公式列从最内层括号开始,一层一层往外算;最后一列才是整个命题的真值。
行数必须是 2 的变元数次方。2 变元 4 行、3 变元 8 行、4 变元 16 行,答案页里这三种规模都出现过,其中 4 变元那张表最考验耐心。写完先数行数,再数变元列有没有重复组合,这两步能挡掉大部分低级错误。
需要提醒的是,真值表只适合变元少的场合。5 个变元就是 32 行,6 个变元 64 行,考试里基本不会让你硬算,这时候要换推演法。
3.2 三条等价证明路径
第一条路:真值表比对。把两个命题放进同一张表,若最终两列逐行相同,则等价。这条路最笨也最稳,答案第 17 题就是拿“第四列与第一列完全相同”来证明吸收律。
第二条路:等价推演。从一端出发,每一步套一条已知等价律,最后推到 T 或者另一端。答案第 15 题给的是一串标准链条,比如证明(p ∧ q) → p是重言式:
(p ∧ q) → p ≡ ¬(p ∧ q) ∨ p (蕴含等价:a → b ≡ ¬a ∨ b) ≡ (¬p ∨ ¬q) ∨ p (德摩根律) ≡ (p ∨ ¬p) ∨ ¬q (交换律、结合律换位) ≡ T ∨ ¬q (排中律) ≡ T (支配律)每一步都要能报出用的是哪条律,报不出来就说明这一步是“感觉对的”,考场上容易翻车。推演法的好处是可读、可检查,写解答题时优先用这条。
第三条路:反证式说明。答案第 13 题用的就是这个路子——假设它不是重言式,那么必然存在一组赋值让它为假;把这组赋值代进去,会发现与前提冲突,于是假设不成立。比如证明(p ∧ q) → p:若它为假,则p ∧ q真而p假,但p ∧ q真已经蕴含 p 真,矛盾。这种写法在文字题里最省篇幅,适合只要求“说明理由”的场合。
3.3 一张必须背熟的等价律表
下面这张表是第 1.3 节的核心资产,建议直接抄进笔记首页:
| 名称 | 形式 | 备注 |
|---|---|---|
| 同一律 | p ∧ T ≡ p,p ∨ F ≡ p | 恒等元 |
| 支配律 | p ∨ T ≡ T,p ∧ F ≡ F | 短路 |
| 幂等律 | p ∨ p ≡ p,p ∧ p ≡ p | 去重 |
| 双重否定 | ¬(¬p) ≡ p | 拆两层 |
| 交换律 | p ∨ q ≡ q ∨ p,p ∧ q ≡ q ∧ p | 可换位 |
| 结合律 | (p ∨ q) ∨ r ≡ p ∨ (q ∨ r) | 可挪括号 |
| 分配律 | p ∨ (q ∧ r) ≡ (p ∨ q) ∧ (p ∨ r) | 两个方向都要记 |
| 德摩根律 | ¬(p ∧ q) ≡ ¬p ∨ ¬q,¬(p ∨ q) ≡ ¬p ∧ ¬q | 翻进去要换号 |
| 吸收律 | p ∨ (p ∧ q) ≡ p,p ∧ (p ∨ q) ≡ p | 大包小 |
| 蕴含等价 | p → q ≡ ¬p ∨ q | 消蕴含的第一选择 |
| 双条件展开 | p ↔ q ≡ (p → q) ∧ (q → p) | 拆成两个方向 |
| 排中律与矛盾律 | p ∨ ¬p ≡ T,p ∧ ¬p ≡ F | 收尾利器 |
记的时候别按字母顺序记,按“用得多不多”记。推演中出现频率最高的是蕴含等价、德摩根、分配律这三条,答案第 15 题的六条推演链里,蕴含等价出现了六次,德摩根出现了三次。先把这三条用成肌肉记忆,剩下的可以现查。
3.4 对偶原理与功能完备集
对偶的定义是:把式子里的∧与∨互换、T与F互换,原子命题保持不变,得到的式子叫原式的对偶,记作 s*。答案第 41 题要你证明的是(s*)* = s——对偶做两次回到自身。这个结论本身不难,难在考试里有人把“对偶”和“否定”搞混:对偶只换运算符和常量,不动原子命题的真假;否定是给每个原子加¬。
功能完备集是这一节最有“计算机味”的部分。答案第 47 题要求证明{¬, ∧, ∨}是功能完备的,思路是:任给一个命题,写出它的真值表,然后按“真值表为 T 的那些行”各写一个合取项,全部析取起来,就得到等价的析取范式。第 49 题进一步用德摩根把∧也消掉,得到{¬, ∨};第 51、53 题证明{NAND}和{NOR}各自单独完备;第 55 题给的((p ↓ p) ↓ q) ↓ ((p ↓ p) ↓ q)就是用 NOR 拼出来的一个复合式。
这段内容用几行代码验证一遍,比看十遍推演都管用:
from itertools import product # 三个基本联结词的 Python 对应:and / or / not imp = lambda p, q: (not p) or q # p → q ≡ ¬p ∨ q nand = lambda p, q: not (p and q) # p ↑ q nor = lambda p, q: not (p or q) # p ↓ q # 用 NAND 单独拼出 ¬、∧、∨,验证 {↑} 功能完备 neg = lambda p: nand(p, p) # ¬p ≡ p ↑ p conj = lambda p, q: neg(nand(p, q)) # p ∧ q ≡ ¬(p ↑ q) disj = lambda p, q: nand(neg(p), neg(q)) # p ∨ q ≡ (¬p) ↑ (¬q) for p, q in product([True, False], repeat=2): assert conj(p, q) == (p and q) # 合取还原正确 assert disj(p, q) == (p or q) # 析取还原正确 assert imp(p, q) == ((not p) or q) # 蕴含等价成立 print("NAND 完备性检查通过")这段代码做三件事:先定义三个基本运算,再用nand拼出否定、合取、析取,最后用itertools.product穷举 p、q 的四种取值做断言。参数只有两个布尔值,repeat=2控制枚举两个变元;若想验证 3 变元公式,把repeat改成 3、循环体里加一个 r 即可。断言全过,说明{NAND}确实能表达{¬, ∧, ∨}的全部能力,配合上一节“任意命题都能写成析取范式”,完备性链条就闭合了。
3.5 重言式、可满足式与矛盾式的三分
答案第 19、21 题考的是分类:所有赋值下都为真叫重言式,至少一组赋值为真叫可满足式,所有赋值下都为假叫矛盾式。三者的关系是:重言式的否定是矛盾式,反之亦然;可满足式的否定不一定可满足。
判断两个命题是否逻辑等价,等价于判断p ↔ q是不是重言式。答案第 23、25 题讨论的¬p ↔ q与p ↔ ¬q,就是在说“p 与 q 取值相反”这个条件下两者同真同假,所以等价。把“等价问题”翻译成“重言式问题”,是第 1.3 节最值钱的一次视角转换。
4. 条件命题与逻辑谜题:四个变体、一致性判定与建模套路
第 1.2 节标题叫“命题的应用”,答案页在这里画风突变:前面还是干巴巴的真值表,后面突然冒出骑士、无赖、间谍、宝箱、谋杀案。别被吓到,这一节考的全是“把一句人话翻译成公式,再解方程”的同一套动作。
4.1 条件命题的四个变体
给定p → q,能变出三个亲戚:
| 名称 | 形式 | 与原命题的关系 |
|---|---|---|
| 原命题 | p → q | 本身 |
| 逆命题 converse | q → p | 不等价 |
| 否命题 inverse | ¬p → ¬q | 不等价 |
| 逆否命题 contrapositive | ¬q → ¬p | 等价 |
答案第 29 题给的是三组自然语言改写,要求分别写出 converse、contrapositive、inverse。这里最容易翻车的是把“否命题”和“逆否命题”记串。一个可靠的记法是:逆否 = 先换位再换号,两步都做了;否命题 = 只换号不换位;逆命题 = 只换位不换号。三步里只有“两步都做”的那个保持等价。
为什么只有逆否等价?拿真值表看就清楚了:p → q只有在 p 真 q 假时为假,而¬q → ¬p也恰好在这一种情况下为假——q 假即 ¬q 真,p 真即 ¬p 假,前件真后件假。两者同真同假,自然等价。逆命题和否命题在 p 假 q 真时会出问题,那一行原命题为真、逆命题为假,等价关系直接断掉。
4.2 only if、unless、necessary 的翻译对照
这三个词是翻译题的重灾区,单独列一张对照:
| 自然语言 | 符号化 | 说明 |
|---|---|---|
| p only if q | p → q | q 是必要条件,落在后件 |
| p if q | q → p | q 是充分条件,落在前件 |
| p unless q | ¬q → p,等价于 p ∨ q | 除非 q,否则 p |
| q is necessary for p | p → q | 必要 |
| p is sufficient for q | p → q | 充分 |
only if之所以反直觉,是因为中文里“只有……才……”的语序和英文相反。英文p only if q读作“p 成立仅在 q 成立的前提下”,q 是那个“前提”,所以是后件。中文“只有 q 才 p”同样译成p → q。两句话语序不同,逻辑形式一致。
unless的处理有个小技巧:把它替换成“if not”,p unless q就是if not q then p,直接套¬q → p,再用蕴含等价展成q ∨ p。答案里涉及“除非下大雪否则不停课”这类句子,用这个替换一步到位。
4.3 逻辑谜题的建模三步法
答案第 23 到 33 题是整页最像智力题的部分:岛上居民要么是骑士(句句真话),要么是无赖(句句假话),偶尔还混进一个间谍(可真可假)。做法固定三步。
第一步,设变元。给每个角色设一个布尔变元,比如 A 表示“A 是骑士”。第二步,把每句话写成公式。这里的关键是“说话人身份”要乘进去:如果 A 说了命题 S,那么整句约束是A ↔ S——A 是骑士则 S 真,A 是无赖则 S 假,两头都管住。第三步,把所有约束用∧联立,枚举赋值找满足的解。
有个高频技巧值得单独记:无赖说“我是无赖”是不可能的。设这句话为 S = “A 是无赖” = ¬A,约束是A ↔ ¬A,无解。所以只要看到有人宣称自己是无赖,直接判定这句话不可能是真的,说话人也不可能是无赖,剩下的推理就顺了。答案里好几道题都是靠这个突破口起手的。
还有一类题带“间谍”,规则是间谍说的话可真可假。这时约束要放宽:间谍那一句不产生↔约束,只保留其他人的。答案第 29 到 33 题里出现“三个人分别可能是骑士、间谍、无赖”的多种解,就是因为间谍的自由度把解集撑大了。
4.4 一致性判定:无解也是一种答案
答案第 9 到 11 题问的是“这组系统规格是否相容(consistent)”。做法和谜题一样:把所有约束写成合取式,看存不存在一组赋值让它为真。存在就是相容,不存在就是不相容。第 35 题直接给出“No solutions”,说明那组条件本身自相矛盾。
这里要建立一个观念:算不出解不等于算错了。规格一致性判定里,“无解”是一个完全合法的结论,而且往往是出题人想要的结论。判断依据是枚举完所有赋值都不满足,而不是“我试了几种都不行”。手算时至少要给出“哪两条约束直接冲突”的说明,比如某条要求 p 真、另一条要求 p 假,这类直接矛盾的证据比“我算不出来”有说服力得多。
4.5 布尔检索式的构造
答案第 11 到 15 题练的是用 AND、OR、NOT 写检索式,答案里出现了带括号的组合式。规则有两条:短语要整体加引号,否则会被拆成独立的词分别匹配;运算符有优先级,AND 高于 OR,跨层组合必须加括号。
这两条在真实检索里也一样成立。想搜“某地某类餐馆”,得写成"某地名" AND ("餐馆A" OR "餐馆B");如果把引号丢了,检索式会退化成“包含地名中的任意一个词,并且包含餐馆”,结果集立刻跑偏。构造检索式时先在纸上画一棵与或树,再按树形写括号,比直接敲键盘靠谱。
5. 易错点排查:奇数题答案里最容易翻车的五处
这一章专门收错题。下面五条是从答案页里反推出来的高频失分点,每条按“错在哪、为什么会漏、怎么补”写。做完整章之后回来看一遍,比重新做一遍题效率高。
5.1 相容或与排他或的语境判断
易漏点:看到 or 就无脑写成∨,或者看到“或”就无脑写成⊕。
为什么漏:教材里∨的定义是相容或,两者都真时为真;但日常语言里的“或”很多时候是排他的,“要么 A 要么 B”通常暗示二选一。答案第 21、23 题就是专门考这个判断的:点一杯饮料是排他或(不能同时要两杯),密码里允许出现的符号组合是相容或(可以全是数字,也可以数字加符号),而某类促销“返现或低息贷款”按语境多半是排他的。
怎么补:拿到句子先问两个问题。第一,两者能否同时成立?不能就是排他。第二,说话人的意图是“至少一个”还是“恰好一个”?答案里明确说了“most likely the inclusive or is intended”或者“almost certainly the exclusive or is intended”的地方,就是在提醒你语境优先。答题时把判断理由写上一句,比只写符号安全。
5.2 否定号的作用域画错
易漏点:把¬(p ∧ q)写成¬p ∧ ¬q,或者把“不都”当成“都不”。
为什么漏:中文的“不”没有括号,位置又灵活,“不 모두”和“都不”在口语里几乎同音,落到符号上就靠语感猜。答案第 3、5、7 题连出三组否定改写,就是在磨这个。
怎么补:先把原句的主结构画出来,确定“不”否的到底是整个合取还是单个原子,再决定括号在哪。记一条硬规则:¬的辖域只到紧跟其后的那个最小公式,要否掉一整块必须加括号。德摩根律是这条规则的执行工具——¬(p ∧ q)翻进去变成¬p ∨ ¬q,∧要变∨,忘了换号就是另一个错。
5.3 逆、否、逆否三个变体记串
易漏点:题目要求写 contrapositive,写成了 inverse;或者遇到only if时把前后件放反。
为什么漏:中文教材里“逆命题”“否命题”“逆否命题”三个词长得太像,英文 converse / inverse / contrapositive 又容易混;再加上only if的语序和中文相反,两个坑叠在一起。
怎么补:用“换位”“换号”两个动作来记。逆 = 只换位,否 = 只换号,逆否 = 又换位又换号。只有做了两个动作的那个保持等价。遇到only if先在草稿上标出“q 是必要条件”,必要条件永远在后件,标完再写符号。答案第 29 题的三组改写值得默写一遍,写完对着原命题的真值表核一遍。
5.4 重言式证明用特例代替推演
易漏点:想证明一个式子是重言式,举了两三组赋值都为真就下结论;或者真值表少写了一行。
为什么漏:2 变元只有 4 行,漏一行肉眼很难发现;3 变元 8 行、4 变元 16 行更容易数错。而“举几个例子都成立”在心理上很有说服力,实际上什么也没证明。
怎么补:证明重言式只有两条正路——覆盖全部 2ⁿ 行,或者给出逐步推演链。推演链每一步都要标注依据,链断了就说明没证完。真值表写完先数行数,再检查变元列有没有重复组合、有没有遗漏。答案第 13 题那种“反证 + 矛盾”的写法也可以,但它同样要覆盖所有可能,只是把枚举换成了逻辑推理,不是省事。
5.5 把“信息不足”当成“无解”
易漏点:逻辑谜题里条件推不出唯一答案,就判“这题有问题”或者“无解”。
为什么漏:平时做题习惯了唯一解,一旦解集有多个元素就慌。答案第 39 题给的是一个典型情形:侦探能确定管家和厨师在撒谎,但确定不了园丁和杂工说的是不是真话。这是一个有效结论,不是失败。
怎么补:把“解是否存在”和“解是否唯一”分成两个问题问。先枚举求满足约束的赋值集合,集合为空才是无解;集合有多个元素时,要回答的是“哪些人的身份被所有解共同确定,哪些不确定”。答题时把“能确定”和“不能确定”分两句话写清楚,比硬凑一个唯一答案得分高。
6. 复习清单:把答案页变成可自测的检查表
整章过完,最后落到怎么自查。下面这张表可以打印出来,每复习一轮打一遍勾,打不上的就是下一轮的重点:
| 检查项 | 自测方式 | 过关标准 |
|---|---|---|
| 命题判定 | 随手写 10 句人话,判是不是命题 | 能说清“非命题”的三类理由 |
| 五个联结词真值 | 默写 4 行真值表 | →那一列不错 |
| 自然语言翻译 | 把一句“除非……否则……”译成符号 | 能给出两种等价写法 |
| 位运算 | 两个不等长位串做 OR/AND/XOR | 前导零补齐,位数不变 |
| 真值表构造 | 3 变元命题列表 | 8 行,无重复无遗漏 |
| 等价推演 | 独立证(p → q) ∧ (q → r) → (p → r) | 每步报得出律名 |
| 对偶与完备集 | 说出{NAND}为何单独完备 | 能讲清 DNF 那一步 |
| 四变体 | 给p → q写出逆、否、逆否 | 只有逆否等价 |
| 谜题建模 | 骑士无赖题设变元写约束 | 会用A ↔ S这条 |
| 一致性判定 | 给一组规格判相容 | 能指出冲突的两条 |
自测时有个小脚本很省事,把待验证的公式写成 lambda,穷举赋值打表,跑一遍就知道是不是重言式:
from itertools import product # 待验证公式:假言三段论 (p→q) ∧ (q→r) → (p→r) f = lambda p, q, r: (not (p and not q)) and (not (q and not r)) <= (not (p and not r)) rows = list(product([True, False], repeat=3)) result = [f(p, q, r) for p, q, r in rows] print(len(rows), all(result)) # 期望输出:8 Truerepeat=3决定枚举三个变元的全部 8 种取值,f里用not (a and not b)表示a → b,用<=表示蕴含方向。all(result)为 True 即该式为重言式。想换成别的公式,只改f这一行,其余不动;变元数变了就把repeat和 lambda 参数一起改,两边数量必须一致,否则解包会直接报错。
我自己的血泪经验是:复习第 1 章时最没用的动作是“把答案看一遍觉得懂了”,最有用的动作是合上答案页,拿一张白纸,从“命题的三条件”一路默到“NAND 完备”,中间卡在哪就回去补哪。从那以后我每次复习这一章,都强制先默写那张等价律表再开始做题——表默不出来,做题就是碰运气。希望这份梳理能帮到你,把答案页变成真正属于自己的地图。
本文还有配套的精品资源,点击获取