[形式语言] 03 Regular Expression and Regular Language

Posted by roife on Sat, Sep 23, 2023

正则表达式

定义

(正则表达式)

Σ\Sigma 是一个字母表,定义其上的正则表达式(Regular Expression, RE)如下构建:

  • \emptysetΣ\Sigma 上的正则表达式,表示语言 \emptyset
  • ε\varepsilonΣ\Sigma 上的正则表达式,表示语言 {ε}\{\varepsilon\}
  • aΣ\forall a \in \SigmaΣ\Sigma 上的正则表达式,表示语言 {a}\{a\}
  • 如果 r,sr, sΣ\Sigma 上表达 RRSS 的正则表达式,则
    • r+sr + sΣ\Sigma 上的正则表达式,表示语言 RSR \cup S
    • rsrsΣ\Sigma 上的正则表达式,表示语言 RSRS
    • rr*Σ\Sigma 上的正则表达式,表示语言 RR^*

(正则表达式的等价)

如果对于 Σ\Sigma 上的正则表达式 r,sr, s,有 L(r)=L(s)L( r) = L(s),则 r=sr = s

关于正则表达式一条很有趣的性质是 L((rs))=L((r+s))L((r^*s^*)^*) = L((r+s)^*)

RE 与 FA 等价

正则表达式与有穷自动机等价。

为了证明这个问题,只需要证明对于任意正则表达式,存在一个 ε\varepsilon-NFA 与之等价;且对于任意 DFA,存在一个正则表达式与之等价。

  • 对于任意正则表达式,存在一个 ε\varepsilon-NFA 与之等价

    只要根据正则表达式的构建树,按照下面的规则进行转换即可。

    Figure 1: convert symbol from RE to FA

    Figure 1: convert symbol from RE to FA

    Figure 2: convert empty string from RE to FA

    Figure 2: convert empty string from RE to FA

    Figure 3: convert empty set from RE to FA

    Figure 3: convert empty set from RE to FA

    Figure 4: convert union from RE to FA

    Figure 4: convert union from RE to FA

    Figure 5: convert concatenation from RE to FA

    Figure 5: convert concatenation from RE to FA

    Figure 6: convert kleene star from RE to FA

    Figure 6: convert kleene star from RE to FA

  • 对于任意 DFA 存在一个正则表达式与之等价

    首先对 DFA M=(Q,Σ,δ,q0,F)M = (Q, \Sigma, \delta, q_0, F) 上的结点进行标号:1,2,,n1, 2, \dots, n

    定义一条 kk-路径为 DFA 上的一条路径,其中路径上的点(不包括起点和终点)的标号不超过 kk。因此所有路径都是 nn-路径。路径上的边构成了一个句子。

    RijkR^k_{ij} 为点 ii 到点 jj 的所有 kk-路径组成的语言,下面开始构造 RijkR^k_{ij}

    • k=0k=0

      • 如果 i=ji = j,则 Rii0=ε+a1+a2++an(δ(i,al)=i)R^0_{ii} = \varepsilon + a_1 + a_2 + \dots + a_n (\delta(i, a_l) = i)
      • 如果 iji \ne j,且不存在从 iijj 的路径,则 Rij0=R^0_{ij} = \emptyset
      • 如果 iji \ne j,且存在从 iijj 的路径,则 Rij0=a1+a2++an(δ(i,al)=j)R^0_{ij} = a_1 + a_2 + \dots + a_n (\delta(i, a_l) = j)
    • k>0k > 0 时,假设所有 k1k-1-路径都可以转换成正则表达式

      • 则从 iijj 的路径有两种选择:不经过 kk 或至少经过 kk 一次
      • 因此 Rijk=Rijk1+Rikk1(Rkkk)Rkjk1R^k_{ij} = R^{k-1}_{ij} + R^{k-1}_{ik} (R^k_{kk})^{*} R^{k-1}_{kj}

      根据这个方法可以构造出 Rq0qfn(qfF)R^n_{q_0 q_f} (q_f \in F),此时 Rq0qf1n+Rq0qf2n++Rq0qfmn(fiF)R^n_{q_0q_{f1}} + R^n_{q_0q_{f2}} + \dots + R^n_{q_0q_{fm}} (f_i \in F) 即是答案。

正则语言的性质

泵引理

(Pumping Lemma)

设 RL LL 对应的 FA 为 MM,则存在一个仅依赖于 LL 的正整数 NN。如果存在 zLz \in L 使得 zn|z| \ge n,那么 zL\forall z \in L,存在 u,v,wu, v, w 使得:

  • z=uvwz = uvw
  • uvN|uv| \le N
  • v1|v| \ge 1
  • i0.uviwL\forall i \ge 0. u v^i w \in L
  • N<MN < |M|

设 RL LL,DFA M=(Q,Σ,δ,q0,F)M = (Q, \Sigma, \delta, q_0, F) 满足 L(M)=L,Q=NL(M) = L, |Q| = N。为方便起见,不妨设 MM 中不含不可达状态。

z=a1a2amL(mN)z = a_1 a_2 \dots a_m \in L (m \ge N),记 zzMM 上经过的状态为 qh=δ(q0,a1a2ah)(1hm)q_h = \delta(q_0, a_1 a_2 \dots a_h) (1 \le h \le m)

由于 mNm \ge N,因此存在 qi,qjQ(1<i<j<m=N)q_i, q_j \in Q (1 < i < j < m = N) 使得 qi=qjq_i = q_j。即

δ(q0,a1a2ai)=qi\delta(q_0, a_1 a_2 \dots a_i) = q_i δ(q0,a1a2aj)=qj=qi\delta(q_0, a_1 a_2 \dots a_j) = q_j = q_i

因此 k0,δ(qi,(ai+1ai+2aj)k=qj=qi)\forall k \ge 0, \delta(q_i, (a_{i+1} a_{i+2} \dots a_j)^k = q_j = q_i)

因此,

k0,δ(q0,a1a2ai(ai+1ai+2aj)kaj+1am)=am\forall k \ge 0, \delta(q_0, a_1 a_2 \dots a_i (a_{i+1} a_{i+2} \dots a_j)^k a_{j + 1} \dots a_m) = a_m

u=a1a2ai,v=ai+1ai+2aj,w=aj+1aj+2amu = a_1 a_2 \dots a_i, v = a_{i+1} a_{i+2} \dots a_j, w = a_{j+1} a_{j+2} \dots a_m

i0\forall i \ge 0

  • uvN|uv| \le N
  • v1|v| \ge 1
Figure 7: Pumping lemma

Figure 7: Pumping lemma

泵引理是 RL 的必要条件,因此只能用来证明某些语言*不是*RL。为了简化证明,一般会构造一个 uvuv 为同一字符串重复的情况。

证明 L={0nn is a prime number}L = \{0^n | \text{$n$ is a prime number}\} 不是 RL。

LL 是 RL,则 LL 满足 pumping lemma。

nn 是仅依赖于 LL 的正整数,取 z=0n+pLz = 0^{n + p} \in L,其中 n+pn + p 是素数。由 pumping lemma 知存在 z=uvwz = uvw 满足条件。由于 v1|v| \ge 1,不妨设 v=0kv = 0^ku=0nku = 0^{n - k}。且 i0,uviw=0nk+ik+p=0n+p+(i1)k\forall i \ge 0, uv^iw = 0^{n - k + ik + p} = 0^{n + p + (i - 1)k}

i=n+p+1i = n + p + 1 时,uviw=0(n+p)(k+1)uv^iw = 0^{(n + p)(k + 1)} 非素数,矛盾,因此原命题不成立。

Myhill-Nerode 定理

Myhill-Nerode 定理及其证明

设 DFA M=(Q,Σ,δ,q0,F)M = (Q, \Sigma, \delta, q_0, F)MMΣ\Sigma^* 上的关系 RMR_M 定义为

x,yΣ,xRMyδ(q0,x)=δ(q0,y)\forall x, y \in \Sigma^*, x R_M y \Leftrightarrow \delta(q_0, x) = \delta(q_0, y)

并定义

set(q)={xxΣδ(q0,x)=q} \mathrm{set}(q) = \{ x | x \in \Sigma^* \wedge \delta(q_0, x) = q \}

x,yΣ,xRMyqQ,xset(q)yset(q) \forall x, y \in \Sigma^*, x R_M y \Leftrightarrow \exists q \in Q, x \in \mathrm{set}(q) \wedge y \in \mathrm{set}(q)

LΣL \subseteq \Sigma^*LLΣ\Sigma^* 上的关系 RLR_L 定义为

xRLy(zΣ,xzLyzL)x R_L y \Leftrightarrow (\forall z \in \Sigma^*, xz \in L \Leftrightarrow yz \in L)

这两个关系分别是在自动机和语言上的等价关系。

RRΣ\Sigma^* 上的等价关系,如果 x,yΣ.xRy(z.xzRyz)\forall x, y \in \Sigma^*. xRy \rightarrow (\forall z. xzRyz),则称 RR右不变关系(right invariant)等价关系。

根据上面的定义,不难得出 RMR_MRLR_L 是右不变的等价关系。

RRΣ\Sigma^* 上的等价关系,Σ/R\Sigma^*/R 的一个元素是 Σ\Sigma^* 关于 RR 的一个等价类,称 Σ/R|\Sigma^* / R| 称为 RR 关于 Σ\Sigma^*指数(index)。

从定义中不难看出 xRMyxRL(M)yx R_M y \Rightarrow x R_{L(M)} y,反之则未必成立。对于 DFA M=(Q,Σ,δ,q0,F)M = (Q, \Sigma, \delta, q_0, F),有

Σ/RL(M)Σ/RMQ|\Sigma^* / R_{L(M)}| \le |\Sigma^* / R_M| \le |Q|

也就是说按照在自动机分出的等价类(自动机的状态数量),数量大于等于在语言分出的等价类(真实的等价类)。RMR_M 的分类比 RL(M)R_{L(M)} 的更细,称 RMR_MRL(M)R_{L(M)}加细(refinement)。

(Myhill-Nerode)

下面的三个命题等价:

  • LΣL \subseteq \Sigma^* 是 RL
  • LLΣ\Sigma^* 上的一个有穷指数、右不变、等价关系 RR 的某些等价类的并
  • RLR_L 具有有穷指数

下面通过证明 (1)(2)(3)(1)(1) \rightarrow (2) \rightarrow (3) \rightarrow(1) 来证明。

  • (1)(2)(1) \rightarrow (2)

    LΣL \subseteq \Sigma^* 是 RL,则存在 DFA M(Q,Σ,δ,q0,F)M(Q, \Sigma, \delta, q_0, F) 使得 L(M)=LL(M) = L。令关系 R=RMR = R_M

    • 由前面的定义知 RMR_MΣ\Sigma^* 上的右不变等价关系
    • Σ/RMQ|\Sigma^* / R_M| \le |Q|,所以 RMR_M 具有有穷指数
    • 如果 xLx \in L,那么 δ(q0,x)=tF\delta(q_0, x) = t \in F。因此 xL,xset(t)(tF)\forall x \in L, x \in \mathrm{set}(t) (t \in F),所以 L=tF(set(t))L = \cup_{t \in F}(\mathrm{set}(t))LLRR 的某些等价类的并
  • (2)(3)(2) \rightarrow (3),因此需要证明 RRRLR_L 的加细,即需要证明 x,yΣ.xRyxRLy \forall x, y \in \Sigma^*. x R y \rightarrow x R_L y

    由于 RR 是右不变的,所以 zΣ.xzRyz\forall z \in \Sigma^*. xz R yz

    又由于 LLRR 的部分等价类的并,因此 xzLyzLxz \in L \Leftrightarrow yz \in L

    所以 xRLyx R_L y

  • (3)(1)(3) \rightarrow (1)RLR_L 具有有穷指数,下证存在 DFA MM 使得 L(M)=LL(M) = L

    M=(Σ/RL,Σ,δ,[ε],{[x]xL})M = (\Sigma^* / R_L, \Sigma, \delta, [\varepsilon], \{[x] | x \in L\}),其中 [x][x] 表示 xx 所在的等价类。

    其中对于任意的 ([x],a)(Σ/RL)×Σ([x], a) \in (\Sigma^* / R_L) \times \Sigma,有

    δ([x],a)=[xa]\delta([x], a) = [xa]

    下面证明 δ\delta 的相容性(是一个函数),即 [x],[y](Σ/RL).[x]=[y](aΣ.δ([x],a)=δ([y],a))\forall [x], [y] \in (\Sigma*/R_L). [x] = [y] \rightarrow (\forall a \in \Sigma. \delta([x], a) = \delta([y], a))

    由于 [x]=[y][x] = [y],则 xRLyx R_L y,又由于 RLR_L 具有右不变形,所以 aΣ.[xa]=[ya]\forall a \in \Sigma. [xa] = [ya],成立。因此 MM 是一个合法的 DFA。

    根据 RLR_L 的定义,xL.δ(q0,x){[x]xL}\forall x \in L. \delta(q_0, x) \in \{[x] | x \in L\}

Myhill-Nerode 定理的推论

对任意 RL LL,在同构意义下,接受 LL 的最小 DFA 是唯一的。

LL 是 RL,其最小 DFA M=(Q,Σ,δ,q0,F)M = (Q, \Sigma, \delta, q_0, F) 满足 L(M)=LL(M) = L,显然 MM 中不含不可达状态。根据前面的证明,有

Σ/RMΣ/RL|\Sigma^* / R_M| \ge |\Sigma^* / R_L|

下证 MM 与 Myhill-Nerode 定理证明中的 M=(Σ/RL,Σ,δ,[ε],{[x]xL})M’ = (\Sigma^* / R_L, \Sigma, \delta’, [\varepsilon], \{[x] | x \in L\}) 同构,其中

δ([x],a)=[xa]\delta’([x], a) = [xa]

定义映射 f:QΣ/RLf : Q \rightarrow \Sigma^* / R_L,那么 qQ.xΣ.δ(q0,x)=qx\forall q \in Q. \exists x \in \Sigma^*. \delta(q_0, x) = q_x。令

f(qx)=f(δ(q0,x))=f(δ([ϵ],x))=[x]f(q_x) = f(\delta(q_0, x)) = f(\delta’([\epsilon], x)) = [x]

这样就建立起来从 MMMM’ 的映射。现在证明 ff 是同构映射。

  • 首先证明这是合法的函数,即 qx=qyδ([ε],x)=δ([ε],y)q_x = q_y \Rightarrow \delta’([\varepsilon], x) = \delta’([\varepsilon], y)
    • qx=qyδ(q0,x)=δ(q0,y)xRMyxRLy[x]=[y]δ([ε],x)=δ([ε],y)q_x = q_y \Leftrightarrow \delta(q_0, x) = \delta(q_0, y) \Leftrightarrow x R_M y \Rightarrow x R_L y \Leftrightarrow [{x}] = [y] \Leftrightarrow \delta’([\varepsilon], x) = \delta’([\varepsilon], y)
  • 证明单射,即 qxqyδ([ε],x)δ([ε],y)q_x \ne q_y \Rightarrow \delta’([\varepsilon], x) \ne \delta’([\varepsilon], y)
    • qxqyδ(q0,x)δ(q0,y)q_x \ne q_y \Leftrightarrow \delta(q_0, x) \ne \delta(q_0, y),即 xxyyΣ/RM\Sigma^*/R_M 的不同等价类中
    • 如果此时 [x]=[y][{x}] = [y],那么 Σ/RM>Σ/RL|\Sigma^* / R_M| > |\Sigma^* / R_L|,这与 MM 是最小 DFA 矛盾
    • 因此 [x][y][{x}] \ne [y],即 δ([ε],x)δ([ε],y)\delta’([\varepsilon], x) \ne \delta’([\varepsilon], y)
  • 证明满射,即 [x].qxQ.f(qx)=[x]\forall [{x}]. \exists q_x \in Q. f(q_x) = [{x}]
    • xL.[x]=δ([ε],x)xL.δ(q0,x)=qx\forall x \in L. [{x}] = \delta’([\varepsilon], x) \Leftrightarrow \exists x \in L. \delta(q_0, x) = q_x
  • 证明同态映射。在自动机中,两个状态 qpq \rightarrow p 表示为 δ(q,a)=p\delta(q, a) = p,因此即需要证明 δ(f(q),a)=f(p)\delta(f(q), a) = f(p)
    • δ(q0,x)=q\delta(q_0, x) = q
    • f(p)=f(δ(q,a))=f(δ(δ(q0,x),a))=f(δ(q0,xa))=[xa]f(p) = f(\delta(q, a)) = f(\delta(\delta(q_0, x), a)) = f(\delta(q_0, xa)) = [xa],成立

综上,最小 DFA 都与唯一的 DFA 同构。

DFA 最小化

根据 Myhill-Nerod 定理的推论,可以知道最小 DFA 是唯一的,并且其每个状态都对应了原来的语言中的一个等价类。因此只要合并原来的 DFA 中所有的等价类即可。

在具体计算时,状态 δ([a1a2an],x)=δ(a1,x)δ(a2,x)δ(an,x)\delta’([a_1 a_2 \dots a_n], x) = \delta(a_1, x) \vee \delta(a_2, x) \vee \dots \vee \delta(a_n, x)

判定性质

(Decision Property)

一类语言的判定性质(decision property)对应于一个算法,这个算法以某个语言的形式化描述为输入,然后判断这个语言是否满足某些性质。

下面将介绍一系列判定性问题,并给出对应的算法。

Membership Problem

给定字符串 ww,判定其是否属于某个正则语言 LL

模拟语言在 LL 对应的的 DFA 上是否接受即可。

Emptiness Problem

给定一个正则语言 LL,问该语言是否为空?

构建该语言对应的 DFA,判定终点是否可达即可。

设 DFA M=(Q,Σ,δ,q0,F)M = (Q, \Sigma, \delta, q_0, F)L=L(M)L = L(M) 是否为空的充要条件为

xΣ.x<Qδ(q0,x)F\exists x \in \Sigma^{*}. |x| < |Q| \wedge \delta(q_0, x) \in F

Infiniteness Problem

给定一个正则语言 LL,问该语言是否无穷(该语言是否可以描述无穷的字符串)?

构建该语言的 DFA

  1. 删除所有起点不可达状态
  2. 删除所有不可达终点的状态
  3. 判断图上是否有环

设 DFA M=(Q,Σ,δ,q0,F)M = (Q, \Sigma, \delta, q_0, F)L=L(M)L = L(M) 是否无穷的充要条件为

xΣ.Qx<2Qδ(q0,x)F\exists x \in \Sigma^{*}. |Q| \le |x| < 2|Q| \wedge \delta(q_0, x) \in F

Equivalence Problem

(Product DFA)

对于两个 DFA M1=(Q1,Σ,δ1,q01,F1)M_1 = (Q_1, \Sigma, \delta_1, q_{01}, F_1)M2=(Q2,Σ,δ2,q02,F2)M_2 = (Q_2, \Sigma, \delta_2, q_{02}, F_2),定义其乘积 DFA(product DFA) M1M2=(Q1×Q2,Σ×Σ,δ3,[q01,q02],F3)M_1 M_2 = (Q_1 \times Q_2, \Sigma \times \Sigma, \delta_3, [q_{01}, q_{02}], F_3)

其中

  • δ3([x,y],a)=[δ1(x,a),δ2(y,a)]\delta_3([x, y], a) = [\delta_1(x, a), \delta_2(y, a)]
  • F3={[x,y](xF1)(yF2)}F_3 = \{[x, y] | (x \in F_1) \oplus (y \in F_2)\}

给定两个正则语言 L1,L2L_1, L_2,问两个语言是否等价?

构建两个语言对应的 DFA 的 product DFA,如果 product DFA 的语言为空(不存在一个句子其中一个自动机接受而另一个不接受),则说明两个语言等价。

Containment Problem

给定两个正则语言 L1,L2L_1, L_2,问是否存在 L1L2L_1 \in L_2

同样使用乘积自动机,将终止条件改为:

F3={[x,y](xF1)(yF2)}F_3 = \{[x, y] | (x \in F_1) \wedge (y \notin F_2)\}

假设这个乘积自动机存在终止状态,那么说明存在一个 zL1zL2z \in L_1 \wedge z \notin L_2。此时原命题不成立;反之乘积自动机为空原命题成立。

封闭性

(Closure Property)

一类语言的闭包性质(closure property)指给定这个语言类的一些语言,对于这些语言进行某个操作得到的另一个语言依旧在同一个语言类中。

保持封闭性的运算

正则语言在拼接、并、克林闭包下是封闭的。

可以转换成正则表达式,然后直接用正则表达式表达出来。

正则语言在交集、差集、补集下是封闭的。

利用乘积自动机

  • 交集:构建乘积自动机,其中终止状态 F3={[x,y]xF1yF2}F_3 = \{[x, y] | x \in F_1 \wedge y \in F_2\}
  • 差集:构建乘积自动机,其中终止状态 F3={[x,y]xF1yF2}F_3 = \{[x, y] | x \in F_1 \wedge y \notin F_2\}
  • 补集:正则语言 LL 的补集为 ΣL\Sigma^* - L,由于 Σ\Sigma^* 是正则语言,因此 LL 的补集也是正则语言

正则语言在逆操作(即字符串反转)下封闭。

利用正则表达式证明。设 RL LL 的正则表达式为 EE,下面构建它的逆 ERE^R

  • 如果 EE 是字符 aΣa \in \Sigmaε\varepsilon\emptyset,那么 ER=EE^R = E
  • 如果 E=F+GE = F + G,那么 ER=FR+GRE^R = F^R + G^R
  • 如果 E=FGE = FG,那么 ER=(FG)R=GRFRE^R = (FG)^R = G^R F^R
  • 如果 E=FE = F^*,那么 ER=(FR)E^R = (F^R)^*

根据上面的规则构建的 ERE^R 依然是正则表达式,因此 ERE^R 仍然是 RL。

封闭性可以用来做反证,证明某个语言不是 RL。

L1={xx contains equal numbers of 0 and 1}L_1 = \{x | \text{$x$ contains equal numbers of $0$ and $1$}\},证明 L1L_1 不是正则语言。

L2={0n1nn0}L_2 = \{0^n 1^n | n \ge 0\},由泵引理知 L2L_2 不是正则语言。

L3={01}L_3 = \{0^*1^*\},显然 L3L_3 也是正则语言

假如 L1L_1 是正则语言,那么 L2=L1L3L_2 = L_1 \cap L_3 也是正则语言,矛盾。因此原命题成立。

正则代换

(正则代换)

Σ,Δ\Sigma, \Delta 是两个字母表,映射

f:Σ2Δf : \Sigma \rightarrow 2^{\Delta^*}

称为是从 Σ\SigmaΔ\Delta代换(substitution),其中 2Δ2^{\Delta^*} 表示 Δ\Delta 上的语言组成的集合,ff 能将一个字母映射到一个语言。

ff 的定义域可以扩展到字符串集合 Σ\Sigma^* 上,对于 f:Σ2Δf : \Sigma^* \rightarrow 2^{\Delta^*},满足

f(s)={{ε},s=εf(x)f(a),s=xaf(s)=\begin{cases} \{\varepsilon\}, & s = \varepsilon \\ f(x) f(a), & s = xa \end{cases}

最后,ff 的定义域可以扩展到语言集合 2Σ2^{\Sigma^*} 上,对于 f:2Σ2Δf : 2^{\Sigma^*} \rightarrow 2^{\Delta^*},满足

f(L)=xLf(x)f(L) = \bigcup_{x \in L} f(x)

定义域相当于一个大自动机(对于字符串来说是相当于是自动机上的一条路径),然后使用正则代换将这个大自动机中的每个小节点都替换成一个自动机。

例如设 Σ={0,1},Δ={a,b},f(0)=a,f(1)=b\Sigma = \{0, 1\}, \Delta = \{a, b\}, f(0) = a, f(1) = b^*,则

  • f(010)=f(0)f(1)f(0)=abaf(010) = f(0)f(1)f(0) = ab^*a
  • f(L(0(0+1)1)=L(a(a+b(b))))=L(ab)f(L(0^*(0+1)1^*) = L(a*(a+b^*(b^*)^*))) = L(a^*b^*)

Σ,Δ\Sigma, \Delta 是两个字母表,映射 f:Σ2Δf : \Sigma \rightarrow 2^{\Delta^*}。如果对于 aΣ\forall a \in \Sigmaf(a)f(a) 都是 Δ\Delta 上的 RL,则称 ff正则代换(regular substitution)。

可将 ff 进行扩展 f:2Σ2Δf : 2^{\Sigma^*} \rightarrow 2^{\Delta^*}

  • f()=,f(ε)=εf(\emptyset) = \emptyset, f(\varepsilon) = \varepsilon
  • aΣ,f(a)\forall a \in \Sigma, f(a) 是正则表达式
  • 如果 r,sr, sΣ\Sigma 上的正则表达式,则 f(r+s)=f(r)+f(s),f(rs)=f(r)f(s),f(r)=f(r)f(r + s) = f( r) + f(s), f(rs) = f( r)f(s), f(r^*) = f( r)^*

Σ,Δ\Sigma, \Delta 是两个字母表,映射 f:Σ2Δf : \Sigma \rightarrow 2^{\Delta^*} 是正则代换,则 f(L)f(L) 也是 RL。

使用归纳法,对 LL 对应的正则表达式 rr 进行归纳易证。

同态映射

Σ,Δ\Sigma, \Delta 是两个字母表,映射 f:ΣΔf : \Sigma \rightarrow \Delta^*,如果扩展到 f:ΣΔf : \Sigma^* \rightarrow \Delta^* 上后有

x,yΣ.f(xy)=f(x)f(y)\forall x, y \in \Sigma^*. f(xy) = f(x) f(y)

则称 ff 是从 Σ\Sigma^*Δ\Delta^*同态映射(homomorphism)。

  • 对于 LΣL \subseteq \Sigma^*,其同态像f(L)=xLf(x)f(L) = \bigcup_{x \in L}f(x)
  • 对于 wΔw \subseteq \Delta^*,其同态原像(逆同态)为一个集合 f1(w)={xf(x)=wxΣ}f^{-1}(w) = \{x | f(x) = w \wedge x \in \Sigma^*\}

此处,注意 f(f1(L))Lf(f^{-1}(L)) \ne L,因为有可能 xL,yΣ,f(y)x\exists x \in L, \forall y \in \Sigma^{*}, f(y) \ne x,但是一定有 f(f1(L))Lf(f^{-1}(L)) \subseteq L

同态映射是正则代换的特例(同态映射可以看成令正则代换的值域为只包含一个句子的语言,那么这个语言一定是正则语言)。

RL 的同态像是 RL。

由于同态映射是正则代换的特例,因此这个显然成立。

RL 的同态原像是 RL。

设同态映射 f:ΣΔf : \Sigma^* \rightarrow \Delta^*。DFA M(Q,Δ,δ,q0,F)M(Q, \Delta, \delta, q_0, F)L(M)=LL(M) = L

则 DFA M(Q,Σ,δ,q0,F)M’(Q, \Sigma, \delta’, q_0, F),其中

δ(q,a)=δ(q,f(a))\delta’(q, a) = \delta(q, f(a))

要证明 L(M)=L(M)L(M) = L(M’),即证明 δ(q0,x)Fδ(q0,f(x))F\delta’(q_0, x) \in F \Leftrightarrow \delta(q_0, f(x)) \in F

下面先证明 δ(q0,f(x))=δ(q0,x)\delta(q_0, f(x)) = \delta’(q_0, x),对 x|x| 进行归纳:

  • x=0|x| = 0,显然成立

  • x=y=k|x| = |y| = k 的时候成立,那么当 x=ya=k+1|x| = |ya| = k + 1 时,

    δ(q0,x)=δ(q0,ya)=δ(δ(q0,y),a)=δ(δ(q0,f(y)),f(a))=δ(q0,f(y)f(a))=δ(q0,f(x))\delta(q_0, x) = \delta’(q_0, ya) = \delta’(\delta’(q_0, y), a) = \delta(\delta(q_0, f(y)), f(a)) = \delta(q_0, f(y)f(a)) = \delta(q_0, f(x))

由归纳知原命题成立,因此 δ(q0,x)Fδ(q0,f(x))F\delta’(q_0, x) \in F \Leftrightarrow \delta(q_0, f(x)) \in F,即原命题成立。

(商)

L1,L2ΣL_1, L_2 \subseteq \Sigma^*,则(quotient)定义为

L1/L2={xyL2,xyL1}L_1 / L_2 = \{ x | \exists y \in L_2, xy \in L_1 \}

从定义可以看出,计算商主要考虑一个语言是否为另一个语言的后缀。

L1,L2ΣL_1, L_2 \subseteq \Sigma^*,如果 L1L_1 是 RL,那么 L1/L2L_1 / L_2 也是 RL。

注意此处并不要求 L2L_2 是 RL。

L1L_1 对应的 DFA 为 M(Q,Σ,δ,q0,F)M(Q, \Sigma, \delta, q_0, F)。定义 \(M_2(Q, Σ, δ, q_0, F’),其中

F={qyL2,δ(q,y)F}F’ = \{q | \exists y \in L_2, \delta(q, y) \in F\}

显然 L(M)=L1/L2L(M’) = L_1 / L_2