一阶逻辑与量词推理
为什么引入谓词
命题逻辑可以把“苏格拉底是人”记为 \(p\),却不能直接表达“所有人都会死”如何作用于某一个人。一阶逻辑(First-order Logic,FOL)增加对象、谓词和量词,表达共同结构。
| 成分 | 英文 | 含义与例子 |
|---|---|---|
| 个体域 | Domain of Discourse | 本次讨论的对象集合,通常约定非空 |
| 常量 | Constant | 特定对象,如 \(\mathrm{Socrates}\) |
| 变量 | Variable | 域中可变的对象,如 \(x,y\) |
| 函数 | Function | 将对象映射为对象,如 \(\mathrm{FatherOf}(x)\) |
| 谓词 | Predicate | 对象的属性或关系,如 \(\mathrm{Human}(x)\)、\(\mathrm{Sister}(x,y)\) |
| 量词 | Quantifier | \(\forall\)“所有”,\(\exists\)“至少存在一个” |
常量、变量,以及把函数应用于项所得的表达式都是项(Term)。项代入谓词构成原子公式;原子公式再通过联结词和量词形成更复杂公式。
例如 \(\mathrm{King}(\mathrm{Richard})\)、\(\mathrm{Sister}(\mathrm{Lucy},\mathrm{Lily})\)、\(\mathrm{Capital}(\mathrm{Beijing},\mathrm{China})\)。谓词的参数数量叫元数(Arity);二元谓词并不意味着二阶逻辑。一阶量词作用于个体,二阶逻辑允许量化谓词或集合等更高层对象。
解释、自由变量与句子
一个解释需要指定域、常量所指对象、函数的映射与谓词的真值关系。带自由变量(Free Variable)的公式还依赖变量赋值。
在 \(\forall x\,\mathrm{Likes}(x,y)\) 中,\(x\) 受量词约束,是约束变量(Bound Variable);\(y\) 是自由变量。没有自由变量的公式称为句子/封闭公式(Sentence / Closed Formula),才可在一个解释下直接讨论真值。
替换变量要避免变量捕获(Variable Capture):不能让原本自由的变量因替换而意外落入同名量词作用域。
全称与存在的正确表达
“所有国王都是人”:
不能改成 \(\forall x(\mathrm{King}(x)\land\mathrm{Human}(x))\),后者说域中每个对象都是国王且是人。
“存在一个国王是人”:
不能改成存在量词下的蕴涵,因为任意非国王对象都可能让蕴涵真,从而无法保证存在国王。
全称条件并不自动保证相应对象存在:如果没有国王,“所有国王都是人”仍为真。存在性要另行表达。
量词顺序与否定
表示每个 \(x\) 都有某个对应 \(y\),不同 \(x\) 的 \(y\) 可以不同。
表示有一个共同的 \(y\) 适用于所有 \(x\)。这通常更强,二者不等价。
否定量词时必须交换量词:
合法分配包括:
但全称不能一般地分配到析取,存在不能一般地分配到合取。令域为 \(\{a,b\}\),只有 \(P(a)\) 与 \(Q(b)\) 为真:每个对象都满足 \(P\lor Q\),却并非所有对象满足 \(P\) 或所有对象满足 \(Q\);分别存在 \(P\)、\(Q\) 对象,也不表示存在同时满足两者的同一个对象。
四类量词推理规则
| 规则 | 英文 | 操作 | 必要条件 |
|---|---|---|---|
| 全称实例化 | Universal Instantiation | 从 \(\forall xP(x)\) 得 \(P(t)\) | \(t\) 可合法替换 \(x\),不发生变量捕获 |
| 全称概括 | Universal Generalization | 从任意对象 \(a\) 的 \(P(a)\) 得 \(\forall xP(x)\) | \(a\) 真正任意,不能依赖关于它的特殊未解除假设 |
| 存在引入 | Existential Introduction | 从 \(P(t)\) 得 \(\exists xP(x)\) | 使用合法项并正确替换 |
| 存在消去/实例化 | Existential Elimination / Instantiation | 从 \(\exists xP(x)\) 引入新见证 \(a\),在该分支假设 \(P(a)\) | \(a\) 必须新鲜;最终结论不能依赖它是某个预先指定对象 |
存在见证(Witness)是“某一个”,全称证明中的任意对象是“任意一个”;二者不能混用。不能从“有人聪明”选择某个已知人,再断言这个人聪明。
课堂例题一:三段论
前提:
对第一个前提实例化,得到 \(\mathrm{Human}(\mathrm{Socrates})\to\mathrm{Mortal}(\mathrm{Socrates})\),再用假言推理得 \(\mathrm{Mortal}(\mathrm{Socrates})\)。
课堂例题二:传递一般规则
由 \(\forall x(P(x)\to Q(x))\) 与 \(\forall x(Q(x)\to R(x))\) 证明:
取任意新对象 \(a\),实例化两个前提。暂时假设 \(P(a)\),连续两次假言推理得 \(Q(a)\)、\(R(a)\)。解除暂时假设,得 \(P(a)\to R(a)\);因为 \(a\) 任意且未依赖特殊条件,可以全称概括。
课堂例题三:至少有一架飞机在地面
前提:所有飞机都在地面或天空;并非所有飞机都在天空。
否定第二式、消去蕴涵,得到:
引入新见证 \(a\),得 \(\mathrm{Plane}(a)\) 和 \(\neg\mathrm{Sky}(a)\)。第一式实例化并假言推理,得 \(\mathrm{Ground}(a)\lor\mathrm{Sky}(a)\);用单位归结得到 \(\mathrm{Ground}(a)\)。合取后存在引入,解除见证分支:
结论必须用合取保证对象确实是飞机;不能写成 \(\exists x(\mathrm{Plane}(x)\to\mathrm{Ground}(x))\)。
从表达走向自动推理
一阶规则需要在变量与具体项之间匹配。合一(Unification)寻找使表达式一致的替换,如 \(\mathrm{Father}(x,y)\) 与 \(\mathrm{Father}(\mathrm{David},\mathrm{Ann})\) 可用 \(\{x\mapsto\mathrm{David},y\mapsto\mathrm{Ann}\}\) 匹配。
前向推理(Forward Chaining)从已知事实出发应用规则;后向推理(Backward Chaining)从待证明目标出发寻找可支持它的前提。二者都要处理规则、变量与搜索,而非只做字符串替换。
知识图谱与规则学习进一步研究:规则未知时,能否从关系样本中学到规则?
课程来源与公式校订见 资料对照与校订依据。