一阶谓词逻辑:从语法到语义,掌握形式化推理的核心工具
1. 从“命题”到“谓词”:为什么我们需要更强大的逻辑工具?
在数理逻辑的入门阶段,我们通常从命题逻辑开始。命题逻辑处理的是一个个完整的、可以判断真假的陈述句,比如“今天下雨”或者“2+2=4”。每个命题就像一个不可分割的原子,我们用字母P,Q来表示它们,然后用“且(∧)”、“或(∨)”、“非(¬)”、“如果…那么…(→)”这些连接词把它们组合起来,研究它们之间的真假关系。这套工具简洁有力,能解决很多推理问题。
但很快你就会发现它的局限性。考虑这个经典的推理:“所有人都是会死的。苏格拉底是人。所以,苏格拉底是会死的。”这个推理在直觉上完全正确,但用命题逻辑怎么表示?你可能会写成P: 所有人都是会死的,Q: 苏格拉底是人,R: 苏格拉底是会死的。那么推理形式就是(P ∧ Q) → R。问题来了:在命题逻辑里,P,Q,R是三个完全独立的命题原子,(P ∧ Q) → R这个公式并不是永真式(你可以轻易给P,Q赋真,给R赋假,使整个公式为假)。这显然不符合我们对这个推理有效性的认知。
问题的根源在于,命题逻辑看不到命题内部的结构。“所有人都是会死的”和“苏格拉底是人”这两个命题,在内部共享了“人”和“会死的”这些概念,并且涉及了“所有”这个量词以及“苏格拉底”这个个体。命题逻辑这把“锤子”太钝了,敲不开命题这个“核桃”看看里面是什么。
于是,谓词逻辑(通常指一阶谓词逻辑)应运而生。它就像一套精密的手术刀,允许我们深入到命题内部,分析其中的个体、属性和关系。它引入了两个核心武器:谓词和量词。谓词用来表达个体的属性或多个个体之间的关系(比如“是人”、“会死的”、“大于”),量词(“对所有 ∀”、“存在 ∃”)则允许我们对个体域中的对象进行概括性陈述。正是这套工具,让我们能够精确刻画“苏格拉底三段论”这类涉及内部结构和普遍性陈述的推理,使其有效性在逻辑上得到严格证明。对于计算机科学、人工智能(知识表示、自动推理)、语言学、哲学和数学基础等领域的学习者来说,掌握谓词逻辑是迈向形式化思维的关键一步。
2. 一阶谓词逻辑公式的“零件清单”与组装规则
要写出合格的一阶谓词逻辑公式,就像用乐高积木搭建一个模型,你必须先清楚有哪些零件,以及这些零件如何合法地拼接在一起。下面我们来逐一清点这些“零件”并理解“组装手册”。
2.1 基础零件:符号体系
一阶逻辑的语言由以下几类符号构成:
个体变元:通常用小写字母
x,y,z,u,v,w(可加下标如x₁)表示。它们代表论域(我们讨论的对象范围,比如所有人的集合、所有自然数的集合)中某个不确定的个体。你可以把它们想象成代数中的变量x,在未赋值前,它不代表一个具体的数。个体常元:通常用小写字母
a,b,c,d(可加下标)表示。它们代表论域中一个特定的、有名有姓的个体。例如,s可以特指“苏格拉底”,0可以特指数字零。谓词符号:通常用大写字母
P,Q,R,F,G,H(可加下标)表示。每个谓词符号都有一个元数,即它需要搭配多少个个体(变元或常元)才能构成一个完整的陈述。- 一元谓词:表达个体的属性。例如
Man(x)表示“x是人”,Mortal(x)表示“x是會死的”。这里的Man和Mortal就是一元谓词符号。 - n元谓词 (n≥2):表达n个个体之间的关系。例如
Loves(x, y)表示“x爱y”(二元),Between(x, y, z)表示“y在x和z之间”(三元)。
- 一元谓词:表达个体的属性。例如
函数符号:通常用小写字母
f,g,h(可加下标)表示。和谓词一样,函数符号也有元数。它的作用是从个体映射到个体。例如,father(x)可以表示“x的父亲”(一元函数),sum(x, y)表示“x与y的和”(二元函数)。函数符号帮助我们构造更复杂的个体项。逻辑连接词:从命题逻辑继承而来,包括:
¬(非)∧(且)∨(或)→(蕴含,如果…则…)↔(等价,当且仅当)
量词:一阶逻辑的标志。
∀(全称量词):读作“对所有…”、“任意…”。∀x P(x)表示“对论域中的所有个体x,性质P(x)都成立”。∃(存在量词):读作“存在…”、“至少有一个…”。∃x P(x)表示“在论域中,至少存在一个个体x,使得性质P(x)成立”。
辅助符号:括号
(和),以及逗号,,用来消除歧义,标明组合关系。
2.2 中间产品:项(Term)
在组装成完整句子(公式)之前,我们先要能指称个体。项就是用来指称论域中个体的表达式。它的归纳定义是:
- 个体变元是项。
- 个体常元是项。
- 如果
f是一个n元函数符号,且t₁, t₂, ..., tₙ是项,那么f(t₁, t₂, ..., tₙ)也是项。
示例:
x(变元项)a(常元项)father(john)(一元函数应用,结果是项)sum(x, succ(y))(嵌套函数应用,succ可表示后继函数,结果仍是项)
项本身没有真假值,它只是个“名字”,指代某个个体。
2.3 最终成品:公式(Formula)的归纳定义
公式才是可以判断真假的陈述句。它的构造有严格的递归规则:
原子公式:如果
P是一个n元谓词符号,且t₁, t₂, ..., tₙ是项,那么P(t₁, t₂, ..., tₙ)是一个公式(称为原子公式)。- 示例:
Man(s),Loves(john, mary),GreaterThan(sum(x, y), z)。
- 示例:
复合公式:如果
φ和ψ是公式,那么以下表达式也是公式:(¬φ)(非)(φ ∧ ψ)(且)(φ ∨ ψ)(或)(φ → ψ)(蕴含)(φ ↔ ψ)(等价)
量化公式:如果
φ是一个公式,x是一个个体变元,那么以下表达式也是公式:(∀x φ)(全称量化)(∃x φ)(存在量化)
关于量词作用域与约束变元的重要说明:在公式∀x P(x)中,量词∀x的作用域就是紧跟在它后面的公式P(x)。变元x在这个作用域内的所有出现,都称为约束出现,这个x称为约束变元。它就像一个局部变量,其名字本身不重要(可以统一改名,只要不冲突),重要的是它被量词所“绑定”了。如果一个变元在公式中的某次出现没有被任何量词绑定,则称为自由出现,是自由变元。一个公式如果不包含任何自由变元,则称为闭公式或句子,它才有确定的真假值。
2.4 组装避坑指南:常见语法错误与正确写法
理解了规则,还要避免踩坑。下面是一些初学者常犯的错误及其纠正:
错误1:谓词“缺参数”或“参数类型错配”
- 错误:
Man(一元谓词单独出现,不是公式) - 错误:
Loves(john)(二元谓词只给了一个参数) - 错误:
∀P(x)(量词只能约束个体变元x, y, z...,不能约束谓词符号P) - 正确:
Man(s),Loves(john, mary),∀x Man(x)
- 错误:
错误2:连接词使用不当
- 错误:
Man(x) ∧(连接词后面必须有公式) - 错误:
∀x (Man(x) → Mortal(括号不匹配,蕴含词→右边不完整) - 正确:
Man(x) ∧ Mortal(x),∀x (Man(x) → Mortal(x))
- 错误:
错误3:混淆项与公式
- 错误:
father(x) → Mortal(father(x))(father(x)是项,不是公式,不能直接作为→的左端) - 正确:
Mortal(father(x))(这是一个完整的原子公式),或者P(father(x)) → Q(father(x))(其中P, Q是谓词)。
- 错误:
实操心得:在书写复杂公式时,养成多用括号的习惯,即使根据运算符优先级可以省略。这能极大避免歧义,也便于自己和他人阅读。例如,∀x P(x) → Q(x)可能被理解为(∀x P(x)) → Q(x)还是∀x (P(x) → Q(x))?前者表示“如果所有x都满足P,那么Q(x)成立”(这里x在Q(x)中是自由的!),后者才是正确的“所有满足P的x都满足Q”。显式地写成∀x (P(x) → Q(x))就万无一失。
3. 公式拆解实战:从自然语言到形式化表达
现在,我们利用上面的“零件”和“规则”,来实际翻译几个自然语言语句。这是训练谓词逻辑思维的核心。
论域设定:为简化,我们通常将论域设定为“所有事物的集合”或根据上下文明确(如“所有人的集合”)。在公式中,论域通常隐含在谓词的含义中。
3.1 示例1:“所有乌鸦都是黑色的。”
识别关键元素:
- 个体:乌鸦(我们谈论的对象)。
- 属性:是乌鸦;是黑色的。
- 量词:所有。
选择符号:
- 设一元谓词
R(x)表示“x是乌鸦”。 - 设一元谓词
B(x)表示“x是黑色的”。
- 设一元谓词
构造公式:
- 语句说:对于任何一个个体x,如果x是乌鸦,那么x是黑色的。
- 这直接对应逻辑结构:
∀x (R(x) → B(x))。
为什么是“蕴含→”而不是“且∧”?这是初学者最容易混淆的点。∀x (R(x) ∧ B(x))的意思是“所有事物x,都既是乌鸦又是黑色的”。这断言了论域中每一个事物(包括你、我、这张桌子)都是乌鸦且是黑色的,这显然不是原句的意思。原句只对是乌鸦的那些东西做出了“是黑色”的断言,对那些不是乌鸦的东西(比如白天鹅),原句没有做出任何声称。R(x) → B(x)恰恰捕捉了这种“如果…则…”的关系:当R(x)为假(x不是乌鸦)时,无论B(x)是真是假,蕴含式R(x) → B(x)都为真,这符合原句对非乌鸦事物保持沉默的直觉。
3.2 示例2:“存在一只白色的乌鸦。”
识别关键元素:
- 个体:乌鸦。
- 属性:是乌鸦;是白色的。
- 量词:存在(至少一只)。
选择符号:
R(x):x是乌鸦。W(x):x是白色的。
构造公式:
- 语句说:至少存在一个个体x,使得x同时是乌鸦并且是白色的。
- 这对应逻辑结构:
∃x (R(x) ∧ W(x))。
为什么存在量词后用“且∧”?因为我们要断言找到的同一个个体x同时满足两个属性。∃x (R(x) → W(x))则是一个很弱的、几乎总是为真的陈述(因为只要找到一个不是乌鸦的x,比如一块石头,R(x)为假,那么R(x) → W(x)就为真,整个存在式就成立了),这完全不是“存在白色乌鸦”的意思。
3.3 示例3:“每个人都有父亲。”
识别关键元素:
- 个体:人;父亲(父亲本身也是一个人)。
- 属性:是人。
- 关系:…是…的父亲。
- 量词:所有(每个人)。
选择符号:
Person(x):x是人。FatherOf(x, y):x是y的父亲。(这是一个二元谓词)- 或者,我们也可以引入函数符号:
father(x)表示x的父亲(一个个体)。用函数符号通常更简洁。
构造公式(两种方式):
- 仅用谓词:对于每一个人x,都存在某个个体y,使得y是人并且y是x的父亲。
∀x (Person(x) → ∃y (Person(y) ∧ FatherOf(y, x)))
- 使用函数符号:对于每一个人x,
father(x)这个个体存在(这是函数符号定义的隐含要求),并且我们需要断言这个个体是人。∀x (Person(x) → Person(father(x)))
- 第二种写法更简洁直观,因为它直接用
father(x)这个项指代了“x的父亲”,而不需要引入一个存在量词和一个新的变元y来指代同一个东西。
- 仅用谓词:对于每一个人x,都存在某个个体y,使得y是人并且y是x的父亲。
3.4 示例4:“并非所有闪光的都是金子。”
这个例子展示了如何处理自然语言中的否定和量词组合。
理解语义:这句话等价于“存在闪光的东西,它不是金子”。或者,否定的是“所有闪光的东西都是金子”这个整体。
选择符号:
Glistens(x):x闪光的。Gold(x):x是金子。
构造公式:
- 先写出被否定的部分:“所有闪光的都是金子”:
∀x (Glistens(x) → Gold(x)) - 然后对整个公式进行否定:
¬∀x (Glistens(x) → Gold(x)) - 这个公式是正确的。但我们知道,
¬∀x φ(x)在逻辑上等价于∃x ¬φ(x)。因此,它等价于:∃x ¬(Glistens(x) → Gold(x))
- 进一步,
¬(P → Q)等价于P ∧ ¬Q。所以最终等价于:∃x (Glistens(x) ∧ ¬Gold(x))
- 这正是我们的直观理解:“存在一个x,它闪光但不是金子”。
- 先写出被否定的部分:“所有闪光的都是金子”:
实操心得:在翻译复杂语句时,特别是涉及多重否定(“并非所有…都不…”)或量词嵌套时,分步进行是关键。先翻译最内层的子句,再用连接词和量词组合起来。最后,可以利用逻辑等价式(如¬∀x P(x) ≡ ∃x ¬P(x),¬∃x P(x) ≡ ∀x ¬P(x),¬(P→Q) ≡ P ∧ ¬Q)来化简或验证公式,看其是否与自然语言直觉一致。这能有效避免逻辑错误。
4. 量词的相互作用与嵌套:理解“所有”和“存在”的微妙差别
当多个量词出现在同一个公式中时,它们的顺序至关重要。交换量词顺序通常会完全改变语句的含义。这是谓词逻辑中最精妙也最容易出错的部分之一。
4.1 示例对比:∀∃ 与 ∃∀
考虑论域是所有人,Loves(x, y)表示“x爱y”。
- 公式 A:
∀x ∃y Loves(x, y)- 解读:对每一个人x,都存在某个人y,使得x爱y。
- 含义:每个人都爱着某个人(可能每个人爱的人都不同)。这描述了一种普遍的“爱他人”的能力或状态。
- 公式 B:
∃y ∀x Loves(x, y)- 解读:存在某个人y,使得对所有人x,x都爱y。
- 含义:存在一个被所有人爱着的人(比如一个万人迷、一个圣贤)。这个断言比公式A要强得多。
显然,B蕴含A(如果有一个被所有人爱的人,那么自然每个人都爱着某个人——就是那个人),但A不蕴含B(可能每个人都爱着别人,但没有一个共同的爱慕对象)。量词顺序不可随意交换。
4.2 嵌套量词的翻译练习
语句:“每个人的每个朋友都认识某个明星。”
这个语句有三个量词:“每个…”、“每个…”、“某个…”。我们需要仔细梳理。
识别谓词和关系:
Person(x):x是人。FriendOf(x, y):x是y的朋友。Knows(x, y):x认识y。Celebrity(x):x是明星。- 为简化,我们假设论域就是人,可以省略
Person(x)。
分步构造:
- 核心是:对于任意一个人a,和a的任意一个朋友b,b都认识某个明星c。
- “b认识某个明星c”:
∃c (Celebrity(c) ∧ Knows(b, c)) - “对于a的任意一个朋友b”:
∀b (FriendOf(b, a) → [b认识某个明星c]) - “对于任意一个人a”:
∀a (∀b (FriendOf(b, a) → ∃c (Celebrity(c) ∧ Knows(b, c)))) - 最终公式:
∀a ∀b (FriendOf(b, a) → ∃c (Celebrity(c) ∧ Knows(b, c)))
注意:变元a,b,c的选择是任意的,只要不产生混淆。这里c的存在量词∃c在∀b的作用域内,这意味着:对于不同的朋友b,他们认识的明星c可能是不同的。这正是原句的意思。
如果原句意思是“存在一个明星,被每个人的每个朋友所认识”,那么量词顺序就应该是:∃c ∀a ∀b (...)。这再次强调了量词顺序的决定性作用。
4.3 量词与连接词的相互作用:辖域分析
一个变元是自由的还是约束的,取决于它是否在某个量词的辖域内。分析辖域是理解公式含义的基础。
示例公式:∀x (P(x) ∧ ∃y Q(x, y)) → R(x)
- 识别量词及其辖域:
∀x的辖域是(P(x) ∧ ∃y Q(x, y))。在这个范围内,所有x都是约束变元。∃y的辖域是Q(x, y)。在这个范围内,y是约束变元。
- 分析变元
x:- 在
P(x)和Q(x, y)中出现的x,都在∀x的辖域内,所以是约束出现。 - 在
R(x)中出现的x,不在任何量词的辖域内(∀x的辖域到右括号就结束了),所以是自由出现。
- 在
- 因此,这个公式不是闭公式(句子),因为它包含自由变元
x。它的真值依赖于对自由变元x的赋值。它表达的是:“如果所有x都满足P(x)并且存在y使得Q(x,y)成立,那么R(x)成立”——注意,结论R(x)里的x是自由的,和前提里的约束变元x不是同一个“东西”。这通常不是我们想要表达的意思。可能我们想让R(x)中的x也被全称量词约束,那么正确的写法应该是:∀x [(P(x) ∧ ∃y Q(x, y)) → R(x)]。这时,整个公式才是闭公式。
避坑指南:在书写包含多个量词和连接词的公式时,务必显式地用括号标明每个量词的辖域。仔细检查每个变元出现是自由的还是约束的,确保它符合你的意图。自由变元通常表示公式中的“参数”或“未知数”,而约束变元只是占位符,其名字可以系统性地更改(称为α-转换)而不改变公式含义,例如∀x P(x)和∀y P(y)是等价的。
5. 一阶逻辑的语义:公式何时为“真”?
语法告诉我们公式怎么写是正确的,而语义则告诉我们一个公式在什么情况下是真的。这是通过解释和赋值来实现的。
5.1 解释(Interpretation)
一个解释I为逻辑语言中的符号赋予具体的含义,它包括:
- 论域 D:一个非空集合,是我们讨论的所有对象的全集。
- 对每个个体常元的指定:将每个常元符号
a映射到论域D中的一个特定元素a^I。 - 对每个n元谓词符号的指定:将每个谓词符号
P映射到论域D上的一个n元关系P^I ⊆ Dⁿ。也就是说,P^I是D中满足关系P的所有n元组的集合。 - 对每个n元函数符号的指定:将每个函数符号
f映射到论域D上的一个n元函数f^I: Dⁿ → D。
示例:考虑语言包含常元0,一元谓词Even(偶数),二元谓词<(小于),二元函数+(加法)。
- 一个自然的解释
I是:- 论域
D= 自然数集合N。 0^I= 数字0。Even^I= {0, 2, 4, 6, ...} (所有偶数的集合)。<^I= {(m, n) | m, n ∈ N 且 m < n}。+^I= 普通的加法运算。
- 论域
5.2 赋值(Assignment)
给定一个解释I,一个赋值σ是一个函数,它为每个个体变元x指定论域D中的一个值σ(x)。赋值解决了自由变元指代什么对象的问题。
5.3 项和公式的语义(归纳定义)
在固定的解释I和赋值σ下,我们可以计算任何项t的值t^I[σ](它是D中的一个元素),以及任何公式φ的真值I ⊨ φ [σ](读作“在解释I和赋值σ下,φ成立”)。
- 项的值:
- 变元:
x^I[σ] = σ(x) - 常元:
a^I[σ] = a^I(由解释I直接给出) - 函数项:
f(t₁, ..., tₙ)^I[σ] = f^I(t₁^I[σ], ..., tₙ^I[σ])
- 变元:
- 公式的真值:
- 原子公式:
I ⊨ P(t₁, ..., tₙ) [σ]当且仅当(t₁^I[σ], ..., tₙ^I[σ]) ∈ P^I。 - 连接词:与命题逻辑相同,根据子公式的真值递归定义。例如,
I ⊨ (φ ∧ ψ) [σ]当且仅当I ⊨ φ [σ]且I ⊨ ψ [σ]。 - 全称量词:
I ⊨ ∀x φ [σ]当且仅当对于论域D中的每一个元素d,都有I ⊨ φ [σ(x:=d)]成立。这里σ(x:=d)表示一个与σ几乎相同的赋值,除了它将变元x映射到值d。 - 存在量词:
I ⊨ ∃x φ [σ]当且仅当存在论域D中的至少一个元素d,使得I ⊨ φ [σ(x:=d)]成立。
- 原子公式:
关键点:对于闭公式(句子),其真值不依赖于赋值σ,因为其中没有自由变元。所以我们可以直接说“解释I满足句子φ”,记作I ⊨ φ。
5.4 语义示例:验证一个公式
考虑公式φ: ∀x ∃y (x < y),在自然数解释I(如上定义)下,它是一个句子吗?它为真吗?
- 它是句子,因为没有自由变元。
- 要判断
I ⊨ ∀x ∃y (x < y)是否为真,根据语义:- 我们需要检查:对每一个自然数
n(作为x的值),是否存在一个自然数m(作为y的值),使得(n, m) ∈ <^I,即n < m。 - 对于任意给定的自然数
n,我们总可以取m = n+1,那么n < n+1成立。 - 因此,对每一个
x,我们都能找到这样的y。所以,I ⊨ φ成立。这个句子在自然数解释下为真。
- 我们需要检查:对每一个自然数
如果我们将论域改为有限的自然数集合,比如D = {0, 1, 2},那么对于x=2,就不存在y ∈ D使得2 < y。因此,在这个新的解释下,该句子为假。这展示了解释(特别是论域)如何决定公式的真假。
实操心得:理解语义是理解逻辑推理有效性的基础。一个推理是有效的,当且仅当在所有使得前提为真的解释下,结论也为真。当你对一个复杂公式的含义感到困惑时,尝试为其构造一个具体的、小的解释(比如论域只有两三个元素),并手动计算真值,这是极好的练习方法,能帮你直观把握量词和连接词的相互作用。
