人工智能之数据基础 离散数学
第一章 集合论与逻辑推理—公式关注公众号
文章目录
- 人工智能之数据基础 离散数学
- 前言
- 一、集合论(Set Theory)
- 1. 基本概念
- 2. 集合运算
- 3. 集合恒等式(定律)
- ✅ Python 实现:集合运算与幂集
- 二、命题逻辑(Propositional Logic)
- 1. 基本概念
- 2. 真值表(Truth Table)
- 3. 逻辑等价(Logical Equivalences)
- 4. 推理规则(Rules of Inference)
- ✅ Python 实现:命题逻辑(使用 SymPy)
- 三、谓词逻辑(Predicate Logic)
- 1. 为什么需要谓词逻辑?
- 2. 基本构件
- 3. 示例:经典三段论
- 4. 量词的否定
- 四、AI 中的逻辑应用:规则表示与推理
- 1. 专家系统(Expert Systems)
- 2. 知识图谱与逻辑查询
- 3. 自动定理证明
- ✅ Python 实现:简单规则引擎(基于谓词逻辑)
- ✅ 使用 Z3 求解器进行自动推理(高级)
- 五、逻辑在 AI 中的实际应用
- 六、总结
- 后续
- 资料关注
前言
离散数学是计算机科学、人工智能和形式化方法的理论基石。集合论提供了数据结构的抽象基础,命题逻辑和谓词逻辑则是知识表示、自动推理和规则系统的核心工具。本文系统讲解:
- 集合的基本概念与运算
- 命题逻辑:语法、真值表、等价与推理规则
- 谓词逻辑:量词、AI 中的知识表示(如专家系统)
- 配套 Python 代码实现(使用
sympy.logic、自定义类、规则引擎示例)
一、集合论(Set Theory)
1. 基本概念
- 集合(Set):无序、互异元素的汇集,记作 $ A = {a, b, c} $
- 元素(Element):$ x \in A $ 表示 $ x $ 属于 $ A $
- 空集:$ \emptyset $ 或 $ {} $
- 全集:讨论范围内的所有元素,记为 $ U $
2. 集合运算
| 运算 | 符号 | 定义 | Python |
|---|---|---|---|
| 并集 | $ A \cup B $ | $ {x \mid x \in A \text{ 或 } x \in B} $ | A | B |
| 交集 | $ A \cap B $ | $ {x \mid x \in A \text{ 且 } x \in B} $ | A & B |
| 差集 | $ A - B $ | $ {x \mid x \in A \text{ 且 } x \notin B} $ | A - B |
| 对称差 | $ A \triangle B $ | $ (A - B) \cup (B - A) $ | A ^ B |
| 补集 | $ A^c $ | $ U - A $ | U - A |
| 幂集 | $ \mathcal{P}(A) $ | $ A $ 的所有子集 | itertools.chain.from_iterable(...) |
3. 集合恒等式(定律)
- 交换律:$ A \cup B = B \cup A $
- 结合律:$ (A \cup B) \cup C = A \cup (B \cup C) $
- 分配律:$ A \cap (B \cup C) = (A \cap B) \cup (A \cap C)$
- 德·摩根律:
( A ∪ B ) c = A c ∩ B c , ( A ∩ B ) c = A c ∪ B c (A \cup B)^c = A^c \cap B^c, \quad (A \cap B)^c = A^c \cup B^c(A∪B)c=Ac∩Bc,(A∩B)c=Ac∪Bc
✅ Python 实现:集合运算与幂集
fromitertoolsimportchain,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)# 幂集生成defpowerset(s):s=list(s)returnlist(chain.from_iterable(combinations(s,r)forrinrange(len(s)+1)))print("\n𝒫(A) =",powerset(A))二、命题逻辑(Propositional Logic)
1. 基本概念
- 命题(Proposition):可判断真假的陈述句,如 “今天下雨”(记为 $ P $)
- 逻辑联结词:
- 否定:$ \neg P $(非 P)
- 合取:$ P \land Q $(P 且 Q)
- 析取:$ P \lor Q $(P 或 Q)
- 蕴涵:$ P \to Q $(若 P 则 Q)
- 等价:$ P \leftrightarrow Q $(P 当且仅当 Q)
💡 蕴涵 $P \to Q $等价于 $\neg P \lor Q $
2. 真值表(Truth Table)
| P | Q | $ \neg P $ | $P \land Q $ | $ P \lor Q $ | $P \to Q $ | $ P \leftrightarrow 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)
- 双重否定:$ \neg(\neg P) \equiv P $
- 德·摩根律:
¬ ( P ∧ Q ) ≡ ¬ P ∨ ¬ Q , ¬ ( P ∨ Q ) ≡ ¬ P ∧ ¬ Q \neg(P \land Q) \equiv \neg P \lor \neg Q, \quad \neg(P \lor Q) \equiv \neg P \land \neg Q¬(P∧Q)≡¬P∨¬Q,¬(P∨Q)≡¬P∧¬Q - 蕴涵等价:$ P \to Q \equiv \neg P \lor Q $
- 逆否命题:$ P \to Q \equiv \neg Q \to \neg P $
4. 推理规则(Rules of Inference)
- 假言推理(Modus Ponens):
P → Q , P ∴ Q \frac{P \to Q,\ P}{\therefore Q}∴QP→Q,P - 拒取式(Modus Tollens):
P → Q , ¬ Q ∴ ¬ P \frac{P \to Q,\ \neg Q}{\therefore \neg P}∴¬PP→Q,¬Q - 假言三段论:
P → Q , Q → R ∴ P → R \frac{P \to Q,\ Q \to R}{\therefore P \to R}∴P→RP→Q,Q→R
✅ Python 实现:命题逻辑(使用 SymPy)
fromsympyimportsymbolsfromsympy.logicimportAnd,Or,Not,Implies,Equivalentfromsympy.logic.boolalgimporttruth_table# 定义命题变量P,Q,R=symbols('P Q R')# 构造复合命题expr1=Implies(P,Q)# P → Qexpr2=Equivalent(P,Q)# P ↔ Qexpr3=And(P,Or(Q,Not(R)))# P ∧ (Q ∨ ¬R)print("表达式1:",expr1)print("表达式2:",expr2)print("表达式3:",expr3)# 生成真值表print("\n真值表 (P → Q):")forrowintruth_table(expr1,[P,Q]):print(row)三、谓词逻辑(Predicate Logic)
1. 为什么需要谓词逻辑?
命题逻辑无法表达个体、属性和关系。
例如:“所有人类都会死” —— 需要量词和谓词。
2. 基本构件
- 个体常量:
Socrates,Alice - 谓词:
Human(x),Mortal(x),Loves(x, y) - 量词:
- 全称量词:$ \forall x, P(x) $(对所有 x,P(x) 成立)
- 存在量词:$ \exists x, P(x) $(存在 x 使得 P(x) 成立)
3. 示例:经典三段论
- $ \forall x, (\text{Human}(x) \to \text{Mortal}(x)) $
- $ \text{Human}(\text{Socrates}) $
- ∴ $ \text{Mortal}(\text{Socrates}) $
✅ 这是一阶逻辑(First-Order Logic, FOL)的典型推理
4. 量词的否定
- $ \neg \forall x, P(x) \equiv \exists x, \neg P(x) $
- $ \neg \exists x, P(x) \equiv \forall x, \neg P(x) $
四、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'))]defunify(var,value,theta):"""合一:将变量 var 替换为 value"""ifvarintheta:returnunify(theta[var],value,theta)elifvalueintheta:returnunify(var,theta[value],theta)else:theta[var]=valuereturnthetadefmatch_rule(rule,facts):premises,conclusion=rule matches=[]forfactinfacts:theta={}iflen(fact)==len(premises[0])andpremises[0][0]==fact[0]:# 简单匹配(仅处理单前提规则)foriinrange(1,len(fact)):ifpremises[0][i].startswith('?')orpremises[0][i].isupper():theta=unify(premises[0][i],fact[i],theta)elifpremises[0][i]!=fact[i]:theta=NonebreakifthetaisnotNone:# 应用 theta 到结论new_fact=[conclusion[0]]forterminconclusion[1:]:new_fact.append(theta.get(term,term))matches.append(tuple(new_fact))returnmatches# 推理:应用规则生成新事实new_facts=set()forruleinrules:inferred=match_rule(rule,facts)new_facts.update(inferred)print("原始事实:")forfinfacts:print(f)print("\n推理出的新事实:")forfinnew_facts:print(f)📌 输出:
推理出的新事实: ('Mortal', 'Socrates') ('Mortal', 'Plato') ('Father', 'Zeus', 'Athena')
✅ 使用 Z3 求解器进行自动推理(高级)
# pip install z3-solverfromz3import*# 声明类型和函数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))# 反证法:假设不成立ifsolver.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:https://gitee.com/wy18585051844/ai_learning
《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》