Regular Expressions Equivalence
- Construct NFA-lambdas corresponding to each RE using Kleene's theorem
- Construct DFAs for each using the subset/powerset construction
- (optional) Minimize the DFAs using a standard DFA minimization algorithm.
- Construct DFAs for L(M1) \ L(M2) and L(M2) \ L(M1) using the Cartesian Product Machine construction
- (Optional) Minimize these CPMs.
- Determine whether each one accepts any strings by testing all strings over alphabet E of size no greater than |Q| (works due to the pumping lemma for regular languages)
虽然从理论上已经解决了这个问题,但是从计算的角度甚至手算的角度来看,这个方法的结果并不能让人满意。可以说语言本身的计算依赖于自动机由来已久,语言本身的计算却没有发展起来。所以不断有研究从不同的角度,甚至单独从正则表达式空间上定义的一系列运算出发,来验证正则表达式的等价性,而不必将运算映射到DFA空间上去。从数学的角度上看,这样一系列理论的完善是简洁和优美的,这使得正则表达式空间能够是自闭和完备的,重要的结论可以通过该空间本身的性质直接推出,而不需要DFA的辅助。这样的方法也是易于理解,符合人们在学习一个新的代数结构的一般过程。有些时候,这些方法的完善甚至是计算有利的。相关的工作可以参看论文Testing the equivalence of regular expressions [Marco Almeida...etc].
作为抛砖引玉的例子,这里给出几个著名的正则表达式的等价的例子,这些例子在一般性的正则表达式的化简上有一定的经验作用。
\[(a^*b)^* = \varepsilon\ \lvert\ (a\lvert b)^* \tag{1} \]
\[(ab)^* = \varepsilon\ \lvert\ a(ba)^*b\tag{2} \]
\[a^*(a\lvert b)^* = (a\lvert b)^*a^* = b^*(a\lvert b)^* = (a\lvert b)^*b^* = (a\lvert b)^*\tag{3} \]