24/05/2018, 21:45

Chuẩn hóa văn phạm phi ngữ cảnh

Phần này sẽ giới thiệu hai định lý dùng chuẩn hóa CFG về một trong hai dạng chuẩn Chomsky và Greibach. Dạng chuẩn Chomsky - CNF (Chomsky Normal Form) ĐỊNH LÝ 5.5 : (Dạng chuẩn Chomsky, hay CNF ) Một ...

Phần này sẽ giới thiệu hai định lý dùng chuẩn hóa CFG về một trong hai dạng chuẩn Chomsky và Greibach.

Dạng chuẩn Chomsky - CNF (Chomsky Normal Form)

ĐỊNH LÝ 5.5 : (Dạng chuẩn Chomsky, hay CNF )

Một ngôn ngữ phi ngữ cảnh bất kỳ không chứa ε đều được sinh ra bằng một văn phạm nào đó mà các luật sinh có dạng A → BC hoặc A → a, với A, B, C là biến còn a là ký hiệu kết thúc.

Chứng minh

Đặt G là CFG sinh ra CFL không chứa ε. CFG tương đương có dạng chuẩn Chomsky có thể xây dựng từ G theo giải thuật sau :

Bước 1 : Thay thế tất cả các luật sinh có độ dài vế phải bằng 1 (luật sinh đơn vị dạng A B, với A, B là biến )

Theo định lý 4.4, ta có thể tìm được CFG tương đương G1(V, T, P, S) không có luật sinh đơn vị và luật sinh ε. Vậy nếu luật sinh mà vế phải chỉ có một ký hiệu thì đó phải là ký hiệu kết thúc và luật sinh này là luật sinh có dạng đúng trong định lý.

Bước 2 : Thay thế các luật sinh có độ dài vế phải >1 và có chứa ký hiệu kết thúc.

Xét luật sinh trong P có dạng A → X1X2 ... Xm (m >1). Nếu Xi là ký hiệu kết thúc a thì ta đưa thêm một biến mới Ca và luật sinh mới Ca → a. Thay thế Xi bởi Ca, gọi tập các biến mới là V’ và tập luật sinh mới là P’.

Xét CFG G2 (V’, T, P’, S). Nếu α G1 β thì α *G2 β. Vậy L(G1) ⊆ L(G2). Ta chứng minh quy nạp theo số bước dẫn xuất rằng nếu A *G2 w, với A V và w T* thì A *G1 w.

Kết quả hiển nhiên với 1 bước dẫn xuất.

Giả sử kết quả đúng tới k bước dẫn xuất.

Xét A * G2 w bằng k +1 bước dẫn xuất.

Bước đầu tiên có dạng A B 1 B 2 ... B m (m > 1). Ta có thể viết w = w 1 w 2 ...w m trong đó B i * G2 w i , 1 i m. Nếu B i là ký hiệu kết thúc a i nào đó thì w i là a i . Theo cách xây dựng P’ ta có luật sinh A X 1 X 2 ... X m của P trong đó X i = B i nếu B i V và X i = a i nếu B i V’- V. Với B i V, ta đã biết rằng có dẫn xuất B i * G1 w i bằng ít hơn k bước, do vậy theo giả thiết quy nạp X i * G1 w i . Vậy A * G1 w.

Ta đã có kết quả là một CFL bất kỳ được sinh ra từ một CFG mà mỗi luật sinh có dạng A a hoặc A B 1 B 2 ... B m (m 2) với A, B 1 , ... ,B m là các biến và a là ký hiệu kết thúc. Ta sửa G 2 bằng cách thêm vào P’ một số luật sinh.

Bước 3 : Thay thế các luật sinh có độ dài vế phải > 2 ký hiệu chưa kết thúc.

Xét luật sinh trong P’có dạng A → B1B2 ... Bm (m > 2) . Ta thay bằng tập hợp các luật sinh : A → B1D1

D1 ® B2D2

...

Dm - 3 ® Bm - 2Dm - 2

Dm - 2 ® Bm - 1Bm

Đặt V’’ là tập các biến mới, P’’ là tập các luật sinh mới và văn phạm mới G3 (V’’, T, P’’, S). Ta có G3 chứa các luật sinh thoả mãn định lý.

Hơn nữa, nếu A *G2 β thì A *G3 β, vậy L(G2) ⊆ L(G3). Ngược lại cũng đúng tức là, L(G3) ⊆ L(G2). Chúng ta cũng đã có L(G2) ⊆ L(G1) và L(G1) ⊆ L(G2). Vậy G3 là văn phạm thoả mãn dạng chuẩn CNF.

Thí dụ 5.12 : Tìm văn phạm có dạng CNF tương đương văn phạm sau :

S ® A | ABA

A ® aA | a | B

B ® bB | b

Bước 1 : Thay thế các luật sinh có độ dài vế phải = 1 (luật sinh đơn vị)

Gọi tập ΔA = {B | A * B }, xét các biến trong văn phạm, ta có :

Δ S = { S, A, B }

Δ A = { A, B}

Δ B = { B }

Vậy tập luật sinh mới, theo định lý sẽ chứa các luật sinh không là luật sinh đơn vị trong P, bổ sung thêm các luật sinh mới thay cho luật sinh đơn vị như sau :

S ® aA | a | bB | b | ABA

A ® aA | a | bB | b

B ® bB | b

Bước 2 : Thay thế các luật sinh có độ dài vế phải > 1 và có chứa ký hiệu kết thúc.

Ta thấy, a và b đều xuất hiện ở vế phải một số luật sinh, do đó ta tạo thêm 2 biến mới Ca, Cb và 2 luật sinh mới Ca ® a và Cb ® b.

Văn phạm tương đương có tập luật sinh như sau :

S ® CaA | a | CbB | b | ABA

A ® CaA | a | CbB | b

B ® CbB | b

Ca ® a

Cb ® b

Bước 3 : Thay thế các luật sinh có độ dài vế phải > 2

Chỉ còn duy nhất một luật sinh cần xét ở bước này : S ® ABA và tập luật sinh mới được thay thế có dạng như sau :

S ® CaA | a | CbB| b | AD1

A ® CaA | a | CbB| b

B ® CbB| b

Ca ® a

Cb ® b

D 1 ® BA

Cuối cùng, ta sẽ thu được văn phạm có dạng chuẩn Chomsky như trên tương đương với văn phạm đã cho.

Dạng chuẩn Greibach GNF (Greibach Normal Form)

Ta gọi luật sinh với biến A ở bên trái là A - luật sinh.

BỔ ĐỀ 3 : (Dùng thay thế các luật sinh trực tiếp)

Cho G (V, T, P, S) là một CFG, đặt A ® α12 là luật sinh trong P và B ® β1 | β2 | ... | βr là các B - luật sinh; văn phạm G1 (V, T, P1, S) thu được từ G bằng cách loại bỏ luật sinh A ® α12 và thêm vào luật sinh A ® α1β1α2 | α1β2α2 | ... | α1βrα2 thì L(G) = L(G1)

Chứng minh

. Hiển nhiên L(G1) ⊆ L(G) vì nếu A ® α1βiα2 được dùng trong dẫn xuất của G1 thì ta dùng A G α12G α1βiα2

. Để chỉ ra L(G) ⊆ L(G1) ta cần chú ý rằng A ® α12 là luật sinh trong P - P1 (có trong G và không có trong G1). Bất cứ khi nào luật sinh A ® α12 được dùng trong dẫn xuất của G thì phải viết lại tại bước sau đó dùng luật sinh dạng B ® βi. Hai bước dẫn xuất này có thể được thay thế bằng một bước dẫn xuất duy nhất, hay :

A ® α12 ⇔ A G1 α1βiα2

B ® βi

Vậy L(G) = L(G1)

BỔ ĐỀ 4 : (Dùng loại bỏ luật sinh dạng đệ quy trái trong văn phạm)

Đặt G (V, T, P, S) là CFG; A ® Aα1 | Aα2 | ... | Aαr là tập các A - luật sinh có A là ký hiệu trái nhất của vế phải (luật sinh đệ quy trái). Đặt A ® β1 | β2 | ... | βs là các A - luật sinh còn lại; G1 (V  {B}, T, P1, S) là CFG được tạo thành bằng cách thêm biến mới B vào V và thay các A - luật sinh bằng các luật sinh dạng:

1) A ® βi

A ® βi B với 1 ≤ i ≤ s

2) B ® αi

B ® αi B với 1 ≤ i ≤ r

thì L(G) = L(G1).

Chứng minh

Trong một chuỗi dẫn xuất trái, một chuỗi luật sinh dạng A ®i phải kết thúc bằng A ® βj. Tức là:

A ⇒ Aαi1 ⇒ Aαi2αi1 ⇒ ... ⇒ Aαipαip-1…αi1 ⇒ βjαipαip-1…αi1

Chuỗi dẫn xuất trong G có thể thay bằng chuỗi dẫn xuất trong G1 bởi :

A ⇒ βj BÞ βj αipB Þ βjαipαip-1…B Þ ... Þ βjαipαip-1…αi2B

Þ βjαipαip-1…αi1.

Sự chuyển đổi ngược lại cũng có thể được.

Vậy L(G) = L(G1).

ĐỊNH LÝ 5.6 : (Dạng chuẩn Greibach, hay GNF )

Mỗi CFL bất kỳ không chứa ε được sinh ra bởi một CFG mà mỗi luật sinh có dạng A → aα với A là biến, a là một ký hiệu kết thúc, và α là một chuỗi các biến (có thể rỗng).

Chứng minh

Bước 1: Đặt G là CFG sinh ra CFL không chứa ε. Xây dựng văn phạm tương đương G’ có dạng chuẩn Chomsky.

Bước 2: Đổi tên các biến trong tập của G’ thành A1, A2, ..., Am (m ≥ 1) với A1 là ký hiệu bắt đầu. Đặt V = {A1, A2, ..., Am}.

Bước 3: Thay thế các luật sinh sao cho nếu Ai → Aj là một luật sinh thì j > i

Bắt đầu từ A1 và tiến tới Am, ta thay thế các Ak - luật sinh :

Nếu Ak → Ajγ size 12{γ} {}là luật sinh với j < k: sinh ra một tập luật sinh mới bằng cách thay thế Aj bên vế phải của mỗi Aj - luật sinh theo bổ đề 3. Lặp lại không quá k - 1 lần ta thu được tập luật sinh dạng Ak → Alγ size 12{γ} {} với l ≥ k.

Sau đó, các luật sinh với l = k được thay thế theo bổ đề 4 bằng cách đưa vào các biến mới Bk.

Giải thuật cụ thể như sau:

Bằng cách lặp lại bước xử lý trên cho mỗi biến nguồn, trong P chỉ chứa các luật sinh có dạng như sau :

1) Ai → Ajγ size 12{γ} {} với j > i

2) Ai → a γ size 12{γ} {} với a Î T

3) Bk ® γ size 12{γ} {}γ size 12{γ} {} Î (V È {B1, B2 , ..., Bi - 1})*

Bước 4: Thay thế các Ai - luật sinh về đúng dạng.

Gọi V’ là tập biến mới phát sinh sau bước 3.

Chú ý rằng ký hiệu trái nhất của vế phải trong một luật sinh bất kỳ đối với biến Am phải là một ký hiệu kết thúc, vì Am là biến có chỉ số cao nhất. Ký hiệu trái nhất của vế phải của một Am-1- luật sinh bất kỳ phải là Am hoặc một ký hiệu kết thúc. Nếu là Am, ta tạo ra tập luật sinh mới bằng cách thay thế Am bởi chuỗi vế phải của các Am-luật sinh theo bổ đề 3. Tiếp tục quá trình này cho các luật sinh từ Am-2, ..., A2, A1 cho tới khi vế phải của tất cả các Ai - luật sinh có dạng bắt đầu bằng một ký hiệu kết thúc.

Bước 5: Thay thế các Bk -luật sinh về đúng dạng.

Bước cuối cùng, ta khảo sát các luật sinh với tập các biến mới B1, B2, ..., Bm.

Vì ta bắt đầu từ văn phạm đã có dạng chuẩn Chomsky, nên dễ dàng chứng minh quy nạp theo số lần áp dụng bổ đề 3 và bổ đề 4 rằng vế phải của mỗi Ai -luật sinh, với 1 ≤ i ≤ n, bắt đầu bằng ký hiệu kết thúc hoặc AjAk với j, k nào đó. Vậy α (trong bước (7)) không khi nào có thể rỗng hoặc bắt đầu bằng một Bj khác, hay tất cả Bi - luật sinh đều có vế phải bắt đầu bằng ký hiệu kết thúc hoặc Ai. Một lần nữa, lại áp dụng bổ đề 3 cho mỗi Bi - luật sinh.

Ta thu được tập luật sinh trong văn phạm sau cùng thỏa đúng dạng chuẩn Greibach.

Thí dụ 5.13 : Tìm văn phạm có dạng GNF tương đương văn phạm G sau :

A1 ® A2A1 | A2A3

A2 ® A3A1 | a

A3 ® A2A2 | b

Bước 1 : G thỏa dạng chuẩn CNF sinh ra CFL không chứa ε

Bước 2 : Ta có V = {A1, A2, ..., A3}

Bước 3 : Thay thế các luật sinh sao cho nếu Ai → Aj  là một luật sinh thì j > i.

Ta thấy trong tập luật sinh, các luật sinh cho A1 và A2 đã thỏa điều kiện j > i. Chỉ có luật sinh A3 ® A2A2 cần sửa đổi. Áp dụng bổ đề 3 để thay thế luật sinh này, ta có: A3 ® A3A1A2 | aA2

Sau đó, dùng bổ đề 4 để loại bỏ đệ quy trái, ta được tập luật sinh mới có dạng như sau :

A1 ® A2A1 | A2A3

A2 ® A3A1 | a

A3 ® aA2 | b | aA2B| bB

B ® A1A2 | A1A2 B

Bước 4 : Thay thế các Ai -luật sinh về đúng dạng.

Ở bước này, ta có thể thấy tất cả các A3 - luật sinh đã có dạng chuẩn. Tiếp tục, áp dụng bổ đề 3 để thay thế các A3 - luật sinh vào A2, A1, thu được tập luật sinh mới như sau:

A1 ® aA2A1A1 | bA1A1 | aA2BA1A1 | bBA1A1 | aA1|

aA2A1A3 | bA1A3 | aA2BA1A3 | bBA1A3 | aA3

A2 ® aA2A1 | bA1 | aA2BA1| bBA1| a

A3 ® aA2 | b | aA2B| bB

B ® A1A2 | A1A2 B

Bước 5 : Thay thế các Bk - luật sinh về đúng dạng.

B ® aA2A1A1A2 | bA1A1A2 | aA2BA1A1A2 | bBA1A1A2 | aA1A2

| aA2A1A3A2 | bA1A3A2 | aA2BA1A3A2 | bBA1A3A2 | aA3A2

|aA2A1A1A2B | bA1A1A2B | aA2BA1A1A2B | bBA1A1A2B | aA1A2 B

| aA2A1A3A2B | bA1A3A2B | aA2BA1A3A2B | bBA1A3A2B | aA3A2B

Cuối cùng, ta thu được văn phạm có dạng GNF với 39 luật sinh.

0