Bây giờ chúng ta quay lại sự quan tâm chính, đó là nghiên cứu về ngôn ngữ hình thức. Mục đích trực tiếp của chúng ta là sẽ khảo sát ngôn ngữ liên hợp với máy Turing và một vài giới hạn của chúng. Bởi vì máy Turing có thể thực hiện một vài loại thuật toán tính toán nên chúng ta hy vọng tìm ra một họ ngôn ngữ kết hợp với chúng là khá rộng. Nó không chỉ bao gồm ngôn ngữ chính quy và phi ngữ cảnh mà còn nhiều loại khác như ví dụ chúng ta đã gặp ở ngoài những họ này. Câu hỏi đặt ra là liệu có một vài ngôn ngữ không được chấp nhận bởi một máy Turing.
19 trang |
Chia sẻ: vietpd | Lượt xem: 1950 | Lượt tải: 1
Bạn đang xem nội dung tài liệu Đề tài automat, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Phần I. mở đầu
Phần II. Nội dung
Phần III. Kết Luận
Phần IV. Tài liệu tham khảo
Mục lục
Nội dung
Trang
Chương I: Một phân cấp của ngôn ngữ hình thức và automat
Bây giờ chúng ta quay lại sự quan tâm chính, đó là nghiên cứu về ngôn ngữ hình thức. Mục đích trực tiếp của chúng ta là sẽ khảo sát ngôn ngữ liên hợp với máy Turing và một vài giới hạn của chúng. Bởi vì máy Turing có thể thực hiện một vài loại thuật toán tính toán nên chúng ta hy vọng tìm ra một họ ngôn ngữ kết hợp với chúng là khá rộng. Nó không chỉ bao gồm ngôn ngữ chính quy và phi ngữ cảnh mà còn nhiều loại khác như ví dụ chúng ta đã gặp ở ngoài những họ này. Câu hỏi đặt ra là liệu có một vài ngôn ngữ không được chấp nhận bởi một máy Turing. Ta sẽ trả lời câu hỏi này bằng sự chỉ ra rằng có nhiều ngôn ngữ hơn máy Turing, vì vậy sẽ có một vài ngôn ngữ mà không có máy Turing đoán nhận. Bằng chứng đưa ra là ngắn gọn và đơn giản nhưng không có cấu trúc và ít đi sâu vào bên trong của vấn đề. Đối với lý do này chúng ta sẽ thiết lập sự tồn tại của ngôn ngữ không được đoán nhận bởi máy Turing. Một con đường khác của người nghiên cứu sẽ là nhìn vào mối quan hệ giữa máy Turing và một loại nào đó của văn phạm và thiết lập một sự liên quan giữa những văn phạm này và ngôn ngữ chính quy và ngôn ngữ phi ngữ cảnh. Điều này dẫn đến tạo ra một hệ thống ngôn ngữ và qua đó dẫn đến một phương thức để phân loại họ ngôn ngữ. Một tập biểu đồ minh họa mối liên hệ giữa họ ngôn ngữ khác nhau một cách rõ ràng.
Nhiều thảo luận trong chương này là chỉ đúng cho ngôn ngữ không bao gồm xâu rỗng. Hạn chế này xuất phát từ sự việc máy Turing, như chúng ta đã định nghĩa chúng, không thể chấp nhận xâu rỗng. Để tránh phải diễn đạt lại định nghĩa ta ngầm giả định rằng ngôn ngữ đã thảo luận ở trong chương này không chứa đựng λ. Nó là một vấn đề bình thường để nêu lại rõ ràng mọi thứ vì vậy λ là được gộp vào nhưng chúng ta sẽ để lại điều này cho đọc giả.
11.1 Đệ quy và ngôn ngữ đệ quy đếm được
Chúng ta bắt đầu với một vài thuật ngữ đối với ngôn ngữ kết hợp với máy Turing. Trong việc làm cũng vậy, chúng ta cũng phải làm phân biệt tế nhị giữa ngôn ngữ cho cái mà có sự tồn tại một sự chấp nhận của máy Turing và ngôn ngữ cho cái mà có tồn tại một thuật toán. Bởi vì một máy Turing không cần thiết tạm dứng lại trên dữ liệu vào mà nó không chấp nhận, điều thứ nhất khong bao hàm điều thứ hai.
Định nghĩa 11.1: Một ngôn ngữ L được coi là đệ quy đếm được nếu tồn tại một máy Turing đoán nhận nó.
Địng nghĩa này không chỉ bao hàm có tồn tại một máy Turing M, such that, đối với mọi từ w ọ L: q0w Mx1qfx2
Trông đó: q là trạng thái kết thúc. Định nghĩa không nói gì về cái gì sẽ xảy ra đôiư với w không thuộc L: nó có thể làm cho máy dừng ở trong một trạngthái không kết thúc hoặc nó không bao giờ dừng và lặp vô tận. Chúng ta có thể cố gằng hơn và hỏi rằng: Máy sẽ cho chúng ta liệu có hoặc không một vài dữ liệu đã cho là trong ngôn ngữ của nó
Định nghĩa 11.2:
Một ngôn ngữ L trên bảng chữ ∑ được coi là đệ quy nếu có tồn tại một máy Turing M đoán nhận L và dừng ở mọi từ w trên ∑* . Trong những từ khác, một ngôn ngữ là đệ quy nếu và chỉ nếu tồn tại một quá trình tính toán hgoàn chỉnh cho nó.
Nếu một ngôn ngữ là đệ quy, sẽ luôn tồn tại một cách xây dựng thủ tục đếm được. Giả thiết rằng M là một máy Turing cái mà đã xác định một thành phần ở trong một ngôn ngữ đếm được L. Đầu tiên chngs ta xây dựng một máy Turing khác, gọi là M’ , tạo ra tất cả các xâu ở trong ∑* theo một thứ tự thích hợp, chúng ta gọi là w1 w2 ... Khi các xâu này được tạo ra, chúng trở thành dữ liệu vào cho M, cái được sửa đổi vì vậy nó chỉ viết xâu ở trên băng của nó nếu chúng ở trong L.
Có một thủ tục đến được cho mọi ngôn ngữ đệ quy đếm được không phải là dễ để thấy. Chúng ta không thể sử dụng những lý lẽ khi nó dừng lại, bởi vì nếu như một vài wj là không ở trong L, máy M, khi bắt đầu với wj trên băng của nó, có thể không bao giờ dừng và việc đó không bao giờ làm cho xâu ở trong L đi theo sau wj ở trong đếm được. Để chắc chắn rằng điều này không xảy ra, sự tính toán được thực hiện trog một cách khác. Đầu tiên chúng ta lấy M’ tạo ra w2 và để M thực hiện một di chuyển trên w2, theo sau bằng di chuyển thứ 2 ở trên w1. Sau đó, chúng ta tạo ra w3 và làm một bước trên w3, bước thư hai ở trên w2, bước thứ 3 ở trên w1, và vân vân. Thứ tự của sự thực hiện được miêu tả ở trong hình 11.1. Từ điều này, nó làm sáng tỏ rằng M sẽ không bao giờ đi vào một vòng lặp vô tận. Khi w ọ L được tạo bởi M’ và được chấp nhận bởi M trong một số bước hữu hạn, mọi xâu ở trong L là rốt cuộc được sản sinh bởi M.
w1 w2 w3 w4
First move
Second move
Third move
Hình 11.1
Dễ dàng nhận thấy rằng mọi ngôn ngữ cái mà tồn tại một thủ tục đếm được là đệ quy đếm được. Chúng ta so sánh đơn giản xâu dữ liệu vào đã cho ngước lại với xâu kế tiếp được tạo ra bởi thủ tục đếm được. Nếu w ọ L, chúng ta sẽ rốt cuộc thu được sự tương thích, và tiến trình có thể chấm dứt.
Định nghĩa 11.1 và 11.2 cho chúng ta một ít nhìn nhận một cách tự nhiên của mỗi ngôn ngữ đệ quy hoặc đệ quy đếm được. Những định nghĩa này gán tên cho họ ngôn ngữ liên hợp với máy Turing, nhưng không để lại một cách tự nhiên của ngôn ngữ tiêu biểu trong họ này. Và chúng cũng không cho chúng ta biết nhiều về mối quan hệ giữa những ngôn ngữ hoặc sự liên quan đến các họ ngôn ngữ mà chúng ta đã gặp từ trước. Chúng ta ghi nhận ngay vẻ bề ngoài với câu hỏi như là: “Có ngôn ngữ là đệ quy đếm được nhưng không đệ quy hay không” và “Có ngôn ngôn ngữ, bằng cách này cách khác diễn tả được, đó là đếm được”. Lát sau chúng ta sẽ được cung cấp một vài câu trả lời, chúng ta sẽ không thể tạo ra nhiều ví dụ rõ ràng dứt khoát để minh họa cho những câu hỏi này, đặc biệ là cho câu hỏi thứ hai.
Ngôn ngữ không phải là đệ quy đếm được
Chúng ta có thể viết tắt sự tồn tại của ngôn ngữ là không đệ quy đếm được trong một cách khác. Một cách rất ngắn và sử dụng một rất cơ sở và tao nhã kết quả của toán học
Định lý 11.1
Cho S là một tập vô hạn đếm được. Tập các tập con của nó là không đếm được.
Chứng minh: Cho S={s1,s2,...}. Một phần tử bất kỳ t thuộc 2s là tương ứng với một xâu thuộc 0’s và 1’s, với 1 ở vị trí i nếu và chỉ nếu si là ở trong t.
Ví dụ: , tập hợp {s2,s3,s6} là tương ứng với xâu 01100100...., khi đó { s1,s3,s5} là tương ứng với xâu10101... Rõ ràng, phần tử bất kỳ của 2s có thể được tương ứng với một xâu, và bất kỳ một xâu nào đều tương ứng với duy nhất một phần tử của 2s. Giả sử rằng 2s là đếm được , khi đó phần tử của nó có thể được viết ở trong một vài thứ tự, gọi t1,t2,... và chúng ta có thể đưa vào một bảng, như ở hình 11.2. Trong bảng này, lấy một phần tử ở trong đường chéo chính, và phần bù của mỗi mục, đó là, thay thế 0 bởi 1, và vice versa. Trong ví dụ ở hình 11.2, phần tử 1100..., vì vậy chúng ta lấy 0011..., là kết quả. Xâu mới tương ứng với một vài phần tử của 2s, gọi ti cho một i nào đó. Nhưng nó không phải là t1 bởi vì nó khác t1 qua s1. Đối với cùng lý do đó nó không thể là t2, t3 hoặc bất kỳ ti nào khác. Sự mâu thuẫn này tạo ra một bế tắc logic rằng có thể bị khác biệt chỉ vì đưa ra thừa nhận trong đó 2s là đếm được.
Hình 11.2
t1
1
0
0
0
0
...
t2
1
1
0
0
0
...
t3
1
1
0
1
0
...
t4
1
1
0
0
1
...
...
...
Loại vấn đề này, bởi vì nó bao hàm một sự vận dụng yếu tố đường chéo của một bảng, được gọi là chéo hóa. Kỷ thuật được quy cho nhà toán học G.F.Canto, người đã sử dụng nó để chúng minh rằng tập hợp số thực là khong đếm được. Trong các chương sau, chúng ta sẽ thấy một vấn đề tương tự trong vài khung cảnh. Định lý 11.1 là chéo hóa ở trong dạng furest của nó.
Như là một hệ quả trực tiếp của kết quả này, chúng ta có thể thấy rằng, trong một vài cách hiểu, có nhiều náy Turing hơn là ngôn ngữ, vì vậy phải có một vài ngôn ngữ là không đệ quy đếm được.
Định lý 11.2: Đối với tập khác rỗng ∑, tồn tại một ngôn ngữ là không đệ quy đếm được.
Chứng minh: Một ngôn ngữ là một tập con của ∑*, Vì thế tập tất cả ngôn ngữ là . Từ đó ∑* là không đếm được. Định lý 11.1 cho chúng ta rằng tập các tất cả các ngôn ngữ trên ∑ là không đếm được. Nhưng tập của tất cả máy Turing có thể đếm được. Điều nàu nói lên rằng phải có một vài ngôn ngữ trên ∑ là không đệ quy đếm được.
Chứng minh này, mặc dù ngắn và đơn giản, là trong nhiều cách không làm vừa lòng. Nó là hoàn toàn không suy diễn và, khi nó cho chúng ta sự tồn tại của một vài ngôn ngữ là không đệ quy đếm được, nó không cho chúng ta cảm giác thoải mái đối với những ngôn ngữ này might look like. Trong các kết quả tiếp theo, chúng ta nghiên cứu phần kết luận rõ ràng hơn.
Một ngôn ngữ là không đệ quy đếm được
Vì mọi ngôn ngữ được mô tả trong một hướng thuật toán có thể được đoán nhận bởi một máy Turing và do đó là đệ quy đếm được, sự mô tả của một ngôn ngữ không đệ quy đếm được phải là gián tiếp. Tuy nhiên, nó là có thể. Vấn đề này bao gồm một sự biến thiên ở trong đề tài chéo hóa.
Định lý 11.3 Tồn tại một ngôn ngữ đệ quy đếm được mà phần bù của nó là không đệ quy đếm được
Chứng minh: Cho ∑ ={a}, và xem như tập hợp tất cả máy Turing với bảng chữ này. Từ tập là đếm được, chúng ta có thể liên hợp với M1, M2,... với các yếu t ố của nó. Đối với mỗi máy Turig Mi có một ngôn ngữ đệ quy đếm được liên hợp L(Mi). Ngược lại, đối với mỗi ngôn ngữ đệ quy đếm được trên ∑ , có một vài máy Turing đoán nhận nó.
Bây giờ chúng ta xây dựng một ngôn ngữ L như sau. Đối với mỗi i>=0, xâu ai là ở trong L nếu và chỉ nếu ai thuộc L(Mi), và do đó ai thuộc L, phải là hoặc đúng hoặc sai. Sau đó chúng ta xem như phần bù của L là:
={ai: ai ọ L(Mi)} (11.1)
Điều nầy được định nghĩa đúng nhưng, như chúng ta thấy,là không đệ quy đếm được.
Chúng ta sẽ thấy điều này vì mâu thuẫn, bắt đầu từ sự cho rằng là đệ quy đếm được. Nếu như vậy thì sẽ có một vài máy Turing gọi là Mk, chẳng hạn
=L(Mk) (11.2)
Lưu ý xâu ak. Nó thuộc L hay . Giả sử rằng ak ọ. Vì (11.2) điều này cho thấy: ak ọ L(Mk).
Nhưng (11.1) lại cho ta: ak ọ.
Ngược lại, nếu chúng ta cho rằng ak là trong l thì ak ọ và (11.2) ngụ ý rằng ak L(Mk).
Nhưng từ (11.1) chúng ta thấy rằng ak ọ.
Mâu thuẫn là không thể tránh được, và chúng ta phải kết luận rằng sự giả định của chúng ta rằng là đệ quy đếm đượclà sai.
Để hoàn thành chứng minh định lý như đã bắt đầu, chúng ta vẫn còn phải chỉ ra rằng L là đệ quy đếm được. Chúng ta có thể sử dụng cho điều đã biết thủ tục đếm được cho máy Turing. Cho ai, đầu tiên chúng ta tìm i bằng cách cộng các số của a’s. Sau đó chúng ta sử dụng thủ tục đếm được đối với máy Turing Mi. Cuói cùng chúng ta đưa ra sự mô tả của nó với ai cho một máy Turing phổ dụng Ma dựa theo hoạt động của M trên ai. Nếu ai ở trong L , sự tính toán mang ra bởi Ma rốt cuộc sẽ dừng. Vì vậy L là đệ quy đếm được.
Chứng minh của định lý này bày tỏ một cách rõ ràng, từ (11.1), xác định đúng một ngôn ngữ là không đệ quy đếm được. Đây không phải để nói rằng có một cách giải thích dễ dàng, trực quan của ; nó sẽ là khó khăn để trình bày hơn một ít thành phần của ngôn ngữ. Tuy nhiên là có thể xác định.
Một ngôn ngữ là đệ quy đếm được nhưng không là đệ quy.
Tiếp theo, chúng ta thấy có một vài ngôn ngữ đệ quy đếm được nhưng không đệ quy. Trở lại, chnúg ta cần làm như vậy trong một cách theo đường vòng. Chúng ta bắt đầu bởi thiết lập một kết quả phụ.
Định lý 11.4 Nếu một ngôn ngữ L và phần bù của nó là đệ quy đếm được thì của hai ngôn ngữ là đệ quy. Nếu L là đệ quy, thì cũng là đệ quy và do đó cả hai là đệ quy đếm được.
Chứng minh: Nếu cả hải L và là đệ quy đếm được thì tồn tại một áy Turing M và M’ cung cấp một thủ tục đếm được tương ứng cho L và . Đầu tiên thủ tục w1, w2,... trong L, thứ hai w’1, w’2,... trong . Giả sử chúng ta cho bất kỳ wọ∑+ . Đầu tiên chúng ta cho M sinh ra w1 va so sánh với w. Nếu chúng là không giống nhau chúng ta co M’ sinh ra w’ và so anhs lại. Nếu chúng ta cần tiếp tục, chúng ta cho M sinh ra w2 rồi M’ sinh ra w’2 và cứ như thế. Bất kỳ wọ∑+ sẽ được sinh ra bởi M hoặc M’, vì vậy cuối cùng chúng ta sẽ thu được sự phù hợp. Nếu xâu phù hợp đó được tạo ra bởi M, w thuộc về L, ngược lại nó thuộc . Quá trình là một thành phần thuật toán cho cả hai L và . Vì vậy chúng là đệ quy.
Đối với vấn đề ngược lại, giả sử L là đệ quy. Tồn tại một thành phần thuật toán cho nó. Nhưng điều này trở thành thành phần thuật toán cho bởi phần bù đơn giản kết luận của nó. Tuy nhiên là đệ quy. Từ đó các ngôn ngữ đệ quy là đệ quy đếm được, đó là điều phải chứng minh.
Từ điều này, chúng ta kết luận trực tiếp rằng họ ngôn ngữ đệ quy đếm được và họ của ngôn ngữ đệ quy là không trùng nhau. Ngôn ngữ L ở trong định lý 11.3 ở trong họ đệ quy đếm được nhưng không đệ quy.
Định lý 11.5 Tồn tại một ngôn ngữ đệ quy đếm được mà không đệ quy. Đó là, họ ngôn ngữ đệ quy là một tập con của họ ngôn ngữ đệ quy đếm được.
Chứng minh: Hãy chú ý ngôn ngữ L trong định lý 11.3. Ngôn ngữ này là đệ quy đếm được nhưng phần bù của nó là không phải. Tuy nhiên, theo định lý 11.4, nó là không đệ quy, Cho chúng ta tìm kiếm ví dụ./
Chúng ta kết luận từ điều này là quả thực có định nghĩa ngôn ngữ cho cái mà không thể xây dựng mọt thành phần thuật toán.
Câu hỏi:
1/ Nếu L là đệ quy, có nhất thiết rằng L+ là đệ quy hay không?
2/ Chọn một dạng mã hóa đặc biệt cho máy Turing, và với nó, hãy tìm một yếu tố của ngôn ngữ ở trong định lý 11.3
11.2 Văn phạm tổng quát.
Để nghiên cứu sự liên quan giữa ngôn ngữ đệ quy đếm được và văn phạm, chúng ta trở lại sự định nghĩa tổng quát của một văn phạm trong chương 1. Trong định nghĩa 1.1, luật sinh được phép lấy từ mọi dạng, nhưng giới hạn khác nhau được làm muộn hơn để lấy một kiểu văn phạm đặc trưng. Nếu chúng ta đưa ra một đạng chung và không đặt ràng buộc, chúng ta sẽ được văn phạm tổng quát.
Định nghĩa 11.3 Một văn phạm G=(V,T,S,P) được gọi là văn phạm tổng quát, nếu tất cả các luật sinh là có dạng u-> v.
Trong đó u ọ (V T)+ và v ọ (V T)*
Trong một văn phạm tổng quát, không cần thiết điều kiện ràng buộc trên các luật sinh. Bất kỳ số lượng biến và ký hiệu kết thúc có thể là bên trái hoặc bên phải, và có thể xuất hiện trong bất kỳ thứ tự nào. Chỉ có một ràng buộc nhỏ: λ không được phép ở phía bên trái của luật sinh.
Như chúng ta thấy, vă phạm tổng quát là rộng hơn rất nhiều so với ngững dạng có ràng buộc như là văn phạm chính quy và phi ngữ cảnh mà chúng ta đã học trước đây. Sự thật, văn phạm tổng quát là tương ứng với họn ngôn ngữ lớn nhất chúng ta có thể hy vọng nhận ra bằng một máy tưởng tượng, đó là văn phạm tổng quát sinh ra chính xác họ ngôn ngữ đệ quy đếm được. Chúng ta thấy điều này ở trong hai phần: Thứ nhất là khá không phức tạp nhưng thứ hai bao gồm một cấu trúc dài dòng.
Định lý 11.6 Bất kỳ một ngôn ngữ được sinh bởi văn phạm tổng quát là đệ quy đếm được.
Chứng minh: Văn phạm trong kết quả định nghĩa một thủ tục liệt kê tất cả các xâu ở trong ngôn ngữ có hệ thống. Ví dụ, chnúg ta có thể liệt kê tất cả w trong L như sau:
S w
đó là, w được bắt nguồn từ một bước. Từ tập hữu hạn quy tắc của văn phạm sẽ có một số hữu hạn xâu. Tiếp theo chúng ta liệt kê tất cả w ở trong L đó có thể là được bắt nguồn trong hai bước.
S x w
và cứ như vậy. Chúng ta có thể giả sử dẫn suất này ở trên máy Turing và cho nên có một thủ tục đếm được cho ngôn ngữ. Do đó nó là đệ quy đếm được.
Phần này tương ứng giữa ngôn ngữ đệ quy đếm được và văn phạm tổng quát là không ngạc nhiên. Văn phạm sinh ra một xâu bằng một thuật toán xử lý, vì vậy dẫn suất có thể được thực hiện trên máy Turing. Để chỉ ra vấn đề ngược lại, chúng ta mô tả bằng cách nào máy Turing có thể bắt chước bởi một tổng quát. Điều này là không phải dễ, minh chứng là sự dài dòng và kỷ thuật, mặc dù những ý tưởng cơ bản là đơn giản. Đối với lý do này, đầu tiên chúng ta mô tả những đường nét cơ bản cấu trúc bằng cái mà chúng ta tìm một văn phạm từ một máy Turing đã cho. Sau đó chúng ta minh họa nó với một ví dụ đơn giản. Cả đường nét cơ bản và ví dụ cụ thể phải được hiểu đúng trước khi tiến hành chứng minh và chi tiết của cấu trúc này.
Chúng ta được cho một máy Turing M, và từ nó, chúng ta muốn xây dựng một văn phạm G, sao cho L(G)=L(M) . Điều này có nghĩa là chúng ta muốn có
S Gw
For exactly those for which
q0w Mxqfy
Ta hoàn thành điều này bằng cách xây dựng G vì vậy có một sự tương ứng giữa chuỗi mô tả ngay lập tức của M và những dạng câu nhận được từ G. Trên thực tế, vì M bắt đầu với w trong khi suy dẫn kết thúc tại đó, sự suy dẫn sẽ có kết quả là tính toán của M trong một thứ tự ngược lại. Cũng từ suy dẫn bắt đầu với S, chúng ta phải bắt đầu suy dẫn nó từ một câu từ đặc trưng trạng thái dừng xqfy, từ đây ta suy dẫn q0w. Cái gì chúng ta muốn là để xây dựng G, như sau:
S xqfy q0w
nếu và chỉ nếu w ọ L(M). Có một vài rắc rối trong này. Một là chúng ta thực sự muốn có S w, và chúng ta cần bỏ q0. Đối với điều này, ta đưa vào một ký hiệu đặc biệt #, cái mà có liên quan với một trạng thái thay đổi trong mô tả tức thời. Trong cách này nó có thể bị loại trừ ở bước cuối cùng. Hơn nữa sự rắc rối có thể đến từ có thể trống rỗng ở giữa mô tả tức thời, đây cũng phải loại trừ cuối cùng bằng văn phạm. Khi ta đặt tất cả những yêu cầu này lại với nhau, chúng ta tìm được văn phạm G sẽ phải có nhiều tập luật sinh:
1/ Một tập cho phép tất cả các suy dẫn có dạng
S # xqfy
đối với tất cả x,y và trạng thái kết thúc qf với cách trống ở bên trái và phải của # #xqfy
2/ Một tập cho phép suy dẫn
# xqfy #q0w
bất cứ khi nào q0w Mxqfy
3/ Một tập để loại trừ #q0 và các cách trống nếu có.
Ví dụ dưới đây minh họa bằng cách nào có thể được thực hiện trong một số chi tiết.
Ví dụ 11.1 Cho M =(Q,,,q0,□,F) là một máy Turing với
Q={q0,q1}
={0,1,□}
={0,1}
F={q1}
and
δ(q0,0) = (q0 , 0 , R),
δ(q0,□) = (q1 , □ , L),
Máy này đoán nhận ngôn ngữ L(00*). Tiếp theo sự gợi ý làm, ta tìm tất cả các yêu cầu được tiếp nhận bởi một văn phạm với
V={ □ , #, q0 , q1 , S, A}
T={0,1}
Tập con thứ nhất của luật sinh là
S -> □S|S□|#A
A -> 0A|1A|A0|A1|q1
Dễ dàng nhận thấy rằng chúng ta có thể dùng những luật sinh này để tạo ra các xâu # xqfy với x,y ọ {0,1}*, đi trước và theo sau bởi một số tùy ý cách trống. Tập thứ hai của luật sinh là
0q0 -> q0 0
q10□ -> 0q0□
q11□ -> 1q0□
q1□ □ -> □q0□
Những luật sinh này phản ánh sự thay đổi tạo ra trong mô tả tức thời bởi định nghĩa δ . Ví dụ, xâu con q00 thay thế 0q0 khi ánh xạ chuyển
δ(q0,0) = (q0 , 0 , R) được sử dụng. Một vài trường hợp test phải thuyết phục bạn rằng luật làm khả năng dẫn xuất x y, bất cứ khi nào y x
Cuối cùng, tập cuối:
#q0 -> λ
□ -> λ
là đủ để loại bỏ #q0 và các cách trống
Bây giờ hãy nhìn vào quá trình đoàn nhận xâu 00
q000 0q0 00q0□ 0q10□
Một suy dẫn tương ứng với G của xâu trên là:
S S□ #A□ #0A□ #0A0□ #0q10□ #00q0□
#0q00□ #q000□#q00000
Bỏ qua những dấu đặc biệt và cách trống, ta thấy rằng phần của suy dẫn là cái chúng ta đã xác nhận, chuỗi của các mô tả tức thời của máy Turing trong một thứ tự đảo ngược.
Ví dụ này cho thấy văn phạm chúng ta làm việc, nhưng không nói rằng nó đến từ đâu, Thực tế kết quả là một ứng dụng của một cấu trúc chung, cái mà bây giờ chúng ta đưa ra.
Định lý 11.7 Đối với mọi ngôn ngữ đệ quy đếm được L, tồn tại một văn phạm tổng quát G sau cho L=L(G).
Chứng minh: Nếu L là đệ quy đếm được thì tồn tại một máy Turing M=(Q,,,q0,□,F) sao cho: q0w Mx1qfx2 với mọi w ọ L
Như đã đề cập, ta xây dựng một văn phạm sao cho có thể tạo ra khi cảm nhận các dạng giới hạn của chuỗi mô tả tức thời trong tình toán này. chúng ta cũng muốn văn phạm đầu tiên nhận được từ hình trạng kết thúc, và tại thời điểm kết thúc, để loại trừ tất cả các ký hiệu thừa từ w. Tất cả điều này có thể được làm bằng cách lấy một văn phạm với T =
và V={- } Q {#} {S,A}
với S và A là ký hiệu không ở trong Q {#}
Ta bắt đầu xây dựng P bằng cách đặt vào nó những luật đủ để cho phép các suy dẫn S □ ... □#xqfy□ ... □
với tất cả x,y trong {-{□}}* và tất cả qf ọ F. Điều này có thể đạt được, ví dụ:
S -> □ S | S□|#A
và A -> aA | Aa | q
với mọi a ọ {-{□}} và q ọ F.
Tiếp theo những sản phẩm dược sử dụng đi từ #xqfy đến q0w. Đối vpới mỗi ánh xạ chuyển của M bao gồm a,b ọ của dạng
δ(qi, a) = (qj , b , R)
chú