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\)
- 對於字串\(w \in L\),如果\(|w|\geq M\)就能把\(w\)拆解成\(w=xyz\),滿足:
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\)
-
對於字串\(w \in L\),如果\(|w|\geq M\)就能把\(w\)拆解成\(w=xyz\),滿足:
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
- 609