Giáo trình môn Ngôn ngữ hình thức

Các khái niệm cơ bản về ngôn ngữ hình thức

1.1.1. Bảng chữ cái

Định nghĩa 1.1. Tập Σ khác rỗng gồm hữu hạn hay vô hạn các ký hiệu được gọi

là bảng chữ cái. Mỗi phần tử a Σ được gọi là một chữ cái hay một ký hiệu.

Ví dụ 1.1. Dưới đây là các bảng chữ cái:

1. ∑ = {a, b, c, , x, y, z};

2. = {α, β, γ, δ, ε, η, Φ, κ, μ, χ, ν, π, θ, ρ, ζ, η, ω, ξ, ψ};

3. Г = {0, 1};

4. W = {if, then, else, a, b, c, d, e, f, +, −, , /, =, ≠}.

1.1.2. Từ

Định nghĩa 1.2. Giả sử có bảng chữ cái Σ = {a1, a2, , am}, một dãy các chữ cái α

= ai1 ai2 ait, với aij Σ (1 ≤ j ≤ t) được gọi là một từ hay một xâu trên bảng chữ cái Σ.

Tổng số vị trí của các ký hiệu xuất hiện trong xâu α được gọi là độ dài của từ α

và ký hiệu là |α|.

Như vậy, một từ trên bảng chữ cái Σ là một xâu hữu hạn gồm một số lớn hơn hay

bằng không các chữ cái của Σ, trong đó một chữ cái có thể xuất hiện nhiều lần.

Xâu không có chữ cái nào được gọi là từ rỗng và được ký hiệu là ε. Rõ ràng từ

rỗng là từ thuộc mọi bảng chữ cái.

Hai từ α = a1a2 an và β = b1b2 bm được gọi là bằng nhau và được ký hiệu là α = β,

nếu n = m và ai = bi với mọi i = 1, 2, , n.

Nếu α là một từ trên bảng chữ cái Σ, và Σ thì α cũng là từ trên bảng chữ cái

. Tập mọi từ trên bảng chữ cái Σ được ký hiệu là Σ*, còn tập mọi từ khác rỗng trên

bảng chữ cái Σ được ký hiệu là Σ+. Như vậy, Σ+ = Σ*\{ε} và Σ* = Σ+ {ε}. Dễ thấy

rằng các tập Σ* và Σ+ là vô hạn.

Về cấu trúc đại số thì Σ* là một vị nhóm tự do sinh bởi Σ với đơn vị là từ rỗng ε,

còn Σ+ là một nửa nhóm tự do sinh bởi Σ. Có thể chứng minh được rằng các tập Σ* và

Σ+ là vô hạn đếm đượ

Giáo trình môn Ngôn ngữ hình thức trang 1

Trang 1

Giáo trình môn Ngôn ngữ hình thức trang 2

Trang 2

Giáo trình môn Ngôn ngữ hình thức trang 3

Trang 3

Giáo trình môn Ngôn ngữ hình thức trang 4

Trang 4

Giáo trình môn Ngôn ngữ hình thức trang 5

Trang 5

Giáo trình môn Ngôn ngữ hình thức trang 6

Trang 6

Giáo trình môn Ngôn ngữ hình thức trang 7

Trang 7

Giáo trình môn Ngôn ngữ hình thức trang 8

Trang 8

Giáo trình môn Ngôn ngữ hình thức trang 9

Trang 9

Giáo trình môn Ngôn ngữ hình thức trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 82 trang duykhanh 10100
Bạn đang xem 10 trang mẫu của tài liệu "Giáo trình môn Ngôn ngữ hình thức", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Giáo trình môn Ngôn ngữ hình thức

Giáo trình môn Ngôn ngữ hình thức
sau: 
 k: print A, 
 k: move right, k: move left, 
 k: if A then go to h, 
 k: stop, 
 Ở đây k và h là các số tự nhiên ký hiệu dòng chỉ thị, còn A là một ký hiệu trên băng. 
 Chương trình là một dãy chỉ thị. Việc thực hiện chương trình thông thường là 
theo thứ tự tự nhiên của cách viết trừ khi gặp lệnh if A then go to h (nếu ký hiệu hiện 
hành trên băng là A thì nhảy đến thực hiện lệnh có nhãn h). Sau đây là chương trình 
mô tả hoạt động của một máy Turing thực hiện phép toán nhân hai: 
 70 
 1: print B, 
 2: move left, 
 3: if 1 then go to 2, 
 4: print 1, 
 5: move left, 
 6: if 1 then go to 5, 
 7: print 1, 
 8: move right, 
 9: if 1 then go to 1, 
 10: stop, 
 Các máy Turing và các hàm có thể tính được bằng máy Turing đóng vai trò quan 
trọng trong lý thuyết thuật toán. Cơ sở cho việc xây dựng một số lý thuyết thuật toán 
từ máy Turing là định đề Church sau đây. 
 Định đề Church: Lớp các hàm có thể tính được bằng thuật toán trùng với lớp 
các hàm có thể tính được bằng máy Turring. 
4.2. Máy Turing phổ dụng 
 Máy Turing phổ dụng là một máy Turing có thể bắt chước sự hoạt động của bất 
kỳ máy Turring nào. Máy Turing phổ dụng U có thể được hiểu như sau: Với một cách 
mã hoá thích hợp ánh xạ chuyển trạng thái của máy Turing bất kỳ và từ ω trên bảng 
chữ vào. Với từ đã mã hoá này, máy Turing phổ dụng U dừng khi và chỉ khi máy 
Turing M dừng với từ ω. Ta có thể xem máy Turing phổ dụng như là mô hình toán học 
của máy tính điện t ử ngày nay. Các máy này th ực hiện công việc bằng cách mã hoá 
chương trình theo ngôn ngữ bên trong được gọi là ngôn ngữ máy. 
 Tập các ký hiệu ghi lên băng là hữu hạn nên ta có thể ký hiệu chúng như sau: S0 
= B,S1, S2,, Sm và có thể mã hoá bằng bộ các chữ số 1. Chẳng hạn, B−1, S1−11, 
 m+1
S2−111, ,Sm−1 . 
 Tương tự, tập các trạng thái là hữu hạn và ta cũng có thể mã hoá chúng: q0−1, 
 n+1
q1−11, q2−111, , qn−1 . 
 Cuối cùng hai ký hiệu L và R cũng có thể mã hoá: L−1, R−11. 
 Bây giờ để mã hoá ánh xạ chuyển trạng thái của máy Turing, ta sử dụng bảng 
biểu diễn ánh xạ này. Trong bảng, các cột được ký hiệu bở i các ký hiệu có thể ghi lên 
băng, các dòng được ký hiệu bởi các trạng thái. Tiếp theo liệt kê các phần tử của bảng 
theo dòng cùng với các chỉ số dòng và cột tương ứng của chúng, thứ tự là các phần tử 
của dòng 1, dòng 2,  từ trái sang phải. Chẳng hạn, trên một dòng xuất hiện bộ <qi, 
 71 
Sj, Sk, C, qh> có nghĩa là δ(qi, Sj) = . Giữa các dãy mã của các bộ năm <qi, 
Sj, Sk, C, qh> có chèn hai chữ số 0 và giữa mã các ký hiệu trong cùng một bộ năm 
được chèn bởi một chữ số 0. Máy Turing M được mã hoá như vậy ký hiệu là [M]. 
 Ta chấp nhận mà không chứng minh ở đây là với máy Turing M bất kỳ tồn tại 
một máy Turing tương đương chỉ có một trạng thái kết thúc, vì vậy ta có thể xem q0 là 
trạng thái đầu và q1 là trạng thái kết thúc duy nhất của máy Turing M. 
 Ví dụ 2.1. Cho máy Turing M với ánh xạ chuyển được cho bởi bảng sau: 
 B S1 
 q0 
 q1 
 q2 
 Các phần tử của bảng được sắp xếp thành dãy dưới đây: 
 , , , 
 Dãy này sẽ được mã hoá dưới dạng xâu nhị phân: 
 [M] = 10101101101100101101101101001101101101011100111011011010111 
 Nếu trên băng vào có ω=S1S1BS1 thì mã tương ứng của nó là: 
 [ω] = 1101101011 
 - Hoạt động của máy Turing phổ dụng: 
 Bây giờ giả sử máy Turing M có n trạng thái và bảng chữ ghi lên băng có m ký 
hiệu, thêm vào đó các ký hiệu, các trạng thái và ánh xạ chuyển của M được mã hoá 
như đã nói ở trên. Mô hình hoá hoạt động của máy Turing M bằng một máy Turing 
phổ dụng U có thể mô tả khái quát như sau: Trước hế t [M] và [ω] cần phải được ghi 
lên băng của máy Turing phổ dụng U theo quy cách sau đây. Ký hiệu X được ghi lên 
băng chia băng thành hai nửa vô hạn. Nửa băng bên phải được dành ra ba đoạn kề 
nhau kể từ vị trí ký hiệu ngay sau X: Đoạn đầu tiên được gọi là Buffer gồm n + m + 2 
vị trí ký hiệu và tất cả được nhận ký hiệu 0; đoạn tiếp theo được gọi là vùng mã hoá 
của M, bắt đầu bởi ký hiệu Y, tiếp sau Y là [M] và được kết thúc bởi ba chữ số 0; đoạn 
sau cùng được gọi là đoạn mã của ω, bắt đầu bởi ký hiệu Z và tiếp theo là [ω]. Hình 
ảnh của băng lúc đầu là như sau: 
 72 
 Buffer phục vụ cho việc ghi nhận hình trạng của M trong từng bước. Ta có thể 
sao chép vào vùng này trạng thái bên trong và mã hoá của ký hiệu đang đọc. Ký hiệu 
Y thường đứng trước bộ năm xác định trạng thái hiện hành của M, ký hiệu hiện hành 
trên băng, hướng chuyển động của đầu đọc trên băng. Z đánh dấu ký hiệu đang đọc 
trên băng của M. 
 Quá trình tính toán trong U mô phỏ ng hoạt động của máy Turing M với xâu vào 
ω được chia ra các pha thích hợp với việc dịch chuyển các hình trạng của M. 
 Một giai đoạn (pha) hoạt động của máy Turing phổ dụng U có thể tóm tắt như 
sau. Đầu tiên sao chép vào Buffer một khối các ký hiệu 1 nằm ngay sau Y (gọi là khối 
Y), sau đó ghi vào cuối khối vừa được chép một ký hiệu X, tiếp theo xoá ký hiệu Y, 
chạy sang phải tìm ký hiệu Z và sao chép khối ký hiệu 1 ngay sau Z (gọi là khối Z) 
vào Buffer ngay sau ký hiệu X rồi ghi lại ký hiệu Y trước [M]. Như vậy sau giai đoạn 
này trong Bufffer chứa mã của trạng thái và ký hiệu hiện hành của máy Turing M. 
Bước tiếp theo, máy Turing phổ dụng U so sánh hai khối ký hiệu 1 liên tiếp nhau sau 
Y với nội dung Buffer. Nếu trùng nhau thì tìm được bộ năm cần tìm. Nếu ngược lại thì 
tìm đến mã hoá của bộ năm tiếp theo sau Y và lại tiếp tục so sánh. Trong trường hợp 
giữa các bộ năm mô tả M không tìm thấy bộ nào thích hợp thì U dừng. Ngược lại, nếu 
tìm được bộ năm cần tìm thì xoá nội dung buffer rồi chuyển Y đến trước phần tử thứ 
ba trong bộ năm đó. Đổi nội dung của khối sau Z bởi nội dung của khối sau Y và 
chuyển Y đến trước phần tử thứ tư của bộ năm. Sau khi đã đọc xong phần tử thứ tư mà 
nó xác định hướng chuyển động của đầu đọ c/ghi của M và U chuyển ký hiệu Y đến 
sau phần tử trước phần tử thứ năm. Tuỳ thuộc vào nội dung của khối thứ tư (một ký 
hiệu 1 hay hai ký hiệu 1) U chuyển Z qua phải hay qua trái một khối. Nếu Z lúc đầu 
nằm ở tận cùng trái của băng ghi và M cần dịch chuyển sang phải thì U đẩy mã của từ 
sang phải và ghi mã hoá của ký hiệu trắng vào sau Z. Nếu Z nằm tận cùng phải của 
băng và cần chuyển sang phải, khi đó U ghi mã của ký hiệu trắng vào cuối từ. Khi 
hoàn thành các công việc trên khối ký hiệu 1 đứng sau Y, ký hiệu trạng thái hiện hành 
của M, còn khối sau Z xác định ký hiệu M cần đọc tiếp theo. Như vậy, giai đoạn tiếp 
theo của việc mô phỏng bước tiếp theo của M có thể bắt đầu. 
 Các giai đoạn hoạt động của máy Turing phổ dụng U mô hình hoá hoạt động 
từng bước của máy Turing M như đã chỉ ở trên. Ngoài ra, U còn thực hiện công việc 
sau đây. Đầu tiên U thay tất cả các ký hiệu 0 trên ba đoạn của băng vào bằng các 
khoảng trắng, cuối công việc, khi M dừng máy U còn kiểm tra liệu trạng thái cuối của 
M có phải là trạng thái kết thúc hay không. 
 Các pha của một máy Turing phổ dụng U được chia thành chín phần, với đồ thị 
chuyển trạng thái phù hợp cho việc mô tả máy, được cho trong hình dưới đây: 
 73 
 - Phần 1: Thay các ký hiệu 0 bởi ký hiệu B và đầu đọc/ghi chuyển đến trước Y. 
 - Phần 2: Sao chép mã của trạng thái hiện hành vào buffer. 
 - Phần 3: Sao chép mã của ký hiệu cần đọc trên băng của M vào buffer. 
 - Phần 4: Đặt X và Y vào trước buffer và trước ký hiệu của [M]. 
 - Phần 5: Tìm bộ năm có mã của trạng thái và ký hiệu trên băng trùng với buffer. 
 - Phần 6: Xoá buffer. 
 - Phần 7: Thay mã ký hiệu đã đọc bằng mã ký hiệu mới của M. 
 - Phần 8: Đẩy Z sang phải hay sang trái một khối mà mã ký hiệu của khối đó sẽ 
được đọc trong pha tiếp theo. Nếu cần thì ghi mã một khoảng trắng vào phải hoặc trái 
từ trên băng của M. 
 - Phần 9: Máy Turing phổ dụng U dừng ở trạng thái kết thúc khi và chỉ khi M 
dừng ở trạng thái kết thúc. Đồng thời trong vùng mã hoá của từ trên băng sẽ chứa mã 
của từ đáng ra còn lại trên băng của M, còn mã của trạng thái cuối của M có thể thấy 
trên buffer. 
 74 
4.3. Vấn đề không giải đƣợc bằng thuật toán 
 Trong toán học thường gặp vấn đề cần xác định liệu một phần tử của một lớp vô 
hạn nào đó có một số tính chất đã cho hay không. Chẳng hạn, ta có thể hỏi liệu hai số 
tự nhiên cho trước có nguyên tố cùng nhau hay không, hoặc là một máy Turing có 
dừng sau một số hữu hạn bước hay không Các vấn đề trên được gọi là vấn đề thuật 
toán và có thể quy về vấn đề là liệu một từ trên bảng chữ nào đó có thuộc vào một 
ngôn ngữ hình thức đã cho hay không. 
 Một bài toán được gọi là không giải được bằng thuật toán nếu không tồn tại một 
máy Turing nào sau một số hữu hạn bước xác định được liệu một sự mã hoá cụ thể nào 
đó của bài toán có thuộc ngôn ngữ hình thức đã cho hay không. Trong trường hợp 
ngược lại thì bài toán được gọi là giải được bằng thuật toán. Như vậy, một vấn đề giải 
được bằng thuật toán nếu và chỉ nếu ngôn ngữ hình thức mô tả nó là đệ quy. 
 Sau đây ta sẽ nghiên cứu một vài tính chất của ngôn ngữ đệ quy và đệ quy đếm 
được. Việc chứng minh các tính chất này khá phức tạp nên ta không đi sâu vào chi tiết. 
4.3.1. Định lý 3.1 
 Phần bù của một ngôn ngữ đệ quy là ngôn ngữ đệ quy. 
 Chứng minh: 
 Giả sử L là một ngôn ngữ đệ quy trên bảng chữ Σ. Điều này có nghĩa là tồn tại 
một máy Turing M mà với từ ω ∈ Σ* tuỳ ý nó dừng sau một số hữu hạn bước và T(M) 
= L. Thay tập trạng thái kết thúc của M bằng phần bù của nó, ta được một máy Turing 
mới M’. Dưới tác động cùng một từ, M’ dừng với trạng thái kết thúc khi và chỉ khi 
dưới tác động của từ đó M dừng với trạng thái không kết thúc. Điều này dẫn đến 
T(M’) = ̅. Do M’ dừng sau một số hữu hạn bước với mọi từ vào nên T(M’) = ̅ cũng 
là ngôn ngữ đệ quy. 
4.3.2. Định lý 3.2 
 Nếu L là ngôn ngữ đệ quy đếm được trên bảng chữ Σ và phần bù ̅ của nó cũng 
là đệ quy đếm được thì L là đệ quy. 
 Chứng minh: 
 Giả sử M1, M2 là các máy Turing sao cho T(M1) = L và T(M2) = ̅. Ta cần xây 
dựng máy Turing M’ mà nó mô hình hoá đồng thời sự hoạt động của M1, M2. Điều ta 
cần có là dưới tác động của từ ω, máy Turing M’ ngừng hoạt động khi và chỉ khi M1 
hoặc M2 đoán nhận từ ω. Ta muốn M1 dừng với trạng thái kết thúc, còn M2 dừng với 
trạng thái không kết thúc. Việc xây dựng này là có thể thực hiện được và với mọi từ ω 
máy Turing M’ sau một số hữu hạn bước sẽ dừng. Nếu ω∈Σ* thì ω ∈ L hoặc ω ∈ ̅ . 
Nếu ω ∈ ̅ thì M2 sẽ đoán nhận ω sau một số hữu hạn bước. Từ đó nếu M1 không dừng 
sau một số hữu hạn bước thì M’ phải hoàn thành công việc của mình trong thời gian 
hữu hạn. Như vậy T(M1) = L là đệ quy. 
 75 
4.3.3. Định lý 3.3 
 Tồn tại một ngôn ngữ đệ quy đếm được nhưng không đệ quy. 
 Chứng minh: 
 Xét ngôn ngữ T(U) được đoán nhận bởi máy Turing U. Khi đó T(U) là đệ quy 
đếm được. 
 Giả sử T(U) là đệ quy. Điều này có nghĩa là tồn tại một máy Turing M (không 
đòi hỏi là trùng với U) sao cho T(M) = T(U) và sẽ dừng sau một số hữu hạn bước dưới 
tác động của mọi từ trên bảng chữ vào. Ta xây dựng máy Turing M’ như sau: 
 Giả sử ω là một từ trên bảng chữ vào của M’. Trước hết M’ cho mã [ω] của ω, 
đồng thời trên cơ sở sắp xếp các từ trên bảng chữ vào tìm chỉ số i của ω (số thứ tự của 
ω trong dãy là i). Tiếp theo ứng với các chỉ số i, máy Turing M’ thiết lập sự mô tả mã 
của máy Turing thứ i trong dãy các máy Turing M1, M2 Cuối cùng M thiết lập sự 
mô tả chuẩn của từ ωi và Mi, . M’ bắt chước sự hoạt động của máy Turing M 
với từ mà theo giả thiết nó tồn tại, đoán nhận ngôn ngữ T(U) và dừng sau một 
số hữu hạn bước đối với mọi từ trên bảng chữ vào. Nếu M kết thúc sự hoạt động với 
trạng thái không kết thúc thì khi đó M’ chuyển sang một trạng thái kết thúc riêng và 
dừng. Nếu M dừng ở trạng thái kết thúc thì M’ bắt đầu bắt chước sự hoạt động của 
máy Turing mà nó không dừng với mọi từ của bảng chữ vào. 
 Rõ ràng rằng máy Turing M’ đoán nhận từ ω = ωi khi và chỉ khi không đoán 
nhận . Ta biết rằng T(M) = T(U) ={ | ∈T(Mi)}. Đồng thời mọi máy 
Turing đều có mặt trong dãy M1, M2 và do đó M’ cũng nằm trong dãy này, có nghĩa 
là tồn tại một số tự nhiên h sao cho M’= Mh. 
 Bây giờ ta xem máy Turing M1 hoạt động như thế nào với từ ω1. Ta nhận được 
ω1∈T(M’) khi và chỉ khi ω1∈T(M1). Điều này mâu thuẫn với giả thiết. 
 Vậy T(U) không đệ quy. 
 Hệ quả 3.1. Tồn tại một ngôn ngữ hình thức nhưng không đệ quy đếm được. 
 Chứng minh: 
 Như trong chứng minh của Định lý 4.3.4, T(U) là đệ quy đếm được nhưng không 
đệ quy. Do đó theo Định lý 4.3.3, phần bù của T(U) là không đệ quy đếm được. 
4.3.4. Định lý 3.4 
 Một ngôn ngữ hình thức là loại 0 khi và chỉ khi nó là đệ quy đếm được. Điều này 
có nghĩa là lớp ngôn ngữ hình thức loại 0 chính là lớp ngôn ngữ đệ quy đếm được. 
 Chú ý: Nhờ vào Định lý 4.3.4, ta thấy rằng có những ngôn ngữ đệ quy đếm được 
nhưng không đệ quy. Với việc mã hoá thích hợp, ta chỉ ra rằng nhiều vấn đề không 
giải quyết được bằng thuật toán. Ta sẽ khảo sát một số vấn đề liên quan đến lớp các 
ngôn ngữ đệ quy đếm được. Chẳng hạn như một ngôn ngữ đệ quy đếm được có rỗng 
hay không, có hữu hạn hay không, có chính quy hay không, có là phi ngữ cảnh hay 
 76 
không và có là cảm ngữ cảnh hay không Tất cả các ngôn ngữ có tính chất này hình 
thành lên một lớp con của lớp các ngôn ngữ đệ quy đếm được. Khi ta khảo sát một ngôn 
ngữ có hay không một tính chất đã cho thì thực tế ta cần giải quyết vấn đề ngôn ngữ này 
có thuộc hay không lớp con đã cho của lớp các ngôn ngữ đệ quy đếm được. 
 Ta nói rằng một tính chất của các ngôn ngữ đệ quy đếm được là tầm thường nếu 
hoặc mọi ngôn ngữ đệ quy đếm được đều có tính chất này hoặc ngược lại mọi ngôn 
ngữ đệ quy đếm được không có tính chất này. Điều này có nghĩa là lớp con các ngôn 
ngữ xác định bởi tính chất này hoặc bằng rỗng hoặc bằng chính lớp các ngôn ngữ đệ 
quy đếm được. Như vậy các tính chất: Một ngôn ngữ đã cho có rỗng hay không, có 
hữu hạn hay không, có chính quy hay không là không tầm thường. Có những ngôn 
ngữ đệ quy đếm được có những tính chất trên và có những ngôn ngữ đệ quy đếm được 
không có tính chất trên. 
 Từ định lý 4.3.3, ta biết rằng muốn xác định bằng thuật toán việc thực hiện một 
tính chất nào đó thì vấn đề này được giải quyết bằng thuật toán khi và chỉ khi việc phủ 
định của tính chất này cũng được giải quyết bằng thuật toán. 
4.3.5. Định lý 3.5 
 Cho trước một tính chất không tầm thường của lớp các ngôn ngữ đệ quy đếm 
được. Khi đó vấn đề xác định rằng một ngôn ngữ có tính chất này hay không là không 
giải quyết được bằng thuật toán. 
 Hệ quả 3.2. Việc xác định rằng một ngôn ngữ đệ quy đếm được có là: 
 a. Rỗng; 
 b. Hữu hạn; 
 c. Chính quy; 
 d. Phi ngữ cảnh; 
 e. Cảm ngữ cảnh; 
 f. Đệ quy. 
 hay không là vấn đề không giải được bằng thuật toán. 
 77 
 TÀI LIỆU THAM KHẢO 
1. Nguyễn Văn Ba (2006). Lý thuyết ngôn ngữ và tính toán. Nxb Đại học Quốc gia, 
Hà Nội. 
2. Đỗ Đức Giáo, Đặng Huy Ruận (1991). Văn phạm và ngôn ngữ hình thức. Nxb Khoa 
học Kỹ thuật, Hà Nội. 
3. Lê Mạnh Thạnh (1998). Nhập môn ngôn ngữ hình thức và Otomat. Nxb Giáo dục, 
Đà Nẵng. 
 78 

File đính kèm:

  • pdfgiao_trinh_mon_ngon_ngu_hinh_thuc.pdf