Formal Languages

形式語言

正規語言

自動機理論

Language

形式語言

Language

  • 語言(Language)是一個字串的集合
  • 字串是由字母(Alphabet)構成的序列

 

\(L=\{"cat","doge","monkey"\}\)

\(L\)由下列字母構成

\(\Sigma=\{a,b,c,\cdots z\}\)

字串連接

\(s=a_1a_2a_3\cdots a_n\)

\(t=b_1b_2b_3\cdots b_m\)

 

\(st=a_1a_2a_3\cdots a_nb_1b_2b_3\cdots b_m\)

 

 

\(abcd\)

\(wxyz\)

 

\(abcdwxyz\)

 

 

字串反轉

\(s=a_1a_2a_3\cdots a_n\)

 

 

\(s^R=a_n\cdots a_3a_2a_1\)

 

 

\(abcd\)

 

 

\(dcba\)

 

 

字串長度

\(s=a_1a_2a_3\cdots a_n\)

 

 

\(|s|=n\)

 

\(|st|=|s|+|t|\)

\(abcd\)

\(xyz\)

 

\(|abcd|=4\)

\(|xyz|=3\)

\(|abcdxyz|=7\)

 

空字串

\(s=\lambda\)

\(|\lambda|=0\)

 

\(\lambda t=t\lambda=t\)

沒有包含任何字母的字串

 

 

子字串(Substring)

一個字串中連續的一個序列

String

\(\underline{abc}de\)

\(qw\underline{e}rt\)

 

Substring

\(abc\)

\(e\)

前綴(Prefix)與後綴(Suffix)

若\(w=st\)

s就是w的前綴

t就是w的後綴

\(w =abcd\)

Prefixes Suffixes
λ abcd
a bcd
ad cd
adc d
abcd λ

次方

\(w^n=ww\cdots w\) (n個w)

 

\(w^0=\lambda\)

 

\(w=abcd\)

\(w^2=abcdabcd\)

\(w^0=\lambda\)

Kleene star*

若\(\sum=\{a,b\}\)

\(\sum^*\)表示\(\sum\)可以組合出的所有字串

 

\(\sum^+=\sum^*-\lambda\)

\(\sum=\{a,b\}\)

\(\sum^*=\{\lambda,a,b,aa,ab,ba,bb,aaa,\cdots\}\)

 

\(\sum^+=\{a,b,aa,ab,ba,bb,aaa,\cdots\}\)

Languages

  • 有了上面的操作之後,我們可以利用上面的操作表示一個種類的語言!

\(L=\{a^nb^n : n\geq0\}\)

這些是L語言的字串

\(\lambda\)

\(ab\)

\(aaaaaaaabbbbbbbb\)

這些不是L語言的字串

ac

abb

bbab

語言操作

語言的運算與字串運算差不多

稍微說明操作方法

\(\overline{L}=\sum^*-L\)

\(L^R=\{w^R:w\in L\}\)

 

 

\(L=\{ab,b\}\)

 

\(\overline{L}={\lambda,b,aa,\cdots}\)

\(L^R=\{a,ba\}\)

語言操作

\(L_1L_2=\{xy:x\in L_1,y \in L_2\}\)

\(L^n=LL\cdots L\)

\(L^0=\{\lambda\}\)

\(L=\{ab,b\}\)

\(G=\{a,bb\}\)

 

\(LG=\{aba,abbb,ba,bbb\}\)

\(L^2=\{abab,bb\}\)

Kleene star*

\(L^*=L^0\bigcup L^1 \bigcup L^2 \cdots\)

\(L^+=L^*-\{\lambda\}\)

 

\(L=\{a,ab\}\)

\(L*=\{\)

\(\lambda,\)

\(a,ab\)

\(aa,aab,aba,abab,\)

\(aaa,aaab,\cdots \}\)

文法Grammars

  • 構成語言的方法
  • ex 英文文法
    • 句子 = 名詞片語+動詞片語
    • 名詞片語 = 名詞 or 修飾詞 + 名詞
    • 動詞片語 = 動詞 or 動詞+名詞

文法Grammars

  • 英文文法
    • 句子 = 名詞片語+動詞片語
    • 名詞片語 = 名詞 or 修飾詞 + 名詞
    • 動詞片語 = 動詞 or 動詞+名詞片語

句子

=名詞片語+動詞片語

=名詞+動詞片語

=Sylveon + 動詞 + 名詞片語

=Sylveon + solve + 修飾詞 + 名詞

=Sylveon + solve + the + problems

Regular Expression

  • 正規表達式,一種表達語言的方法
  • 在大多數的程式語言都有內建該功能用於字串操作
  • 本篇只介紹最理論基礎用法

\(L=\{a,bb,abc\}\) 列舉法

\(L=\{ba^n:n>0\}\) 數學描述

\(L=\{\{a,ab\}^*\bigcup \{bb\}^*\}\) 集合描述

Regular Expression

  • 令r是一個正規表達式,L(r)表示r代表的字串集合
    • \(L(\emptyset )=\emptyset\)
    • \(L(\lambda)=\{\lambda\}\)
      • 空字串與空集合是不同東西歐
    • \(L(a)=\{a\}\)
    • \(L((a))=L(a)\)

Regular Expression

\(L(r_1+r_2)=L(r_1)\cup L(r_2)\)

\(L(a+b) = L(a)\cup L(b)\)

\(=\{a,b\}\)

Regular Expression

\(L(r_1\cdot r_2)=L(r_1) L(r_2)\)

\(L(a\cdot b) = L(a)L(b)\)

\(=\{ab\}\)

 

\(L((a+b)\cdot c)=(L(a)\cup L(b))L(c)\)

\(=\{a,b\}\{c\}\)

\(=\{ac,bc\}\)

Regular Expression

\(L({r}^*)=L(r)^*\)

\(L(a^*) = L(a)^*\)

\(=\{a\}^*=\{\lambda,a,aa,\cdots\}\)

 

\(L((a+b)^*)=(L(a)\cup L(b))^*\)

\(=\{a,b\}^*\)

\(=\{\lambda,a,b,aa,ab,ba,aaa,\cdots\}\)

Example

  • 正規表達式\((a+b)^*(a+bb)\)表示了那些字串?

Example

  • 正規表達式\((a+b)^*(a+bb)\)表示了那些字串?
#include<bits/stdc++.h>
using namespace std;

int main()
{
    string str,rule="(a|b)*(a|bb)";
    regex reg(rule);
    
    while( getline(cin,str) )
    {
        if( regex_match(str,reg) )
            cout<<str<<" in Language "<<rule<<endl;
        else
            cout<<str<<" not in Language "<<rule<<endl;
    }
}

a
b
abaa
abb
a in Language (ab)*(a|bb)
b not in Language (ab)*(a|bb)
abaa not in Language (ab)*(a|bb)
abb in Language (a|b)*(a|bb)

正規語言

  • 如果存在正規表達式可以表達語言\(L\),\(L\)就是正規語言
  • 如果語言\(L\)是正規語言,就存在正規表達式\(r\)表示\(L\)

\(L\in Regular Language \Leftrightarrow \exists r:L(r)=L\)

Example

  • 表達所有合法電子郵件的正規表達式是什麼

Finite-State Machine

有限狀態自動機

Automata

  • 自動機是數學模型的電腦

輸入Input

自動機Automata

輸出Output

儲存空間

Storage

String

Yes/No

Finite-State Machine

Input : abba

Input : abba

a

Input : abba

b

Input : abaa

b

Input : abba

a

Input : abba

a

AC!

自動機與語言

  • 一個自動機\(M\)對於某些輸入字串會停留在Accept狀態,這些字串也構成一個語言!

\(L(M)=\{w:w \text{ is accepted by } M\}\)

Example

  • 畫一些有限狀態自動機能接受下文法@
  • \(L=\{a^nb:n\geq0\}\)
  • \(L=\{(a+b)^*ab\}\)
  • \(L=\{\text{子字串有bbab的所有字串}\}\)

\(\Sigma=\{a,b\}\)

\(L=\{a^nb:n\geq 0\}\)

\(L=\{(a+b)^*ab\}\)

\(L=\{\text{子字串有bbab的所有字串}\}\)

KMP/AC自動機

正規語言

  • 如果語言\(L\)是正規語言,就存在一個有限狀態機M只接受L

$$L=L(M)$$

正規語言

  • 如果語言\(L\)是正規語言,就存在一個有限狀態機M只接受L

$$L=L(M)$$

  • 如果語言\(L\)是正規語言,就存在正規表達式\(r\)表示\(L\)

\(L=L(r)\)

Kleene's Theorem

  • 有限狀態機等價正規表達式
  • 可以透過Kleene's algorithm轉換

正規表達式

有限狀態自動機

Stephen Cole Kleene 1909-1994

非確定有限狀態自動機

  • Nondeterministic finite automaton

非確定有限狀態自動機

  • 對於一個字母可能有很多路可以選
  • 只要有一種選法會到達Accept就算接受

Example

Why Nondeterministic?

  • 可以同時進入所有的選擇,簡化問題
  • 比FSM更好表達

NFA vs DFA

  • 能同時走所有路線的NFA比DFA厲害嗎?
  • 有沒有一個語言L,只有NFA可以判斷?

NFA \(\equiv \) DFA

  • 對於任何一台NFA,總是能夠做出有一模一樣功能的DFA

正規語言是萬能的?

  • 有沒有一種語言,是不能用正規表達式表達的?

$$L=\{a^nb^n:n\geq 0\}$$

Pumping Lemma

for regular languages

汞引理

  • 如果\(L\)是無窮集的正規語言,就存在一個數字\(M\)使得
    • 對於字串\(w \in L\),如果\(|w|\geq M\)就能把\(w\)拆解成\(w=xyz\),滿足:
      • \(|xy|\leq M\)
      • \(|y|>0\)
    • 使\(w=xy^iz \in L\)

M一般而言=自動機狀態數

汞引理

  • 如果\(L\)是正規語言,就存在一個數字\(M\)

M一般而言=自動機狀態數

汞引理

  • 如果\(L\)是正規語言,就存在一個數字\(M\)使得
    • 對於字串\(w \in L\),如果\(|w|\geq M\)

M一般而言=自動機狀態數

路徑一定有環!

(鴿籠原理)

汞引理

  • 如果\(L\)是正規語言,就存在一個數字\(M\)使得
    • 對於字串\(w \in L\),如果\(|w|\geq M\)就能把\(w\)拆解成\(w=xyz\),滿足:
      \(|xy|\leq M\)
      \(|y|>0\)

M一般而言=自動機狀態數

X

Z

Y

汞引理

  • 如果\(L\)是正規語言,就存在一個數字\(M\)使得
    • 對於字串\(w \in L\),如果\(|w|\geq M\)就能把\(w\)拆解成\(w=xyz\),滿足:\(w=xy^iz \in L\)

M一般而言=自動機狀態數

X

Z

Y

$$L=\{a^nb^n:n\geq 0\}$$

  • 利用Pumping Lemma證明L不是正規語言
    • 反證法:設\(L\)是正規語言

$$L=\{a^nb^n:n\geq 0\}$$

  • 反證法:設\(L\)是正規語言
  • 就存在一個常數\(M\),使字串\(w \in L\)且\(|w|\geq M\)滿足:

$$L=\{a^nb^n:n\geq 0\}$$

  • 反證法:設\(L\)是正規語言
  • 就存在一個常數\(M\),使字串\(w \in L\)且\(|w|\geq M\)滿足:
    • \(w=xyz\)
    • \(|xy|\leq M\)
    • \(|y|>0\)

$$L=\{a^nb^n:n\geq 0\}$$

  • 反證法:設\(L\)是正規語言
  • 就存在一個常數\(M\),使字串\(w \in L\)且\(|w|\geq M\)滿足:
    • \(w=xyz\)
    • \(|xy|\leq M\)
    • \(|y|>0\)
  • 使\(xy^iz\in L\)

$$L=\{a^nb^n:n\geq 0\}$$

  • 字串\(w \in L\)且\(|w|\geq M\)滿足:
    • \(w=xyz\)
    • \(|xy|\leq M\)
    • \(|y|>0\)
  • 使\(xy^iz\in L\)

邪惡的字串\(w=a^Mb^M\in L\)

$$L=\{a^nb^n:n\geq 0\}$$

  • 字串\(w \in L\)且\(|w|\geq M\)滿足:
    • \(w=xyz\)
    • \(|xy|\leq M\)
    • \(|y|>0\)
  • 使\(xy^iz\in L\)

邪惡的字串\(w=a^Mb^M\in L\)

$$x=a^{M-i},y=a^{i},z=b^M$$

$$L=\{a^nb^n:n\geq 0\}$$

  • 字串\(w \in L\)且\(|w|\geq M\)滿足:
    • \(w=xyz\)
    • \(|xy|\leq M\)
    • \(|y|>0\)
  • 使\(xy^iz\in L\)

邪惡的字串\(w=a^Mb^M\in L\)

$$x=a^i,y=a^{M-i},z=b^M$$

$$|xy|=i+(M-i)=M\leq M$$

$$L=\{a^nb^n:n\geq 0\}$$

  • 字串\(w \in L\)且\(|w|\geq M\)滿足:
    • \(w=xyz\)
    • \(|xy|\leq M\)
    • \(|y|>0\)
  • 使\(xy^iz\in L\)

邪惡的字串\(w=a^Mb^M\in L\)

$$x=a^{M-i},y=a^{i},z=b^M(i>0)$$

$$|xy|=(M-i)+i=M\leq M$$

$$|y|=i>0$$

使\(xy^iz\in L\)

$$L=\{a^nb^n:n\geq 0\}$$

  • 字串\(w \in L\)且\(|w|\geq M\)滿足:
    • \(w=xyz\)
    • \(|xy|\leq M\)
    • \(|y|>0\)
  • 使\(xy^iz\in L\)

邪惡的字串\(w=a^Mb^M\in L\)

$$x=a^{M-i},y=a^{i},z=b^M(i>0)$$

$$|xy|=(M-i)+i=M\leq M$$

$$|y|=i>0$$

使\(xy^iz\in L\)

但是\(w=xy^0z=a^{M-i}b^M \notin L\)

Example

  • 證明下語言不是正規語言

$$L=\{ww^R:w=\Sigma^*\}$$

Title Text

  • Bullet One
  • Bullet Two
  • Bullet Three

More Autometa

更多自動機

Pushdown Autometa

下推自動機

非確定下推自動機

非確定下推自動機@

非確定下推自動機夠厲害嗎?

  • ✅\(L=\{a^nb^n:n\geq 0\}\)
  • ❌\(L=\{a^nb^nc^n:n\geq 0\}\)

Turing machine

圖靈機

Turing machine

  • 艾倫·圖靈於1936年提出的一種抽象計算模型

\(L=\{aa^*\}\)

What is Algorithm?

  • 如果\(A\)是一個演算法,就存在一個圖靈機\(M\),可以執行\(A\)演算法

演算法=圖靈機

Church–Turing thesis

  • 邱奇-圖靈猜想

如果一個問題是可以被某種演算法解決的

就存在一個圖靈機可以解決該問題

圖靈機是萬能的?

  • Halting Problem
    • 給一台任意圖靈機與輸入,問該圖靈機會不會進入無窮迴圈
  • 理髮師悖論
    • 小城裡的理髮師放出豪言:他只為,而且一定要為,城裡所有不為自己刮鬍子的人刮鬍子。該理髮師幫不幫自己刮鬍子?

P & NP

  • 如果一個問題是P問題,就有一台確定性圖靈機在多項式時間可以解決該問題
  • 如果一個問題是NP問題,就有一台非確定性圖靈機在多項式時間可以解決該問題

Formal Languages

By sylveon

Formal Languages

  • 596