跳转至

自动推理

自动推理(Automated Reasoning)是人工智能中研究如何让计算机自动地进行逻辑推导的领域。它涵盖了从布尔可满足性(SAT)求解到形式化定理证明的广泛技术,是软件验证、硬件设计、数学证明和 AI 安全的基础工具。

近年来,随着深度学习与形式化方法的融合(如 AlphaProof、神经定理证明),自动推理正在经历一场深刻的变革。本笔记涵盖 SAT/SMT 求解、定理证明、形式化验证以及与深度学习融合的前沿方向。


1. 推理系统的分类

分类维度 类型 说明
按逻辑层次 命题逻辑推理 变量只有真/假两种取值
一阶逻辑推理 支持量词(\(\forall, \exists\))和谓词
高阶逻辑推理 变量可以是函数或谓词本身
按自动化程度 全自动 SAT/SMT 求解器
半自动(交互式) Lean, Coq, Isabelle
按推理方向 前向推理 从公理和已知定理出发推导
后向推理 从待证目标出发分解为子目标

2. SAT 问题与求解器

2.1 布尔可满足性问题

SAT 问题:给定一个布尔公式 \(\varphi\)(通常为 CNF 形式),判断是否存在一个变量赋值使 \(\varphi\) 为真。

\[ \varphi = (x_1 \lor \neg x_2) \land (\neg x_1 \lor x_3) \land (x_2 \lor \neg x_3) \]
  • SAT 是第一个被证明为 NP-完全的问题(Cook-Levin 定理,1971)
  • 尽管最坏情况下是指数时间,现代 SAT 求解器在实际问题上表现极好

2.2 DPLL 算法

DPLL(Davis-Putnam-Logemann-Loveland, 1962)是最早的系统化 SAT 求解算法:

DPLL(φ):
    1. 单元传播(Unit Propagation):
       如果某个子句只剩一个文字,则必须赋值为真
    2. 纯文字消除(Pure Literal Elimination):
       如果某个变量只以正或负形式出现,则赋相应值
    3. 分支(Branching):
       选择一个变量,尝试赋值为真/假,递归求解
    4. 回溯(Backtracking):
       如果当前赋值导致冲突,回退到上一个决策点

2.3 CDCL 算法

CDCL(Conflict-Driven Clause Learning)是现代 SAT 求解器的核心算法,在 DPLL 基础上增加了:

增强机制 说明
冲突分析 冲突发生时,分析原因并学习一个冲突子句
非时序回溯 直接回溯到冲突的根源(而非上一个决策点)
子句学习 将冲突子句加入公式,避免重复搜索
变量选择启发式 VSIDS(Variable State Independent Decaying Sum)等策略
重启策略 周期性重启搜索,保留已学习的子句

代表求解器:MiniSat, CaDiCaL, Kissat, Z3(SAT 部分)

SAT 竞赛

每年举办的 SAT Competition 推动了求解器技术的快速发展。现代求解器可以处理数百万变量的实例。

2.4 WalkSAT

WalkSAT 是一种随机局部搜索算法:

  1. 随机生成初始赋值
  2. 选择一个不满足的子句
  3. 以概率 \(p\) 随机翻转该子句中的一个变量;以概率 \(1-p\) 翻转使不满足子句数最少的变量
  4. 重复直到找到满足赋值或达到上限

适合求解可满足性判定(找到一个解),但不能证明不可满足。


3. SMT 求解器

3.1 可满足性模理论

SMT(Satisfiability Modulo Theories) 将 SAT 推广到更丰富的逻辑理论:

\[ (x + y > 3) \land (x < 2) \land (y > 0) \land (z = x \cdot y) \]
背景理论 缩写 示例
线性整数/实数算术 LIA/LRA \(x + 2y \leq 5\)
位向量 BV 32 位整数溢出检测
数组 AR \(\text{read}(\text{write}(a, i, v), i) = v\)
未解释函数 UF \(f(x) = f(y) \Rightarrow x = y\)(若 \(f\) 单射)
字符串 S 正则表达式匹配

3.2 DPLL(T) 框架

现代 SMT 求解器采用 DPLL(T) 框架:SAT 求解器处理布尔骨架,理论求解器检查理论一致性。

SAT 求解器 ←→ 理论求解器(T)
  布尔赋值 → T-一致性检查
  冲突子句 ← T-冲突解释

3.3 Z3 简介

Z3(Microsoft Research)是最广泛使用的 SMT 求解器:

from z3 import *

x, y = Ints('x y')
s = Solver()
s.add(x + y == 10)
s.add(x > 0, y > 0)
s.add(x > y)

if s.check() == sat:
    print(s.model())  # [x = 6, y = 4]

应用领域:程序验证、符号执行、约束求解、测试生成。


4. 定理证明

4.1 自动定理证明

归结法(Resolution) 是自动定理证明的基础:

  1. 将待证命题的否定转化为 CNF
  2. 反复应用归结规则:从 \((A \lor C)\)\((\neg A \lor D)\) 推出 \((C \lor D)\)
  3. 如果推出空子句 \(\Box\),则原命题成立(反证法)
自动定理证明器 特点
E Prover 一阶逻辑,等式推理
Vampire 一阶逻辑,SAT 竞赛冠军
SPASS 一阶逻辑,模排序策略

4.2 交互式定理证明

交互式定理证明器(ITP)需要人类提供证明策略,由计算机验证每一步的正确性。

证明助手 逻辑基础 语言 代表项目
Lean 依赖类型论(CIC 变体) Lean 4 Mathlib(100万+ 定理)
Coq 归纳构造演算(CIC) Gallina CompCert(验证的 C 编译器)
Isabelle 高阶逻辑(HOL) Isar seL4(验证的微内核)
Agda 依赖类型论 Agda 类型论研究

Lean 4 示例(证明 \(n + 0 = n\)):

theorem add_zero (n : Nat) : n + 0 = n := by
  induction n with
  | zero => rfl
  | succ n ih => simp [Nat.add_succ, ih]

Mathlib 项目

Mathlib 是 Lean 4 上最大的数学形式化库,涵盖代数、分析、拓扑、数论等领域,目前包含超过 100 万条形式化定理和定义。


5. 形式化验证

5.1 模型检验

模型检验(Model Checking)自动验证有限状态系统是否满足给定的时序逻辑性质。

输入:系统模型 \(M\)(有限状态机)+ 性质 \(\phi\)(如 CTL/LTL 公式)

输出\(M \models \phi\)(满足)或反例路径

工具 应用领域
SPIN 并发协议验证
NuSMV 硬件设计验证
CBMC C/C++ 程序有界模型检验
TLA+ 分布式系统设计(Amazon 大规模使用)

5.2 程序验证

方法 说明 工具
霍尔逻辑 使用前置条件/后置条件推导程序正确性 Dafny, Frama-C
符号执行 用符号值代替具体值执行程序 KLEE, angr
抽象解释 在抽象域上分析程序行为 Astrée
有界模型检验 展开有限步循环后转化为 SAT/SMT CBMC

6. AI 中的形式化方法

6.1 神经网络验证

验证神经网络的鲁棒性:对于输入 \(x\)\(\epsilon\)-邻域内的所有扰动 \(x'\),网络输出是否保持一致。

\[ \forall x' \in B_\epsilon(x): \; \arg\max f_\theta(x') = \arg\max f_\theta(x) \]
验证工具 方法
\(\alpha,\beta\)-CROWN 分支定界 + 线性松弛
Marabou SMT-based 验证
ERAN 抽象解释
VNN-COMP 年度神经网络验证竞赛

6.2 LLM 输出验证

  • 代码验证:用形式化方法验证 LLM 生成的代码是否满足规约
  • 推理链验证:验证 Chain-of-Thought 推理过程中每一步的逻辑正确性
  • 事实核查:将 LLM 输出中的事实声明转化为可验证的逻辑命题

7. 与深度学习的融合

7.1 AlphaProof

AlphaProof(DeepMind, 2024)是将 AlphaZero 风格的强化学习应用于数学定理证明的系统:

  • 在 Lean 4 形式化环境中证明 IMO(国际数学奥林匹克)竞赛题
  • 将证明搜索建模为类似下棋的搜索问题
  • 使用 LLM 生成证明候选,用形式化系统验证

7.2 神经定理证明

系统 方法 目标
GPT-f Transformer 生成证明步骤 Lean/Metamath 证明
HTPS 超树搜索 + 神经网络 Lean 证明搜索
LeanDojo LLM + Lean 交互环境 开放研究平台
Llemma 数学专用 LLM 数学推理与证明
DeepSeek-Prover 强化学习 + 形式化验证 Lean 定理证明

核心思路

  1. 语言模型生成证明策略(tactic)
  2. 形式化系统验证每一步的正确性
  3. 搜索算法(如 MCTS)探索证明空间
  4. 强化学习从成功的证明中学习

7.3 前景与挑战

维度 现状 挑战
证明能力 可解决本科水平数学题 距离前沿数学研究仍有差距
形式化覆盖 Mathlib 覆盖了大量基础数学 许多高级领域尚未形式化
搜索效率 依赖 LLM 引导减少搜索空间 复杂证明的搜索空间仍然巨大
泛化能力 在训练分布内表现良好 对全新类型的问题泛化有限

形式化不等于理解

当前的神经定理证明系统能够找到正确的证明,但这不意味着系统"理解"了数学概念。证明的正确性由形式化系统保证,而非由神经网络保证。


参考资料

  • Biere et al., Handbook of Satisfiability
  • Harrison, Handbook of Practical Logic and Automated Reasoning
  • Baier & Katoen, Principles of Model Checking
  • Trinh et al., "Solving olympiad geometry without human demonstrations" (Nature, 2024)
  • Lean 4 Documentation
  • Z3 Theorem Prover

评论 #