人工智能之数学基础 离散数学:第一章 集合论与逻辑推理

17 阅读5分钟

人工智能之数据基础 离散数学

第一章 集合论与逻辑推理


前言

离散数学是计算机科学、人工智能和形式化方法的理论基石。集合论提供了数据结构的抽象基础,命题逻辑谓词逻辑则是知识表示、自动推理和规则系统的核心工具。本文系统讲解:

  • 集合的基本概念与运算
  • 命题逻辑:语法、真值表、等价与推理规则
  • 谓词逻辑:量词、AI 中的知识表示(如专家系统)
  • 配套 Python 代码实现(使用 sympy.logic、自定义类、规则引擎示例)

一、集合论(Set Theory)

1. 基本概念

  • 集合(Set):无序、互异元素的汇集,记作 A={a,b,c}A = \{a, b, c\}
  • 元素(Element)xAx \in A 表示 xx 属于 AA
  • 空集\emptyset{}\{\}
  • 全集:讨论范围内的所有元素,记为 UU

2. 集合运算

运算符号定义Python
并集ABA \cup B{xxA 或 xB}\{x \mid x \in A \text{ 或 } x \in B\}A | B
交集ABA \cap B{xxA 且 xB}\{x \mid x \in A \text{ 且 } x \in B\}A & B
差集ABA - B{xxA 且 xB}\{x \mid x \in A \text{ 且 } x \notin B\}A - B
对称差ABA \triangle B(AB)(BA)(A - B) \cup (B - A)A ^ B
补集AcA^cUAU - AU - A
幂集P(A)\mathcal{P}(A)AA 的所有子集itertools.chain.from_iterable(...)

3. 集合恒等式(定律)

  • 交换律AB=BAA \cup B = B \cup A
  • 结合律(AB)C=A(BC)(A \cup B) \cup C = A \cup (B \cup C)
  • 分配律A(BC)=(AB)(AC) A \cap (B \cup C) = (A \cap B) \cup (A \cap C)
  • 德·摩根律
    (AB)c=AcBc,(AB)c=AcBc(A \cup B)^c = A^c \cap B^c, \quad (A \cap B)^c = A^c \cup B^c

✅ 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):可判断真假的陈述句,如 “今天下雨”(记为 PP
  • 逻辑联结词
    • 否定:¬P\neg P(非 P)
    • 合取:PQP \land Q(P 且 Q)
    • 析取:PQP \lor Q(P 或 Q)
    • 蕴涵:PQP \to Q(若 P 则 Q)
    • 等价:PQP \leftrightarrow Q(P 当且仅当 Q)

💡 蕴涵 PQP \to Q 等价于 ¬PQ\neg P \lor Q

2. 真值表(Truth Table)

PQ¬P\neg PPQP \land Q PQP \lor QPQP \to Q PQP \leftrightarrow Q
TTFTTTT
TFFFTFF
FTTFTTF
FFTFFTT

3. 逻辑等价(Logical Equivalences)

  • 双重否定¬(¬P)P\neg(\neg P) \equiv P
  • 德·摩根律
    ¬(PQ)¬P¬Q,¬(PQ)¬P¬Q\neg(P \land Q) \equiv \neg P \lor \neg Q, \quad \neg(P \lor Q) \equiv \neg P \land \neg Q
  • 蕴涵等价PQ¬PQP \to Q \equiv \neg P \lor Q
  • 逆否命题PQ¬Q¬PP \to Q \equiv \neg Q \to \neg P

4. 推理规则(Rules of Inference)

  • 假言推理(Modus Ponens)
    PQ, PQ\frac{P \to Q,\ P}{\therefore Q}
  • 拒取式(Modus Tollens)
    PQ, ¬Q¬P\frac{P \to Q,\ \neg Q}{\therefore \neg P}
  • 假言三段论
    PQ, QRPR\frac{P \to Q,\ Q \to R}{\therefore P \to R}

✅ 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)
  • 量词
    • 全称量词:xP(x)\forall x\, P(x)(对所有 x,P(x) 成立)
    • 存在量词:xP(x)\exists x\, P(x)(存在 x 使得 P(x) 成立)

3. 示例:经典三段论

  1. x(Human(x)Mortal(x))\forall x\, (\text{Human}(x) \to \text{Mortal}(x))
  2. Human(Socrates)\text{Human}(\text{Socrates})
  3. Mortal(Socrates)\text{Mortal}(\text{Socrates})

✅ 这是一阶逻辑(First-Order Logic, FOL) 的典型推理

4. 量词的否定

  • ¬xP(x)x¬P(x)\neg \forall x\, P(x) \equiv \exists x\, \neg P(x)
  • ¬xP(x)x¬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'))
]

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
约束满足问题命题逻辑/SMTZ3, 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》