哲学史

哲学史  >  分支学科  >  逻辑学  >  正文

【杜国平】正则语言在连结、星号运算下封闭的DFA证明

正则语言类在并、连结和星号运算下是封闭的。其证明采用的都是非确定型有穷自动机(简记作NFA)理论。M.Sipser在《Introduction to the Theory of Computation》中用确定型有穷自动机(简记作DFA)理论给出了正则语言类在并运算下的封闭性证明,但没有用确定型有穷自动机理论给出正则语言类在连结和星号运算下的封闭性证明。本文试图尝试完成这一工作。

定义1 如果一个语言被一台有穷自动机识别,则称它是正则语言。

定义2 AB是两个语言,正则运算连结和星号是指:

连结:A·B {xy:xAyB}

星号:A* {x1x2…xi…xk:k≥0且每一个xiA}

定义3 确定型有穷自动机是一个5元组(QΣδ,q0F),其中

1Q是一个有穷集合,叫做状态集。

2Σ是一个有穷集合,叫做字母表。

3δQ×Σ→Q是转移函数。

4)q0Q是起始状态。

5F Q是接受状态集。

定理1 正则语言类在连结运算下封闭。

分析:假设确定型有穷自动机DFA M1识别A1DFA M2识别A2M.Sipser认为:设计的(确定型)有穷自动机M不是当M1M2接受输入时接受输入,而应该是当它的输入可以被分成两段,M1接受第一段M2接受第二段时,M才接受。问题是M不知道在什么地方把它的输入分开(即,在什么地方第一段结束和第二段开始)。因此,M.Sipser放弃了用确定型有穷自动机理论来证明正则语言类在连结运算下的封闭性;而引入了非确定性的新技术,用非确定型有穷自动机理论来完成其证明。

我们认为用确定型有穷自动机理论是可以证明正则语言类在连结运算下的封闭性的。设想自己就是这样的一台确定型有穷自动机M,同时模拟M1M2。当输入符号w12n一个接一个地来到时,我们首先记住M1M2的起始状态q1p1。对于输入w1,因为它既可能属于A1又可能属于A2。如果它属于A1,假定δ1 (q1, 1)q2,那么M1M2分别处于q2p1状态;如果它属于A2,假定δ2 (p1, 1)p2,那么M1M2分别处于q1p2状态。这时,我们需要记住的状态是q2p1q1p2。与此类似,对于输入w2,当处于状态q2p1时,可能进入q3p1q2p2状态;当处于状态q1p2时,可能进入q2p2q1p3状态。这时,我们需要记住的状态是q3p1q2p2q1p3……所以,我们需要记住的所有状态是M1的状态集和M2的状态集的迪卡儿积的所有非空子集。当输入结束,如果我们所记住的状态中存在qipj,其中qi属于M1的接受状态并且pj属于M2的接受状态,则接受这一字符串;否则,拒绝。

证明:设DFA M1识别A1DFA M2识别A2,其中

M1=(Q1Σδ1,q1F1, M2=(Q2Σδ2p1F2

构造识别A1·A2DFA M,这里M =(QΣδ,q,F)。

1) Q {x:xP(y){φ}, y {r1r2:r1Q1r2Q2}}

2) 字母表ΣM1 M2的相同。

3) 转移函数δ定义如下:对于每一个状态xQ和每一个aΣ,令

δ(x,a){qipj+1:qipjx,pj+1δ2 (pj,a)}{qi+1pj:qipjx,qi+1δ1 (qi,a)}

4)q{q1p1}

5)F{x:xP(y) z(zxzqipj qiF1pjF2,y{qipj: qiQ1pjQ2}}

M的构造,不难验证:对任一字符串w12n,如果w12nA1·A2,当且仅当M接受w12n

定理2正则语言类在星号运算下封闭。

分析:假设确定型有穷自动机DFA M1识别A,我们要设计一台识别A*DFA M。设想自己就是这样的一台确定型有穷自动机M。当输入符号w12n一个接一个地来到时,我们首先记住M的起始状态q1。对于输入w1,假定δ1 (q1, 1)q2,则进入q2……,对于输入wiδ1 (qi, i)qi+1,如果qiM1一接受状态,则我们除了须记住状态qi+1外,还必须记住分叉δ1 (q1, i),因为w12i1可能是语言A中的字符串,也可能是语言A中的字符串的前一部分。因此,此时我们要记住的状态是M1中的状态qi+1δ1 (q1, i)。如此进行下去,每遇到M1一接受状态,都发生分叉。这样,我们实际需记住的全部状态为所有M1状态的非空子集。当输入结束,如果所记住的M1的状态子集中存在一M1一接受状态,则接受;否则,拒绝。

另外,在M中增加接受状态q0 。增加接受状态q0是为了保证DFA M接受空串 。为什么没有将M1的状态的子集{q1}直接设计为接受状态,这是因为将{q1}设计为M的接受状态并作为M的起始状态固然可以使M接受空串 ,但是也可能加进其他不想要的字符串。当存在某一qi,如果δ1 (qi,a)q1 就会出现这种情况。增加接受状态q0,并且令转移函数为δ(0,a) 1 (q1,a)}(使q0发挥了的q1计算功能),这保证了在M的状态图中q0只有射出的箭头,而没有射入的箭头,从而排除了q0接受除空串 外的其他字符串的可能性。

证明:设DFA M1识别A,其中

M1=(Q1Σδ1,q1F1

构造识别A*DFA M,这里M =(QΣδ,q,F)。

1) Q =(PQ1)-{φ}{0}

2) 字母表ΣM1 的相同。

3) 转移函数δ定义如下:对于每一个状态QiPQ1)-{φ}{0}和每一个aΣ,令

δ(0,a) 1 (q1,a)}

δ(Qi,a){qi+1:qi+1δ1 (qi,a)qiQi }若﹁ xxQixF1);

或={qi+1:qi+1δ1 (qi,a)qiQi }1 (q1,a)}若﹁ xxQixF1.

4)q=q0

5)F{Qj: QjP(Q1) x(xQjxF1}{0}.

M的构造,不难验证:对任一字符串w12n,如果w12nA*,当且仅当M接受w12n

在以上两定理的构造性证明中,都可将状态集Q简化。实际设计时,在状态图中将无箭头射入的状态删去,这不会影响计算功能。

通过这两个证明,我们看到用确定型有穷自动机理论证明正则语言类在连结和星号运算下的封闭性比用非确定型有穷自动机理论证明正则语言类在连结和星号运算下的封闭性,其状态集要大得多,这可以使我们对非确定型有穷自动机的简单性有更加清楚的认识;另一方面,通过用确定型有穷自动机理论对正则语言类在连结和星号运算下的封闭性证明,我们也可以更加深刻地体会到确定型有穷自动机潜在的强大计算能力。

 

【参考文献】

[1] 张立昂等译[]Michael Sipser《计算理论导引》机械工业出版社2000年版。

[2] 刘田等译[]Harry R.Lewis, Christos H.Papadimitriou《计算理论基础》清华大学出版社2000年版。

[3] []Harry R.Lewis, Christos H.Papadimitriou Elements of the Theory of Computation清华大学出版社1999年版。

[4] 许明贤等译[]罗杰·彭罗斯著《皇帝新脑》湖南科学技术出版社1996年版。

 

 

(原载《自动化理论、技术与应用》第8卷,解放军出版社20016