Trong lý thuyết ôtômat và ngôn ngữ hình thức kinh điển, các khái niệm cơ bản là ôtômat, văn phạm và ngôn ngữ, với các công trình sáng giá của Axel Thue, Chomsky, Post.. Ngoài hai lĩnh vự
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
Đà Nẵng, Năm 2012
Trang 2MỤC LỤC
Trang
Trang phụ bìa
Lời cam đoan
Mục lục
Danh mục các hình
Mở đầu 1
Chương 1: Văn phạm và ngôn ngữ sinh bởi văn phạm 4
1.1 Khái niệm ngôn ngữ 4
1.2 Văn phạm và ngôn ngữ sinh bởi văn phạm 10
1.3 Một số tính chất của ngôn ngữ 19
Chương 2: Ôtômat hữu hạn và ngôn ngữ chính quy 28
2.1 Ôtômat hữu hạn đơn định 29
2.2 Ôtômat hữu hạn không đơn định 36
2.3 Quan hệ giữa ôtômat hữu hạn và ngôn ngữ chính quy 40
2.4 Biểu thức chính quy 46
2.5 Cực tiểu hóa ôtômat hữu hạn 50
Chương 3: Ôtômat đẩy xuống và cây suy dẫn của nó 60
3.1 Văn phạm phi ngữ cảnh và cây suy dẫn của nó 60
3.2 Dạng chuẩn Chomsky 72
3.3 Ôtômat đẩy xuống 75
Kết luận 86
Danh mục tài liệu tham khảo 87 Quyết định giao đề tài luận văn (bản sao)
Trang 3LỜI CAM ĐOAN
Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi
Các số liệu, kết quả nêu trong luận văn là trung thực và chưa từng được ai công
bố trong bất kì công trình nào khác
Tác giả luận văn
Đinh Thị Kim Anh
Trang 53.5 Cây suy dẫn của từ trong G 65
Trang 6CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập - Tự do – Hạnh phúc
LÝ LỊCH KHOA HỌC
I LÝ LỊCH SƠ LƯỢC:
Họ và tên: Đinh Thị Kim Anh Giới tính: Nữ
Ngày, tháng, năm sinh: 03/01/1987 Nơi sinh: Đà Nẵng
Quê quán: Điện Dương, Điện Bàn, Quảng Nam Dân tộc: Kinh
Chức vụ, đơn vị công tác trước khi đi học tập, nghiên cứu:
Chỗ ở riêng hoặc địa chỉ liên lạc: Đường Suối Đá 3, Sơn Trà, Đà Nẵng
Tên đồ án, luận văn hoặc môn thi tốt nghiệp:
Ngày và nơi bảo vệ đồ án, luận văn hoặc thi tốt nghiệp:
Người hướng dẫn:
2 Thạc sĩ:
Hệ đào tạo: Chính quy không tập trung Thời gian đào tạo: từ 2010 đến 2012 Nơi học (trường, thành phố): Đại học Đà Nẵng
Ngành học: Phương pháp toán sơ cấp
Tên luận văn: Ngôn ngữ chính quy và ngôn ngữ phi ngữ cảnh
Ngày và nơi bảo vệ luận văn: Ngày 1/7/2012 tại Đại Học Đà Nẵng
Người hướng dẫn: PGS TS Nguyễn Gia Định
3 Trình độ ngoại ngữ ( biết ngoại ngữ gì, mức độ): Tiếng Anh
Trang 7
Tôi xin cam đoan những lời khai ở trên là đúng sự thật, nếu có gì sai xót tôi xin chịu hoàn toàn trách nhiệm
Đà Nẵng, ngày 16 tháng 6 năm 2012
Người khai ký tên
Đinh Thị Kim Anh
Trang 8MỞ ĐẦU
1 Lý do chọn đề tài
Mấy chục năm gần đây, chúng ta đã chứng kiến sự phát triển mãnh liệt trong các lĩnh vực nghiên cứu toán học liên quan đến máy tính và tin học Sự phát triển phi thường của các máy tính và những thay đổi sâu sắc trong phương pháp luận khoa học đã mở ra những chân trời mới cho toán học với một tốc độ không thể sánh được trong suốt lịch sử lâu dài của toán học Những phát triển đa dạng của toán học
đã trực tiếp tạo ra “thuở ban đầu” của máy tính và tin học và các tiến bộ trong tin học đã dẫn đến sự phát triển rất mạnh mẽ một số ngành toán học
Vì vậy, toán học đóng vai trò trung tâm trong các cơ sở của tin học Có thể
kể ra một số lĩnh vực nghiên cứu đáng chú ý trong mối quan hệ này Thật là thú vị khi nhận thấy rằng các lĩnh vực này cũng phản ánh sự phát triển lịch sử của tin học
1 Lý thuyết kinh điển về tính toán bắt đầu bằng công trình của Gödel, Tarski, Church, Post, Turing và Kleene chiếm vị trí trung tâm
2 Trong lý thuyết ôtômat và ngôn ngữ hình thức kinh điển, các khái niệm cơ bản là ôtômat, văn phạm và ngôn ngữ, với các công trình sáng giá của Axel Thue, Chomsky, Post
Ngoài hai lĩnh vực trên, nhiều lĩnh vực quan trọng khác thuộc về các cơ sở toán học của tin học; chẳng hạn, lý thuyết độ phức tạp, ngữ nghĩa và lý thuyết về tính đúng đắn của các ngôn ngữ lập trình, lý thuyết mật mã, lý thuyết các cấu trúc
dữ liệu và lý thuyết các cơ sở dữ liệu
Lý thuyết ngôn ngữ hình thức và ôtômat đóng một vai trò rất quan trọng trong các cơ sở toán học của tin học Ngôn ngữ hình thức được sử dụng trong việc xây dựng các ngôn ngữ lập trình, lý thuyết về các chương trình dịch Các ngôn ngữ hình thức tạo thành một công cụ mô tả đối với các mô hình tính toán cả cho dạng thông tin vào-ra lẫn kiểu thao tác Lý thuyết ngôn ngữ hình thức, chính vì thực chất của nó là một lĩnh vực khoa học liên ngành; nhu cầu mô tả hình thức văn phạm được phát sinh trong nhiều ngành khoa học khác nhau từ ngôn ngữ học đến sinh
Trang 9học.Từ ngàn xưa con người muốn giao tiếp với nhau phải dùng ngôn ngữ Ngôn ngữ để con người có thể giao tiếp với nhau được gọi là ngôn ngữ tự nhiên, chẳng hạn như tiếng Anh, tiếng Nga, tiếng Việt là các ngôn ngữ tự nhiên Con người muốn giao tiếp với máy tính tất nhiên cũng thông qua ngôn ngữ Con người muốn máy tính thực hiện công việc, phải viết các yêu cầu đưa cho máy bằng ngôn ngữ máy hiểu được Việc viết các yêu cầu ta gọi là lập trình Ngôn ngữ dùng để lập trình được gọi là ngôn ngữ lập trình
Cả ngôn ngữ lập trình lẫn ngôn ngữ tự nhiên đều có thể xem như những tập các từ, tức là các xâu hữu hạn các phần tử của một bộ chữ cái cơ sở nào đó Về mặt truyền thống, lý thuyết ngôn ngữ hình thức liên quan đến các đặc tả cú pháp của ngôn ngữ nhiều hơn là đến những vấn đề ngữ nghĩa Một đặc tả về cú pháp của một ngôn ngữ có hữu hạn từ, ít nhất về nguyên tắc, có thể được cho bằng cách liệt kê các từ Điều đó không thể áp dụng đối với các ngôn ngữ có vô hạn từ Nhiệm vụ chính của lý thuyết ngôn ngữ hình thức là nghiên cứu các cách đặc tả hữu hạn của các ngôn ngữ vô hạn Hai ngôn ngữ quan trọng nhất là ngôn ngữ chính quy và ngôn ngữ phi ngữ cảnh, các ngôn ngữ lập trình thuộc loại hai ngôn ngữ này, vì vậy người
ta tập trung nghiên cứu hai loại ngôn ngữ này và các bộ đoán nhận chúng
Xuất phát từ nhu cầu phát triển của lý thuyết ngôn ngữ hình thức và những
ứng dụng của nó, chúng tôi quyết định chọn đề tài với chủ đề: Ngôn ngữ hình thức
và ngôn ngữ phi ngữ cảnh để tiến hành nghiên cứu Chúng tôi hy vọng đây là một
tài liệu tham khảo tốt cho những người bắt đầu tìm hiểu về Lý thuyết ngôn ngữ hình
thức và ôtômat và trình bày một số ví dụ minh hoạ đặc sắc nhằm góp phần làm
phong phú thêm các kết quả trong lĩnh vực này
2 Mục tiêu nghiên cứu
Mục tiêu của đề tài nhằm nghiên cứu ngôn ngữ chính quy và ôtômat hữu hạn đoán nhận nó, ngôn ngữ phi ngữ cảnh và ôtômat đẩy xuống đoán nhận nó
3 Đối tượng và phạm vi nghiên cứu
Đối tượng nghiên cứu của đề tài là ngôn ngữ chính quy và ngôn ngữ phi ngữ cảnh Phạm vi nghiên cứu của đề tài là lý thuyết ngôn ngữ, ôtômat hữu hạn và sự
Trang 10đoán nhận của nó đối với lớp ngôn ngữ chính quy, ôtômat đẩy xuống và sự đoán nhận của nó đối với lớp ngôn ngữ phi ngữ cảnh
4 Phương pháp nghiên cứu
1 Thu thập các bài báo khoa học và tài liệu của các tác giả nghiên cứu liên
quan đến ngôn ngữ hính thức và ôtômat, đặc biệt là ngôn ngữ chính quy và ngôn
ngữ phi ngữ cảnh
2 Tham gia các buổi seminar của thầy hướng dẫn để trao đổi các kết quả đang nghiên cứu
5 Đóng góp của đề tài
1 Tổng quan các kết quả của các tác giả đã nghiên cứu liên quan đến ngôn
ngữ chính quy và ngôn ngữ phi ngữ cảnh, các ôtômat đoán nhận chúng nhằm xây
dựng một tài liệu tham khảo cho những ai muốn nghiên cứu Lý thuyết ngôn ngữ
hình thức và ôtômat
2 Chứng minh chi tiết và làm rõ một số mệnh đề, cũng như đưa ra một số ví
dụ minh hoạ đặc sắc nhằm làm cho người đọc dễ dàng tiếp cận vấn đề được đề cập
Ôtômat đẩy xuống và ngôn ngữ phi ngữ cảnh được đề cập trong Chương 3 Cụ thể là văn phạm phi ngữ cảnh và cây suy dẫn của nó, ôtômat đẩy xuống và mối quan
hệ giữa nó và ngôn ngữ phi ngữ cảnh
Trang 11CHƯƠNG 1 VĂN PHẠM VÀ NGÔN NGỮ SINH BỞI VĂN PHẠM
Các khái niệm và kết quả trong chương này có thể tìm thấy trong các tài liệu [2], [3], [6], [8]
1.1 KHÁI NIỆM NGÔN NGỮ
Ngôn ngữ là phương tiện giao tiếp Sự giao tiếp ở đây có thể là sự giao tiếp giữa người với nhau hoặc giữa người và máy, hoặc giữa máy và máy Ngôn ngữ để con người có thể giao tiếp với nhau được gọi là ngôn ngữ tự nhiên, chẳng hạn như tiếng Anh, tiếng Nga, tiếng Việt là các ngôn ngữ tự nhiên Như chúng ta đã biết các quy tắc cú pháp của ngôn ngữ tự nhiên rất phong phú, đa dạng, phức tạp Tuy nhiên, những yêu cầu nghiêm ngặt về ngữ nghĩa trong các ngôn ngữ tự nhiên chưa cao, chẳng hạn như cùng một từ hoặc cùng một câu ta có thể hiểu chúng theo những nghĩa khác nhau tùy theo những ngữ cảnh cụ thể Để có sự giao tiếp giữa người và máy, hoặc giữa máy và máy cần phải có một ngôn ngữ mà các quy tắc cú pháp chặt chẽ hơn, nói cách khác là với một từ hoặc một câu thì nghĩa của chúng phải là duy nhất Những ngôn ngữ như thế được gọi là ngôn ngữ hình thức
Để xây dựng một ngôn ngữ hình thức cần có một tập hợp hữu hạn khác rỗng
các ký hiệu nào đó gọi là bảng chữ cái Dãy hữu hạn các phần tử của bảng chữ cái được gọi là một từ hay xâu trên bảng chữ cái Một tập hợp các từ trên bảng chữ cái
được gọi là một ngôn ngữ
Định nghĩa 1.1.1 Một bảng chữ cái (hay đơn giản là bảng chữ) là một tập hữu hạn khác rỗng Mỗi phần tử của một bảng chữ cái được gọi là một chữ cái hay một ký hiệu trên
Ví dụ 1.1.1 Bảng chữ cái của ngôn ngữ tiếng Việt là 29 ký hiệu, cụ thể là
= {a, b, c, d, đ…, y}, Để có các xâu nhị phân ta thường dùng bảng chữ cái gồm hai ký hiệu 0, 1; tức là = {0, 1}
= {0, 1, 2, …, 8, 9} là bảng chữ cái thập phân
Trang 12Định nghĩa 1.1.2 Một từ hay một xâu ký hiệu trên bảng chữ cái là một dãy hữu
hạn các ký hiệu trên bảng mà chúng được viết liền nhau Ở đây, một ký hiệu có
thể xuất hiện vài lần Xâu rỗng tức là xâu không có ký hiệu nào được gọi là từ rỗng
và được ký hiệu là
Tổng số vị trí của tất cả các ký hiệu xuất hiện trong từ được gọi là độ dài của
từ và ký hiệu bởi || hay d() Theo định nghĩa, ||=0
Như vậy, theo định nghĩa, hai từ =a1a2…an và =b1b2…bm là bằng nhau,
=, nếu n=m và ai=bi với mọi i=1, 2, …, n
Ví dụ 1.1.2. 010110 là một từ trên bảng chữ cái = {0, 1} có độ dài là 6
beautiful là một từ trên bảng chữ cái = {a, b, c, …, z} có độ dài 9
Trên bảng chữ = {a, b, c, +, , *, /}, từ a + b c * a / b + c có độ dài 11
Định nghĩa 1.1.3. Tập mọi từ trên bảng chữ cái được ký hiệu là * và tập mọi từ khác rỗng trên được ký hiệu là + Các tập * và + là vô hạn với bất kỳ nào (thật ra, * và + là vô hạn đếm được như Mệnh đề 1.1.2 dưới đây)
Cho hai từ * và ’’* Đặt và ’ cạnh nhau để có từ mới
’(’)* được gọi là phép ghép với ’ và từ ’ gọi là tích của và ’
Như vậy, trên tập * có một phép toán là phép ghép từ
Với từ và số tự nhiên n, ký hiệu:
, 1
, 0
1
n khi
n khi
n khi
2) Phần tử trung hòa: với mọi từ , = =
Từ định nghĩa của phép ghép từ, ta có ngay kết quả đã nêu trong mệnh đề
Trang 13Ví dụ 1.1.3. Trên bảng chữ cái ={0,1}, với =0110 và =1010110, ta có
Định nghĩa 1.1.4 Cho từ khác rỗng =a1a2…an1an (n1) Từ anan1…a2a1 được
gọi là từ soi gương hay từ ngược của từ , ký hiệu R Về thực chất, từ soi gương của từ là xâu nhận được khi viết theo chiều ngược lại ta quy ước R=
Dễ dàng thấy rằng với bất kỳ hai từ và , ta luôn có:
(R)R=, ()R=RR và |R|=||
Mệnh đề 1.1.2. Nếu là một bảng chữ cái thì * là một tập (vô hạn) đếm được
Chứng minh: Do mỗi số tự nhiên n đều tồn tại một từ trên có độ dài n nên * là một tập vô hạn Để chứng minh * là một tập đếm được, tức là một tập có cùng lực
lượng với tập N các số tự nhiên, ta xây dựng một đơn anh từ * vào N
Giả sử ={a1, a2, …, an} Xét ánh xạ f từ * vào tập hợp N các số tự nhiên
b
1
0 và f() = f() Khi đó, (n+1)ki0+(n+1)k-1i1+ … +(n+1)ik-1+ik = (n+1)hj0+(n+1)h-1j1+ … +(n+1)jh-1+jh, trong đó 2 vế là hai khai triển của một số nguyên theo cơ số n+1 Do đó, k=h và
iu=ju với 1 u k hay = Vì vậy, f là một đơn ánh Từ đó suy ra * là một đếm được
Định nghĩa 1.1.5. Ta gọi các tập con của * là các ngôn ngữ hình thức hay một cách ngắn gọn là các ngôn ngữ trên Đặc biệt, tập là một ngôn ngữ trên , gọi
Trang 14là ngôn ngữ rỗng; tập {} cũng là một ngôn ngữ trên , đây là ngôn ngữ chỉ chứa từ rỗng và * là ngôn ngữ gồm tất cả các từ trên
Với xâu bất kỳ trong L, làm thế nào để sinh ra (vấn đề sinh)
Đó là những vấn đề liên quan đến biểu diễn ngôn ngữ Người ta thường biểu diễn ngôn ngữ nhờ các văn phạm (vấn đề sinh) hoặc các máy hình thức (vấn đề đoán nhận)
Chú ý 1.1.2 Vì ngôn ngữ là tập hợp nên ta có các phép toán Boole như là phép giao, phép hợp, phép hiệu, phép lấy bù Chẳng hạn, với L1 và L2 là hai ngôn ngữ lần lượt trên bảng chữ và ’ thì ta có các ngôn ngữ mới sau trên bảng chữ ’:
L1 L2, L1 L2, L1 \ L2, * \ L1 Hiển nhiên các phép toán này thỏa mãn các tính chất cơ bản như là: tính giao hoán, tính kết hợp, tính phân phối, tính lũy đẳng, tính đồng nhất, tính nuốt, tính bù kép, tính De Morgan
Ngoài ra, ta còn có các phép toán khác là “phép ghép”, “phép lặp” và “phép soi gương” như dưới đây
Định nghĩa 1.1.6 Cho hai ngôn ngữ L1 trên bảng chữ 1 và L2 trên bảng chữ 2
Ghép hay tích của hai ngôn ngữ L1 và L2 là ngôn ngữ trên bảng chữ 1 2, ký hiệu L1L2, đuợc xác định bởi:
L1L2 = { | L1 và L2}
Kết quả sau là hiển nhiên có từ định nghĩa:
Trang 15Mệnh đề 1.1.3. Với mọi ngôn ngữ L 1 , L 2 và L 3 , ta luôn có:
Thật vậy, với L1 = {0, 01}, L2 = {01, 10}, L3 = {0}, ta có L1(L2 L3) = (L1L2) (L1L3) = {010}
4) Phép giao không có tính phân phối đối với phép ghép, nghĩa là tồn tại 3 ngôn ngữ L1, L2 và L3 sao cho L1 (L2L3) (L1 L2)(L1 L3)
Thật vậy, với L1, L2 và L3 như trên, L1 (L2L3) = (L1 L2)(L1 L3) = {010}
Định nghĩa 1.1.7. Cho L là một ngôn ngữ trên bảng chữ và n là một số tự nhiên
Vì phép ghép ngôn ngữ có tính kết hợp nên ta ký hiệu Ln như sau:
1,nkhi
0,nkhi}{
1 - n
L L
L
L n
Lặp hay bao đóng ghép của ngôn ngữ L, ký hiệu L*, được định nghĩa là hợp
của mọi luỹ thừa của L:
L* =
0
n n
L
Trang 16Lặp không- hay bao đóng ghép không- của L, ký hiệu L +, được định nghĩa
là hợp của mọi luỹ thừa dương của L:
L0={}, tập hợp xâu nhị phân độ dài 0; L1=L, tập hợp các xâu nhị phân độ dài 1;
L2 = {00, 01, 10, 11}, tập hợp các xâu nhị phân độ dài 2;
L3 = {000, 001, 010, 011, 100, 101, 110, 111}, tập hợp các xâu nhị phân độ dài 3; Tương tự, Ln là tập hợp các xâu nhị phân độ dài n
Vì vậy, L* là tập hợp tất cả các xâu nhị phân
2) Xét hai ngôn ngữ trên bảng chữ = {a, b}:
L1 = {a2n | n 0}, L2 = {b3n | n 1}
Khi đó, ta có L1 = {a2}*, L2 = {b3}*{b3}
Định nghĩa 1.1.8 Cho L là một ngôn ngữ trên bảng chữ Khi đó tập hợp
{* | RL}
là một ngôn ngữ trên bảng chữ , ký hiệu LR Ta gọi LR là ngôn ngữ soi gương hay
ngôn ngữ ngược của ngôn ngữ L
Định nghĩa 1.1.9. Cho hai bảng chữ và ’ Ánh xạ f: * ’* thoả mãn điều kiện
Cấu xạ từ f được gọi là không xoá (tương ứng chữ - thành - chữ) nếu f(a)
(tương ứng f(a) ’) với mỗi a
Trang 17Ví dụ 1.1.6 Xét bảng chữ cái tiếng Anh = {A, B, C, …, Z} Mỗi cấu xạ chữ -
thành - chữ
fi: * *, 0 i 25 ánh xạ mỗi chữ thành chữ đứng sau nó i vị trí trong bảng chữ cái, trong đó phần cuối của bảng chữ cái được nối tiếp vòng tròn lên phần đầu Chẳng hạn,
f4(A) = E, f6(Y) = E, f25(Z) = Y
Trong mật mã học, mỗi cấu xạ fi thường được đề cập đến như cách mã hoá Caesar
Chẳng hạn,
f25(LOVE) = KNUD, f4(HELP) = LIPT
Dễ dàng thấy rằng các cấu xạ fi có tính giao hoán:
fifj = fjfi với mọi i, j
Ngoài ra, f26-ifi = f0 với mọi i 1 Như vậy, nếu một bản rõ nào đó được mã hoá bằng cách dùng fi, chính bản rõ đó có thể tìm lại được bằng cách dùng f26-i để giải
mã
1.2 VĂN PHẠM VÀ NGÔN NGỮ SINH BỞI VĂN PHẠM
Theo nghĩa rộng nhất, các “thiết bị tự động” tùy ý (nghĩa là các hệ toán hay thuật toán) mà chúng “cho” ngôn ngữ đều được gọi là văn phạm hình thức, hay gọi một cách đơn giản là văn phạm Ở đây chữ ‘cho” có thể thực hiện theo nhiều cách khác nhau: “cho” hoặc có nghĩa là đối với mỗi từ thuộc ngôn ngữ đã xác định có khả năng chọn một chế độ làm việc của thiết bị, để khi “nó” ngừng hoạt động ta nhận được từ này (trong đó, dĩ nhiên, không một từ nào, nằm ngoài ngôn ngữ đã cho lại được “sinh” ra) hoặc có nghĩa là khả năng “liệt kê” ngôn ngữ, tức là tổ chức hoạt động của thiết bị, để nó cho lần lượt các từ thuộc ngôn ngữ và có khả năng cho xâu bất kỳ trong các từ này, nếu thiết bị làm việc đủ lâu và cuối cùng, hoặc có nghĩa
là đối với xâu tùy ý (trên bảng chữ cái tương ứng) nhận được từ thiết bị câu trả lời:
từ này có thuộc ngôn ngữ đã cho hay không Chúng ta chọn cách đầu tiên trong ba cách “cho” ngôn ngữ đã chỉ ra ở trên Việc chọn này không hề thu hẹp lớp ngôn ngữ được mô tả Bởi vì một ngôn ngữ tùy ý được cho bởi cách thứ nhất thì nó cũng được cho bởi cách hai và cách ba Đồng thời đây là cách tốt nhất dùng để mô hình hóa
Trang 18bằng ngôn ngữ tự nhiên hay ngôn ngữ khoa học tình huống xảy ra khi ứng dụng, mà nhiệm vụ cơ bản là sinh các câu có ý nghĩa cho trước Thật ra, tình huống ở đây còn
xa mới được mô hình trọn vẹn Bởi vì trong mô hình không phải sinh được các câu hoàn toàn với ý nghĩa cho trước, mà nói chung chỉ sinh được các câu đúng
Như vậy, chúng ta dừng lại ở cách biểu diễn văn phạm là “thiết bị sinh các từ”, nên trong tương lai sẽ trình bày về “văn phạm sinh” Tuy vậy, việc sinh từ có thể được thực hiện bằng nhiều cách khác nhau
Nói riêng, có các cách sau đây:
Các đối tượng trung gian xuất hiện trong quá trình sinh cũng là các từ
Các đối tượng trung gian xuất hiện trong quá trình sinh thuộc các loại khác Chúng ta quan tâm đặc biệt đến cách sinh dạng thứ nhất Với dạng này cũng có nhiều cách thể hiện khác nhau Ta chọn cách do N Chomsky đề xuất (1956-1957) Như vậy, trong tương lai ta hiểu văn phạm sinh đều theo nghĩa Chomsky, chừng nào chưa đề cập đến các văn phạm loại khác, và để đơn giản nếu không xuất hiện sự hiểu lầm ta dùng “văn phạm” thay cho “văn phạm sinh”
Định nghĩa 1.2.1. Văn phạm hay văn phạm sinh hoặc văn phạm ngữ cấu là một bộ
sắp thứ tự gồm 4 thành phần:
G = < , , S, P >, trong đó:
1) là một bảng chữ, gọi là bảng chữ kết thúc hay từ điển cơ bản, mỗi phần
tử của nó được gọi là một ký hiệu kết thúc hay ký hiệu cơ bản;
2) là một bảng chữ, gọi là bảng chữ không kết thúc hay từ điển hỗ trợ, mỗi phần tử của nó được gọi là một ký hiệu không kết thúc hay ký hiệu hỗ trợ;
V= được gọi là bảng chữ đầy đủ hay từ điển đầy đủ;
=;
3) S được gọi là ký hiệu đầu hay ký hiệu xuất phát;
4) P là tập hợp các cặp thứ tự <, >, trong đó , V* và trong chứa ít
nhất một ký hiệu không kết thúc; P được gọi là tập các quy tắc thay thế, <, >
Trang 19được gọi là một quy tắc hay sản suất và thường được viết cho thuận tiện là , được gọi là vế trái và được gọi là vế phải của quy tắc này (ký hiệu V)
Nếu trong văn phạm có các quy tắc cùng vế trái, 1, 2,…, n, ta
có thể viết lại đơn giản hơn: 1 | 2 |…| n
Định nghĩa 1.2.2 Cho văn phạm G = < , , S, P > và , ( )* Ta nói
được suy dẫn trực tiếp từ trong G, ký hiệu hay ngắn gọn là (nếu
không sợ nhầm lẫn), nếu tồn tại quy tắc P và , ( )* sao cho =,
=
Định nghĩa 1.2.3. Cho văn phạm G = < , , S, P > và , ( )* Ta nói
được suy dẫn từ trong G, ký hiệu hay ngắn gọn là (nếu không sợ
nhầm lẫn), nếu = hoặc tồn tại một dãy 0, 1, …, k( )* sao cho 0=,
k= và i-1 i, với i=1, 2, …, k Khi đó dãy 0, 1, …, k được gọi là một dẫn
xuất của từ trong G và số k được gọi là độ dài của dẫn xuất này Nếu i được suy dẫn trực tiếp từ i-1 bằng việc áp dụng một quy tắc p nào đó trong G thì ta nói
quy tắc p được áp dụng ở bước thứ i
Định nghĩa 1.2.4. Cho văn phạm G = < , , S, P > Từ * được gọi là sinh
bởi văn phạm G nếu tồn tại suy dẫn S Ngôn ngữ sinh bởi văn phạm G, ký hiệu
L(G), là tập hợp xác định bởi:
L(G) = {* | S }
Định nghĩa 1.2.5. Hai văn phạm G và G’ được gọi là tương đương nhau nếu L(G)=L(G’)
Ví dụ 1.2.1 1) Xét văn phạm G = <{a, b}, {S}, S, {SaSb, Sab}>
Từ a4b4 được suy dẫn từ S bằng dãy dẫn xuất độ dài 4
S aSb aaSbb aaaSbbb aaaabbbb=a4b4 Tổng quát, sử dụng n1 lần (n 1) quy tắc 1 rồi kết thúc bằng quy tắc 2, ta có:
S 0n1n Do đó L(G) = {anbn | n 1}
Dễ dàng có được văn phạm G tương đương với văn phạm:
G’ = <{a, b}, {S, A}, S, {Sab, SaAb, AaAb, Aab}>
G
G
G
G
Trang 202) Xét văn phạm G = <{a, b, c}, {S, A, B, C}, S, {SABC, AaA,
BbB, CcC, Aa, Bb, Cc}>.
Sử dụng quy tắc 1, rồi m1 lần (m1) quy tắc 2, n1 lần (n1) quy tắc 3, k1
lần (k1) quy tắc 4 (có thể xen kẻ), sau đó để kết thúc sử dụng các quy tắc 5,6, 7, ta
có:
S ABC amAbnBckC ambnck
Do đó L(G) = {ambnck | m 1, n 1, k 1}
3) Xét văn phạm với các ký hiệu không kết thúc S, Np, N, Vp, V, A (tương
Khi đó các quy tắc tự nhiên có thể là
SNpVp, NpAN, VpVNp
Nếu ta còn thêm vào các quy tắc chứa các ký hiệu kết thúc:
Ncomputer, Ninformation, Athe, Vswallowed,
ta nhận được, chẳng hạn, dẫn xuất
S NpVp ANVp ANVNp ANVAN the computer swallowed the information
Ta có thể biểu diễn dẫn xuất này bằng một cây gọi là cây dẫn xuất hay cây
phân tích cú pháp như dưới đây Tất nhiên, theo quan điểm phân tích cú pháp thực
tế, việc xem xét các quy tắc theo hướng ngược lại là từ phải qua trái Điều đó có
nghĩa là cây dưới đây được xử lý từ dưới lên trên chứ không phải là từ trên xuống
Trang 21Bổ đề dưới đây giúp ta xây dựng các loại văn phạm theo phân loại của Chomsky khi mà văn phạm cho trước chưa thỏa mãn yêu cầu của các văn phạm đó
Bổ đề 1.2.1 Đối với văn phạm G tùy ý, luôn có thể xây dựng văn phạm G’ tương
đương với nó, mà vế phải tất cả các quy tắc của G’ đều không chứa ký hiệu đầu
Chứng minh: Giả sử G = < , , S, P > Lấy S’ , xét văn phạm G’ = <,
{S’}, S’, P’>, trong đó P’=P {S’ | S P} Rõ ràng trong P’ không chứa quy tắc nào có S’ ở vế phải Ta chứng minh L(G)=L(G’)
+ L(G) (hay S ): Giả sử dãy dẫn xuất của là S 1 … Vì
S nên có SP, do đó S’P’ và vì P P’ nên ta có S’ Vậy S’ hay L(G’)
+ L(G’) (hay S’ ): Giả sử ta có dãy dẫn xuất là S’ Vì S’ nên S’P’, do đó tồn tại SP Mặt khác, trong không chứa S’ nên các suy dẫn trực tiếp trong chỉ sử dụng các quy tắc của P Vậy ta có S hay
Như vậy, G là văn phạm nhóm 0 khi và chỉ khi các quy tắc của nó có dạng
A, trong đó A, , , ( )*
Định nghĩa 1.2.7 Văn phạm G = < , , S, P > được gọi là văn phạm cảm ngữ
cảnh hay là văn phạm nhóm 1 nếu các quy tắc của nó có dạng A, trong đó
A, , , ( )*,
Các văn phạm mà các quy tắc của chúng có dạng trên, đồng thời chứa thêm quy tắc S, miễn sao ký hiệu đầu S không xuất hiện ở vế phải của bất kỳ quy tắc nào cũng được xếp vào lớp văn phạm nhóm 1
Ngôn ngữ sinh bởi văn phạm cảm ngữ cảnh được gọi là ngôn ngữ cảm ngữ cảnh (NNCNC)
Trang 22Ví dụ 1.2.2 Cho văn phạm G = <{a, b, c}, {S, A, B, C}, S, P>, trong đó
P = {SaSAC, SabC, CABA, BABC, BCAC, bAbb, Cc} Khi đó G là văn phạm cảm ngữ cảnh
Sử dụng n1 lần (n1) quy tắc 1, rồi quy tắc 2, kế đến sử dụng liên tiếp các quy tắc 3, 4, 5 (để đổi chỗ A và C), sau đó sử dụng n1 lần quy tắc 6 và n lần quy tắc 7, ta có:
S an-1S(AC)n-1 anbC(AC)n-1 anbAn-1Cn anbncn
Từ đó suy ra L(G) = {anbncn | n 1}
Xét văn phạm G’ = <{a, b, c}, {S, A, B}, S, P’>, trong đó
P’ = {Sabc, SaAbc, AbbA, AcBbcc, bBBb, aBaaA, aBaa}
Sử dụng quy tắc 1, ta có S abc=anbncn, với n=1
Sử dụng quy tắc 2, rồi n2 lần (n2) các quy tắc 3, 4, 5, 6, sau đó sử dụng các quy tắc 3, 4, 5, 7, ta có S anbncn
Vậy L(G’)=L(G)={anbncn | n 1} hay G và G’ là hai văn phạm tương đương
Định nghĩa 1.2.8. Văn phạm G = < , , S, P > được gọi là văn phạm phi ngữ
cảnh hay là văn phạm nhóm 2 nếu các quy tắc của nó có dạng A, trong đó A,
( )*,
Các văn phạm mà các quy tắc của chúng có dạng trên, đồng thời chứa thêm quy tắc S, miễn sao ký hiệu đầu S không xuất hiện ở vế phải của bất kỳ quy tắc nào cũng được xếp vào lớp văn phạm nhóm 2
Ngôn ngữ sinh bởi văn phạm phi ngữ cảnh được gọi là ngôn ngữ phi ngữ cảnh (NNPNC)
Ví dụ 1.2.3 1) Cho văn phạm:
G = <{a, b}, {S, A}, S, {SSa, SAa, AaAb, Aab}>
Khi đó G là văn phạm phi ngữ cảnh và L(G) = {anbnam | n 1, m 1}
Thật vậy, từ các quy tắc của G cho biết G là phi ngữ cảnh Sử dụng m1 lần (m1) quy tắc 1, rồi quy tắc 2, sau đó sử dụng n1 lần (n1) quy tắc 3, cuối cùng
là quy tắc 4, ta có:
Trang 23S Sam1 Aaam1 an1Abn1am anbnam
2) Cho văn phạm G2 = <{0, 1}, {S}, S, {SSS, S0S1, S1S0, S} Khi đó,
G2 không là văn phạm phi ngữ cảnh vì có quy tắc S mà S lại xuất hiện ở vế phải của một quy tắc khác Theo Bổ đề 1.2.1, G2 tương đương với văn phạm
G2’ = <{0, 1}, {S, S’}, S’, P’>, P’ = {SSS, S0S1, S1S0, S, S’SS, S’0S1, S’1S0, S’}
Ở đây, G2’ cũng không là phi ngữ cảnh Tuy nhiên, văn phạm G2’’ sau là phi ngữ cảnh mà tương đương với văn phạm G2’, nên cũng tương đương với văn phạm G1
G2’’ = <{0, 1}, {S, S’}, S’, P”>, P” = {SSS, S0S1, S1S0, S01, S10, S’SS, S’0S1, S’1S0, S’01, S’10, S’}
Từ các quy tắc của G2, ta có được:
Ngôn ngữ sinh bởi văn phạm chính quy được gọi là ngôn ngữ chính quy (NNCQ)
Ví dụ 1.2.4 1) Xét hai văn phạm G = <, {S}, S, P>, G’ = <, {S}, S, P’>, trong
đó: = {0, 1, 2, 3, 4, 5 ,6, 7, 8, 9},
P = {S1| 2| 3| 4| 5| 6| 7| 8| 9| S0| S1| S2| S3| S4| S5| S6| S7| S8| S9},
P’ = {S0| 1| 2| 3| 4| 5| 6| 7| 8| 9| 1S| 2S| 3S| 4S| 5S| 6S| 7S| 8S| 9S}
Khi đó G là văn phạm phi ngữ cảnh và G’ là văn phạm chính quy
Sử dụng k1 lần (k1) các quy tắc trong nhóm 10 quy tắc cuối của G, rồi một quy tắc trong nhóm 9 quy tắc của nó, ta có:
Trang 24S Si1 Si2i1 … Sik-1…i2i1 ikik-1…i2i1, trong đó, i1, i2, …, ik-1 0 và ik 1 Do đó, L(G) = {n | n 1} = N \ {0}
Lập luận như trên, ta nhận được L(G’) = {nN | n có chữ số hàng đơn vị tuỳ
ý và các chữ số khác n 1} Vì vậy, G và G’ không tương đương nhau
2) Cho văn phạm G = <{a, b, c}, {S, A, B}, S, {SaS, SbS, ScA,
AcA, Aa, AaB, BbB, BcB, Bb, Bc}> Khi đó, G là văn phạm chính quy và L(G) = {1ccna2 | 1{a, b}*, 2{b, c}*}
Thật vậy, sử dụng hữu hạn lần xen kẻ quy tắc 1 và 2, rồi quy tắc 3, n lần (n0) quy tắc 4,
Chú ý 1.2.1. Từ các định nghĩa trên, ta thấy lớp văn phạm tổng quát là rộng nhất,
nó chứa các văn phạm cảm ngữ cảnh, lớp văn phạm cảm ngữ cảnh chứa các văn phạm phi ngữ cảnh và lớp văn phạm phi ngữ cảnh chứa các văn phạm chính quy
Hệ thống các lớp văn phạm này được gọi là sự phân cấp Chomsky
Đối với các lớp ngôn ngữ, ta có bao hàm thức:
Lớp NNCQ Lớp NNPNC Lớp NNCNC Lớp NNTQ
Ta cũng thấy về mặt cấu trúc ngữ pháp thì các quy tắc của các văn phạm phi ngữ cảnh và văn phạm chính quy là đơn giản hơn cả và chúng có nhiều ứng dụng trong việc thiết kế các ngôn ngữ lập trình và trong nghiên cứu về chương trình dịch… Vì vậy, trong các phần tiếp theo chúng ta quan tâm tới hai lớp văn phạm đó
Ví dụ 1.2.5 1) Cho bảng chữ = {a1, a2, …, an} Khi đó các ngôn ngữ
L1 = {=a1a2 …an}, L2 = +, L3 = *, L4 =
là chính quy trên bảng chữ
Thật vậy, L1 = L(G1), L2 = L(G2), L3 = L(G3), L4 = L(G4) trong đó
Trang 25G1 = <, {S, A1, …, An-1}, S, {Sa1A1, A1a2A2, …, An-2an-1An-1, An-1an}>,
G2 = <, {S}, S, {SaS, Sa | a}>,
G3 = <, {S, A}, S, {S, Sa, SaA, AaA, Aa | a}>
G = <{a, b}, {S, A}, S, {S, SA, AaAa, AbAb, Aaa, Abb}>
Để sinh L’, ta xét văn phạm cảm ngữ cảnh G’ sau đây:
G’ = <{a, b}, {S, A, B, C, D, E}, S, P’>, trong đó
P’ = {SABC, ABaAD, ABbAE, DaaD, DbbD, EaaE, EbbE,
DCBaC, ECBbC, aBBa, bBBb, aABa, bABb, aCa,bCb, S}
và bằng việc sử dụng các quy tắc trên với phương pháp quy nạp, ta có được L(G’)=L’
Bổ đề 1.2.2 Nếu L là ngôn ngữ cảm ngữ cảnh (tương ứng phi ngữ cảnh, chính
quy) thì L {} và L \ {} cũng là ngôn ngữ cảm ngữ cảnh (tương ứng phi ngữ
kỳ một quy tắc nào trong P’ Khi đó văn phạm:
G’’ = <, {S’}, S’, P’ {S’}>
là cùng loại với G’ và L(G’’)=L(G’) {}=L(G) {}=L {}
Trang 26b) L \ {}:
L: L \ {}=L
L: Giả sử L=L(G), với G = <, , S, P> là văn phạm cảm ngữ cảnh (tương ứng phi ngữ cảnh, chính quy) Khi đó SP và S không xuất hiện ở vế phải của bất kỳ một quy tắc nào trong P Khi đó văn phạm G’ = <, , S, P \ {S}> cùng nhóm với G và L(G’)=L(G) \ {}=L \ {}
1.3 MỘT SỐ TÍNH CHẤT CỦA NGÔN NGỮ
Sau đây là các tính chất của ngôn ngữ dành cho phép hợp, phép ghép và phép lặp, còn các tính chất của ngôn ngữ chính quy dành cho phép hiệu và phép giao được trình bày trong Chương 2
Định lý 1.3.1 Hợp của hai ngôn ngữ sinh bởi văn phạm là một ngôn ngữ sinh bởi
văn phạm
Chứng minh: Giả sử L1, L2 là các ngôn ngữ được sinh bởi văn phạm G1, G2 hay
L1=L(G1), L2=L(G2) Ta chứng minh tồn tại văn phạm G sao cho L(G)=L1 L2
Giả sử G1 = <1, 1, S1, P1> và G2 = <2, 2, S2, P2> Không mất tính chất tổng quát giả thiết rằng 1 (2 2)=2 (1 1)= Lấy S112 2
Xét văn phạm G = <1 2, 1 2 {S}, S, P>, trong đó
P = (P1 \ {S1}) (P2 \ {S2}) {S | S1P1 hoặc S2P2} {SS1, S S2} (Ở đây, ta hiểu rằng nếu S1P1 (t.ư S2P2) thì S1 (t.ư S2) không xuất hiện ở
vế phải của bất kỳ một quy tắc nào trong P1 (t.ư P2).)
a) L(G): =: tồn tại SP, nên có S1P1 hoặc S2P2 Do đó
=L1 L2
: tồn tại suy dẫn S và giả sử suy dẫn này là S … Từ đó ta
có SP (), nên có =S1 hoặc =S2 Nếu =S1 thì dãy dẫn xuất , , …,
là ở trong G1, nên ta cóS1 … , tức là L(G1) Nếu =S2 thì dãy dẫn xuất
Trang 27b) L1 L2: =: tồn tại S1P1 hoặc S2P2, nên có SP Do đó
=L(G)
: L1 hoặc L2 Nếu L1 (t.ư L2) thì ta có suy dẫn S1 (t.ư S2
) với các quy tắc được sử dụng thuộc P1 \ {S1} (t.ư P2 \ {S2}) Khi đó, ta có
Hệ quả 1.3.1. Nếu L 1 và L 2 là hai ngôn ngữ chính quy (tương ứng phi ngữ cảnh,
cảm ngữ cảnh) thì L 1 L 2 cũng là ngôn ngữ chính quy (tương ứng phi ngữ cảnh,
cảm ngữ cảnh)
Lưu ý rằng trong chứng minh của Định lý 1.3.1, ta có hai cách xây dựng văn
phạm G sao cho L(G)=L1 L2 Cách thứ hai được sử dụng khi cả G1 và G2 là văn
phạm chính quy để có G là chính quy và tất nhiên cho mọi trường hợp khác Cách
thứ nhất được sử dụng khi G1 và G2 không đồng thời chính quy
Ví dụ 1.3.1 1) Cho hai ngôn ngữ:
L1={ambn | m0, n0}, L2={ambcna | m0, n0, {b, c}*}
Khi đó L1 và L2 là hai ngôn ngữ chính quy lần lượt sinh bởi văn phạm chính quy G1
và G2: G1=<{a, b}, {S1, A, B}, S1, P1}>, G2=<{a, b, c}, {S2, C, D}, S2, P2}, trong đó
P1={S1, S1a, S1aA, AaA, Aa, S1b, S1bB, BbB, Bb,
Ab, AbB},
P2={S2aS2, S2bC, CcC, Ca, CaD, DbD, DcD, Db, Dc}
Thật vậy, đối với G1,
Sử dụng quy tắc 1: S1 =ambn, với m=n=0,
Sử dụng quy tắc 2: S1 a=ambn, với m=1, n=0,
Sử dụng quy tắc 3, m2 lần (m2) quy tắc 4 và kết thúc bằng quy tắc 5:
S1 aA aam2A aam2a=ambn, với m2, n=0,
Trang 28Sử dụng quy tắc 6: S1 b=ambn, với m=0, n=1,
Sử dụng quy tắc 7, n2 lần (n2) quy tắc 8 và kết thúc bằng quy tắc 9:
2) Cho hai ngôn ngữ:
L1={(01)m(120)n | m0, n1}, L2={0m12m22n3n | m0, n1}
Khi đó L1 là ngôn ngữ chính quy và L2 là ngôn ngữ phi ngữ cảnh lần lượt sinh bởi văn phạm G1 và G2 như sau:
G1=<{0, 1, 2}, {S1, A, B, C, D}, S1, P1>, G2=<{0, 1, 2, 3}, {S2, E, F}, S2, P2>, trong đó, P1={S10A, A1S1, S11B, B2C, C0, C0D, D1B},
P2={S2F, S2EF, E0E11, E011, F22F3, F223}
Thật vậy, đối với G1,
Sử dụng m lần (m0) hai quy tắc 1 , 2, rồi sử dụng quy tắc 3, n1 lần (n1) ba quy tắc 4, 6, 7 và kết thúc bằng hai quy tắc 4, 5:
Trang 29S1 (01)mS1 (01)m1B (01)m1(201)n1B (01)m1(201)n120=(01)m(120)n; đối với G2,
Sử dụng quy tắc 1, n1 lần (n1) quy tắc 5 và kết thúc bằng quy tắc 6:
Khi đó G là văn phạm phi ngữ cảnh và L(G)=L1 L2
Định lý 1.3.2 Ghép (hay tích) của hai ngôn ngữ sinh bởi văn phạm là một ngôn
ngữ sinh bởi văn phạm
Chứng minh: Giả sử L1, L2 là các ngôn ngữ được sinh bởi văn phạm G1, G2 hay
L1=L(G1), L2=L(G2) Ta chứng minh tồn tại văn phạm G sao cho L(G)=L1L2
Giả sử G1 = <1, 1, S1, P1> và G2 = <2, 2, S2, P2> Không mất tính chất tổng quát giả thiết rằng 1 (2 2)=2 (1 1)= Lấy S112 2
Xét văn phạm G = <1 2, 1 2 {S}, S, P>, trong đó
P = (P1 \ {S1}) (P2 \ {S2}) {SS1 | S2P2} {SS2 | S1P1} {S | S1P1 và S2P2} {SS1S2} (Ở đây, ta hiểu rằng nếu S1P1 (t.ư S2P2) thì S1 (t.ư S2) không xuất hiện ở
vế phải của bất kỳ một quy tắc nào trong P1 (t.ư P2).)
Với văn phạm G này, dễ dàng có được L(G)L1L2 và L1L2L(G)
Đặc biệt, khi G1 và G2 là hai văn phạm chính quy thì ta có thể xây dựng văn phạm chính quy G’ như sau sao cho L(G’)=L1L2
a) L1 và L2 (tức là S1P1 và S2P2): Văn phạm chính quy G’ cần tìm là G’ = <1 2, 1 2, S1, P’>, trong đó
Trang 30P’= (P1 \ {Aa | AaP1}) {AaS2 | AaP1} P2
b) L1 và L2: Đặt L1’=L1 \ {} thì theo Bổ đề 1.2.2, ta xây dựng được văn phạm chính quy G1’ sao cho L(G1’)=L1’ Khi đó theo a), ta có văn phạm G’ sao cho L(G’)=L1’L2 Từ L1L2=(L1’ {})L2=L1’L2 L2 và từ cách xây dựng văn phạm trong chứng minh của Định lý 1.3.1, ta tìm được văn phạm chính quy G’’ sao cho L(G’’)=L1L2
c) L1 và L2: Tương tự trường hợp b)
d) L1 và L2: Đặt L1’=L1 \ {} và L2’=L2 \ {} thì ta có:
L1L2=(L1’ {})(L2’ {})=L1’L2’ L1’ L2’ {}
và lập luận như trên ta tìm được văn phạm chính quy sinh ra ngôn ngữ L1L2
Hệ quả 1.3.2 Nếu L1 và L 2 là hai ngôn ngữ chính quy (tương ứng phi ngữ cảnh, cảm ngữ cảnh) thì L 1 L 2 cũng là ngôn ngữ chính quy (tương ứng phi ngữ cảnh, cảm ngữ cảnh)
Lưu ý rằng trong chứng minh của Định lý 1.3.2, ta có hai cách xây dựng văn phạm G sao cho L(G)=L1L2 Cách thứ hai được sử dụng khi cả G1 và G2 là văn phạm chính quy để có G là chính quy và tất nhiên cho mọi trường hợp khác Cách thứ nhất được sử dụng khi G1 và G2 không đồng thời chính quy
Ví dụ 1.3.2 1) Cho hai ngôn ngữ chính quy:
L1 = {0m101n | m 0, n 0}, L2 = {0m1101n12 | m 0, n 0, 1, 2{0, 1}*}
Dễ dàng có được L1=L(G1), với G1=<{0, 1}, {S1, A, B}, S1, P1>, trong đó
P1={S10S1, S11A, A0, A0B, B1B, B1}
là văn phạm chính quy, L2=L(G2), với G2=<{0, 1}, {S2, C, D, E}, S2, P2>, trong đó
Trang 31P={S1bA, AaA, S1bS2, AaS2, S2bS2, S2a}
thoả mãn L(G) = L1L2
2) Cho hai ngôn ngữ:
L1={1canb2 | n 0, 1{a, b}*, 2{b, c}*}, L2={ambncm | m 0, n 1} Khi đó L1 là ngôn ngữ chính quy và L2 là ngôn ngữ phi ngữ cảnh lần lượt sinh bởi văn phạm G1 và G2 như sau:
G1=<{a, b, c}, {S1, A, B}, S1, P1>, G2=<{a, b, c}, {S2, C}, S2, P2>,
trong đó, P1={S1aS1, S1bS1, S1cA, AaA, Ab, AbB, BbB, BcB,
Bb, Bc},
P2={S2aS2c, S2b, S2bC, CbC, Cb}
Thật vậy, đối với G1,
Sử dụng hữu hạn lần xen kẽ quy tắc 1, 2, rồi quy tắc 3, n lần (n 0) quy tắc 4,
+ kết thúc bằng quy tắc 5:
S1 1S1 1cA 1canA 1canb=1canb2, n 0, 1{a, b}*, 2=, + sử dụng quy tắc 6, hữu hạn lần xen kẽ quy tắc 7, 8 và kết thúc bằng quy tắc
để có G là phi ngữ cảnh:
G=<{a, b, c}, {S, S1, A, B, S2, C}, S, P>, trong đó P=P1 P2 {SS1S2} Khi đó G là văn phạm phi ngữ cảnh và L(G)=L1L2
Trang 32Định lý 1.3.3. Nếu L là ngôn ngữ chính quy thì lặp L * của L cũng là ngôn ngữ chính quy
Chứng minh: Giả sử L=L(G), với G = <, , S, P> là văn phạm chính quy Xét văn phạm G’ = <, , S, P’>, trong đó
P’ = (P \ {S}) {AaS | AaP}
Khi đó G’ là văn phạm chính quy Ta chứng minh L(G’)=L* \ {}
a) L(G’): Ta có S với vì SP’ Không mất tính chất tổng quát, ta có thể giả thiết ký hiệu đầu S không xuất hiện ở vế phải của bất kỳ quy tắc nào trong P Giả sử dãy dẫn xuất của có sử dụng n-1 quy tắc của P dạng AaS Khi đó ta có:
S 1’a1S 12’a2S … 12…n-1’an-1S 12…n-1n = ,
ở đây, i =i’ai Như vậy, tồn tại các quy tắc A1a1S, A2a2S, …, An-1an-1S trong P’ và do đó tồn tại các quy tắc A1a1, A2a2, …, An-1an-1 trong P Ta có
S 1’A1 1’a1=1, S 2’A2 2’a2=2, …, S n-1’An-1 n-1’an-1=n-1 là các suy dẫn trong G hay 1, 2, …, n-1L(G) Mặt khác suy dẫn S n không sử dụng một quy tắc nào khác ngoài quy tắc của P, nên nL(G) Vậy LnL*
b) L* \ {}: Tồn tại số nguyên dương n sao cho Ln hay =12…n-1n, trong đó iL \ {}, 1 i n Như vậy trong G có các suy dẫn
Định lý 1.3.4.Mọi ngôn ngữ hữu hạn đều là ngôn ngữ chính quy
Chứng minh: Ngôn ngữ hữu hạn là hợp hữu hạn của các ngôn ngữ một từ, nên từ
Ví dụ 12.6 (ngôn ngữ một từ là chính quy) và từ Hệ quả 1.3.1 (hợp hữu hạn của các ngôn ngữ chính quy là chính quy), ta có ngôn ngữ hữu hạn là chính quy
G’
Trang 33Ví dụ 1.3.3. Ví dụ dưới đây minh họa cho Định lý 1.3.4 và Định lý 1.3.3
Cho ngôn ngữ chính quy L={a, ab, abb, abbb} Khi đó L sinh bởi văn phạm chính quy G = <{a, b}, {S, A, B, C}, S, P>, trong đó
P = {Sa, SaA, Ab, AbB, Bb, BbC, Cb}
Văn phạm chính quy G’ = <{a, b}, {S, A, B, C}, S, P’>, trong đó
P’ = {Sa, SaS, SaA, Ab, AbS, AbB, Bb, BbS, BbC, Cb, CbS} sinh ra ngôn ngữ L*\ {} Do đó văn phạm sinh ra ngôn ngữ L* là:
G’’ = <{a, b}, {S’, S, A, B, C}, S’, P’’>, trong đó
P’’ = {Sa, S’a, SaS, S’aS, SaA, S’aA, Ab, AbS, AbB, Bb, BbS, BbC, Cb, CbS, S’}
Trang 35CHƯƠNG 2 ÔTÔMAT HỮU HẠN VÀ NGÔN NGỮ CHÍNH QUY
Các khái niệm và kết quả trong chương này có thể tìm thấy trong các tài liệu [1], [2], [3], [5], [7]
Một ôtômat hữu hạn là một mô hình tính toán thực sự hữu hạn Mọi cái liên quan đến nó đều có kích thước hữu hạn cố định và không thể mở rộng trong suốt quá trình tính toán Sự phân biệt giữa các loại ôtômat khác nhau chủ yếu dựa trên việc thông tin có thể được đưa vào bộ nhớ như thế nào Một ôtômat hữu hạn làm việc theo thời gian rời rạc như tất cả các mô hình tính toán chủ yếu Như vậy, ta có thể nói về thời điểm kế tiếp khi đặc tả hoạt động của một ôtômat hữu hạn
Trường hợp đơn giản nhất là thiết bị không có bộ nhớ mà ở mỗi thời điểm, thông tin ra chỉ phụ thuộc vào thông tin vào lúc đó Các thiết bị như vậy là mô hình của các mạch tổ hợp Thông tin ra sản sinh bởi một ôtômat hữu hạn phụ thuộc vào
cả thông tin vào hiện tại lẫn các thông tin vào trước đó Như vậy ôtômat có khả năng với một phạm vi nào đó ghi nhớ các thông tin vào trong quá khứ của nó
Ôtômat hữu hạn có một số hữu hạn trạng thái bộ nhớ trong Tại mỗi thời điểm i, nó ở một trong các trạng thái đó, chẳng hạn qi Trạng thái qi+1 ở thời điểm sau được xác định bởi qi và thông tin vào ai cho ở thời điểm i Thông tin ra ở thời điểm i được xác định bởi trạng thái qi (hay bởi cả ai và qi)
Chẳng hạn, xét một ôtômat với ba trạng thái q0, q1 và q2 Giả sử chỉ có một thông tin vào có thể có, ký hiệu là a, hoán vị vòng quanh các trạng thái Với i=0,1,2, ôtômat sản sinh thông tin ra i ở trạng thái qi Ôtômat này là bộ đếm thời gian môđun 3: ở mỗi thời điểm, thông tin ra chỉ lớp đồng dư môđun 3 của độ dài toàn dãy thông tin vào tới lúc đó miễn là ôtômat được khởi động ở trạng thái q0 Như vậy ôtômat có khả năng đếm chỉ môđun số trạng thái của nó Hiện tượng này rất tiêu biểu đối với các ôtômat hữu hạn nói chung
Một ví dụ tinh vi hơn được cho bởi thang máy của một tòa nhà nhiều tầng Thông tin vào gồm mọi yêu cầu có ở mỗi thời điểm bất kỳ cho trước Trạng thái được xác định bởi thông tin về các yêu cầu vẫn chưa được thỏa mãn (bao hàm cả
Trang 36thông tin về những tầng được yêu cầu từ bên trong thang máy), về vị trí hiện tại của thang máy cũng như về hướng hiện tại (lên hay xuống) Toàn bộ số trạng thái là hữu hạn và phụ thuộc vào số tầng Trạng thái tiếp theo luôn được xác định bởi trạng thái hiện tại và thông tin vào Trạng thái hiện tại cũng xác định thông tin ra, tức là dáng điệu của thang máy
Ta sẽ thấy có hai loại ôtômat hữu hạn, đó là ôtômat hữu hạn đơn định và ôtômat hữu hạn không đơn định và ta chỉ ra lớp ngôn ngữ được đoán nhận bởi ôtômat hữu hạn đơn định, lớp ngôn ngữ được đoán nhận bởi ôtômat hữu hạn không đơn định và lớp ngôn ngữ chính quy là trùng nhau
2.1 ÔTÔMAT HỮU HẠN ĐƠN ĐỊNH
Định nghĩa 2.1.1 Một ôtômat hữu hạn đơn định hay một DFA (Deteministic
Finite Automata) là một bộ năm
A = <Q, , , q0, F>, trong đó:
Q là một tập hữu hạn khác rỗng, được gọi là tập các trạng thái, mỗi phần tử của Q gọi là một trạng thái;
là một bảng chữ, được gọi là bảng chữ vào, mỗi phần tử của gọi là một ký
hiệu vào;
: D Q, trong đó DQ , được gọi là ánh xạ chuyển;
q0Q, được gọi là trạng thái đầu;
F Q, được gọi là tập các trạng thái kết thúc, mỗi phần tử của F gọi là một trạng
thái kết thúc
Trong trường hợp D=Q , ta nói A là đầy đủ Về sau ta sẽ thấy rằng mọi
ôtômat hữu hạn đều đưa về được ôtômat hữu hạn đầy đủ tương đương
Chú ý 2.1.1. Hoạt động của ôtômat hữu hạn đơn định A = <Q, , , q0, F> khi cho xâu vào =a1a2… an có thể được mô tả như sau:
Khi bắt đầu làm việc, máy ở trạng thái đầu q0 và đầu đọc đang nhìn vào ô có
ký hiệu a1 Tiếp theo máy chuyển từ trạng thái q0 dưới tác động của ký hiệu vào a1
Trang 37về trạng thái mới (q0, a1)=q1Q và đầu đọc chuyển sang phải một ô, tức là nhìn vào ô có ký hiệu a2 Sau đó ôtômat A có thể lại tiếp tục chuyển từ trạng thái q1 nhờ ánh xạ chuyển về trạng thái mới q2=(q1, a2)Q Quá trình đó sẽ tiếp tục cho tới khi gặp một trong các tình huống sau:
Trong trường hợp ôtômat A đọc hết xâu vào và (qn-1,an)=qnF, ta nói rằng A đoán nhận
Trong trường hợp ôtômat A đọc hết xâu vào và (qn-1,an)=qnF hoặc tồn tại chỉ
số j (jn) sao cho (qj-1,aj) không xác định, ta nói rằng A không đoán nhận
Xâu vào : a1 a2 a3 … an-1 an
q0 q1 q2 … qn-2 qn-1 qn
Chú ý 2.1.2.
1) Phương pháp cho bảng chuyển:
trong đó dòng i cột j của bảng là ô trống nếu (qi,aj)D, tức là (qi,aj) không xác định
2) Phương pháp cho bằng đồ thị chuyển:
Cho ôtômat A = <Q, , , q0, F> Ánh xạ chuyển có thể cho bởi một
đa đồ thị có hướng, có khuyên G sau đây, được gọi là đồ thị chuyển của
ôtômat A Tập đỉnh của G là Q và nếu (q, a)=p, với a, p, qQ, thì sẽ có một cung từ đỉnh q tới đỉnh p được gán nhãn a Đỉnh vào của đồ thị chuyển là đỉnh ứng với trạng thái đầu q0, được khoanh bởi một ô tròn có mũi tên đi vào
Trạng thái
Trang 38Các đỉnh khác sẽ được khoanh bởi các ô tròn, riêng đỉnh ứng với trạng thái kết thúc được khoanh bởi ô tròn đậm.
Ví dụ 2.1.1 Cho hai ôtômat hữu hạn đơn định
A1 = <{q0, q1, q2}, {0, 1}, , q0, {q2}>, trong đó (q0, 0)=q0, (q0, 1)=q1, (q1, 0)=q0, (q1, 1)=q2, (q2, 0)=q2, (q2, 1)=q2;
A2 = <{q0, q1, q2, q3}, {0, 1}, , q0, {q0}>, trong đó (q0, 0)=q2, (q0, 1)=q1, (q1, 0)=q3, (q1, 1)=q0, (q2, 0)=q0, (q2, 1)=q3,
(q3, 0)=q1, (q3, 1)=q2 Khi đó các bảng chuyển của A1 và A2 là:
Dãy trạng thái sinh ra của ôtômat A1 khi tác động vào từ =0101101 là:
Đồ thị chuyển của ôtômat A1:
Đồ thị chuyển của ôtômat A2:
Trạng thái
a
b
Trang 39Để mô tả quá trình đoán nhận một từ hay xâu vào, người ta đưa vào ánh xạ mở rộng ’ từ tập con của Q * vào Q như trong định nghĩa sau
Định nghĩa 2.1.2 Cho ôtômat hữu hạn đơn định A = <Q, , , q0, F> Mở rộng ’
của là một ánh xạ từ tập con của Q * vào Q được xác định như sau:
1) ’(q, )=q, qQ;
2) ’(q, a)=(’(q, ), a), a, qQ, * sao cho ’(q, ) được xác định
Ta có ’(q, a)=’(q, a) = (’(q, ), a) = (q, a), a, qQ Do đó ’ chính là mở rộng của về mặt ánh xạ Vì vậy, từ đây về sau ta viết thay cho ’
Định nghĩa 2.1.3 Cho ôtômat hữu hạn đơn định A = <Q, , , q0, F> Ta nói
* được đoán nhận bởi A nếu (q0, )F Tập hợp
{* | (q0, )F}
là một ngôn ngữ trên , ký hiệu là T(A) và gọi là ngôn ngữ được đoán nhận bởi A
Chú ý 2.1.3. Lưu ý rằng trong đồ thị chuyển của A, * được đoán nhận bởi A khi và chỉ khi ứng với một đường đi từ đỉnh q0 đến một trong các đỉnh kết thúc
Cụ thể là nếu =a1a2…an thì đường đi là (q0, q1, …, qn) với cung (qi-1, qi) có nhãn ai
(1in) và qnF Như vậy, để xác định T(A), ta chỉ cần tìm tất cả các đường đi từ q0
đến các đỉnh kết thúc Đây là hình ảnh trực quan nhất giúp ta tìm được ngôn ngữ được đoán nhận bởi một ôtômat hữu hạn đơn định
Định nghĩa 2.1.4 Hai ôtômat hữu hạn đơn định A và A’ được gọi là tương đương
nếu T(A)=T(A’)
11
11
00
Hình 2.1: Đồ thị chuyển của A 1 , A 2
Trang 40Hình 2.3: Đồ thị chuyển của A’
Ví dụ 2.1.2 Cho ôtômat hữu hạn đơn định:
A = <{q0, q1, q2, q3, q4}, {0, 1}, , q0, {q1, q2, q4}>, trong đó (q0,0)=q0, (q0,1)=q1, (q1,0)=q3, (q1,1)=q2, (q2,0)=q2, (q2,1)=q2,
(q3,1)=q3, (q4,0)=q2, (q4,1)=q3
Đồ thị chuyển của A là:
Do không có đường đi nào từ q0 đến đỉnh kết thúc q4 và mọi đường đi từ q0
(bỏ đi q3, q4 và các cung liên quan đến chúng):
A’ = <{q0, q1, q2}, {0, 1}, , q0, {q1, q2}>, trong đó (q0,0)=q0, (q0,1)=q1, (q1,1)=q2, (q2,0)=q2, (q2,1)=q2
Đồ thị chuyển của A’ là:
Các đường đi từ q0 đến đỉnh kết thúc q1 ứng với các xâu 0n1, n0 Các đường đi từ
q0 đến đỉnh kết thúc q2 ứng với các xâu 0n11, n0, {0, 1}* Vậy A và A’ là tương đương và
1
01
q0
01
01 Hình 2.2: Đồ thị chuyển của A