自动机及应用

官方信息技术老师·27 页·深入(追求细节与边界)·0 次浏览·2 天前
计算理论形式化验证状态机图灵机

自动机及应用

看清从有限状态机到模型检验的边界与衔接

按 空格/→ 演示下一步

1 / 27 页

全部页面点击任意一页,跳回舞台从这页播放

计算理论形式化验证状态机图灵机

自动机及应用

看清从有限状态机到模型检验的边界与衔接

1第 1 页 · 自动机及应用

什么是自动机

你每天都在和自动机打交道——路口的红绿灯就是最朴素的一台。它只有几个固定状态,按规则循环切换,全程不需要人盯着。

状态
系统在某一刻所处的"处境",比如红、黄、绿
转移规则
决定什么情况下从当前状态切换到下一状态
输入/触发
推动状态切换的事件:定时器、按键、传感器信号
输出
每个状态对外的可观察行为:灯亮、闸机放行
交通信号灯对应 →有限状态自动机

颜色=状态、计时=输入、换灯=转移、车行止=输出

2第 2 页 · 什么是自动机

自动机的形式化定义

上一页说自动机像一台只认规则的机器——读符号、改状态、定接受。但「机器」太模糊,数学上必须钉死成五个具体对象。这就是五元组 M = (Q, Σ, δ, q₀, F) 的来历。

Q:状态集合
机器所有可能处境的有限枚举
Σ:输入字母表
机器能读的符号全集,非空有限
δ:转移函数
δ: Q×Σ→Q,给出(状态,符号)→下一状态
q₀:初始状态
Q 中唯一指定的起点,读首个符号前所在
F:接受状态集
Q 的子集,运行时落入其中即判定接受
乐高机器人的搭建说明对应 →五元组 M

零件清单(Q)、遥控指令(Σ)、反应规则(δ)、初始姿态(q₀)、完成标志(F)

M=(Q, Σ, δ, q0, F)δ:Q×ΣQ,q0Q,FQM = (Q,\ \Sigma,\ \delta,\ q_0,\ F)\\\delta: Q \times \Sigma \to Q,\quad q_0 \in Q,\quad F \subseteq Q
3第 3 页 · 自动机的形式化定义

自动机的组成要素

中心是自动机整体,向外伸出状态集、字母表、转移函数三条主干,看它们如何拼装与依赖。

图解渲染中…
A一个自动机的全部组成,记作 A=(Q,Σ,δ,q₀,F)G转移函数的签名:读入状态和符号,吐出下一状态E初始状态 q₀ 是 Q 中唯一被指定的那个起点F接受状态 F 是 Q 的一个子集,可以包含多个状态
4第 4 页 · 自动机的组成要素

为什么需要时间自动机

前面学过有限自动机——它能判断输入串能不能被接受。但高铁调度只说『关门→发车』,不说『3分钟内必须发车』,系统怎么知道你没晚点?

实时系统广泛存在
高铁、起搏器、ABS防抱死、汽车气囊——都依赖严格的时间约束
传统自动机的盲区
状态转移瞬时发生,没有『过了多久』的概念,无法表达超时、延时
时间事关安全
刹车必须在100ms内响应、气囊必须在30ms内引爆——晚了就是事故
必须给自动机加『表』
引入时钟变量 x、y,让约束像 x≤5 一样进入转移条件
高铁发车倒计时对应 →传统自动机 vs 时间自动机

列车几点几分必须关门发车就是『时间约束』。传统自动机像没戴表的调度员,只知状态变化,不知过了多久

x5x \leq 5
5第 5 页 · 为什么需要时间自动机

时间自动机的形式化定义

前面看到,普通自动机无法表达「30 分钟内必须响应」这类实时约束。时间自动机通过给状态挂上「时钟」、在边上加「时间守卫」来解决——下面拆开它的六元组结构。

L 与 l₀
L 是位置集合(离散控制状态),l₀ ∈ L 是起始位置,定义系统的离散状态空间。
Σ 字母表
有限的动作标签集合,每条迁移边从中选一个标记,表示触发的外部事件或输入。
C 时钟集
有限个实值时钟变量 x₁…xₙ,所有时钟同步流逝;这是与有限自动机的核心区别。
E 迁移边
形如 (l, a, g, r, l'):从位置 l 经动作 a,时钟约束 g 满足时,按 r 重置时钟进入 l'。
Inv 不变式
每个位置 l 关联一个时钟约束 Inv(l),系统在 l 中停留时必须始终满足它。
停车场计时系统对应 →时间自动机六元组

位置=停车/已缴费/离开;时钟=入场秒表;守卫=缴费后≥5分钟;不变式=总时长≤60分钟

TA=(L,l0,Σ,C,E,Inv)TA = (L,\, l_0,\, \Sigma,\, C,\, E,\, Inv)
6第 6 页 · 时间自动机的形式化定义

时间自动机的图形表示

图为「灯自动熄灭」示例:圆圈是位置,圈内写不变式,边上标「动作·守卫·时钟复位」。

图解渲染中…
s1/s2/s3位置(Location):系统所处的离散状态x≤c不变式(Invariant):停留该位置时 x 必须 ≤ 上界x==c守卫(Guard):触发迁移时必须满足的时钟条件x:=0时钟复位(Reset):触发时把时钟 x 清零重新计时
7第 7 页 · 时间自动机的图形表示

时间自动机的工作机制

时间自动机每次推进都要经过这五个环节,缺一不可。

1
进入初始位置
系统从唯一的初始位置出发,所有时钟初值为0
2
时钟同步流逝
未重置的时钟随真实时间均匀增长,保持同步
3
检查守卫条件
比对当前时钟值与迁移上的不等式约束
4
执行状态转移
守卫成立时系统跳转到目标位置
5
按需重置时钟
迁移重置集合中的时钟归零,其余继续流逝
8第 8 页 · 时间自动机的工作机制

Büchi自动机的背景

时间自动机告诉我们「单步跑得对不对」,但模型检测真正要问的是:系统无限运行下去,是否永远满足某条性质。从有限到无限这一跨,就是Büchi自动机登场的理由。

无限词 ω-word
一条永不终止的执行轨迹的数学表示
有限自动机的盲区
只能判定有限串,到终态即停,无法表达「永远」
Büchi接受条件
运行中终态集合必须被无穷次访问,才算接受
桥接模型检测
LTL公式可编译为Büchi自动机,交空即系统满足性质
读一本有结尾的书对应 →有限自动机的接受

翻到最后一页就算读完;无限词要约定「某章反复出现」才算读完

Lω(A)={ωinf(ρ)F}L_\omega(A) = \{\omega \mid \inf(\rho) \cap F \neq \emptyset\}
9第 9 页 · Büchi自动机的背景

Büchi自动机的形式化定义

前面看到,Büchi自动机是为处理无穷序列而设计的——状态机永远不停机。那它正式长什么样?结构上和NFA几乎一样,差异全藏在接受条件里。

五元组结构
A=(Q, Σ, δ, Q₀, F):状态集、字母表、转移、初始态集、接收态集
非确定性转移
δ: Q×Σ → 2^Q,读一个符号可同时进入多个状态
ω-字输入
无穷符号流 ω=a₁a₂a₃…∈Σ^ω,永远读不到尽头
Büchi接受条件
运行被接收 ⟺ F 中存在某状态出现无穷多次
永不停的走廊监控对应 →Büchi自动机的无穷运行

F 是监控点:被无穷次经过 → 触发警报(接收);只来过有限次 → 静默(拒绝)

ρ=q0q1q2 accepted    inf(ρ)F\rho = q_0 q_1 q_2 \cdots \text{ accepted} \iff \inf(\rho) \cap F \neq \varnothing
10第 10 页 · Büchi自动机的形式化定义

Büchi接受条件图解

看两条无穷路径:一条反复经过 q1(接受态)→接受;另一条陷入 q2 陷阱 →拒绝。

图解渲染中…
q1接受状态 F,必须被无穷次访问才接受q2陷阱状态,进入后 q1 永远不再被访问
11第 11 页 · Büchi接受条件图解

时间自动机 vs Büchi自动机

都扩展了有穷自动机,但方向正交:一个加时钟,一个加接受条件。容易误以为'升级版',实则解决不同问题。

时间自动机
  • 接受对象:有限字(有限路径)
  • 核心机制:时钟变量与守卫约束
  • 主要应用:实时系统建模与验证
  • 时间维度:显式连续/离散时钟
Büchi自动机
  • 接受对象:无限字(无限路径)
  • 核心机制:接受状态无穷次访问
  • 主要应用:LTL模型检查与活态性质
  • 时间维度:不引入时间概念
有实时约束的有限行为选时间自动机;验证'最终必然'等活态性质选Büchi,二者亦可组合。
12第 12 页 · 时间自动机 vs Büchi自动机

什么是形式化验证

上一节我们认识了时间自动机和Büchi自动机,它们能精确描述系统的行为。但「描述清楚」和「保证正确」之间,还有一步关键跨越——形式化验证。

建模
把系统抽象为自动机等数学模型,精确刻画所有状态与迁移
规约
用时序逻辑等公式表达系统应满足的属性
验证
通过算法穷举所有路径,数学证明模型满足规约
与测试对比
测试只抽样部分路径,形式化验证覆盖所有路径
质检员抽检产品对应 →形式化验证

抽检可能漏掉次品,全检才能保证一个不漏——测试抽样 vs 验证穷举

13第 13 页 · 什么是形式化验证

形式化验证方法分类

形式化验证用数学方法证明系统正确,但这「数学证明」其实是三大流派的合称。

模型检测
穷举系统所有状态自动验证规约;优势全自动,瓶颈是状态爆炸
定理证明
用逻辑规则从公理推导结论;可处理无限状态,常需人工引导
抽象解释
用抽象域近似程序语义;自动高效但可能误报,牺牲精度换扩展性
互补关系
工业实践常组合使用:先用抽象解释粗筛,再对剩余用另两者精查
质检三种手段对应 →形式化验证三流派

逐件拆检、图纸推导、抽样估算各对应一派思路

14第 14 页 · 形式化验证方法分类

形式化验证的基本流程

四阶段循环流程,从左到右是执行顺序;右下回环表示验证失败后回到规约重新刻画性质。

图解渲染中…
a1把真实系统抽象为时间自动机模型a2把待验证性质写成 LTL/CTL 时序逻辑公式a3模型检查器穷举可达状态,判定公式真伪a4解读反例路径,必要时返回规约迭代
15第 15 页 · 形式化验证的基本流程

状态爆炸问题

前面我们用自动机优雅地建模系统——但真实工业系统往往是几十个模块并发、数百个时钟同时演化。模型再美,验证器一旦启动就卡死了。这就是形式化验证最出名也最难啃的硬骨头。

指数级状态爆炸
并发组件×时钟分区相乘,每加一个组件状态数翻倍甚至更多
工业规模的天文数字
真实芯片协议验证可达10^100级状态,远超可观测宇宙原子数(≈10^80)
维度乘积的根因
每个并发组件、每个离散变量、每个连续时钟都是独立的爆炸维度
验证可行性的硬边界
穷尽遍历每个状态超出任何计算机能力,验证被迫止步于工业规模之前
自助餐选菜组合对应 →并发系统的状态空间

每多一道菜可选组合就×2;n道菜共2^n种套餐,n=20时已超百万种

Stotal=S1S2Sn|S_{\text{total}}| = |S_1| \cdot |S_2| \cdot \ldots \cdot |S_n|
16第 16 页 · 状态爆炸问题

模型检测的基本原理

上页我们走完了形式化验证的整体流程,但真正实现「自动检验」的技术内核,是模型检测。它要回答两个根本问题:怎么把系统写出来,怎么把需求写出来。

系统建模
把系统抽象为状态迁移系统(Kripke 结构),状态对应系统快照,迁移对应行为变化
性质规约
用时序逻辑(LTL/CTL)描述期望行为,例如「永远不死锁」
穷举搜索
算法系统遍历所有可达状态,逐条路径检查是否满足公式
反例反馈
若不满足,自动给出导致错误的状态序列,辅助定位 bug
验楼员按图纸查每间房对应 →模型检测遍历状态空间

图纸=系统模型,设计规范=时序逻辑,每间房都进=穷举搜索

MφM \models \varphi
17第 17 页 · 模型检测的基本原理

模型检测的算法步骤

模型检测的核心套路:把系统与性质都变成自动机,再看它们的乘积能否走出一条「坏路径」。

1
建模系统
把被验证的程序或电路翻译成有限状态迁移图
2
转化属性
把待验证的时序逻辑公式取反,转为 Büchi 自动机
3
构造乘积
让系统自动机与 Büchi 自动机同步迁移,合成新自动机
4
搜索接受环
在乘积上找一条能无限次访问接受状态的环路
5
输出结论
找到环则原性质不成立并输出反例,否则性质成立
18第 18 页 · 模型检测的算法步骤

有界/无界模型检测

左右两栏对照:左侧 BMC 用固定深度 k 展开路径,右侧 IC3/PDR 用归纳不变量无限逼近。

图解渲染中…
A3SAT求解:把k步路径编码成布尔公式,求解器找满足赋值B5归纳加强:从已知反例轨迹提取归纳子句,加强不变量B6不变量收敛后即可证明无界正确性,不需限定深度
19第 19 页 · 有界/无界模型检测

LTL vs CTL 模型检测

两种时序逻辑因路径视角不同,表达力与检测复杂度各异,初学者极易混淆。

LTL 线性时序
  • 时间结构:沿单一执行路径展开
  • 路径量词:隐含全称,路径已固定
  • 表达强项:描述时序行为模式
  • 检测复杂度:PSPACE 完全
CTL 分支时序
  • 时间结构:基于分支路径树
  • 路径量词:A 全称 / E 存在显式
  • 表达强项:可达性与必然性判断
  • 检测复杂度:多项式时间
硬件/协议选 CTL 追求效率;公平性等不可达断言选 LTL 表达更自然。
20第 20 页 · LTL vs CTL 模型检测

M3C系统概述

前面我们分别讨论了时间自动机与 LTL 模型检测,但如何把两者结合起来跑一个真实系统?M3C 正是这样一个把时间自动机网络建模与 LTL 属性验证集成在一起的检测平台。

M3C 是什么
面向时间自动机网络的模型检测平台
建模侧
支持多个时间自动机组合成的网络系统
验证侧
对网络模型做 LTL 性质的自动化判定
结果输出
给出满足或不满足,并附反例轨迹
汽车出厂质检对应 →M3C 验证流程

整车(自动机网络)逐项过检(LTL 子式),输出合格证或缺陷报告

21第 21 页 · M3C系统概述

M3C系统架构

从左到右看M3C的四级流水线:箭头表示数据如何在模块间传递,每个模块负责不同的处理阶段。

图解渲染中…
P读取模型文件,做词法语法分析,生成抽象语法树C把AST翻译成验证引擎认识的内部表示E对内部表示做状态空间穷举搜索R把验证结果格式化为可读报告
22第 22 页 · M3C系统架构

M3C输入语言示例

cpp

M3C 仲裁器的 UPPAAL 描述:声明、模板、组装、性质规约四件套。

代码高亮加载中…

urgent 通道瞬时同步、guard/assign 组合边、`-->` 与 `A[]` 规约——UPPAAL 把时间自动机网络变成可被搜索的状态图。

23第 23 页 · M3C输入语言示例

M3C检测流程演示

从模型文件到验证结论,M3C 检测流程分为六个阶段。

1
建模
用输入语言描述时间自动机:位置、时钟、迁移、守卫与不变量。
2
写属性
用逻辑公式表达待验证性质,如时序逻辑或可达性命题。
3
解析输入
M3C 读取模型与属性文件,转化为内部数据结构。
4
构符号状态空间
用 DBM/zone 抽象时钟约束,避免显式枚举无穷多实数时刻。
5
模型检测
在符号状态空间上做不动点计算,判定性质是否成立。
6
输出结果
输出 true/false;不满足时附上反例迁移序列。
24第 24 页 · M3C检测流程演示

核心概念自测

点击作答

处理无限输入流时,Büchi自动机的接受条件与标准DFA的本质区别在于?

25第 25 页 · 核心概念自测

知识体系回顾

  • 时钟扩展处理实时,Büchi处理持续运行
  • 时序逻辑是提问语言,模型检测是自动答题机
  • 状态爆炸是天花板,偏序与抽象是绕行术
  • M3C把建模-验证-反例做成工程闭环
延伸主题:概率与混杂自动机实时系统建模实战其他模型检测工具对比
26第 26 页 · 知识体系回顾

课后思考

先独立想 1 分钟再看参考答案,思考过程比结论更重要。

1为什么 Büchi 自动机的「无限次接受」条件比有限自动机的「终止接受」更适合刻画持续运行的系统?

参考答案持续运行的系统不会「终止」,其正确性体现在反复到达期望状态——例如「每次请求后必响应」需无限次验证接受状态,Büchi 条件正好表达这种循环性。

2在嵌入式实时控制系统中,当时钟约束和离散控制逻辑同时变化时,模型检测状态空间膨胀主要来自哪类变量,为什么?

参考答案主要来自时钟变量的连续性——离散逻辑只产生有限分支,但时钟值在实数域连续取值,每个区间细分都倍增状态数;时钟约束越精细,爆炸越严重。

3当系统状态空间超出传统模型检测能力时,除有界模型检测与抽象精简外,还有哪些可能的突破方向?

参考答案可探索:符号化表示(如 BDD/SMT)压缩存储、并行/分布式模型检测、机器学习辅助剪枝、归纳式证法、统计模型检测,以及量子系统建模的新形式化框架。

27第 27 页 · 课后思考