《人工智能现代方法(第4版)》 第8章 一阶逻辑 学习笔记

🎯 本章要解决什么?让智能体学会"概括性思考"

想象以下场景:

  • 用命题逻辑描述"所有猫都可爱"

    复制代码
    猫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)  # 父亲相同则孩子相同(独生子女政策?)

三、一阶逻辑语义:给符号赋予"现实意义"

🏛️ 模型:逻辑的"平行宇宙"

一个模型包括:

  1. 论域(Domain):所有对象的集合

    复制代码
    比如:{张三, 李四, 小花, 北京, 42}
  2. 解释(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))

⚠️ 一阶逻辑的局限性

  1. 不能表达"大多数"

    复制代码
    "大多数猫怕水" → 无法直接表达
    需要:统计然后说"超过50%的猫..."
  2. 不能表达概率

    复制代码
    "猫有70%概率怕水" → 需要概率逻辑扩展
  3. 不能表达模糊概念

    复制代码
    "小明有点高" → "有点"是模糊的
  4. 二阶逻辑才有的

    复制代码
    "所有性质都...":∀P (P(x) → ...)
    这是一阶逻辑做不到的

🚀 一阶逻辑在AI中的核心地位

  1. 知识表示的基础:语义网、本体论、知识图谱都基于一阶逻辑思想
  2. 数据库的理论基础:SQL查询本质上是一阶逻辑查询
  3. 自动推理的起点:定理证明、逻辑编程(Prolog)
  4. 自然语言理解:将句子转化为逻辑形式

🧠 第8章思维升华

从"点状思维"到"关系型思维"

  • 命题逻辑 :世界是事实的集合(点状信息)
  • 一阶逻辑 :世界是对象+关系的网络(连接的信息)

知识表示的哲学

复制代码
一阶逻辑假设:
1. 世界由对象组成
2. 对象有性质
3. 对象间有关系
4. 有些性质/关系适用于所有对象
5. 有些对象具有某些性质/关系

这几乎是我们认知世界的基本方式!

实际应用中的权衡

复制代码
完全的一阶逻辑推理很强大,但计算复杂
实际系统常用:
- 数据库语义(封闭世界)
- 霍恩子句(受限但高效)
- 与概率结合(处理不确定性)

最后一句大实话
一阶逻辑就像"万能公式"------能描述几乎所有规律性知识。
但现实世界充满例外:"所有天鹅都是白的"(直到发现黑天鹅)。
所以第10章要讲"非单调推理":新证据可能推翻旧结论。

相关推荐
好奇龙猫5 小时前
【AI学习-comfyUI学习-第十四节-joycaption3课程工作流工作流-各个部分学习】
人工智能·学习
子夜江寒5 小时前
Python 学习-Day9-pandas数据导入导出操作
python·学习·pandas
点云SLAM5 小时前
Decisive 英文单词学习
人工智能·学习·英文单词学习·雅思备考·decisive·起决定性的·果断的
码农很忙5 小时前
让复杂AI应用构建像搭积木:Spring AI Alibaba Graph深度指南与源码拆解
开发语言·人工智能·python
风止何安啊5 小时前
递归 VS 动态规划:从 “无限套娃计算器” 到 “积木式解题神器”
前端·javascript·算法
渡我白衣5 小时前
计算机组成原理(1):计算机发展历程
java·运维·开发语言·网络·c++·笔记·硬件架构
踢球的打工仔5 小时前
前端html(2)
前端·算法·html
余俊晖5 小时前
多模态视觉语言模型增强原生分辨率继续预训练方法-COMP架构及训练方法
人工智能·语言模型·自然语言处理