克莱尼定理——正则表达式与有限自动机等价
Kleene(1951)
两个方向都是构造性的:
正则表达式 → 自动机:Thompson 构造法
按运算符归纳,逐个搭出小的 ε-NFA:
- 符号
a:两个状态,一条a-边; - 并
R|S:新建一个起点,用ε-边分别接入R与S的子自动机; - 连接
RS:从R的接受态到S的起点连一条ε-边; - 星号
R*:加ε-边实现回绕循环,再加一条跳过的ε-边。 状态数与正则表达式的规模成线性关系。
自动机 → 自动机:子集构造法
把一个 NFA 转成等价的 DFA,DFA 的状态是 NFA 状态的集合(最多 2ⁿ 个)。这使"有限自动机"这个说法不再含糊——确定化只付出规模上的代价。
自动机 → 正则表达式:状态消去法(Arden 法则)
逐个拆掉状态,把每条留下的边重新标注为一个正则表达式;自环 X = A X | B 用 Arden 法则 X = A*B 求解。这个解是一个最小不动点——克莱尼星号本身就是不动点算子,所以克莱尼定理悄悄用到了克莱尼不动点。
与文法的关系
A → aB 就是一条转移 A --a--> B,只含终结符的规则对应接受态(regular-grammar)——第三种形式化方式因此免费并入。