可以将任何有限状态自动机转换为正则表达式吗?

时间:2015-08-03 02:31:50

标签: regex z3 state-machine

我们假设我们有一个fsa如下:

fsa = {0:{'a': 1, else: 2},1:{'b': 1, else: 2},2:{else: 2}}

这意味着:在状态0,如果输入为'a',则进入状态1,否则进入状态2;在状态1,如果输入为'b',则进入状态1,否则进入状态2;在状态2,对于任何输入,它进入状态2.

假设,状态0是开始状态,状态1是接受状态,状态2是故障状态。 然后这个fsa可以翻译为正则表达式“ab *”。事实上,有一些算法可以将fsa转换为正则表达式,例如Br​​zozowski代数方法。

我的问题:上述表格中定义的任何fsa都可以翻译成正则表达式吗?有没有限制?

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

没有限制 - 所有有限状态自动机都等价于某些正则表达式,所有正则表达式都等同于某些有限状态自动机。

答案 2 :(得分:1)

是的,它们是等价的。从wikipedia page on regular languages开始,这些都是常规语言的等效定义。

  1. 它是正则表达式的语言
  2. 它是非确定性有限自动机(NFA)接受的语言
  3. 它是确定性有限自动机(DFA)接受的语言
  4. 它可以通过常规语法生成
  5. 它是交替有限自动机接受的语言
  6. 它可以通过前缀语法生成
  7. 它可以被只读的图灵机接受
  8. 它可以用一元二阶逻辑定义(Büchi-Elgot-Trakhtenbrot定理)
  9. 它被一些有限的幺半群识别出来,这意味着它是一个有限幺半群的子集的原像,在其字母表中的自由幺半群的同态下

答案 3 :(得分:1)

是。每个有限自动机都有一个相应的正则表达式。克莱恩定理证明了这一结果。通过将有限自动机划分为若干较小有限自动机的并集,利用数学归纳原理证明了该定理。可以找到证据here