练习题详细解答
第一题:将"没有会飞的马"翻译为一阶逻辑(至少两种等价方式)
解答
方式一:直接使用否定
¬∃x (Horse(x) ∧ CanFly(x))
读作:"不存在这样的x,x是马且x会飞。"
方式二:全称量词+蕴含
∀x (Horse(x) → ¬CanFly(x))
读作:"对于所有x,如果x是马,那么x不会飞。"
方式三:集合论视角(使用子集关系)
{x | Horse(x)} ∩ {x | CanFly(x)} = ∅
读作:"马的集合与会飞的事物的集合的交集为空。"
等价性证明
方式一和方式二是逻辑等价的,这可以通过量词否定规则证明:
¬∃x (Horse(x) ∧ CanFly(x))
≡ ∀x ¬(Horse(x) ∧ CanFly(x)) [量词否定:¬∃x φ ≡ ∀x ¬φ]
≡ ∀x (¬Horse(x) ∨ ¬CanFly(x)) [德摩根律]
≡ ∀x (Horse(x) → ¬CanFly(x)) [蕴含定义:p→q ≡ ¬p∨q]
关键洞察:
- 方式一直观表达"没有这样的东西存在"
- 方式二强调"所有马都具有不会飞的属性"
- 两种方式在逻辑上完全等价,但认知侧重点不同
第二题:证明 ∀x (P(x) → Q(x)) ∧ ∀x (Q(x) → R(x)) ⊢ ∀x (P(x) → R(x))
证明(自然演绎法)
前提:
- ∀x (P(x) → Q(x))
- ∀x (Q(x) → R(x))
目标:证明 ∀x (P(x) → R(x))
证明步骤:
| 步骤 | 公式 | 理由 |
|---|
| 1 | ∀x (P(x) → Q(x)) | 前提 |
| 2 | ∀x (Q(x) → R(x)) | 前提 |
| 3 | | 假设:P(a),其中a是任意选取的个体 |
| 4 | P(a) → Q(a) | 全称实例化(UI),从1 |
| 5 | Q(a) → R(a) | 全称实例化(UI),从2 |
| 6 | Q(a) | 蕴含消去(→E),从3,4 |
| 7 | R(a) | 蕴含消去(→E),从5,6 |
| 8 | P(a) → R(a) | 蕴含引入(→I),从3-7 |
| 9 | ∀x (P(x) → R(x)) | 全称概括(UG),从8 |
详细解释
步骤3-7(条件证明):
- 我们假设P(a)成立(a是任意选取的个体)
- 通过全称实例化,我们知道如果P(a)则Q(a)
- 因此Q(a)成立
- 同理,如果Q(a)则R(a)
- 因此R(a)成立
- 所以,如果P(a)则R(a)
步骤8-9(概括):
- 由于a是任意选取的(没有任何特殊假设),我们可以将结论推广到所有个体
- 这正是全称概括规则的核心:如果证明对任意个体成立,则对所有个体成立
直观理解
这个证明体现了蕴含的传递性:
如果P导致Q,且Q导致R,那么P必然导致R。
用具体例子:
- P(x):x是人
- Q(x):x是哺乳动物
- R(x):x是动物
所有人都是哺乳动物,所有哺乳动物都是动物,因此所有人都是动物。
第三题:讨论:一阶逻辑能否表达"大多数学生通过了考试"?如果不能,为什么?
简短回答
标准一阶逻辑无法直接表达"大多数"这个概念。
详细分析
3.1 为什么不能表达?
一阶逻辑的量词只有两种:
- ∀(全称量词):"所有"、"每一个"
- ∃(存在量词):"存在"、"至少一个"
"大多数"意味着
超过50%的比例,这是一种
数量限定,但:
- 不是全称:不是"所有学生"
- 不是简单的存在:不是"存在学生通过"
- 涉及基数比较:需要比较"通过的学生数"与"总学生数"
3.2 尝试(失败的)形式化
有人可能尝试:
∃x∃y (Student(x) ∧ Student(y) ∧ Passed(x) ∧ Passed(y) ∧ x≠y)
这只能说"至少有两个学生通过",完全无法表达"大多数"。
或者:
¬∀x (Student(x) → Passed(x))
这只是说"不是所有学生都通过",可能是99%通过,也可能是0%通过。
3.3 真正需要的是什么?
表达"大多数"需要:
- 计数能力:能够说"有n个学生"
- 比较能力:能够比较两个集合的大小
- 比例概念:能够表达"超过50%"
3.4 扩展方案
方案一:带计数量词的逻辑
引入量词 ∃ⁿ(恰好存在n个)或 ∃^{>n}(存在多于n个):
|{x | Student(x) ∧ Passed(x)}| > |{x | Student(x)}| / 2
这需要
二阶逻辑或
带计数量词的一阶逻辑扩展。
方案二:广义量词(Generalized Quantifiers)
引入专门的"大多数"量词 Most:
Most x (Student(x), Passed(x))
读作:"在是学生的那些x中,大多数x通过了考试。"
这是一阶逻辑的扩展,称为带广义量词的逻辑。
方案三:用集合论+算术
如果我们有:
则可以表达:
|{x | Student(x) ∧ Passed(x)}| × 2 > |{x | Student(x)}|
但这已经
超出纯一阶逻辑,需要:
- 二阶逻辑(量化集合)
- 或一阶逻辑+算术
- 或一阶逻辑+集合论
3.5 哲学意义
这个限制揭示了一阶逻辑的本质:
一阶逻辑处理的是定性关系(是/否、所有/存在),而非定量关系(多少、比例)。
这与人类认知的对应:
- 一阶逻辑对应"范畴推理"(所有X都是Y)
- 数量推理需要额外的"数值认知"能力
3.6 实际应用中的解决方案
在数据库查询(SQL)中,我们可以表达"大多数":
SELECT CASE
WHEN (SELECT COUNT(*) FROM Students WHERE Passed = 1) * 2 >
(SELECT COUNT(*) FROM Students)
THEN '大多数通过了'
ELSE '大多数没通过'
END
但这依赖于聚合函数(COUNT),这些是在一阶逻辑之上的扩展。
结论
标准一阶逻辑无法表达"大多数",因为:
- 表达力限制:只有∀和∃两个量词,缺乏比例/数量量词
- 语义限制:一阶逻辑的模型论基于真值,不涉及基数计算
- 计算复杂性:即使扩展表达能力,也会带来计算复杂度的急剧上升
要表达"大多数",需要:
- 广义量词逻辑(最自然的扩展)
- 二阶逻辑(量化集合)
- 一阶逻辑+算术/集合论(增加表达能力)
这也解释了为什么自然语言中的量化如此丰富(大多数、许多、少数、大约一半...),而逻辑形式化却如此困难——
语言先于逻辑,逻辑是对语言的理想化抽象。
补充思考
这三道题实际上展示了一阶逻辑的三个层次:
| 题目 | 层次 | 核心概念 |
|---|
| 第一题 | 语法层面 | 量词否定、等价变形 |
| 第二题 | 证明层面 | 自然演绎、推理规则 |
| 第三题 | 表达力层面 | 逻辑边界、扩展需求 |
理解一阶逻辑,不仅要掌握它的能力,也要明白它的局限——这正是逻辑学作为一门科学的诚实之处。