🎯 本章要解决什么?让智能体学会“概括性思考”
想象以下场景:
-
用命题逻辑描述“所有猫都可爱”:
猫1可爱 ∧ 猫2可爱 ∧ 猫3可爱 ∧ ... ∧ 猫9999999可爱(需要为世界上每只猫写一条命题!)
-
用一阶逻辑描述:
∀x (猫(x) → 可爱(x))(一句话搞定所有猫!)
命题逻辑的瓶颈:只能说具体事实,不能表达“所有”、“有些”、“关系”。 一阶逻辑的升级:引入对象、关系、量词,让智能体能说“人话”中的普遍规律。
一、为什么需要一阶逻辑?命题逻辑的“三宗罪”
📝 命题逻辑:只能“点名道姓”
描述“张三是李四的父亲”:
父亲(张三,李四) = True
问题来了:
1. “所有父亲都是男性”怎么写?
要为每个父亲写:男性(张三) ∧ 男性(李四) ∧ ...
(世界上有多少父亲就要写多少行!)
2. “李四的父亲是谁?”怎么问?
只能枚举:父亲(张三,李四)? 父亲(王五,李四)? ...
(像查电话本,没有“按关系查询”功能)
3. “父亲的父亲是祖父”这种规律怎么表达?
写不完的组合:父亲(张三,李四)∧父亲(李四,王五)→祖父(张三,王五)
父亲(A,B)∧父亲(B,C)→祖父(A,C)
...
根本问题:命题逻辑是“原子”的,没有内部结构。
🔧 一阶逻辑的三大升级
| 维度 | 命题逻辑 | 一阶逻辑 | 生活比喻 |
|---|---|---|---|
| 对象 | 无 | 有(张三、猫、数字) | 从“无名棋子”到“有名字的棋子” |
| 关系 | 无 | 有(父子、大于、属于) | 从“单独标签”到“连接线” |
| 量词 | 无 | ∀(所有)、∃(存在) | 从“逐个点名”到“全体注意” |
一阶逻辑 = 命题逻辑 + 对象 + 关系 + 量词
二、一阶逻辑语法:学习“逻辑世界语”的造句规则
🧱 基础词汇表
1. 常量符号:给对象起名字
张三, 李四, 猫1, 北京, 42
像编程里的常量:const PI = 3.14
2. 变量符号:占位符
x, y, z, person, animal
像数学里的x:“对于任意x...”
3. 谓词符号:描述性质或关系
一元谓词(描述性质):
猫(x) # x是猫
男性(x) # x是男性
二元谓词(描述关系):
父亲(x,y) # x是y的父亲
大于(x,y) # x大于y
三元谓词:
借(x,y,z) # x向y借了z
4. 函数符号:从对象到对象的映射
年龄(张三) = 25 # 张三的年龄是25
父亲(李四) = 张三 # 李四的父亲是张三
加(2,3) = 5 # 2+3=5
注意:函数输出是对象,谓词输出是真/假
5. 量词:表达“多少”
∀x (猫(x) → 可爱(x)) # 所有猫都可爱
∃x (猫(x) ∧ 黑(x)) # 存在黑猫
∃x ∀y (爱(x,y)) # 有人爱所有人(情圣!)
∀x ∃y (爱(x,y)) # 每个人都有人爱(理想世界)
📐 造句规则:如何组合成合法句子
项(Term):指代对象的表达式
常量:张三
变量:x
函数应用:年龄(父亲(李四))
原子语句(Atomic Sentence):最基本的陈述
谓词应用于项:
猫(小花) # 小花是猫
父亲(张三, 李四) # 张三是李四的父亲
大于(加(2,3), 4) # 2+3 > 4
复合语句:用逻辑连接词组合
和命题逻辑一样:
¬猫(x) # x不是猫
猫(x) ∧ 黑(x) # x是黑猫
猫(x) → 可爱(x) # 如果x是猫,那么x可爱
∀x (猫(x) → 可爱(x)) # 所有猫都可爱
量词的作用域:括号很重要!
∀x (猫(x) ∧ 可爱(x)) # 所有东西都是猫且可爱(显然假)
∀x (猫(x) → 可爱(x)) # 所有猫都可爱(可能真)
∃x (猫(x) → 飞(x)) # 存在x,如果x是猫那么x会飞
# 只要有个不是猫的东西,这句话就真!
# (因为“假→任何”都为真)
等词(=):说两个东西是同一个
父亲(小明) = 张三 # 小明的父亲是张三
∀x ∀y (父亲(x)=父亲(y) → x=y) # 父亲相同则孩子相同(独生子女政策?)
三、一阶逻辑语义:给符号赋予“现实意义”
🏛️ 模型:逻辑的“平行宇宙”
一个模型包括:
-
论域(Domain):所有对象的集合
比如:{张三, 李四, 小花, 北京, 42} -
解释(Interpretation):给每个符号赋予意义
常量符号:张三 → 现实中的张三这个人 谓词符号:猫(·) → {小花}(只有小花是猫) 父亲(·,·) → {(张三,李四)}(张三是李四的父亲) 函数符号:年龄(·) → {张三→25, 李四→30, ...}
🌰 语义示例:同一个句子,不同模型
句子:∃x (猫(x) ∧ 黑(x))
| 模型 | 论域 | 解释 | 句子真假 |
|---|---|---|---|
| 模型1 | {小花, 小白} | 猫={小花,小白}, 黑={小花} | 真(小花是黑猫) |
| 模型2 | {小花, 小白} | 猫={小花,小白}, 黑={} | 假(没有黑猫) |
| 模型3 | {汽车, 房子} | 猫={}, 黑={汽车} | 假(没有猫) |
关键:句子真假取决于选择的模型!
📊 数据库语义 vs 标准语义
标准语义(开放世界假设):
不知道的就是不知道,可能为真也可能为假
如:知识库没说“小花是猫”,不代表小花不是猫
数据库语义(封闭世界假设):
知识库没说的就是假
如:知识库没说“小花是猫”,就认为小花不是猫
(像数据库查询:查不到记录就当不存在)
四、使用一阶逻辑:从“语法造句”到“实际应用”
💬 断言与查询
# 往知识库添加断言(事实)
断言:猫(小花)
断言:∀x (猫(x) → 哺乳动物(x))
# 向知识库提出查询
查询:哺乳动物(小花)? # 回答:是
查询:∃x (猫(x) ∧ 白(x))? # 回答:不知道(没说过颜色)
👨👩👧👦 经典例子:亲属关系
# 基本谓词
父母(x,y) # x是y的父母
男性(x) # x是男性
女性(x) # x是女性
# 定义其他关系
父亲(x,y) ≡ 父母(x,y) ∧ 男性(x)
母亲(x,y) ≡ 父母(x,y) ∧ 女性(x)
子女(x,y) ≡ 父母(y,x)
兄弟(x,y) ≡ ∃z (父母(z,x) ∧ 父母(z,y) ∧ 男性(x) ∧ x≠y)
姐妹(x,y) ≡ ∃z (父母(z,x) ∧ 父母(z,y) ∧ 女性(x) ∧ x≠y)
祖父(x,y) ≡ ∃z (父母(x,z) ∧ 父母(z,y) ∧ 男性(x))
...
# 添加事实
父母(张三, 李四)
父母(张三, 王五)
男性(张三)
女性(李四)
男性(王五)
# 查询
祖父(张三, 小明)? # 需要知道小明的父母
兄弟(李四, 王五)? # 是!有共同父母张三
🔢 数、集合与列表
# 自然数(皮亚诺公理)
0是自然数:NatNum(0)
后继函数:∀n (NatNum(n) → NatNum(S(n)))
加法定义:∀m NatNum(m) → 加(m,0)=m
∀m∀n NatNum(m)∧NatNum(n) → 加(m,S(n))=S(加(m,n))
# 集合
成员(x,S) # x是集合S的元素
子集(S1,S2) # S1是S2的子集
并集(S1,S2,S3)# S3是S1和S2的并集
# 列表
空列表:[]
构造:Cons(元素, 列表)
头(Cons(x,y)) = x
尾(Cons(x,y)) = y
🌍 重回Wumpus世界(现在能说“人话”了!)
# 用命题逻辑时(啰嗦)
Breeze₁,₁ ↔ (P₁,₂ ∨ P₂,₁ ∨ P₁,₀ ∨ P₀,₁) # 还要处理边界!
# 用一阶逻辑(简洁通用)
∀x∀y (Breeze(x,y) ↔ ∃dx∃dy (相邻(dx,dy) ∧ Pit(x+dx, y+dy)))
# “格子(x,y)有风 当且仅当 存在相邻格子有陷阱”
# 一条规则适用于所有格子!
五、一阶逻辑中的知识工程:如何建造“逻辑大厦”
🏗️ 知识工程五步法
1. 确定任务:要解决什么问题?
例:家庭关系推理系统
任务:回答“张三是李四的舅舅吗?”
2. 知识获取:收集事实和规则
采访家族长辈、查家谱、看户口本...
得到:父母关系、性别、婚姻关系等
3. 选择词汇:定义谓词和常量
常量:张三, 李四, 王五...
谓词:父母(x,y), 男性(x), 女性(x), 结婚(x,y)
4. 编码一般知识:写“家族宪法”
父亲(x,y) ≡ 父母(x,y) ∧ 男性(x)
母亲(x,y) ≡ 父母(x,y) ∧ 女性(x)
子女(x,y) ≡ 父母(y,x)
兄弟(x,y) ≡ ∃z (父母(z,x) ∧ 父母(z,y) ∧ 男性(x) ∧ x≠y)
姐妹(x,y) ≡ ∃z (父母(z,x) ∧ 父母(z,y) ∧ 女性(x) ∧ x≠y)
叔叔(x,y) ≡ ∃z (兄弟(x,z) ∧ 父母(z,y))
...
5. 编码具体事实:填“家族成员表”
父母(张爷爷, 张三爸)
父母(张爷爷, 张叔叔)
父母(张三爸, 张三)
男性(张爷爷)
男性(张三爸)
男性(张叔叔)
男性(张三)
...
6. 提出查询并调试
查询:叔叔(张叔叔, 张三)? # 应该是
系统:是 ✓
查询:叔叔(张三, 李四)? # 应该不是
系统:是? → 检查规则!
发现bug:叔叔规则没要求“x是男性” → 修正
🔌 实例:电子电路领域
# 词汇
类型(x,与门) # x是与门
类型(x,或门) # x是或门
输入(x,i) # i是x的输入
输出(x,o) # o是x的输出
连接(o,i) # 输出o连接到输入i
信号(s) # s是信号(0或1)
# 电路行为规则
∀x (类型(x,与门) → ∀t (信号(输出(x),t) =
∀i (输入(x,i) → 信号(i,t))的所有信号的与))
# “与门的输出是所有输入的逻辑与”
∀x (类型(x,或门) → ∀t (信号(输出(x),t) =
∃i (输入(x,i) ∧ 信号(i,t))))
# “或门的输出是至少一个输入为真”
# 具体电路
类型(G1,与门)
类型(G2,或门)
输入(G1, In1)
输入(G1, In2)
输入(G2, In3)
输入(G2, 输出(G1)) # G1的输出是G2的输入
...
# 查询:如果In1=1, In2=0, In3=1,输出是什么?
六、一阶逻辑的威力与局限
✨ 一阶逻辑的表达能力
能表达:
- “所有猫都怕水”:∀x (猫(x) → 怕水(x))
- “存在会飞的猪”:∃x (猪(x) ∧ 会飞(x))
- “每个人的母亲都是女性”:∀x∀y (母亲(x,y) → 女性(x))
- “没有最大的整数”:¬∃x (整数(x) ∧ ∀y (整数(y) → y≤x))
⚠️ 一阶逻辑的局限性
-
不能表达“大多数”:
“大多数猫怕水” → 无法直接表达 需要:统计然后说“超过50%的猫...” -
不能表达概率:
“猫有70%概率怕水” → 需要概率逻辑扩展 -
不能表达模糊概念:
“小明有点高” → “有点”是模糊的 -
二阶逻辑才有的:
“所有性质都...”:∀P (P(x) → ...) 这是一阶逻辑做不到的
🚀 一阶逻辑在AI中的核心地位
- 知识表示的基础:语义网、本体论、知识图谱都基于一阶逻辑思想
- 数据库的理论基础:SQL查询本质上是一阶逻辑查询
- 自动推理的起点:定理证明、逻辑编程(Prolog)
- 自然语言理解:将句子转化为逻辑形式
🧠 第8章思维升华
从“点状思维”到“关系型思维”
- 命题逻辑:世界是事实的集合(点状信息)
- 一阶逻辑:世界是对象+关系的网络(连接的信息)
知识表示的哲学
一阶逻辑假设:
1. 世界由对象组成
2. 对象有性质
3. 对象间有关系
4. 有些性质/关系适用于所有对象
5. 有些对象具有某些性质/关系
这几乎是我们认知世界的基本方式!
实际应用中的权衡
完全的一阶逻辑推理很强大,但计算复杂
实际系统常用:
- 数据库语义(封闭世界)
- 霍恩子句(受限但高效)
- 与概率结合(处理不确定性)
最后一句大实话:
一阶逻辑就像“万能公式”——能描述几乎所有规律性知识。
但现实世界充满例外:“所有天鹅都是白的”(直到发现黑天鹅)。
所以第10章要讲“非单调推理”:新证据可能推翻旧结论。
2482

被折叠的 条评论
为什么被折叠?



