
1. 从“命题及常用的符号”说起为什么值得认真梳理很多人第一次接触逻辑学或者离散数学看到“命题”和一堆符号第一反应是“这不就是数学里的字母吗”。但真到了做题、写证明、甚至写代码里的条件判断时才发现符号用错一个整个推理链条就全塌了。我自己在带新人的时候最常遇到的情况就是题目里的“或”到底是可兼或还是排斥或量词顺序换一下意思怎么就变了蕴含符号箭头方向一颠倒结论就完全相反。这些问题看起来是“符号问题”本质上是对命题结构和逻辑连接词的理解不到位。这篇文章要聊的就是“命题及常用的符号”这个主题。它属于逻辑学、离散数学、计算机科学基础里的入门内容但入门不等于简单。我会把命题的定义、常见逻辑连接词、量词、符号体系、真值表、优先级规则、以及实际做题和写代码时容易踩的坑全部拆开讲一遍。适合正在学离散数学、逻辑导论、计算机理论基础的学生也适合需要写条件判断、做规则引擎、搞形式化验证的开发者。哪怕你只是想把“充分条件”“必要条件”这种高中就背过但一直没搞明白的东西彻底弄清楚这篇内容也能帮到你。我尽量不用教科书那种“定义—定理—证明”的写法而是按一个实际使用者的视角把每个符号为什么长这样、什么时候用、用错了会怎样一条条说清楚。你读完至少能做到看到一个逻辑表达式能准确翻译成中文看到一段中文描述能写出正确的符号表达并且知道哪些地方最容易出错。2. 命题到底是什么从一句话到一个真值2.1 命题的定义与判断标准命题的定义很朴素能判断真假的陈述句。注意三个关键词——“能判断”“真假”“陈述句”。缺一个都不行。“今天下雨”是命题吗看语境。如果“今天”指某个确定的日子那它要么真要么假是命题。如果“今天”是随口一说没有具体所指那它就不是一个确定的陈述严格来说不算命题。“请把门关上”不是命题因为它是祈使句没有真假可言。“x 大于 3”也不是命题因为 x 是变量值不确定真假不确定。但“对于任意实数 xx 大于 3”就是命题了因为它有了确定的真假当然是假的。这里有个常见的误区很多人以为“假命题”不是命题。恰恰相反假命题也是命题因为它能判断真假只是判断结果是假。命题的关键在于真假可判定而不在于它实际上是真的。还有一类句子叫“悖论”比如“这句话是假的”。它看起来是陈述句但无法一致地判断真假所以不属于命题。这类内容在基础阶段不用深究但要知道边界在哪里。2.2 命题变元与真值为了讨论方便我们用字母来表示命题常见的是 p、q、r、s 这些。这叫命题变元。一个命题变元可以取两个值真或假。真通常记作 TTrue或 1假记作 FFalse或 0。这里要注意命题变元和普通代数里的变量不一样。代数里 x 可以取任意数值而命题变元只能取真、假两个值。所以命题逻辑本质上是一种“二值逻辑”。也有多值逻辑、模糊逻辑但那是后续内容基础阶段先把二值逻辑吃透。用字母表示命题的好处是可以把具体的句子抽象成结构。比如“如果下雨那么地面湿”可以写成 p → q其中 p 表示“下雨”q 表示“地面湿”。抽象之后我们就能研究推理形式本身是否有效而不用关心具体内容。这就是逻辑学作为“形式科学”的意义。2.3 复合命题的构成单个命题叫原子命题用连接词把原子命题组合起来就得到复合命题。比如“p 且 q”“p 或 q”“非 p”“如果 p 则 q”都是复合命题。复合命题的真假由两部分决定原子命题的真假以及连接词的含义。这就引出了真值表这个工具。真值表把所有可能的真值组合列出来逐一计算复合命题的真值。它是逻辑学里最基础也最实用的工具后面讲每个连接词时我都会配上真值表。一个含 n 个命题变元的复合命题真值表有 2 的 n 次方行。比如两个变元有 4 行三个变元有 8 行。这个规律要记住做题时列真值表不会漏行。3. 常用逻辑连接词逐个拆解3.1 否定最基础也最容易看走眼否定记作 ¬p 或 ~p读作“非 p”。它的真值规则很简单p 真则 ¬p 假p 假则 ¬p 真。p¬pTFFT否定看起来简单但实际使用时有几个坑。第一中文里的“不”“非”“没有”“并非”都可能表示否定但位置不同否定的范围就不同。“并非所有人都喜欢数学”和“所有人都不喜欢数学”是两回事。前者是否定“所有人都喜欢数学”这个整体等价于“存在一些人不喜欢数学”后者是“对每个人来说他都不喜欢数学”。这两个命题的真假可以完全不同。第二双重否定。¬¬p 等价于 p这在经典逻辑里成立。但自然语言里“我不是不喜欢你”往往不等于“我喜欢你”因为语气和语用层面有额外含义。做逻辑题时按经典逻辑处理做自然语言理解时要小心。第三否定的优先级很高通常高于其他连接词。¬p ∧ q 一般理解为 (¬p) ∧ q而不是 ¬(p ∧ q)。这个后面讲优先级时会再强调。3.2 合取且、与、和合取记作 p ∧ q读作“p 且 q”。只有当 p 和 q 都真时p ∧ q 才真。pqp ∧ qTTTTFFFTFFFF合取对应中文里的“并且”“而且”“和”“既……又……”。但要注意中文的“和”有时表示并列而非逻辑合取。“小明和小红是学生”严格来说不是“小明是学生 ∧ 小红是学生”的简单合取因为主语是“小明和小红”这个整体。不过在命题逻辑里我们通常把它拆成两个原子命题的合取来处理。合取的交换律成立p ∧ q 等价于 q ∧ p。结合律也成立(p ∧ q) ∧ r 等价于 p ∧ (q ∧ r)。这些性质在化简表达式时很有用。一个实操心得写代码时很多语言用表示逻辑与并且有“短路求值”特性。如果前一个条件为假后面的条件不会计算。这在逻辑上等价于合取但副作用可能不同。比如check() doSomething()如果 check() 返回假doSomething() 不会执行。这是编程里利用逻辑连接词控制流程的常见手法但逻辑学里不讨论副作用只讨论真值。3.3 析取或的两副面孔析取记作 p ∨ q读作“p 或 q”。只要 p 和 q 中至少一个为真p ∨ q 就为真。pqp ∨ qTTTTFTFTTFFF这是可兼或也叫 inclusive or。中文里的“或”很多时候就是这个意思。“明天刮风或下雨”通常不排除既刮风又下雨。但中文里还有排斥或也叫 exclusive or记作 p ⊕ q 或 p XOR q。它要求 p 和 q 恰好一个为真。pqp ⊕ qTTFTFTFTTFFF“要么……要么……”通常表示排斥或。“你要么现在走要么永远别来”显然不能两个都选。但“或者”到底取哪种要看语境。逻辑学里默认 ∨ 是可兼或需要排斥或时用 ⊕ 或明确说明。这个区分在实际中非常重要。写条件判断时如果本意是“两个条件只能满足一个”却用了可兼或就会放过“两个都满足”的情况导致逻辑漏洞。我见过不少权限校验、状态机判断的 bug根源就在这里。析取也有交换律和结合律。另外析取和合取之间满足分配律p ∧ (q ∨ r) 等价于 (p ∧ q) ∨ (p ∧ r)p ∨ (q ∧ r) 等价于 (p ∨ q) ∧ (p ∨ r)。这两条在化简和证明里经常用到。3.4 蕴含箭头方向是命门蕴含记作 p → q读作“如果 p那么 q”。p 叫前件q 叫后件。pqp → qTTTTFFFTTFFT这张真值表是初学者最容易困惑的地方。为什么前件为假时整个蕴含为真因为蕴含在逻辑里是“承诺”只要 p 成立q 就必须成立。如果 p 根本没成立这个承诺就没有被违反所以算真。这叫“善意推定”或“虚真”。举个例子“如果我中了彩票我就请你吃饭。”如果你没中彩票无论请不请吃饭这句话都不算说谎。只有你中了彩票却没请才算说谎。这就是蕴含的真值规则。蕴含有几个重要性质。第一p → q 等价于 ¬p ∨ q。这个等价关系在化简时非常有用。第二p → q 不等价于 q → p。前者叫原命题后者叫逆命题两者真假无关。第三p → q 等价于 ¬q → ¬p这叫逆否命题两者等价。这个等价关系在证明里经常用叫逆否证明法。中文里表达蕴含的方式很多“如果……那么……”“若……则……”“只要……就……”“……是……的充分条件”“……是……的必要条件”。注意最后两种说法。p 是 q 的充分条件意思是 p 成立就足够推出 q即 p → q。p 是 q 的必要条件意思是 q 成立必须有 p即 q → p等价于 ¬p → ¬q。很多人把充分和必要搞反这是高频错误。还有一个“当且仅当”记作 p ↔ q叫等价或双条件。它表示 p 和 q 真值相同。pqp ↔ qTTTTFFFTFFFTp ↔ q 等价于 (p → q) ∧ (q → p)。中文里“当且仅当”“充分必要”“等价于”都表示这个。3.5 连接词优先级与括号当一个表达式里有多个连接词时需要规定运算顺序否则会有歧义。通常的优先级从高到低是¬、∧、∨、→、↔。也就是说¬p ∧ q ∨ r → s 理解为 (((¬p) ∧ q) ∨ r) → s。但说实话这种表达式可读性很差。我的建议是只要不确定就加括号。括号不改变逻辑但能极大降低误读风险。在写代码、写论文、出题时宁可多写几个括号也不要让别人猜你的意图。另外∧ 和 ∨ 满足结合律所以 p ∧ q ∧ r 不需要括号也不会歧义。但 → 不满足结合律p → q → r 必须明确是 (p → q) → r 还是 p → (q → r)两者不等价。这是很多教材会专门提醒的点。4. 量词从“所有”到“存在”的符号化4.1 全称量词与存在量词命题逻辑只能处理固定的命题没法表达“所有”“存在”这类概念。要表达这些需要谓词逻辑核心工具就是量词。全称量词记作 ∀读作“对所有”“任意”“每一个”。∀x P(x) 表示对论域里所有 xP(x) 都成立。存在量词记作 ∃读作“存在”“至少有一个”。∃x P(x) 表示论域里至少有一个 x 使 P(x) 成立。论域很重要。∀x P(x) 里的 x 取哪些值必须事先明确。论域不同命题真假可能不同。比如“所有数都大于 0”如果论域是正整数是真的如果论域是实数是假的。所以写量词命题时论域要么显式说明要么用条件限制比如 ∀x (x 是正整数 → x 0)。4.2 量词的否定德摩根律的推广量词的否定有两条重要规则¬∀x P(x) 等价于 ∃x ¬P(x)¬∃x P(x) 等价于 ∀x ¬P(x)用自然语言说就是“并非所有 x 都满足 P”等价于“存在 x 不满足 P”“不存在 x 满足 P”等价于“所有 x 都不满足 P”。这两条规则是德摩根律在量词上的推广非常常用。比如“并非所有人都及格”等价于“有人没及格”。“没有人迟到”等价于“所有人都没迟到”。实际做题时遇到否定量词命题第一步就是把否定符号推进去翻转量词再否定谓词。这个操作叫“否定内移”。熟练之后可以一步到位。4.3 量词顺序不能随便换∀x ∃y P(x, y) 和 ∃y ∀x P(x, y) 看起来只是量词顺序不同但含义差别巨大。∀x ∃y P(x, y) 表示对每个 x都能找到一个 yy 可以随 x 变化使 P 成立。∃y ∀x P(x, y) 表示存在一个固定的 y对所有 x 都使 P 成立。后者更强。后者成立则前者一定成立但反之不然。举个例子。论域是实数P(x, y) 表示 x y 0。∀x ∃y (x y 0)对每个实数 x取 y -x确实成立。真命题。∃y ∀x (x y 0)存在一个固定的 y对任意 x 都有 x y 0。这显然不可能因为 x 变化时 x y 也变。假命题。这个例子很经典说明量词顺序不能随意交换。写证明时如果先取 y 再取 x和先取 x 再取 y论证结构完全不同。这是数学分析里“一致连续”和“连续”区别的核心也是很多证明题的关键。4.4 量词与连接词的配合量词和连接词搭配时有一些等价关系要记住∀x (P(x) ∧ Q(x)) 等价于 ∀x P(x) ∧ ∀x Q(x)∃x (P(x) ∨ Q(x)) 等价于 ∃x P(x) ∨ ∃x Q(x)∀x (P(x) ∨ Q(x)) 不等价于 ∀x P(x) ∨ ∀x Q(x)∃x (P(x) ∧ Q(x)) 不等价于 ∃x P(x) ∧ ∃x Q(x)前两条是分配律后两条不能反向分配。比如“所有人都要么喜欢数学要么喜欢语文”不等于“所有人都喜欢数学或者所有人都喜欢语文”。前者允许不同人喜欢不同科目后者要求所有人喜欢同一科目。这个区别在逻辑题里经常考。5. 符号体系与常见写法对照5.1 不同教材的符号差异逻辑符号在不同教材、不同地区、不同年代有差异。下面这张表把常见写法对照一下方便你读不同资料时不至于懵。含义常见写法一常见写法二常见写法三否定¬p~pp合取p ∧ qp qp · q析取p ∨ qp | qp q蕴含p → qp ⊃ qp ⇒ q等价p ↔ qp ≡ qp ⇔ q全称量词∀x(x)⋀x存在量词∃x(Ex)⋁x这些写法含义相同只是习惯不同。读论文或老教材时遇到陌生符号先查符号表不要凭感觉猜。我见过有人把 ⊃ 当成“包含”而不是“蕴含”结果整段推理理解反了。5.2 真值表与等值演算真值表适合验证小规模表达式但变元一多就爆炸。三个变元 8 行四个变元 16 行五个变元 32 行。所以实际化简和证明更多用等值演算也就是用已知等价关系逐步变形。常用等价关系要背熟交换律p ∧ q ≡ q ∧ pp ∨ q ≡ q ∨ p结合律(p ∧ q) ∧ r ≡ p ∧ (q ∧ r)(p ∨ q) ∨ r ≡ p ∨ (q ∨ r)分配律p ∧ (q ∨ r) ≡ (p ∧ q) ∨ (p ∧ r)p ∨ (q ∧ r) ≡ (p ∨ q) ∧ (p ∨ r)德摩根律¬(p ∧ q) ≡ ¬p ∨ ¬q¬(p ∨ q) ≡ ¬p ∧ ¬q蕴含等价p → q ≡ ¬p ∨ q等价等价p ↔ q ≡ (p → q) ∧ (q → p)双重否定¬¬p ≡ p幂等律p ∧ p ≡ pp ∨ p ≡ p吸收律p ∧ (p ∨ q) ≡ pp ∨ (p ∧ q) ≡ p这些关系是逻辑化简的“乘法口诀”用熟了能省大量时间。我的建议是拿几张纸把每个等价关系用真值表验证一遍亲手算过之后记忆会牢很多。5.3 范式合取范式与析取范式析取范式DNF是若干合取式的析取比如 (p ∧ q) ∨ (¬p ∧ r)。合取范式CNF是若干析取式的合取比如 (p ∨ q) ∧ (¬p ∨ r)。任何命题公式都能化成这两种范式。化 DNF 的常用方法是列真值表把真值为 T 的行对应的合取式析取起来。化 CNF 则取真值为 F 的行每行写一个析取式再合取。范式在自动定理证明、SAT 求解、电路设计中都有应用。比如 SAT 问题通常要求输入是 CNF因为 CNF 有统一的结构便于算法处理。实际工程里把逻辑约束转成 CNF 再交给求解器是很常见的流程。6. 实操从自然语言到符号表达的完整流程6.1 翻译步骤与示例把一段中文逻辑描述翻译成符号表达式我通常按四步走找出所有原子命题给每个分配一个字母。识别连接词和量词确定它们的作用范围。根据优先级和语义加括号。回读检查看符号表达是否和原意一致。举个例子“如果明天不下雨并且我有空那么我就去图书馆或者去打球。”第一步原子命题p 明天下雨q 我有空r 我去图书馆s 我去打球。第二步连接词不下雨是 ¬p并且是合取如果……那么是蕴含或者是析取。第三步组合(¬p ∧ q) → (r ∨ s)。第四步回读如果明天不下雨并且我有空那么我去图书馆或者去打球。和原句一致。再举个带量词的“所有学生要么选了数学要么选了语文。”论域是学生。设 M(x) x 选了数学C(x) x 选了语文。这里“要么……要么……”是排斥或所以是 ∀x (M(x) ⊕ C(x))。如果按可兼或理解就是 ∀x (M(x) ∨ C(x))。具体取哪个要看题目意图。如果题目说“可以同时选”就是可兼或如果说“只能选一门”就是排斥或。6.2 真值表实操手算一个例子拿 (p → q) ∧ (¬p → r) 举例列真值表。pqrp → q¬p¬p → r整体TTTTFTTTTFTFTTTFTFFTFTFFFFTFFTTTTTTFTFTTFFFFTTTTTFFFTTFF算的时候一行一行来先算简单子式再算整体。¬p → r 这一列当 ¬p 为假时蕴含为真当 ¬p 为真时看 rr 真则真r 假则假。这个规则要熟练。真值表的好处是机械、不会错坏处是慢。三个变元 8 行还能接受四个变元 16 行就开始烦了。所以实际做题时能化简先化简实在不行再列真值表。6.3 等值演算实操化简一个表达式化简 ¬(p → q) ∨ (p ∧ q)。第一步用蕴含等价p → q ≡ ¬p ∨ q所以 ¬(p → q) ≡ ¬(¬p ∨ q)。第二步德摩根¬(¬p ∨ q) ≡ p ∧ ¬q。第三步原式变成 (p ∧ ¬q) ∨ (p ∧ q)。第四步分配律反用提取 p得 p ∧ (¬q ∨ q)。第五步¬q ∨ q ≡ T所以 p ∧ T ≡ p。最终结果原式等价于 p。这个过程每一步都有依据不是凭感觉。等值演算的关键是熟悉等价关系并且知道往哪个方向化简。一般来说目标是消去蕴含和等价把否定推到原子命题上再用分配律、吸收律合并。7. 常见问题与避坑指南7.1 高频错误速查表错误类型典型表现正确做法混淆充分必要把 p → q 说成 q 是 p 的充分条件p 是 q 的充分条件q 是 p 的必要条件蕴含方向反了把“只有 p 才 q”写成 p → q“只有 p 才 q”是 q → p析取类型搞错把排斥或当可兼或明确“或”的语义必要时用 ⊕量词顺序随意换把 ∀∃ 当成 ∃∀顺序不同含义不同不能随意换否定范围错¬(p ∧ q) 写成 ¬p ∧ ¬q用德摩根律¬(p ∧ q) ≡ ¬p ∨ ¬q优先级误判¬p ∧ q 当成 ¬(p ∧ q)否定优先级最高必要时加括号论域不明确∀x P(x) 没说 x 范围先明确论域或用条件限制空真误解认为前件假时蕴含无意义经典逻辑里前件假则蕴含为真7.2 独家避坑心得第一个心得翻译时先写中文再写符号。不要一上来就写符号容易漏掉连接词。先把原句改写成“如果……那么……”“并且”“或者”这种标准形式再逐个替换成符号。这个习惯能减少大量错误。第二个心得量词命题先确定论域。论域不明确后面全白搭。如果题目没给论域要么按上下文推断要么在答案里注明假设。我见过有人做“所有人都会死”的符号化论域写成“人”结果 ∀x 死(x) 里 x 取所有人没问题但如果论域是“生物”就要写成 ∀x (人(x) → 死(x))。论域不同写法不同。第三个心得蕴含的前件为假时不要纠结。很多初学者觉得“如果 113那么太阳从西边升起”是真命题很反直觉。但逻辑里的蕴含是外延性的只看真值组合不看因果联系。接受这个设定做题会顺很多。如果实在别扭就记住 p → q ≡ ¬p ∨ q用析取来理解。第四个心得多用量词否定练习。¬∀x (P(x) → Q(x)) 等价于 ∃x (P(x) ∧ ¬Q(x))。这个变形在数学证明里极其常用比如证明“并非所有函数都连续”等价于“存在一个函数不连续”。练熟之后看到否定量词命题就能条件反射地变形。第五个心得写代码时逻辑连接词和逻辑学符号要对应清楚。大多数编程语言里是合取||是析取!是否定。但要注意短路求值和副作用。另外很多语言没有直接的蕴含运算符需要用!p || q来表达 p → q。这个转换在写条件判断时很实用。7.3 练习题与自测想检验自己是否真的掌握了可以试着做这几道题把“只有努力学习才能取得好成绩”符号化。写出 ¬(p → q) 的等价形式要求否定只出现在原子命题上。判断 ∀x (P(x) ∨ Q(x)) 和 ∀x P(x) ∨ ∀x Q(x) 是否等价并举例说明。用等值演算证明 (p → q) ∧ (p → r) 等价于 p → (q ∧ r)。把“每个实数都有相反数”符号化并写出它的否定。这些题覆盖了蕴含方向、否定内移、量词分配、等值演算、量词否定这几个核心点。能顺利做出来说明基础已经比较扎实了。8. 符号背后的思维方式学命题和符号表面上是记一堆符号和规则实际上是在训练一种精确表达和严密推理的能力。自然语言有歧义、有省略、有语境依赖而符号语言把这些都剥离掉只留下结构。这种能力在写代码、写规格说明、做数学证明、甚至日常沟通里都有用。我自己最大的体会是符号不是装饰是约束。当你把一句话写成符号表达式时你被迫想清楚每个连接词的确切含义、每个量词的作用范围、每个否定的对象。很多平时觉得“差不多”的说法一写成符号就发现漏洞百出。这个过程不舒服但很有价值。如果后续还想深入可以接着学谓词逻辑的推理规则、范式与归结原理、模态逻辑、时序逻辑这些内容。它们都是在命题逻辑的基础上加东西基础打牢了后面会顺很多。