Bài giảng Ôtômát và ngôn ngữ hình thức: Chương 3 Văn phạm chính quy và ôtômát hữu hạn cung cấp cho người học những kiến thức như: Ôtômát hữu hạn đơn định - DFA; Ôtômát hữu hạn không đơn định - NFA; Sự tương đương của NFA và DFA; Mối liên quan giữa VPCQ và OH; OHD không xuất phát lại; Các tính chất đóng của ngôn ngữ chính quy; Định lý KLEENE; Biểu thức chính quy; Thuật toán Thampson.
Trang 1Chương 3 :
VĂN PHẠM CHÍNH QUY
VÀ ÔTÔMÁT HỮU HẠN
2
Nội dung
1 Ôtômát hữu hạn đơn định - DFA
2 Ôtômát hữu hạn không đơn định - NFA
3 Sự tương đương của NFA và DFA
4 Mối liên quan giữa VPCQ và OH
5 OHD không xuất phát lại
6 Các tính chất đóng của ngôn ngữ chính quy
7 Định lý KLEENE
8 Biểu thức chính quy
9 Thuật toán Thampson
Ôtômát hữu hạn đơn định – DFA
(Deterministic Finite Automata)
Mô tả phi hình thức:
Ôtômát hữu hạn như một “máy” đoán nhận chuỗi, nó
làm việc như sau:
Băng từ chia thành nhiều ô Mỗi ô có khả năng lưu
trữ một ký hiệu của chuỗi nhập (chuỗi cần được
đoán nhận w є *)
Có một đầu đọc, ở mỗi thời điểm quan sát một ô trên
băng từ
Có một bộ điều khiển Q gồm tập hợp hữu hạn trạng
thái; ở mỗi thời điểm có một trạng thái hiện hành gọi
là trạng thái nội
Tùy theo cấu hình hiện tại gồm (trạng thái hiện thời của bộ điều khiển và ký hiệu trên ô mà đầu đọc quan sát được), mà Ôtômát chuyển sang trạng thái mới, đồng thời đầu đọc dịch chuyển sang phải một ô
Quy luật chuyển sang trạng thái mới, được cho bởi một hàm, gọi là hàm chuyển trạng thái : Q x Q
q Bộ điều khiển
Băng từ sức chứa vô hạn
Input : w *
Output : Yes, w L
No, w L
Trang 25
Trong Q có phân biệt q0 Q, gọi là trạng thái đầu và một tập
hợp F chứa các trạng thái kết thúc
Ta nói ôtômát đoán nhận (hay thừa nhận) một chuỗi vào w
*, nếu xuất phát từ q0, đầu đọc nhìn vào ký hiệu bên trái
nhất của w, sau một số bước hữu hạn làm việc, nó đọc xong
chuỗi w và rơi vào một trong các trạng thái kết thúc
Tập hợp mọi chuỗi (được đoán nhận bởi Ôtômát) hợp thành
ngôn ngữ được đoán nhận bởi ôtômát đó
Do Q là hữu hạn và hàm chuyển là hàm toàn phần và đơn
trị, cho nên bước chuyển của Ôtômát được xác định một
cách duy nhất Chính vì vậy mà Ôtômát mô tả như trên được
gọi là ôtômát hữu hạn đơn định
6
Định nghĩa hình thức: Một ôtômát hữu hạn đơn định (viết tắt là ÔHĐ) là một hệ thống M = (, Q, , q0, F) trong đó:
là một bộ chữ cái hữu hạn, gọi là bộ chữ vào
Q là một tập hữu hạn các trạng thái, Q =
: Q x Q, được gọi là hàm chuyển
q0 Q là trạng thái đầu
F Q là tập các trạng thái cuối
7
Ví dụ 3.1: Xét Ôtômát hữu hạn đơn định M( ,Q, ,q0,F) trong đó:
= {0, 1}
Q = {q0, q1, q2, q3}
F = {q0}
Hàm cho bởi ma trận sau:
q0 q2 q1
q1 q3 q0
q2 q0 q3
q3 q1 q2
Ký hiệu vào Trạng thái
Biểu diễn hàm chuyển trạng
Có 3 cách biểu diễn hàm chuyển (hàm chuyển trạng thái):
Theo định nghĩa (qi,a)=qj
Theo bảng truyền
Theo đồ thị
8
Trang 39
Để cho dễ hình dung hơn, ta thường biểu diễn hàm chuyển dưới
dạng một đồ thị định hướng, gọi là biểu đồ chuyển như sau:
Mỗi nút tương ứng với một trạng thái
Nút đầu trỏ bởi mũi tên có chữ “Bắt đầu”
Nút cuối được khoanh bởi hai vòng tròn
Nếu (q, a) = p thì có một cung đi từ nút q tới nút p, và cung
đó mang nhãn a
q 0
q 1
q 1
Bắt đầu
a
Biểu đồ chuyển cho Ôtômát hữu hạn nói ở trên (Ví dụ 3.1) sẽ như sau:
q 0
q 1
Đầu
1
1
1
1
10
Tính chất của hàm chuyển trạng
1 (q,)=q
2 (q,wa)= ((q,w),a)
3 (q,aw)= ((q,a),w), w * và a
4 (q,xy)= ((q,x),y), x,y *
11
Định nghĩa tập đoán nhận bởi (M)
Ký hiệu T(M)
T(M) = { w | w * , (q0,w) = qf F }
Ví dụ:
w1 = 1010
w2 = 11001001
W3 = 110101
12
Trang 4 Ta gọi một hình trạng của ÔHĐ là một chuỗi có dạng qx
với q Q và x *
VD: q0w3 = q0 110101 là một hình trạng của (M)
Quá trình đoán nhận một chuỗi của ÔHĐ là quá trình
biến đổi các hình trạng, thực chất là quá trình “viết lại”
chuỗi
VD: Viết quá trình đoán nhận chuỗi x = 110101
Quá trình đoán nhận chuỗi vào
Cho chuỗi w= 110101 Quá trình đoán nhận chuỗi vào đó diễn tả bằng các bước chuyển sau:
110101 110101 110101 110101 110101 110101
q 0 q1 q0 q2 q 3 q 1 q0 F
Vì q0F, vậy chuỗi vào w=110101 được thừa nhận bởi Ôtômat
Nhận xét rằng mỗi trạng thái của M ghi nhớ một tình trạng nhất định của phần chuỗi vào đã đọc như sau:
q0: phần đã đọc chứa một số chẵn con số 0 và một số chẵn con số 1
q1: phần đã đọc chứa một số chẵn con số 0 và một số lẻ con số 1
15
Tập các chuỗi được ôtômát thừa nhận
q2: phần đã đọc chứa một số lẻ con số 0 và một
số chẵn con số 1
q3: phần đã đọc chứa một số lẻ con số 0 và một
số lẻ con số 1
Mỗi lần đọc thêm một ký hiệu 0 hay 1, hàm luôn
luôn chuyển trạng thái của ôtômát về đúng tình trạng
trên Vì F = {q0}, cho nên các chuỗi được M thừa
nhận là các chuỗi có chứa một số chẵn con số 0
và một số chẵn con số 1
16
Ngôn ngữ đoán nhận (thừa nhận) bởi M
Ngôn ngữ đoán nhận (hay thừa nhận) bởi M là:
L(M) = {w| w *và q0w * p với p F}
Trở lại ví dụ 3.1, hệ viết lại ngầm định của nó gồm các sản xuất sau:
q00 q2 q10 q3 q20 q0 q30 q1
q01 q1 q11 q0 q21 q3 q31 q2
Quá trình đoán nhận chuỗi w = 110101 là:
q0110101 q110101 q00101 q2101 q301 q11 q0 F
Có một cách viết khác (thường thấy ở các sách khác):
(q0,110101)=(q1,10101)=(q0,0101)=(q2,101)=(q3,01)= (q1, 1)
= q0 F
Trang 517
Ôtômát hữu hạn không đơn định – NFA
(Nondeterministic Finite Automata)
Dễ dàng mở rộng mô hình ÔHĐ trên để cho hệ viết lại ngầm
định của Ôtômát là một hệ viết lại không đơn định, tức là có thể
chứa các sản xuất có cùng vế trái
Định nghĩa: Ta gọi Ôtômát hữu hạn không đơn định (hay không
tiền định) viết tắt là ÔHK, là một hệ thống:
M = {, Q, , q0, F}
Trong đó: , Q, q0, F vẫn như tương tự OHĐ Chỉ duy
nhất hàm là đổi lại: : Q x 2Q
Hệ viết lại W = (V, P) ngầm định của M cũng có V = Q
18
Ôtômát hữu hạn không đơn định (tt)
Tập đoán nhận bởi Ôtômat T(M) = {w | w * và q0w * qf với qf F}
Ngôn ngữ đoán nhận bởi M là:
L(M) = {w | w * và q0w * qf với qf F}
Chuỗi vào w được (M) thừa nhận nếu tồn tại ít nhất một quá trình dẫn xuất q0w * qf với qf
F
Ví dụ 3.2: Xét ÔHK M = ({0,1}, {q0, q1, q2, q3,
q4}, , q0, {q2, q4}) với hàm chuyển cho như sau:
19
Ôtômát hữu hạn không đơn định (tt)
Sau đây là quá trình đoán nhận chuỗi vào 01001, dẫn tới trạng
thái cuối q4:
q001001 q01001 q0001 q301 q41 q4 F
Đây chỉ là một quá trình đoán nhận trong nhiều quá trình
q0 {q0, q3} {q0, q1}
q1 {q2}
q2 {q2} {q2}
q3 {q4}
q4 {q4} {q4}
Đầu
0, 1
q0
q1
q2
q3 q
4
1
1
0, 1
0, 1
20
Ôtômát hữu hạn không đơn định (tt)
Nếu xét tất cả các quá trình, ta có một “cây” như sau:
q001001 q01001 q0001 q001 q01 q0
q31001 q1001 q301 q31 q1
q41 q4 F
Như vậy chuỗi 01001 đã thừa nhận bởi M
Dễ thấy rằng ÔHK này thừa nhận các chuỗi trên {0, 1} có
chứa hai con 0 liên tiếp hoặc có chứa hai con 1 liên tiếp
L (M) = { w00w, w11w | w * ={0,1}*}
Trang 621
Sự tương đương giữa ÔHĐ và ÔHK
Theo định nghĩa mỗi ÔHĐ cũng là một ÔHK, cho nên:
L(ÔHĐ) L(ÔHK) (1)
Định lý 3.1: Nếu L một ngôn ngữ được đoán nhận bởi một
ÔHK, thì cũng có một ÔHĐ đoán nhận L
Nói cách khác L(ÔHK) L(ÔHĐ) (2)
Giải thuật: Input: M = (, Q, , q0, F) là ÔHK đoán nhận L
Output: M’ = (, Q’, ’, q0’, F’) là OHĐ sao cho L(M’)=L(M)
B1: Đặt M’ = (, Q’, ’, q0’, F’), trong đó:
• Q’ = 2Q
• F’ là tập mọi trạng thái trong Q’ có chứa một trạng thái cuối
nào đó của M
22
Sự tương đương giữa ÔHĐ và ÔHK (tt)
• Mỗi phần tử trong Q’ được ký hiệu bởi tập hợp {q1, q2,
…, qk}, với q1, q2, …, q0 Q
• Trạng thái đầu q0’ = {q0}
B3: Vẽ đồ thị chuyển trạng thái
B4: Kết luận M’ và chú thích rõ 5 phần của Ôtômát
Với cách thành lập M’ trên ta hoàn toàn CM được L(M) = L(M’) (Tham khảo sách “Ngôn ngữ hình thức” – Nguyễn Văn Ba, trang 32)
’({q1, q2, …, qk}, a) = (qi , a)
B2: Hàm chuyển ’ của M’ được thành lập theo công thức:
Ví dụ 3.3: Cho M = ({0, 1}, {q0, q1, q2}, ,
q0, {q2}), là một ÔHK trong đó hàm chuyển
trạng thái như sau:
(q0, 0) = {q0, q1}
(q0, 1) = {q1}
(q1, 0) = {q2}
(q1, 1) =
(q2, 0) = {q2}
(q2, 1) = {q2}
Tìm OHĐ tương đương?
Sự tương đương giữa ÔHĐ và ÔHK (tt)
23
• Kết luận : M’ =( , Q’, ’, {q0}, F’) là OHĐ cần tìm
Trong đó:
= Q’ =
’ (vẽ đồ thị Chú ý: cắt bỏ các nhánh không xuất phát từ q0 hoặc xuất phát từ q 0 nhưng không kết thúc được )
q0 là trạng thái bắt đầu F’ =
24
Trang 725
Sự tương đương giữa ÔHĐ và ÔHK (tt)
Thực ra trong 2Q thường có nhiều phần tử
không thể truy đạt từ {q0}, nên chẳng cần đưa
chúng vào Q’ Vậy để lập Q’, ta nên truy xuất
từ {q0}, rồi từng bước thêm dần các trạng thái
mới, nếu các trạng thái này là kết quả của hàm
chuyển thái áp dụng lên các trạng thái đã có
trước đó
26
Bổ đề 3.1:
Lớp các ngôn ngữ đoán nhận bởi Ôtômát hữu hạn đơn định (hay không đơn định) là một, và gọi là lớp các ngôn ngữ chính quy (viết tắt là NNCQ)
NNCQ được sinh ra bởi VPCQ nên VPCQ có mối quan hệ mật thiết với OH Nghĩa là L(G)=L(M)=L là NNCQ
27
Văn phạm chính quy
Định nghĩa VPCQ (nhắc lại):
• Một văn phạm chính quy phải nếu tập luật sinh của nó dạng:
A wB | w, với w * và A, B
• Mộtvăn phạm chính quy trái nếu tập luật sinh của nó dạng:
A Bw |w, với w * và A, B
• Các văn phạm chính quy phải và trái được gọi chung là văn
phạm chính quy (viết tắt là VPCQ)
• Ngôn ngữ được sinh ra bởi VPCQ gọi là NNCQ
28
Cho ôtômát hữu hạn đơn định xây dựng VPCQ
Định lý 3.2: Nếu L là một NNCQ trên bộ chữ cái , thì tồn tại một VPCQ phải G sao cho L – { } = L(G)
Giải thuật: (xây xựng một VPCQ phải từ một ôtômát hữu hạn đơn định)
Input: L = L(M) với M = ( , Q, , q0, F) là ÔHĐ
Output:Ta thành lập văn phạm G = (T, V, P, S) sao cho L(G)=L \ { }
Input Output
M = (, Q, , q 0 , F) G = (T, V, P, S)
Q = {q 0, q 1, q 2,… } V = {V 0 ,V 1 ,V 2 ,…}
(q 0 , a) = q 1
(q 1 , a) = q f F
a và q 0 ,q 1 Q
P=
V 0 aV 1
V 1 aV f | a
a T
q0 S là kí hiệu bắt đầu trong P
F Q
Trang 8Ví dụ 3.4: Tìm văn phạm chính qui sinh ra ngôn ngữ L Biết rằng
L là ngôn ngữ được đoán nhận bởi OH sau đây:
M=(, Q,,q1,F)
xác định như đồ thị:
={a,b,c}
Q={q1,q2,q3}
F={q3}
q1 là trạng thái bắt đầu
q 1
3
q 2
a
a
b
29
GIẢI
Văn phạm sinh ra ngôn ngữ L có dạng G=(T,V,P,S)
T={a,b,c}
V={S,A,B,}
P={S aS | aA
A bA | bB | b
B cB | c}
S là kí hiệu bắt đầu trong tập luật sinh
q1 Start
q 3
q2
a
a
b
30
31
Ví dụ 3.5: Cho ÔHĐ M với = {a, b}, Q = {q0, q1, q2, q3}, F =
{q2} Hàm chuyển cho như sau:
q0 q1 q3
q1 q1 q2
q2 q3 q2
q3 q3 q3
b
q0 Đầu
q1
q 3
q 2
a
a,b
b
a
Biểu đồ chuyển của ÔHĐ Tìm văn phạm G sinh ra ngôn ngữ L, sao cho L=L(M)
Tìm L? (Có chứng minh)
Ngôn ngữ tìm được là ngôn ngữ gì?
32
Tìm một số quá trình đoán nhận của OH:
Xét w1 = aabbb
q0aabbb q1abbb q1bbb q2bb q2b q2 F w1 L(M) Xét w2 = aaa
q0aaa q1aa q1a q1F w2 L(M) Xét w3 = ba, thật vậy: q0ba q3a q3F w3 L(M) Xét w4 = aba,thật vậy:q0aba q1ba q2a q3 F w4 L(M)
w2, w3, w4 L(G) (theo bổ đề 3.1)
T(M)={ab,aab,aabbb,abb,aaab,abbbb,…}
Dễ thấy rằng ngôn ngữ do Ôtômát M đoán nhận là:
L(M) = {ambn | m, n > 0}
• Tìm văn phạm G sinh ra ngôn ngữ L, sao cho L(G)=L(M)
• SV tự làm!
Trang 933
Cho VPCQ xây dựng ôtômát hữu hạn không đơn định
Định lý 3.3: Nếu G là một VPCQ
phải, thì L(G) là một ngôn ngữ chính
quy
định từ một VPCQ phải:
Input: G = (T, V, P, S)
Output:Ta thành lập một
ÔHK M đoán nhận L(G) như
sau:
M = ( , Q, , q0, F)
Input Output
G = (T, V, P, S) M = (, Q, , q 0 , F)
V = {V 0 ,V 1 ,V 2 …} Q = {q 0 , q 1 , q 2 ,…}
P=
{V 0 aV 1
V1 a1a2a3…V2
V 2 a}
(q 0 ,a) = q 1
(q 1 , a 1 a 2 a 3 …) = q 2
(q 2 ,a) = q 3
V 0 là kí hiệu bắt đầu trong P q0 là trạng thái bắt đầu
F = {q3 } Q
Vẽ đồ thị Kết luận M?
qi
Start
qj
a 1 a2 … an
Cách xây dựng hàm chuyển trạng thái
Mỗi sản xuất dạng V i a1a 2 … a n V j thuộc P
Ta có hàm chuyển trạng (qi, a1a2a3…an) = qj
Đồ thị vẽ như sau:
Cho VPCQ xây dựng ôtômát hữu hạn không đơn định
Mỗi sản xuất dạng V i a1a 2 … a nthuộc P
Ta có hàm chuyển trạng (qi, a1a2a3…an) = qf F
Đồ thị vẽ như sau:
qi
Start
qf
a1 a2 … an
34
Ví dụ 3.6: Xây dựng một Ôtômát hữu hạn chấp nhận ngôn
ngữ được sinh bởi văn phạm có tập luật sinh như sau:
S aA
A abS| b
Giải Đặt M=(,Q, , q0,F) là OH cần tìm
Trong đó:
={a,b}
Q={q0,q1}
Xác định như sau:
35
(q0,a)=q1
(q1,ab)=q0
(q1,b)=q2 F
F = {q2}
q0 là trạng thái bắt đầu
Vẽ đồ thị chuyển trạng thái như sau:
q0
Start
q 2
q1
a
a
b
b
36
Trang 10Kết luận M=(,Q, , q0,F) là OH cần tìm
• Trong đó:
• ={a,b}
• Q={q0,q1,q2,q3}
• Xác định như sau:
• F = {q2}
• q0 là trạng thái bắt đầu
q0
Start
q 2
q1
a
a
b
b q
3
ÔHĐ không xuất phát lại
•Định nghĩa: Một ÔHĐ là không xuất phát lại nếu không tồn tại cặp (q, a) để cho (q, a) = q0 với q0 là trạng thái đầu
•Bổ đề 3.2 : Có giải thuật cho phép biến đổi một ÔHĐ
M đã cho thành một ÔHĐ không xuất phát lại M’ sao cho L(M’) = L(M)
Giải thuật : –Giả sử M = ( , {q0, q1, …, qn}, , q0, F)
–Lập ÔHĐ M’ = ( , Q {qn+1}, ’, q0, F’) trong đó:
39
ÔHĐ không xuất phát lại
’(qn+1, a) = ’(q0, a)
} {
'
1
q F
F
F Nếu q0 không thuộc F
Nếu q0 F
Kết luận M' (, Q {qn+1}, ’, q0, F’) , chú thích 5 phần?
Dễ thấy M’ thực hiện cùng các bước chuyển như M, trừ khi
M chuyển về q0 thì M’ chuyển sang qn+1, nhưng sau đó lại tiếp
tục bắt chước như M thường
1
) , ( )
,
(
'
n q a q a
q Nếu q Q và (q, a) q0
Nếu q Q và (q, a) = q0
Ví dụ 3.7: Tìm OHĐ không xuất phát lại M’ tương đương với OHĐ có xuất phát lại M sao cho L(M’)=L(M)
Gợi ý
OHĐ không xuất phát lại cần tìm sẽ có đồ thị chuyển trạng
thái sau:
(M)
(M’)
40
Trang 11 Gọi M’=(, Q {qn+1}, ’, q0, F’) là OHĐ cần tìm
Trong đó:
= {a,b}
Q = {q0, q1,q2,q3 }
F’ = {q0,q2,q3}
q0 là trạng thái bắt đầu
’ như đồ thị
q0 q3 q1
q 1 q 2
q2 q3
q3 q3 q1
Các tính chất đóng của lớp các NNCQ (tt)
Định lý 3.4: Nếu L và L’ là các NNCQ thì L L’ cũng là NNCQ
Định lý 3.5: Nếu L * là một NNCQ, thì * - L cũng là NNCQ
Định lý 3.6: Nếu L và L’ là các NNCQ thì L L’ cũng là NNCQ
Bổ đề 3.3: Cho L * và ’. Có một ÔH với bộ chữ vào đoán nhận L khi và chỉ khi có một ÔH với bộ chữ vào ’ đoán nhận L (Nói cách khác khái niệm NNCQ không tùy thuộc vào bộ chữ)
Định lý 3.7: Nếu L và L’ đều là các NNCQ thì LL’ cũng là NNCQ
Định lý 3.8: Nếu L là NNCQ thì L* cũng là NNCQ
43
Định lý KLEENE
Định lý: và {} là các NNCQ
Định lý: Với mọi w *, thì {w} là NNCQ
Hệ quả: Mọi tập con hữu hạn của * đều là NNCQ
Hệ quả: Mọi ngôn ngữ tạo nên từ các ngôn ngữ hữu
hạn bằng cách áp dụng một số hữu hạn lần các phép
hợp, ghép tiếp và * đều là NNCQ
Định lý KLEENE: Mọi NNCQ đều có thể nhận được từ
các ngôn ngữ hữu hạn bằng cách áp dụng một số hữu
hạn lần các phép hợp, ghép tiếp và *
BIỂU THỨC CHÍNH QUI
Cách khác để mô tả ngôn ngữ chính qui là dùng biểu thức chính qui (BTCQ)
Một BTCQ là sự kết hợp:
Các ký tự trong , mỗi ký tự có thể xuất hiện nhiều lần,
Các toán tử: bao đóng (+,*), ghép, hợp
Các dấu ngoặc: ()
VD:
Với ngôn ngữ L= {a}, ta có BTCQ là a
L={a,b}, ta có BTCQ là a+b
L={ab} {a}, ta có BTCQ là ab+a
L={a,b} {a} , ta có BTCQ là (a+b)a
44