人工智能之数据基础 离散数学
第一章 集合论与逻辑推理
前言
离散数学是计算机科学、人工智能和形式化方法的理论基石。集合论提供了数据结构的抽象基础,命题逻辑和谓词逻辑则是知识表示、自动推理和规则系统的核心工具。本文系统讲解:
- 集合的基本概念与运算
- 命题逻辑:语法、真值表、等价与推理规则
- 谓词逻辑:量词、AI 中的知识表示(如专家系统)
- 配套 Python 代码实现(使用
sympy.logic、自定义类、规则引擎示例)
一、集合论(Set Theory)
1. 基本概念
- 集合(Set):无序、互异元素的汇集,记作
- 元素(Element): 表示 属于
- 空集: 或
- 全集:讨论范围内的所有元素,记为
2. 集合运算
| 运算 | 符号 | 定义 | Python |
|---|---|---|---|
| 并集 | A | B | ||
| 交集 | A & B | ||
| 差集 | A - B | ||
| 对称差 | A ^ B | ||
| 补集 | U - A | ||
| 幂集 | 的所有子集 | itertools.chain.from_iterable(...) |
3. 集合恒等式(定律)
- 交换律:
- 结合律:
- 分配律:
- 德·摩根律:
✅ Python 实现:集合运算与幂集
from itertools import chain, combinations
# 基本集合运算
U = set(range(1, 11)) # 全集 {1,2,...,10}
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}
print("A =", A)
print("B =", B)
print("A ∪ B =", A | B)
print("A ∩ B =", A & B)
print("A - B =", A - B)
print("A △ B =", A ^ B)
print("Aᶜ =", U - A)
# 幂集生成
def powerset(s):
s = list(s)
return list(chain.from_iterable(combinations(s, r) for r in range(len(s)+1)))
print("\n𝒫(A) =", powerset(A))
二、命题逻辑(Propositional Logic)
1. 基本概念
- 命题(Proposition):可判断真假的陈述句,如 “今天下雨”(记为 )
- 逻辑联结词:
- 否定:(非 P)
- 合取:(P 且 Q)
- 析取:(P 或 Q)
- 蕴涵:(若 P 则 Q)
- 等价:(P 当且仅当 Q)
💡 蕴涵 等价于
2. 真值表(Truth Table)
| P | Q | |||||
|---|---|---|---|---|---|---|
| T | T | F | T | T | T | T |
| T | F | F | F | T | F | F |
| F | T | T | F | T | T | F |
| F | F | T | F | F | T | T |
3. 逻辑等价(Logical Equivalences)
- 双重否定:
- 德·摩根律:
- 蕴涵等价:
- 逆否命题:
4. 推理规则(Rules of Inference)
- 假言推理(Modus Ponens):
- 拒取式(Modus Tollens):
- 假言三段论:
✅ Python 实现:命题逻辑(使用 SymPy)
from sympy import symbols
from sympy.logic import And, Or, Not, Implies, Equivalent
from sympy.logic.boolalg import truth_table
# 定义命题变量
P, Q, R = symbols('P Q R')
# 构造复合命题
expr1 = Implies(P, Q) # P → Q
expr2 = Equivalent(P, Q) # P ↔ Q
expr3 = And(P, Or(Q, Not(R))) # P ∧ (Q ∨ ¬R)
print("表达式1:", expr1)
print("表达式2:", expr2)
print("表达式3:", expr3)
# 生成真值表
print("\n真值表 (P → Q):")
for row in truth_table(expr1, [P, Q]):
print(row)
三、谓词逻辑(Predicate Logic)
1. 为什么需要谓词逻辑?
命题逻辑无法表达个体、属性和关系。 例如:“所有人类都会死” —— 需要量词和谓词。
2. 基本构件
- 个体常量:
Socrates,Alice - 谓词:
Human(x),Mortal(x),Loves(x, y) - 量词:
- 全称量词:(对所有 x,P(x) 成立)
- 存在量词:(存在 x 使得 P(x) 成立)
3. 示例:经典三段论
- ∴
✅ 这是一阶逻辑(First-Order Logic, FOL) 的典型推理
4. 量词的否定
四、AI 中的逻辑应用:规则表示与推理
1. 专家系统(Expert Systems)
使用产生式规则(Production Rules):
IF Human(X) THEN Mortal(X)
IF Parent(X, Y) AND Male(X) THEN Father(X, Y)
2. 知识图谱与逻辑查询
- 谓词
LivesIn(Alice, Paris)可用于推理 - 查询:
∃x (LivesIn(x, Paris) ∧ WorksAt(x, Google))
3. 自动定理证明
- 输入公理和目标,系统自动推导是否成立
- 如:Coq, Prolog, Z3 求解器
✅ Python 实现:简单规则引擎(基于谓词逻辑)
# 知识库:事实 + 规则
facts = {
('Human', 'Socrates'),
('Human', 'Plato'),
('Parent', 'Zeus', 'Athena'),
('Male', 'Zeus')
}
# 规则:(前提列表, 结论)
rules = [
# Rule 1: ∀x (Human(x) → Mortal(x))
([('Human', 'X')], ('Mortal', 'X')),
# Rule 2: ∀x∀y (Parent(x,y) ∧ Male(x) → Father(x,y))
([('Parent', 'X', 'Y'), ('Male', 'X')], ('Father', 'X', 'Y'))
]
def unify(var, value, theta):
"""合一:将变量 var 替换为 value"""
if var in theta:
return unify(theta[var], value, theta)
elif value in theta:
return unify(var, theta[value], theta)
else:
theta[var] = value
return theta
def match_rule(rule, facts):
premises, conclusion = rule
matches = []
for fact in facts:
theta = {}
if len(fact) == len(premises[0]) and premises[0][0] == fact[0]:
# 简单匹配(仅处理单前提规则)
for i in range(1, len(fact)):
if premises[0][i].startswith('?') or premises[0][i].isupper():
theta = unify(premises[0][i], fact[i], theta)
elif premises[0][i] != fact[i]:
theta = None
break
if theta is not None:
# 应用 theta 到结论
new_fact = [conclusion[0]]
for term in conclusion[1:]:
new_fact.append(theta.get(term, term))
matches.append(tuple(new_fact))
return matches
# 推理:应用规则生成新事实
new_facts = set()
for rule in rules:
inferred = match_rule(rule, facts)
new_facts.update(inferred)
print("原始事实:")
for f in facts: print(f)
print("\n推理出的新事实:")
for f in new_facts: print(f)
📌 输出:
推理出的新事实: ('Mortal', 'Socrates') ('Mortal', 'Plato') ('Father', 'Zeus', 'Athena')
✅ 使用 Z3 求解器进行自动推理(高级)
# pip install z3-solver
from z3 import *
# 声明类型和函数
Person = DeclareSort('Person')
Human = Function('Human', Person, BoolSort())
Mortal = Function('Mortal', Person, BoolSort())
socrates = Const('socrates', Person)
# 公理
axiom1 = ForAll([Person], Implies(Human(Person), Mortal(Person)))
fact1 = Human(socrates)
# 创建求解器
solver = Solver()
solver.add(axiom1)
solver.add(fact1)
# 查询:Mortal(socrates) 是否成立?
query = Mortal(socrates)
solver.add(Not(query)) # 反证法:假设不成立
if solver.check() == unsat:
print("✅ 可推导出: Mortal(socrates)")
else:
print("❌ 无法推导")
五、逻辑在 AI 中的实际应用
| 应用领域 | 逻辑形式 | 工具/系统 |
|---|---|---|
| 专家系统 | 产生式规则(IF-THEN) | CLIPS, Drools |
| 知识图谱推理 | 描述逻辑(DL) | OWL, SPARQL |
| 程序验证 | 霍尔逻辑 | Coq, Isabelle |
| 约束满足问题 | 命题逻辑/SMT | Z3, MiniSat |
| 自然语言理解 | 谓词逻辑 | Prolog, λ-演算 |
💡 现代趋势:神经符号系统(Neuro-Symbolic AI)结合深度学习与逻辑推理
六、总结
| 主题 | 核心思想 | 计算机意义 |
|---|---|---|
| 集合论 | 数据的抽象容器 | 数据结构、数据库理论基础 |
| 命题逻辑 | 真假组合与推理 | 电路设计、布尔搜索、SAT 求解 |
| 谓词逻辑 | 个体、关系与量词 | 知识表示、自动推理、语义网 |
🔚 关键洞见:
- 集合是数据的“骨架”,逻辑是推理的“引擎”;
- AI 不仅需要学习,还需要推理——逻辑提供可解释、可验证的推理机制;
- 从规则引擎到神经符号 AI,逻辑始终是智能系统不可或缺的一环。
后续
python过渡项目部分代码已经上传至gitee,后续会逐步更新。
资料关注
公众号:咚咚王 gitee:gitee.com/wy185850518…

《Python编程:从入门到实践》 《利用Python进行数据分析》 《算法导论中文第三版》 《概率论与数理统计(第四版) (盛骤) 》 《程序员的数学》 《线性代数应该这样学第3版》 《微积分和数学分析引论》 《(西瓜书)周志华-机器学习》 《TensorFlow机器学习实战指南》 《Sklearn与TensorFlow机器学习实用指南》 《模式识别(第四版)》 《深度学习 deep learning》伊恩·古德费洛著 花书 《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》 《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》 《自然语言处理综论 第2版》 《Natural-Language-Processing-with-PyTorch》 《计算机视觉-算法与应用(中文版)》 《Learning OpenCV 4》 《AIGC:智能创作时代》杜雨+&+张孜铭 《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》 《从零构建大语言模型(中文版)》 《实战AI大模型》 《AI 3.0》