Có (ít nhất) một cách để chứng minh unambiguity của một văn phạm G=(N,T,δ,S) cho ngôn ngữ L . Nó bao gồm hai bước:
- Chứng minh L⊆L(G) .
- Chứng minh [zn]SG(z)=|Ln|.
Bước đầu tiên khá rõ ràng: cho thấy rằng ngữ pháp tạo ra (ít nhất) các từ bạn muốn, đó là tính chính xác.
Bước thứ hai cho thấy có nhiều cây cú pháp cho các từ có độ dài n vì L có các từ có độ dài n - với 1. điều này hàm ý không rõ ràng. Nó sử dụng hàm cấu trúc của G , quay trở lại Chomsky và Schützenberger [1], cụ thể làGnLnG
SG(z)=∑n=0∞tnzn
với số lượng cây cú pháp G có cho các từ có độ dài n . Tất nhiên bạn cần phải có | L n | để làm việc nàytn=[zn]SG(z)Gn| Ln|
Điều tuyệt vời là (thường) dễ dàng có được cho các ngôn ngữ không ngữ cảnh, mặc dù việc tìm một dạng đóng cho t n có thể khó khăn. Biến đổi G thành một hệ phương trình của các hàm với một biến trên nonterminal:SGtnG
⎡⎣A(z)=∑(A,a0…ak)∈δ ∏i=0k τ(ai) :A∈N⎤⎦ with τ(a)={a(z)z,a∈N,a∈T.
Điều này có thể trông đáng ngại nhưng thực sự chỉ là một chuyển đổi cú pháp như sẽ trở nên rõ ràng trong ví dụ. Ý tưởng là tạo ra những biểu tượng thiết bị đầu cuối được tính theo số mũ của và vì hệ thống có dạng tương tự như G , z n xảy ra thường xuyên trong tổng như n thiết bị đầu cuối có thể được tạo ra bởi G . Kiểm tra Kuich [2] để biết chi tiết.zGznnG
Giải hệ phương trình này (đại số máy tính!) Thu được ; bây giờ bạn "chỉ" phải kéo hệ số (ở dạng đóng, chung). Các TCS Cheat Sheet và đại số máy tính thường có thể làm như vậy.S(z)=SG(z)
Thí dụ
Hãy xem xét ngữ pháp đơn giản với các quy tắcG
.S→ một Sa ∣ b Sb | ε
Rõ ràng là (bước 1, chứng minh bằng quy nạp). Có 2 nL (G)={w wR∣ w ∈ { a , b }*} palindromes có độ dàinnếunchẵn,0nếu không.2n2nn0
Thiết lập hệ số phương trình mang lại
S( z) = 2 z2S( z) + 1
giải pháp của ai
.SG( z) = 11 - 2 z2
Các hệ số của trùng với số lượng palindromes, do đó G không rõ ràng.SG G
- Lý thuyết đại số về ngôn ngữ không ngữ cảnh của Chomsky, Schützenberger (1963)
- Về entropy của các ngôn ngữ không ngữ cảnh của Kuich (1970)