Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 22 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
22
Dung lượng
286 KB
Nội dung
Chương 7. VănphạmvàngônngữhìnhthứcChương 7 NGÔNNGỮHÌNHTHỨCVÀVĂNPHẠMSINH Trong các chương 7, 8, 9 chúng ta sẽ nghiên cứu về ngônngữhình thức, trong đó chủ yếu là các lớp ngônngữ phi ngữ cảnh vàngônngữ chính quy. Sẽ nghiên cứu trên 2 phương diện : • Thiết bị tự động sinh hoặc đoán nhận ngônngữ : Trọng tâm xem xét là các vănphạm (sinh) và ôtômat (đoán nhận). • Tính chất của các lớp ngônngữ phi ngữ cảnh (Context-Free Grammar) và chính quy (Regular Grammar). Các ngônngữ trên đóng vai trò quan trọng trong thiết kế các ngônngữ lập trình vàchương trình dịch. I. NGÔNNGỮHÌNHTHỨC 1. Khái niệm về ngônngữNgônngữ là phương tiện giao tiếp giữa người và người, người và máy, máy và máy. Ngônngữ tự nhiên có cú pháp phong phú nhưng ngữ nghĩa không chặt chẽ. Để giao tiếp giữa người và máy hoặc máy và máy cần có ngônngữ với vănphạm chặt chẽ hơn mà ta gọi là ngônngữhình thức. 2. Các yếu tố cơ bản của ngônngữhìnhthức • Bảng chữ cái : là một tập hợp Σ hữu hạn, khác rỗng. Mỗi phần tử được gọi là một kí tự. Ví dụ : Σ = bảng kí tự tiếng Anh. Σ = {0, 1} … • Xâu ký tự (từ) : Dãy hữu hạn liên tiếp các kí tự của bảng chữ cái Σ. Ví dụ : beautiful, 0010110, … Độ dài của một xâu là số kí tự trong xâu. Nếu kí hiệu ω là một xâu thì l(ω) là độ dài của xâu. Xâu rỗng được kí hiệu là λ và có độ dài là 0. • Ngônngữ : Là một tập hợp bất kỳ các từ trên bảng chữ cái Σ. Tập tất cả các từ (kể cả từ rỗng) trên Σ được kí hiệu Σ*. Kí hiệu Σ + = Σ* \ {λ}. Các tập {λ} và ∅ được xem là ngônngữ trên bảng chữ cái bất kỳ. Một ngônngữ thường đựoc kí hiệu bởi L, L ⊆ Σ*. Ví dụ : {a, ab, aba, aabb} là một ngônngữ trên bảng chữ cái {a, b}. 1 Chương 7. Vănphạmvàngônngữhìnhthức 3. Các phép toán trên ngônngữ (lấy phần sau) 4. Các bài toán trên ngônngữ Đối với một ngônngữ ta thường quan tâm đến các vấn đề : − Kiểm tra tính rỗng (emptiness), hữu hạn (finite), vô hạn (infinite) của một ngôn ngữ. − Kiểm tra tính thuộc của một xâu đối với một ngônngữ − Sinh xâu bất kỳ của một ngôn ngữ. − Tính đóng của ngônngữ đối với phép toán Để giải quyết các vấn đề này, trước hết ta cần tìm các biểu diễn ngôn ngữ. Ngônngữ thường được biểu diễn bởi vănphạm (sinh) hoặc các máy hìnhthức hữu hạn trạng thái. II. VĂNPHẠMVÀNGÔNNGỮSINH BỞI VĂNPHẠM 1. Định nghĩa vănphạm Để biểu diễn một ngônngữ trên bảng chữ cái cho trước ta có thể thực hiện bằng một trong các cách sau : Cách 1 : Đối với một xâu thuộc ngônngữ đã cho ta có thể chọn một quy cách hoạt độngcủa “thiết bị tự động” để sau một số hữu hạn bước làm việc nó dừng lại vàsinh ra chính xâu đó. Cách 2 : “Thiết bị tự động” có khả năng lần lượt sinh ra tất cả xâu trong ngôn ngữ. Cách 3 : Với một xâu ω cho trước, “thiết bị tự động” có thể cho biết xâu đó có thuộc ngônngữ đã cho hay không ? Trong lý thuyết vănphạm đã chứng minh được 3 cách làm việc trên đối với vănphạm là tương đương nhau. Do đó ta có thể quan tâm chỉ 1 trong 3. ở đây ta sẽ xét cách 1 tức cách mà vănphạmsinh ra các từ, vì vậy ta còn gọi là vănphạm sinh. (Chú ý, việc sinh các từ còn có thể sử dụng nhiều thiết bị khác nhau như ôtômat, vănphạm sinh, máy Turing …, vănphạmsinh được đưa ra bởi Chomsky vào các năm 1956, 1957) Định nghĩa 1 : Vănphạm G là một bộ 4 thành phần G = <Σ, ∆, I, R>, trong đó : • Σ, ∆ là các tập hữu hạn, rời nhau và khác rỗng. Tập Σ được gọi là bảng từ điển cơ bản, mỗi phần tử của nó được gọi là kí tự cơ bản hay kết thúc (terminal). Tập ∆ được gọi là từ điển hỗ trợ, các phần tử của nó được gọi là kí tự hỗ trợ hay không kết thúc (nonterminal). Đặt V = Σ ∪ ∆ được gọi là từ điển dầy đủ. • Kí hiệu I ∈ ∆ được gọi là kí hiệu ban đầu • R là tập các quy tắc, mỗi phần tử của nó có dạng α → β, ở đây α, β là các từ 2 Chương 7. Vănphạmvàngônngữhìnhthức trên từ điển đầy đủ V, α ≠ λ và → là kí hiệu hìnhthức ∉ V (tức α ∈ V + , β ∈ V * ). Định nghĩa 2 : Cho vănphạm G = <Σ, ∆, I, R> và một qui tắc r = α → β ∈ R. Cho ω là một từ trên V. Giả thiết ω có dạng ξ 1 αξ 2 (được gọi là một vị trí hay một xuất hiện của α trong ω). Khi đó ta nói xâu η = ξ 1 βξ 2 nhận được từ ω bằng cách áp dụng qui tắc r. Xâu η được gọi là dẫn được trực tiếp từ ω trong vănphạm G và được kí hiệu là omega |= G η hay đơn giản hơn ω |= η. Định nghĩa 3 : Dãy các xâu D = (ω 0 , ω 1 , …, ω k ) với ω i ∈ V* được gọi là một dẫn xuất của xâu ω k từ ω 0 trong vănphạm G = <Σ, ∆, I, R> nếu ω i-1 |= ω i , với i = 1, 2, …, k. Số k được gọi là độ dài của dẫn xuất D. Dẫn xuất của ω k từ ω 0 trong vănphạm G được kí hiệu ω 0 |-G ω k hay đơn giản hơn ω 0 |- ω k . Hiển nhiên ω |= η ⇒ ω |- η. Nếu ω i nhận được từ ω i-1 bởi qui tắc r thì ta nói qui tắc r được áp dụng ở bước thứ i. 2. Ngônngữ của vănphạm Định nghĩa 4 : Cho vănphạm G = <Σ, ∆, I, R> và D = (ω 0 , ω 1 , …, ω k ) là một dẫn xuất của xâu ω k từ ω 0 trong vănphạm G. Nếu ω 0 = I và ω k ∈ Σ* thì ω k được gọi là một xâu (từ) sinh bởi vănphạm G. Khi đó D được gọi là dẫn xuất đầy đủ trong G. Tập tất cả các từ được sinh bởi vănphạm G được gọi là ngônngữsinh bởi vănphạm G và được kí hiệu L(G). Khi đó : L(G) = {ω | ω ∈ Σ* và I |- G ω}. Ví dụ các ngônngữ {0 n 1} và {01 n } được sinh bởi tập các qui tắc : {I → 0I, I → 1} và {I → I1, I → 0 }. Định nghĩa 5 : Hai vănphạm được gọi là tương đương nhau nếu chúng sinh cùng một ngôn ngữ, tức G và G’ tương đương khi và chỉ khi L(G) = L(G’). III. PHÂN LOẠI VĂNPHẠM CỦA CHOMSKY Định nghĩa 6 : Các loại vănphạm IV. MỘT SỐ VÍ DỤ VỀ VĂNPHẠM VÝ dô 1 : ∅, {λ}, {a 1 , a 2 , …, a n }, Σ+, Σ* VÝ dô 2 : {a n b m }, {a n b n }, {a n b n a m }, {a m b n a n } VÝ dô 3 : Ngônngữ đối xứng gương (tập con của palindrom), Ngônngữ đối xứng. VÝ dô 4 : Ngônngữ gồm các số chính phương. VÝ dô 5 : Ngônngữ trên {a, b} gồm các xâu có số chữ cái a bằng số chữ cái b. 3 Chương 7. Vănphạmvàngônngữhìnhthức Để chứng minh L là một ngônngữ được sinh bởi một vănphạm nào đó là điều rất khó. Nói chung, ta không có một chiến lược chứng minh tổng quát nào cả mà thường dựa vào đặc điểm của vănphạmvà thường sử dụng cách chứng minh qui nạp theo độ dài của xâu kí tự của L. Để chứng minh L = L(G) ta cần phải chứng minh hai vế của khẳng định : i. nếu I |- ω thì ω ∈ L và ngược lại ii. nếu ω ∈ L thì I |- ω nghĩa là mọi dẫn xuất đầy đủ trong G đều chỉ sinh ra xâu thuộc L và mọi xâu thuộc ngônngữ L đều có thể xây dựng được một dẫn xuất đầy đủ trong G. Ta minh hoạ điều này thông qua ví dụ 5 ở trên. Kí hiệu d(a, ω) là số lần xuất hiện của kí tự a trong ω, khi đó L = {ω ∈ {a, b}* | d(a,ω) = d(b,ω)}. Vănphạm G sinh ra L có thể được xây dựng theo 2 cách : Cách 1 : I → aB | bA A → aI | bAA | a B → bI | aBB | b Chứng minh bằng qui nạp theo độ dài của xâu ω các khẳng định sau : i. I |- ω ⇔ d(a, ω) = d(b, ω) ii. A |- ω ⇔ d(a, ω) = d(b, ω) + 1 iii. B |- ω ⇔ d(a, ω) = d(b, ω) – 1 Bước cơ sở : − Với n = 1. i) không xảy ra, còn ii) và iii) đúng vì khi đó ω = a hoặc ω = b. Do đó A |- ω ⇔ A |- a ⇔ d(a, ω) = d(b, ω) + 1 hoặc B |- ω ⇔ B |- b ⇔ d(a, ω) = d(b, ω) – 1 − Với n = 2. ii) và iii) không xảy ra, còn i) đúng vì khi đó ω hoặc bắt đầu là a hoặc b. Do đó : I |- ω có dẫn xuất I, aB, ab hoặc I, bA, ba ⇒ d(a, ω) = d(b, ω). Ngược lại giả thiết d(a, ω) = d(b, ω) ⇒ ω = ab hoặc ω = ba và ta có dẫn xuất như trên. Bước qui nạp : Giả thiết các khẳng định trên đúng với n ≤ k, ta chứng minh đẳng thức cũng đúng với n = k+1. i. Giả thiết ω = aω’. Ta có : I |- ω và I |= aB ⇔ B |- ω’, do giả thiết qui nạp của iii) ⇔ d(a, ω’) = d(b, ω’) - 1 ⇔ d(a, aω’) = d(b, aω’) ⇔ d(a, ω) = d(b, ω). Trường hợp ω = bω’ chứng minh tương tự. ii. Giả thiết ω = aω’. Ta có : A |- ω = aω’ và A |= aI ⇔ I |- ω’, do giả thiết qui nạp 4 Chương 7. Vănphạmvàngônngữhìnhthức của i) ⇔ d(a, ω’) = d(b, ω’) ⇔ d(a, aω’) = d(b, aω’) + 1 ⇔ d(a, ω) = d(b, ω) + 1. Trường hợp ω = bω’. A |- bω’ và A |= bAA ⇔ AA |- ω’, đặt ω’ = ω’ 1 ω’ 2 ⇔ A |- ω’ 1 và A |- ω’ 2 do giả thiết qui nạp của ii) ⇔ d(a, ω’ 1 ) = d(b, ω’ 1 ) + 1 và d(a, ω’ 2 ) = d(b, ω’ 2 ) + 1 ⇔ d(a, ω’) = d(b, ω’) + 2 ⇔ d(a, bω’) = d(b, bω’) + 1 ⇔ d(a, ω) = d(b, ω) + 1. iii. Chứng minh tương tự ii. Từ đó ta thấy i), ii), iii) đúng. Do i) ta có L = L(G). Ví dụ : Tìm dẫn xuất đầy đủ của xâu ω = babbaababa. − I → bA → baI → babA → babbAA → babbaIA → babbabAA → babbabaA → babbabaaB → babbababA → babbababa Cách 2 : I → II | aIb | bIa | ab | ba Ta đưa ra định nghĩa đệ qui của tập xâu kí tự L như sau : i. ab, ba ∈ L ii. Nếu ω ∈ L thì aωb, bωa, ωω cũng thuộc L. iii. Các xâu thuộc L chỉ được tạo từ i. và ii. Và chứng minh rằng xâu ω có d(a, ω) = d(b, ω) khi và chỉ khi ω ∈ L. Chứng minh : 1. Dễ thấy xâu ω được tạo từ i. và ii. luôn luôn có d(a, ω) = d(b, ω). 2. Ngược lại xét bất kỳ xâu có d(a, ω) = d(b, ω), ta cần chứng minh xâu ω ∈ L bằng qui nạp theo độ dài của xâu ω. Bước cơ sở : Xét ω = ab hoặc ω = ba khi đó theo i. ω ∈ L. Bước qui nạp : Giả thiết mọi xâu có độ dài < k và có d(a, ω) = d(b, ω) đều thuộc L. Ta cần chứng minh mọi xâu có độ dài k và có d(a, ω) = d(b, ω) cũng thuộc L. Thật vậy : − Xét ω = aω’b hoặc ω = bω’a ⇒ ω’ cũng có d(a, ω) = d(b, ω) và có độ dài = k-2 < k, do giả thiết qui nạp ⇒ ω’ ∈ L. Theo ii. ta có ω ∈ L. − Xét ω = aω’a. Do d(a, ω) = d(b, ω) nên d(a, ω’) = d(b, ω’) – 2. Dễ thấy có thể chia ω’ thành 2 xâu con ω’ 1 và ω’ 2 sao cho ω = aω’ 1 ω’ 2 a (nếu không sẽ dẫn đến mâu thuẫn với d(a, ω) = d(b, ω)). Trong đó ω 1 = aω’ 1 và ω 2 = ω’ 2 a có số kí tự a = số kí tự b. Theo giả thiết qui nạp ω 1 và ω 2 ∈ L. Theo ii) ⇒ ω ∈ L. Từ đó khẳng định được chứng minh. Dựa trên định nghĩa đệ qui của L ta dễ dàng chứng minh được vănphạm G như đã định nghĩa sinh ra ngônngữ L. 5 Chương 7. Vănphạmvàngônngữhìnhthức Theo định nghĩa trên ta cũng có thể xây dựng dẫn xuất cho các xâu của L như sau : • Nếu xâu ω có dạng aω’b hoặc bω’a thì sử dụng qui tắc I→ aIb hoặc I → bIa (trường hợp ω’ ≠ λ) hoặc qui tắc I→ ab hoặc I → ba (trường hợp ω’ = λ). • Nếu xâu ω có dạng aω’a thì : − Bước 1: sử dụng qui tắc I → II tạm gọi I 1 I 2 . − Bước 2 : Tách xâu ω’ thành ω’ 1 và ω’ 2 sao cho d(a, aω’ 1 ) = d(b, aω’ 1 ) và d(a, ω 2 ’a) = d(b, ω 2 ’a). − Bước 3 : áp dụng đệ qui quá trình trên để I 1 → aω’ 1 , và I 2 → ω’ 2 a. Quá trình chấm dứt khi xâu được sinh hoàn toàn. • Nếu xâu ω có dạng bω’b quá trình thực hiện tương tự dạng aω’a. Ví dụ : Tìm dẫn xuất đầy đủ của xâu ω = babbaababa. − I → babbaababa có dẫn xuất I, bIa − I → abbaabab có dẫn xuất I, aIb − I → bbaaba có dẫn xuất I, bIa − I → baab có dẫn xuất I, II − I → ba có dẫn xuất I, ba − I → ab có dẫn xuất I, ab Tóm lại ta có dẫn xuất cuối cùng là : − I → bIa → baIba → babIaba → babIIaba → babbaIaba → babbaababa V. MỘT SỐ TÍNH CHẤT VỀ VĂNPHẠM Định nghĩa 7 : (Đồng lực của dẫn xuất) Định nghĩa 8 : (Dẫn xuất không lặp) §Þnh lý 1 : Đối với một dẫn xuất bất kỳ luôn tồn tại dẫn xuất không lặp đồng lực với nó. Chøng minh : Cắt bỏ đoạn giữa 2 lần lặp §Þnh lý 2 : ∀G luôn có G’ sao cho : L(G) = L(G’) Chøng minh : Xây dựng G’ như sau : Σ’ = Σ ; I’ = I ∆ = ∆ ∪ ∆’ trong đó ∆’ = { a | a ∈ Σ và a ∉ V} R’ = R 1 ∪ R 2 trong đó R 1 = thay mỗi kí hiệu a trong R bởi a và 6 Chương 7. Vănphạmvàngônngữhìnhthức R 2 = { a → a | ∀a ∈ Σ } Khi đó mọi dẫn xuất có thể chuyển tương đương từ G sang G’ bằng cách thay mọi kí tự a bởi a và kết hợp với luật dẫn a → a. Định nghĩa 9 : (Các phép toán trên ngôn ngữ) : hợp, giao, hiệu, phần bù, nhân ghép và lặp. §Þnh lý 3 : Lớp ngônngữsinh bởi vănphạm là đóng đối với phép hợp, giao và ghép Chøng minh : Cho Gi = <Σ i , ∆ i , Ii, Ri> (i = 1,2). Trong đó giả thiết ∆ 1 ∩ ∆ 2 = ∅ (nếu cần có thể đổi tên các kí hiệu phụ của G 2 . Xây dựng các vănphạm G = <Σ, ∆, I, R> cho các phép toán hợp, nhân ghép và giao như sau : Hợp : Σ = Σ 1 ∪ Σ 2 ; ∆ = ∆ 1 ∪ ∆ 2 ∪ {I} R = R 1 ∪ R 2 ∪ {I → I 1 , I → I 2 } Nhân ghép : Σ = Σ 1 ∪ Σ 2 ; ∆ = ∆ 1 ∪ ∆ 2 ∪ {I} R = R 1 ∪ R 2 ∪ {I → I 1 I 2 } Giao : Σ = Σ 1 ∩ Σ 2 ; ∆ = ∆ 1 ∪ ∆ 2 ∪ Γ 1 ∪ Γ 2 ∪ {I} trong đó : Γ 1 = { a | a ∈ Σ }, Γ 2 = { b | b ∈ Σ 2 } R = R 1 ’ ∪ R 2 ’ ∪ R’’ ∪ R’’’ ∪ {I → I 1 I 2 } trong đó R 1 ’ và R 2 ’ nhận được từ R 1 , R 2 bằng cách thay a bởi a và b bởi b R’’ = { a b → b a | ∀a ∈ Σ 1 , ∀b ∈ Σ 2 } (có |Σ 1 | * |Σ 2 | luật) R’’’ = { a a → a | ∀a ∈ Σ 1 ∩ Σ 2 } (có |Σ 1 ∩ Σ 2 | luật) Chứng minh các ngônngữ hợp và nhân ghép là dễ dàng, việc chứng minh cho ngônngữ giao tương đối phức tạp, do đó ta chỉ đưa ra ý tưởng chứng minh ở đây. • Do ∆ 1 ∩ ∆ 2 = ∅ nên ta thấy việc sinh các từ ω từ I 1 và I 2 là độc lập nhau, mặt khác I → I 1 | I 2 nên từ I có thể sinh ra hoặc ω 1 (nếu I → I 1 ) hoặc ω 2 (nếu I → I 2 ). Ngược lại nếu ω được sinh bởi I 1 hoặc I 2 thì cũng chính là dẫn xuất trong G nếu kết hợp với I → I 1 hoặc I → I 2 . • Tương tự với phép nhân ghép trong đó I 1 đảm nhận việc sinh ra xâu ω 1 và I 2 sinh xâu ω 2 mọt cách độc lập nhau. Do đó, với xâu ω = ω 1 ω 2 nếu I |- ω thì cũng có thể xây dựng được I 1 |- ω 1 và I 2 |- ω 2 , và ngược lại là điều dễ thấy. • Đối với phép giao nếu I 1 |- ω 1 và I 2 |- ω 2 thì có thể xây dựng I |- ω 1 ’ω 2 ’ trong đó ω 1 ’ 7 Chương 7. Vănphạmvàngônngữhìnhthức nhận được từ ω 1 bằng cách thay các kí tự a ∈ Σ 1 bởi a và b ∈ Σ 2 bởi b . Tiếp theo áp dụng các qui tắc của R’’ hoán vị các kí tự a về cùng với a và tiếp tục áp dụng R’’’ để sinh a từ a a . Ngược lại cũng tương tự nếu ω sinh được từ G thì cũng có thể tách được các cặp kí tự a a về theo qui luật sinh của G 1 và G 2 , sau đó tách ω thành ω 1 và ω 2 sinh bởi I 1 và I 2 . VÝ dô 1 : Cho 3 ngônngữ L 1 = {an, n ≥ 0}, L 2 = {bn, n ≥ 0} và L 3 = {cn, n ≥ 0} được sinh bởi các vănphạm G 1 , G 2 và G 3 có : λ→= =∆ =Σ = }|aAA{R A }A{ }a{ G 1 1 1 1 λ→= =∆ =Σ = }|bBB{R B }B{ }b{ G 2 2 2 2 λ→= =∆ =Σ = }|bCC{R C }C{ }c{ G 3 3 3 3 • Khi đó, hợp của L 1 và L 2 là L 4 = {an, bm | n, m ≥ 0} được sinh bởi vănphạm G 4 như sau : λ→λ→→= =∆ =Σ = }|bBB,|aAA,B|AD{R D }B,A,D{ }b,a{ G 4 4 4 4 • Tương tự, hợp của L 2 và L 3 là L 5 = {bn, cm | n, m ≥ 0} được sinh bởi vănphạm G 5 như sau : λ→λ→→= =∆ =Σ = }|cCC,|bBB,C|BE{R E }C,B,E{ }c,b{ G 5 5 5 5 • Khi đó, ngônngữ L 6 = {an, bm, ck | n, m, k ≥ 0} là hợp của 2 ngônngữ L 4 và L 5 sẽ được sinh bởi vănphạm G 6 như sau : λ→→λ→λ→→→= =∆ =Σ = }|cCC,C|BE,|bBB,|aAA,B|AD,E|DI{R I }E,D,C,B,A,I{ }c,b,a{ G 6 6 6 6 8 Chương 7. Vănphạmvàngônngữhìnhthức Chú ý trong G 6 xâu bm có thể sinh bởi 2 cách : I → D → B → bB → … → bmB → bm hoặc I → E → B → bB → … → bmB → bm Tuy nhiên có thể quan niệm L 6 như hợp mở rộng của3 ngônngữ L 1 , L 2 , L 3 từ đó có thể xây dựng G 6 gọn hơn như sau : λ→λ→λ→→= =∆ =Σ = }|cCC,|bBB,|aAA,C|B|AI{R I }C,B,A,I{ }c,b,a{ G 6 6 6 6 VÝ dô 2 : Cho các ngônngữ L 1 , L 2 và L 3 như trong ví dụ 1, khi đó nhân ghép của L 1 và L 2 là L = {anbm | n, m ≥ 0} được sinh bởi vănphạm G như sau : λ→λ→→= =∆ =Σ = }|bBB,|aAA,ABI{R I }B,A,I{ }b,a{ G Tương tự ngônngữ {anbmck | n, m, k ≥ 0} là nhân ghép của 3 ngônngữ L 1 , L 2 và L 3 sinh bởi vănphạm G cũng được xây dựng như sau : λ→λ→λ→→= =∆ =Σ = }|cCC,|bBB,|aAA,ABCI{R I }C,B,A,I{ }c,b,a{ G Ví dụ 3 : Cho ngônngữ L 1 = {anbm | n, m ≥ 0} được sinh bởi vănphạm G 1 : λ→→= =∆ =Σ = }|bAA,A|aII{R I }A,I{ }b,a{ G 111 1 11 1 1 và L 2 = {anb | n ≥ 0} được sinh bởi vănphạm G 2 : →→= =∆ =Σ = }bB,B|aII{R I }B,I{ }b,a{ G 222 2 22 2 2 để xây dựng vănphạm G sinhngônngữ L = L 1 ∩ L 2 = {anb | n ≥ 0 } đầu tiên ta cần xác định các tập kí hiệu phụ : 9 Chương 7. Vănphạmvàngônngữhìnhthức Γ 1 = }b,a{ và Γ 2 = }b,a{ và tập các qui tắc : R 1 ’ = { I 1 → a I 1 | A, A → b A | λ} R 2 ’ = { I 2 → a I 2 | B, B → b } R’’ = { a b → b a , b a → a b } R’’’ = { a a → a, b b → b } Tóm lại ta có vănphạm G như sau : →→→→ →→λ→→→= =∪∪∪∆∪∆=∆ =Σ∩Σ=Σ = }bbb,aaa,baab,abba bB,B|IaI,|AbA,A|IaI,III{R I }b,a,b,a,B,A,I,I,I{}I{}b,a{}b,a{ }b,a{ G 221121 2121 21 Để chứng minh G sinh ra L, ta minh hoạ bằng ví dụ. Lấy ω = aab ∈ L 1 ∩ L 2 , khi đó ω có dẫn xuất đầy đủ D 1 trong G 1 và D 2 trong G 2 như sau : D 1 = (I 1 , aI 1 , aaI 1 , aaA, aabA, aab) D 2 = (I 2 , aI 2 , aaI 2 , aaB, aab) − Từ qui tắc I → I 1 I 2 và dựa trên tập qui tắc R’ 1 , R’ 2 ta thấy dãy kết hợp từ D 1 , D 2 và đổi các kí tự kết thúc thành các kí tự đối ngẫu cũng cho ta một dẫn xuất D trong G, cụ thể : D = (I, I 1 I 2 , …, a a b I 2 , … a a b a a b ) áp dụng tiếp tập qui tắc R’’ hoán vị từ a a b a a b ta được a a a a b b , cuối cùng áp dụng tập qui tắc R’’’ ta được từ a a a a b b |- aab. Như vậy ta đã xây dựng được một dẫn xuất đầy đủ của ω trong G, nói cách khác G cũng sinh ω. Ngược lại, giả thiết G sinh ω = aab, bằng cách xây dựng ngược với chứng minh trên ta cũng xây dựng được dẫn xuất đầy đủ trong G 1 và G 2 . 10