对任何 F A M FA M FAM,都存在一个正规式 r r r,使得 L ( r ) = L ( M ) L(r)=L(M) L(r)=L(M)
(1)在 M M M的状态转换图上增加两个结点 X X X和 Y Y Y,从 X X X用 ϵ \epsilon ϵ弧连接到 M M M的所有初态结点,从 M M M的所有终态结点用 ϵ \epsilon ϵ弧连接到 Y Y Y,记新的 N F A NFA NFA为 M ′ M' M′,它只有一个初态 X X X和 Y Y Y,显然有 L ( M ′ ) = L ( M ) L(M')=L(M) L(M′)=L(M);
(2)合并状态,使
M
′
M'
M′只剩下初态
X
X
X,终态
Y
Y
Y这两个状态;
反复利用以下规则:
对任何正规式 r r r,都存在一个 F A M FA M FAM,使得 L ( M ) = L ( r ) L(M)=L(r) L(M)=L(r)
对 r r r中的运算符数目(或,连接,闭包)进行归纳:
(1)若 r r r具有0个运算符,则 r = ϵ r=\epsilon r=ϵ或 r = ϕ r=\phi r=ϕ或 r = a r=a r=a,其中 a ∈ Σ a\in\Sigma a∈Σ;
(2)假设结论对少于
k
(
k
≥
1
)
k(k\geq1)
k(k≥1)个运算符的正规式成立,当
r
r
r中含有
k
k
k个运算符时,有3种情形:
情形一:
r
=
r
1
∣
r
2
r=r_1|r_2
r=r1∣r2,其中
r
1
,
r
2
r_1,r_2
r1,r2中运算符个数少于
k
k
k,
由归纳假设,对
r
i
,
∃
M
i
=
(
S
i
,
Σ
i
,
δ
i
,
q
i
,
f
i
)
⟹
L
(
M
i
)
=
L
(
r
i
)
r_i,\exist M_i=(S_i,\Sigma_i,\delta_i,{q_i},{f_i})\Longrightarrow L(M_i)=L(r_i)
ri,∃Mi=(Si,Σi,δi,qi,fi)⟹L(Mi)=L(ri),并且
M
i
M_i
Mi没有从状态发出的箭弧
(
i
=
1
,
2
)
(i=1,2)
(i=1,2),
不妨设
S
1
∩
S
2
=
ϕ
S_1\cap S_2=\phi
S1∩S2=ϕ(因为即使有交集,可以复制两份,用两个不同的命名一个加入
S
1
S_1
S1另一个加入
S
2
S_2
S2),在
S
1
∪
S
2
S_1\cup S_2
S1∪S2中加入两个新状态
q
0
,
f
0
q_0,f_0
q0,f0,
可以构造出
M
=
(
S
1
∪
S
2
∪
{
q
0
,
f
0
}
,
Σ
1
∪
Σ
2
,
σ
,
{
q
0
}
,
{
f
0
}
)
M=(S_1\cup S_2\cup\{q_0,f_0\},\Sigma_1\cup\Sigma_2,\sigma,\{q_0\},\{f_0\})
M=(S1∪S2∪{q0,f0},Σ1∪Σ2,σ,{q0},{f0}),
其中
δ
\delta
δ定义如下:
①
δ
(
q
0
,
ϵ
)
=
{
q
1
,
q
2
}
\delta(q_0,\epsilon)=\{q_1,q_2\}
δ(q0,ϵ)={q1,q2}
②
δ
(
q
0
,
a
)
=
δ
1
(
q
,
a
)
\delta(q_0,a)=\delta_1(q,a)
δ(q0,a)=δ1(q,a),当
q
∈
S
1
−
{
f
1
}
,
a
∈
Σ
1
∪
{
ϵ
}
q\in S_1-\{f_1\},a\in\Sigma_1 \cup \{\epsilon\}
q∈S1−{f1},a∈Σ1∪{ϵ}
③
δ
(
q
0
,
a
)
=
δ
2
(
q
,
a
)
\delta(q_0,a)=\delta_2(q,a)
δ(q0,a)=δ2(q,a),当
q
∈
S
2
−
{
f
2
}
,
a
∈
Σ
2
∪
{
ϵ
}
q\in S_2-\{f_2\},a\in\Sigma_2 \cup \{\epsilon\}
q∈S2−{f2},a∈Σ2∪{ϵ}
④
δ
(
f
1
,
ϵ
)
=
δ
(
f
2
,
ϵ
)
=
{
f
0
}
\delta(f_1,\epsilon)=\delta(f_2,\epsilon)=\{f_0\}
δ(f1,ϵ)=δ(f2,ϵ)={f0}
显然:
L
(
M
)
=
L
(
M
1
)
∪
L
(
M
2
)
=
L
(
r
1
)
∪
L
(
r
2
)
=
L
(
r
)
L(M)=L(M_1)\cup L(M_2)=L(r_1)\cup L(r_2)=L(r)
L(M)=L(M1)∪L(M2)=L(r1)∪L(r2)=L(r)。
情形二: r = r 1 r 2 r=r_1r_2 r=r1r2
情形三:
r
=
r
1
∗
r=r_1^*
r=r1∗
虽然这里给出的是归纳法证明,书上也有正规式 r r r转换为 N F A NFA NFA,进一步通过子集法确定化为 D F A DFA DFA,最后再对 D F A DFA DFA进行化简的方法。
补充一点理解,确定化,将 N F A NFA NFA转换为 D F A DFA DFA,和后面的状态化简,合并状态,使状态数减少不同,确定化可能存在一个状态出现在多个状态子集中,它实际上是在消除 ϵ \epsilon ϵ带来的影响,而且消除的办法很简单,就是求不考虑 ϵ \epsilon ϵ的情况下的状态转换矩阵,一个状态由输入输出标识,我们去研究所有出现状态的输入输出,得到新状态,反复进行这一过程,最后得到的就是对应 D F A DFA DFA的状态转换矩阵。