Yin的笔记本

vuePress-theme-reco Howard Yin    2021 - 2025
Yin的笔记本 Yin的笔记本

Choose mode

  • dark
  • auto
  • light
Home
Category
  • CNCF
  • Docker
  • namespaces
  • Kubernetes
  • Kubernetes对象
  • MyIdeas
  • Linux
  • Revolution
  • WebRTC
  • 云计算
  • 人工智能
  • 分布式
  • 图像处理
  • 图形学
  • 微服务
  • 数学
  • OJ笔记
  • 博弈论
  • 形式语言与自动机
  • 数据库
  • 服务器运维
  • 编程语言
  • C
  • Git
  • Go
  • Java
  • Node
  • Nvidia
  • Python
  • Rust
  • Tex
  • Shell
  • Vue
  • 视频编解码
  • 计算机网络
  • SDN
  • 论文笔记
  • 讨论
  • 边缘计算
  • 量子信息技术
Tag
TimeLine
About
查看源码
author-avatar

Howard Yin

299

Article

152

Tag

Home
Category
  • CNCF
  • Docker
  • namespaces
  • Kubernetes
  • Kubernetes对象
  • MyIdeas
  • Linux
  • Revolution
  • WebRTC
  • 云计算
  • 人工智能
  • 分布式
  • 图像处理
  • 图形学
  • 微服务
  • 数学
  • OJ笔记
  • 博弈论
  • 形式语言与自动机
  • 数据库
  • 服务器运维
  • 编程语言
  • C
  • Git
  • Go
  • Java
  • Node
  • Nvidia
  • Python
  • Rust
  • Tex
  • Shell
  • Vue
  • 视频编解码
  • 计算机网络
  • SDN
  • 论文笔记
  • 讨论
  • 边缘计算
  • 量子信息技术
Tag
TimeLine
About
查看源码
  • 正则语言

    • 正则语言的定义
      • 自动机理论中的典型问题
    • 正则表达式与DFA和正则语言间的等价性
      • 正则语言的封闭性
        • 正则语言的必要条件:泵引理
          • 证明
          • 案例
          • ∑n=0∞0n1n\sum{n=0}^\infty\bm 0^n\bm 1^n∑n=0∞0n1n和∑n=01000n1n\sum{n=0}^{100}\bm 0^n\bm 1^n∑n=01000n1n:由非正则语言引发的思考

      正则语言

      vuePress-theme-reco Howard Yin    2021 - 2025

      正则语言


      Howard Yin 2020-11-15 09:31:05 数学形式语言与自动机计算理论正则表达式

      !!注意正则语言和正则表达式之间的区别与联系!!

      # 正则语言的定义

      若语言LLL是某个DFADDD的语言,则称LLL是正则语言:

      L是正则语言⇔(∃D=(Q,Σ,δ,q0,F))(L=L(D))L\text{是正则语言}\Leftrightarrow(\exist D=(Q,\Sigma,\delta,q_0,F))(L=\bm L(D)) L是正则语言⇔(∃D=(Q,Σ,δ,q0​,F))(L=L(D))

      # 自动机理论中的典型问题

      任何问题都能转化为语言的成员性问题:判断给定的字符串www是否属于某个具体的语言LLL

      w∈L?w\in L? w∈L?

      # 正则表达式与DFA和正则语言间的等价性

      正则表达式与DFA等价正则表达式章节中已经证明⇒正则表达式与正则语言等价正则语言定义\begin{aligned} &\text{正则表达式与DFA等价}&\text{正则表达式章节中已经证明}\\ \Rightarrow&\text{正则表达式与正则语言等价}&\text{正则语言定义}\\ \end{aligned} ⇒​正则表达式与DFA等价正则表达式与正则语言等价​正则表达式章节中已经证明正则语言定义​

      # 正则语言的封闭性

      • ∅\emptyset∅、{ε}\{\varepsilon\}{ε}都是正则语言
      • Σ∗\Sigma^*Σ∗、Σ+\Sigma^+Σ+是字母表Σ\SigmaΣ上的正则语言
      • (正则运算)若LLL和MMM都是正则语言,则:
        • (交运算)M‾\overline MM是正则语言
        • (并运算)L∪ML\cup ML∪M是正则语言
        • (差运算)L−ML-ML−M是正则语言
        • (补运算)L‾=Σ∗−L\overline L=\Sigma^*-LL=Σ∗−L是正则语言
        • (连接运算)LMLMLM是正则语言
        • (闭包运算)L∗L^*L∗是正则语言
      • (反转运算)若LLL是正则语言,则LR={wR∣w∈L}L^R=\{w^R|w\in L\}LR={wR∣w∈L}是正则语言
        • 其中wR=(a1a2…an)R=an…a2a1w^R=(a_1a_2\dots a_n)^R=a_n\dots a_2a_1wR=(a1​a2​…an​)R=an​…a2​a1​
      • (同态)若LLL是正则语言,则h(L)h(L)h(L)是正则语言
        • 其中h(L)h(L)h(L)称为语言LLL的同态,定义如下:
          • 当输入为字母a∈Σa\in\Sigmaa∈Σ时,h:Σ→Γ∗h: \Sigma\rightarrow\Gamma^*h:Σ→Γ∗是一个从字母表Σ\SigmaΣ到另一个字母表上闭包Γ∗\Gamma^*Γ∗的映射
          • 当输入为字符串w∈Σ∗w\in\Sigma^*w∈Σ∗时:h(ε)=ε,h(wa)=h(w)h(a)h(\varepsilon)=\varepsilon,h(wa)=h(w)h(a)h(ε)=ε,h(wa)=h(w)h(a)
          • 当输入为语言L⊆Σ∗L\subseteq\Sigma^*L⊆Σ∗时:h(L)={h(w)∣w∈L}h(L)=\{h(w)|w\in L\}h(L)={h(w)∣w∈L}
      • (逆同态)若LLL是正则语言,h−1(L)={w∈Σ∗∣h(w)∈L}h^{-1}(L)=\{w\in\Sigma^*|h(w)\in L\}h−1(L)={w∈Σ∗∣h(w)∈L}是正则语言

      证明略。

      # 正则语言的必要条件:泵引理

      对于任意正则语言,总能找到一个正整数NNN(泵长度),该语言中所有长度大于NNN的字符串www可以分为w=xyzw=xyzw=xyz三部分,其中中间的yyy满足:

      • yyy非空
      • yyy在前NNN个字符内
      • yyy可以不断重复而产生新串xykzxy^kzxykz,且产生的所有串都仍然属于该语言

      (理解“泵”:通过中间的字符串yyy不断产生新串,就像泵一样)

      L是正则语言⇒(∃N∈N+)(∀w∈L)(∣w∣≥N→(∃y≠ε,∣xy∣<N)(∀k≥0)(xykz∈L))L\text{是正则语言}\Rightarrow(\exist N\in\mathbb N_+)(\forall w\in L)(|w|\geq N\rightarrow(\exist y\not =\varepsilon,|xy|<N)(\forall k\geq 0)(xy^kz\in L)) L是正则语言⇒(∃N∈N+​)(∀w∈L)(∣w∣≥N→(∃y​=ε,∣xy∣<N)(∀k≥0)(xykz∈L))

      # 证明

      令NNN为DFAAAA的状态数,L=L(A)L=\bm L(A)L=L(A),分两种情况讨论:

      # 1' (∀w∈L)(∣w∣<N)(\forall w\in L)(|w|<N)(∀w∈L)(∣w∣<N)

      显然(∣w∣≥N→(∃y≠ε,∣xy∣<N)(∀k≥0)(xykz∈L))(|w|\geq N\rightarrow(\exist y\not =\varepsilon,|xy|<N)(\forall k\geq 0)(xy^kz\in L))(∣w∣≥N→(∃y​=ε,∣xy∣<N)(∀k≥0)(xykz∈L))成立,因为没有∣w∣≥N|w|\geq N∣w∣≥N的情况

      # 2' (∃w∈L)(∣w∣≥N)(\exist w\in L)(|w|\geq N)(∃w∈L)(∣w∣≥N)

      1. 任取一个∣w∣≥N|w|\geq N∣w∣≥N
      2. 设m=∣w∣,w=a1a2…amm=|w|,w=a_1a_2\dots a_mm=∣w∣,w=a1​a2​…am​,令qi=δ^(q0,a1a2…ai)q_i=\hat\delta(q_0,a_1a_2\dots a_i)qi​=δ^(q0​,a1​a2​…ai​)表示DFA识别此字符串时读入字符aia_iai​所到达的状态。
      3. 由于m≥Nm\geq Nm≥N,加上初始状态一共N+1N+1N+1个状态,因此必然存在两个状态相等:(∃0≤i<j≤N)(qi=qj)(\exist 0\leq i<j\leq N)(q_i=q_j)(∃0≤i<j≤N)(qi​=qj​)
      4. 令:
        • x=a1a2…ai−1(i≥1)x=a_1a_2\dots a_{i-1}(i\geq 1)x=a1​a2​…ai−1​(i≥1)或x=ε(i=0)x=\varepsilon(i=0)x=ε(i=0)
        • y=aiai+1…ajy=a_{i}a_{i+1}\dots a_{j}y=ai​ai+1​…aj​
        • z=aj+1aj+2…am(j≤m−1)z=a_{j+1}a_{j+2}\dots a_{m}(j\leq m-1)z=aj+1​aj+2​…am​(j≤m−1)或x=ε(j=m)x=\varepsilon(j=m)x=ε(j=m)
      5. 由于qi=qjq_i=q_jqi​=qj​,因此让DFA在qiqi+1…qjq_iq_{i+1}\dots q_jqi​qi+1​…qj​之间不断循环可以对应出无穷多个字符串,即xykzxy^kzxykz

      泵引理即证。

      # 案例

      由正则表达式和正则语言的形式和定义显而易见,正则表达式可以作为正则语言的一种简化的表示方法,在给正则表达式加上一些非正则的操作(例如下面的∑n=0∞\sum_{n=0}^\infty∑n=0∞​)后也可以用来表示一些非正则语言。一般以粗体表示正则表达式,大写字母表示语言。

      # 证明语言L=∑n=0∞0n1n={0n1n∣n≥0}L=\sum_{n=0}^\infty\bm 0^n\bm 1^n=\{0^n1^n|n\geq 0\}L=∑n=0∞​0n1n={0n1n∣n≥0}不是正则语言

      反证法:

      1. 假设LLL是正则的,那么它满足泵引理
      2. 取w=0N1N∈Lw=0^N1^N\in Lw=0N1N∈L,它显然满足∣w∣=2N≥N|w|=2N\geq N∣w∣=2N≥N
      3. 那么对于y≠ε,∣xy∣<Ny\not =\varepsilon,|xy|<Ny​=ε,∣xy∣<N:
        • yyy只能取前NNN项
        • w=0N1Nw=0^N1^Nw=0N1N前NNN项全是1
        • 因此y=0m,0<m<Ny=0^m,0<m<Ny=0m,0<m<N
      4. 那么xy2z=0N+m1N∉Lxy^2z=0^{N+m}1^N\notin Lxy2z=0N+m1N∈/​L矛盾
      5. 因此LLL不满足泵引理,不是正则语言

      # 证明语言L={w∣w由数量相等的01构成}L=\{w|w\text{由数量相等的01构成}\}L={w∣w由数量相等的01构成}不是正则语言

      同理,用反证法:

      1. 假设LLL是正则的,那么它满足泵引理
      2. 取w=0N1N∈Lw=0^N1^N\in Lw=0N1N∈L,它显然满足∣w∣=2N≥N|w|=2N\geq N∣w∣=2N≥N
      3. 同理可以引出xy2z=0N+m1N∉Lxy^2z=0^{N+m}1^N\notin Lxy2z=0N+m1N∈/​L矛盾
      4. 因此LLL不满足泵引理,不是正则语言

      # 证明语言L={0i1j∣i>j}L=\{0^i1^j|i>j\}L={0i1j∣i>j}不是正则语言

      同理,用反证法:

      1. 假设LLL是正则的,那么它满足泵引理
      2. 取w=0N+11N∈Lw=0^{N+1}1^N\in Lw=0N+11N∈L,它显然满足∣w∣=2N+1≥N|w|=2N+1\geq N∣w∣=2N+1≥N
      3. 同理可以引出y=0m,0<m<Ny=0^m,0<m<Ny=0m,0<m<N
      4. 那么xy0z=0N+1−m1N∉Lxy^0z=0^{N+1-m}1^N\notin Lxy0z=0N+1−m1N∈/​L矛盾
      5. 因此LLL不满足泵引理,不是正则语言

      # ∑n=0∞0n1n\sum_{n=0}^\infty\bm 0^n\bm 1^n∑n=0∞​0n1n和∑n=01000n1n\sum_{n=0}^{100}\bm 0^n\bm 1^n∑n=0100​0n1n:由非正则语言引发的思考

      由上面的第一个案例可以看出,尽管都完全由正则运算构成,∑n=0∞0n1n\sum_{n=0}^\infty\bm 0^n\bm 1^n∑n=0∞​0n1n不是正则语言,而对于语言∑n=01000n1n\sum_{n=0}^{100}\bm 0^n\bm 1^n∑n=0100​0n1n,∑n=01000n1n\sum_{n=0}^{100}\bm 0^n\bm 1^n∑n=0100​0n1n本身就是它的正则表达式,它是正则语言。完全由正则的求和运算运算组成的运算扩展到无穷成为∑n=0∞\sum_{n=0}^\infty∑n=0∞​就不是一个正则运算了。

      由此我们可以直觉上感觉到DFA的和正则语言的能力限制:“有穷自动机”的“有穷”决定了有穷自动机只能保存有限个状态,而∑n=0∞0n1n\sum_{n=0}^\infty\bm 0^n\bm 1^n∑n=0∞​0n1n这类语言要求自动机记住无穷多个“状态”(记住000的数量并将之与111的数量进行比较,数量最多可以是无穷多个),因此有穷自动机不能识别。

      另外,对于字符串数量有限的语言,必定(∃N∈N+)(∀w∈L)(∣w∣<N)(\exist N\in\mathbb N_+)(\forall w\in L)(|w|<N)(∃N∈N+​)(∀w∈L)(∣w∣<N),即泵引理必然成立,而其自身也总可以表示为有限个正则表达式的和,因此字符串数量有限的语言必然是正则语言,更加印证了我们对有穷自动机中“有穷”的直觉把握。

      那么与有穷自动机相对的,是否存在“无穷自动机”?请见下推自动机。

      帮助我们改善此页面!
      创建于: 2020-11-08 16:16:48

      更新于: 2020-11-15 09:31:56