Automata01 FSM
Published:
Intro
FSM(Finite State Machine/Finite Automata) 是一种 formal system,当然用处有很多了。
Basics
String
取定一个字符集 $\Sigma$,其中元素称为字符。
定义串是字符的有限序列,也可以归纳定义如下:
- $\epsilon$ 是特殊的串,称为空串
- 若 $\alpha$ 为串,且 $x\in \Sigma$,则 $x\alpha$ 也为串。此处表示为字符与串的顺序拼接。
Language
语言即串的集合,$\varnothing$ 和 $\Sigma^*$ 是两个平凡的语言
注意区分 $\Set{\epsilon}$ 和 $\varnothing$
DFA
Def
定义为五元组 \(FSM\overset{\text{def}}= (S, \Sigma, \delta, s_0, F)\) 分别表示状态集、字符集、转移函数、初始状态、接受状态集。
可以通过简单的归纳由 $\delta:S\to \Sigma\to S$ 构造 $\hat\delta:S\to \Sigma^*\to S$
定义自动机接受串 $\alpha$ 当且仅当 $\hat\delta(s_0,\alpha)\in F$
对于自动机 $A$,记它所能接受的串的集合为 $L(A)$,称为自动机 $A$ 表示的语言。
若某个语言 $L$ 可被某个 DFA $A$ 接受,则称 $L$ 为正则语言
$\Set{0^n1^n\mid n\in\mathbb N^+}$
下面证明这个不是正则语言(好像证过很多次了)
由反证法设这是正则语言,则存在 DFA $A$ 使得 $L(A)=\Set{0^n1^n\mid n\in\mathbb N^+}$
不妨设 $A$ 状态数为 $m$,则必然存在 $0^m1^m\in L(A)$。考虑 $A$ 正在识别 $0^m1^m$ 的前缀 $0^m$,由鸽笼原理可知必然存在状态 $s$ 经过了两次,即 $A$ 中存在一个不为空的圈,且圈上只有 $0$。这说明我们可以走出一个 $0^{m+k}1^m$ 的串后到达接受状态,这与 $L(A)=\Set{0^n1^n\mid n\in\mathbb N^+}$ 矛盾。
故假设不成立。
NFA
Def
和 DFA 的区别仅在于转移函数 \(\delta:S\to \Sigma\to 2^S\) 其含义为:从状态 $s$ 出发,经过一条字符边后可能到达哪些状态,NFA 的转移不一定是唯一的。
不难发现 $\delta$ 本身是一个 monad,此时的 $\hat\delta=\text{return s »= }\delta$
定义 NFA 接受串 $\alpha$ 当且仅当 $\hat\delta(s_0,\alpha)\cap F\neq\varnothing$
Subset Construction
给定 NFA $A=(S,\Sigma,\delta,s_0,F)$,我们可以构造 DFA $A’=(2^S,\Sigma,\delta’,\set{s_0},\Set{s\in 2^S\mid s\cap F\neq \varnothing})$
关键的 $\delta’$ 可以用 monad bind 定义…
Equivalence
我们说 DFA 和 NFA 的表达能力是等价的,意思是:
对于任意的 NFA $A$,都存在 DFA $A’$ 使得 $L(A)=L(A’)$,反之亦然。
这也说明所有的 NFA 能表达的语言类与所有的 DFA 能表达的语言类相等。
”$\Rightarrow$”:
| 考虑 $A$ 的子集构造 $A’$,即证明对任意的串 $\alpha$,有 $\delta(s_0,\alpha)=\delta’(\set{s_0},\alpha)$。简单地对 $ | \alpha | $ 归纳即可。 |
”$\Leftarrow$”:
很显然 DFA 是一种特殊的 NFA。
$\epsilon$-NFA
Def
符号集加上 $\epsilon$
引入 closure 操作 $C:S\to 2^S$,含义为从某个状态出发,只走 $\epsilon$-边能到达的状态集合。
这一定义可以通过 monad bind 简单拓展为 $C:2^S\to 2^S$,称为状态集的 $\epsilon$-closure。这个操作显然是幂等的。
不妨记不含 $\epsilon$-边的转移函数为 $\delta$,则加入 $\epsilon$-边后的新转移函数可以简单定义为 $\delta’=C\circ\delta\circ C$,意思是每走一步前后都做一次闭包。
Equivalence
NFA 显然是一种特殊的 $\epsilon$-NFA。
注意到上面的 $\delta-\delta’$ 提供了一种消去 $\epsilon$-边的方法,这样就能由 $\epsilon$-NFA 得到等价的 NFA 了。
Minimization
$\simeq$
定义 DFA 上状态等价 $\simeq$,当且仅当以它们为起点能接受的串的集合相等。由此可以立即得到接受状态和非接受状态不等价(考虑 $\epsilon$)。很显然这是一个二元等价关系。
并且有引理:若状态 $A_1,B_1$ 不等价,且 $\exists c\in\Sigma$ 使得 $\delta(A_2,c)=A_1,\delta(B_2,c)=B_1$,那么 $A_2,B_2$ 不等价。
引理的证明十分简单,由 $A_1,B_1$ 的不等价性可知存在串 $s$ 使得 $A_1,B_1$ 中恰好一个接受 $s$,此时考虑 $cs$ 即为区分出 $A_2,B_2$ 的串。
引理的逆否形式也很有用,即等价状态的对应后继状态也会是等价的。
由此得到一个构造算法:首先区分出所有的终止状态和非终止状态,然后进行如下操作:
- 枚举每对暂时无法区分的状态对,看看它们的后继状态是否可区分
- 可区分,则它们也可以区分
- 不可区分,则它们暂时不可区分
- 更新分类,重复1操作直至收敛。
此时得到一个状态集的划分,由此构造新的 DFA 即为最小化的 DFA。
Proof
记最小化算法得到的 DFA 为 $\bar A$,由反证法设存在更小 DFA $A$ 与之等价
- 必然有 $\bar A$ 的初始状态与 $A$ 的初始状态等价(这里是跨越 DFA 的等价)
- 任意等价的状态对,它们的后继状态也等价
因此必然存在 $\bar A$ 中两个状态它们与同一个 $A$ 中状态等价,由传递性可知它们彼此等价,这与 $\bar A$ 的定义矛盾。
