PHẦN LÝ THUYẾT NGÔN NGỮ PHI NGỮ CẢNH VÀ NGÔN NGỮ KHÔNG PHI NGỮ CẢNH I .BỔ ĐỀ PUMPING CHO NGÔN NGỮ PHI NGỮ CẢNH (THE PUMPING LEMMA FOR CONTEXTFREE LANGUAGES) Ngôn ngữ phi ngữ cảnh (CFL) có hai tính chất, một tính chất dưới dạng ngôn ngữ và dưới dạng automat đẩy xuống (PDA). Không có cách tiếp cận làm cho ngôn ngữ phi ngữ cảnh trực tiếp, rõ ràng để có ngôn ngữ hình thức mà không phải là phi ngữ cảnh. Tuy nhiên, với ngôn ngữ tự nhiên đưa ra giả thuyết một vài giới hạn của ngữ pháp phi ngữ cảnh (CFG). Bổ đề Puming đã được đưa ra trước đó từ thực tế một chuỗi nhập đủ dài gây ra hiện tượng automat hữu hạn chuyển đổi qua một vài trạng thái. Từ sự quan sát này cho phép kết luận một chuỗi bất ký x có thể được viết dưới dạng x = uvw, trong đó tất cả các chuỗi ở dạng uviw cũng chấp nhập bởi automat hữu hạn. Trong trường hợp CFL, nó dễ dàng để đạt được một kết quả có thể so sánh với việc sử dụng ngữ pháp thay vì sủ dụng PDA. Tuy nhiên, cách này cũng nảy sinh những vấn đề tương tự. Giả sử một dẫn xuất trong một CFG G liên quan đến một biến A nhiều hơn một lần được biểu diễn như sau: S vAz vwAyz vwxyz trong đó, v, w, x, y, z . Nói cách khác, A x, nhưng A wAy là tốt. Có thể viết: S vAz vwAyz vw2Ay2z vw3Ay3z … và x có thể được dẫn xuất từ mỗi A, từ đó có thể kết luận rằng tất cả chuỗi vxz, vwxyz, vw2xy2z, ... thuộc L(G). Để có được bổ đề nhảy, bấy giờ cần phải chỉ ra rằng sự lắp lại của biến trong dẫn xuất của mọi chuỗi đủ dài trong L(G). Vấn đề này cũng có lợi để tăng vài giới hạn trên các chuỗi v, w, x, y, và z cũng giống như trên các chuỗi v, u và w trong trường hợp đơn giản hơn. Sự xem xét sẽ được dễ dàng dàng hơn nếu có thể giả sử một cây biểu diễn dẫn xuất là cây nhị phân, với nghĩa đơn giản là không có nút nào có nhiều hơn 2 nút con. Vấn đề này có thể được bảo đảm bằng cách trình bày ngữ pháp dưới dạng chuẩn Chomsky. Kết quả là, có thể mất chuỗi rỗng từ ngôn ngữ nhưng không phải là vấn đề vì kết quả mong muốn chỉ bao gồm các chuỗn dài. Một đường đi trong cây nhị phân hoặc là rỗng hoặc bao gồm một nút, một trong những hậu duệ của nó, và tất cả các nút trung gian. Chiều dài của đường đi là số nút của đường đi, và chiều cao của cây nhị phân là chiều dài của đường đi dài nhất. Việc nhận được một biến để lặp lại trong một dẫn xuất được thực hiện bằng cách cho biến đó xuất hiện 2 lần trên cùng đường đi trong cây dẫn xuất, sao cho bảo đảm một đường đi đủ dài. Bổ đề sau (8.1) chỉ ra rằng, một đường đi đủ dài là chắc chắn xảy ra nếu chiều dài của chuỗi (nghĩa là số nút trong bất kỳ cây dẫn xuất) là đủ lớn. Bổ đề 8.1 Cho h 1, một cây nhị phân có nhiều hơn 2h 1 nút lá thì phải có độ cao lớn hơn h.
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO ĐẠI HỌC ĐÀ NẴNG
- -ĐỀ TÀI TIỂU LUẬN
VÀ NGÔN NGỮ KHÔNG PHI NGỮ CẢNH, VIẾT CHƯƠNG
TRÌNH RAM CHUẨN VÀ RAM THÔ SƠ KIỂM TRA ĐIỀU
KIỆN CÁC SỐ a,b,c CHO TRƯỚC MỘT CÁCH NGẪU NHIÊN
LẦN LƯỢT LÀ CÁC CẠNH CỦA TAM GIÁC THƯỜNG
Trang 2
PHẦN LÝ THUYẾT NGÔN NGỮ PHI NGỮ CẢNH VÀ NGÔN NGỮ
mà không phải là phi ngữ cảnh Tuy nhiên, với ngôn ngữ tự nhiên đưa ra giảthuyết một vài giới hạn của ngữ pháp phi ngữ cảnh (CFG)
Bổ đề Puming đã được đưa ra trước đó từ thực tế một chuỗi nhập đủ dàigây ra hiện tượng automat hữu hạn chuyển đổi qua một vài trạng thái Từ sựquan sát này cho phép kết luận một chuỗi bất ký x có thể được viết dướidạng x = uvw, trong đó tất cả các chuỗi ở dạng uviw cũng chấp nhập bởiautomat hữu hạn Trong trường hợp CFL, nó dễ dàng để đạt được một kếtquả có thể so sánh với việc sử dụng ngữ pháp thay vì sủ dụng PDA Tuynhiên, cách này cũng nảy sinh những vấn đề tương tự Giả sử một dẫn xuấttrong một CFG G liên quan đến một biến A nhiều hơn một lần được biểudiễn như sau:
S * vAz * vwAyz * vwxyz trong đó, v, w, x, y, z * Nói cách khác, A * x, nhưng A * wAy là tốt Có thể viết:
S * vAz * vwAyz * vw 2 Ay 2 z * vw 3 Ay 3 z * …
Trang 3và x có thể được dẫn xuất từ mỗi A, từ đó có thể kết luận rằng tất cả chuỗi vxz, vwxyz,
vw 2 xy 2 z, thuộc L(G).
Để có được bổ đề nhảy, bấy giờ cần phải chỉ ra rằng sự lắp lại của biếntrong dẫn xuất của mọi chuỗi đủ dài trong L(G) Vấn đề này cũng có lợi đểtăng vài giới hạn trên các chuỗi v, w, x, y, và z cũng giống như trên cácchuỗi v, u và w trong trường hợp đơn giản hơn
Sự xem xét sẽ được dễ dàng dàng hơn nếu có thể giả sử một cây biểudiễn dẫn xuất là cây nhị phân, với nghĩa đơn giản là không có nút nào cónhiều hơn 2 nút con Vấn đề này có thể được bảo đảm bằng cách trình bàyngữ pháp dưới dạng chuẩn Chomsky Kết quả là, có thể mất chuỗi rỗng từngôn ngữ nhưng không phải là vấn đề vì kết quả mong muốn chỉ bao gồmcác chuỗn dài
Một đường đi trong cây nhị phân hoặc là rỗng hoặc bao gồm một nút,
một trong những hậu duệ của nó, và tất cả các nút trung gian Chiều dài củađường đi là số nút của đường đi, và chiều cao của cây nhị phân là chiều dàicủa đường đi dài nhất Việc nhận được một biến để lặp lại trong một dẫnxuất được thực hiện bằng cách cho biến đó xuất hiện 2 lần trên cùng đường
đi trong cây dẫn xuất, sao cho bảo đảm một đường đi đủ dài Bổ đề sau (8.1)chỉ ra rằng, một đường đi đủ dài là chắc chắn xảy ra nếu chiều dài của chuỗi(nghĩa là số nút trong bất kỳ cây dẫn xuất) là đủ lớn
Bổ đề 8.1
Cho h 1, một cây nhị phân có nhiều hơn 2h -1 nút lá thì phải có độ caolớn hơn h
Trang 4Chứng minh: Để chứng minh bổ đề, sử dụng phương pháp quy nạp
dựa vào h để chứng minh mệnh đề phản chứng: Nếu chiều cao của cây nhịphân không lớn hơn h thì số nút lá sẽ không lớn hơn 2h -1
Thật vậy, với h = 1, dễ thấy bằng cây nhị phân có chiều cao là 1 sẽ cónút không nhiều hơn 1 và do đó sẽ có không nghiều hơn 1 nút lá (21-1 = 1 nútlá)
Giả sử với h = k 1, cây nhị phân có chiều cao nhỏ hơn hoặc bằng k
sẽ không nút lá không nhiều hơn 2k – 1 Phải chứng minh, mệnh đề đúngvới trường hợp h = k+1, nghĩa là cây T có chiều cao k+1 thì số nút lá sẽ
2k
Cho cây T với chiều cao không lớn hơn k+1
Nếu nút của cây T <=1, thì cây T sẽ có nut lá <=1 <=2k
Ngược lại, cả hai cây bên trái và phải của T sẽ có có chiều cao <= k, do
đó theo giải thuyết quy nạp sẽ có nút lá của mỗi cây con sẽ <=2k-1
Định lý 8.1
Cho ngữ pháp phi ngữ cảnh G = (V, , S, P) thuộc dạng chuẩnChomsky, với tổng số biến p Chuỗi u L(G) với |u| 2p+1 có thể được biểudiễn dưới dạng u = vwxyz, với các chuỗi u, w, x, y và z thoả mãn:
|wy| > 0
|wxy| 2 p+1 , với m, m 0: vw m xy m z L(G)
Chứng minh: Theo bổ đề 8.1, cây dẫn xuất từ u có chiều cao nhỏ nhất
là p+2 (có nhiều hơn 2p nút lá, say ra có chiều cao lớn hơn p+1) Chúng taxem xét đường đi có chiều dài tốt đa và xem xét ở phần dưới cùng, bao gồmmột nút lá và p + 1 nút trên nó Mỗi p + 1 nút tương ứng với một biến, và vì
Trang 5vậy chỉ tồn tại p biến khác nhau, vài biến A phải xuất hiện 2 lần trong phầnnày của đường đi Cho x là một phần của u u xuất phát từ A đến gần nhất lá
và cho t = wxy là phần của u xuất phát khác A Nếu v và z đại diện cho phần
mở đầu và kết của u, chúng ta có u = vwxyz Minh họa trong hình 8.1
Đường đi xuất phát từ gần nhất A đến gốc trong phần này có thể đượcxem là gốc của cây dẫn xuất từ wxy Ví chúng ta bắt đầu với một đường đi
có chiều dài lớn nhất, cây này sẽ có chiều cao ít hơn hoặc bằng p + 2; do đó,theo bổ đề, |wxy| 2p + 1 Nút chứa A sẽ có hai con, tương ứng với 2 biến.Nếu chúng ta cho B biểu thị nút không phải là tổ tiên của nút A, sau đó xđược bắt nguồn từ nút khác nút A đó, chuỗi cuối cùng dẫn xuất từ B khôngcồng chéo với x Nó sinh ra hoặc w hoặc w, và do đó |wy| > 0
Cuối cùng,
S * vAz * vwAyz * vwxyz
Cũng như trong trường hợp của Bổ đề Puming trước đó, nó là hữu ích
để phát biểu kết quả để nhấn mạnh những tính năng cần thiết
Trang 6Hình 8.1
Định lý 8.1a (Bổ đề Puming cho ngôn ngữ phi ngữ cảnh)
Cho ngôn ngữ phi ngữ cảnh L, tồn tại số nguyên n sao cho với mọi u
L thoả mãn |u| n thì tồn tại các chuỗi v, w, x, y và z thoả mãn:
u = vwxyz
|wy| > 0
|wxy| n với m, m 0: vw m xy m z L
Trang 7Chứng minh
Có thể tìm CFG trong CNF sinh ra ngôn ngữ L – {} Gọi p là số biếntrong ngữ pháp này và n = 2p+1, thì theo định lý 8.1, kết quả là là một hệ quảtrực tiếp
Cũng như trong chương 5, để sử dụng bổ đề Puming đúng yêu cầu mộtvài chú ý Nếu chúng ta cho L không là ngôn ngữ phi ngữ cảnh, chúng ta giả
sử rằng tồn tại một CFG tạo ra L và cố gắng để dẫn đến mâu thuẫn Định lý8.1a cho rằng tồn tại một số nguyên n; bởi vì chúng ta không biết nó là gì vàbởi vì chúng ta chỉ có thể áp dụng vào định lý một chuỗi u với chiều dài lớnhơn hoặc bằng n, u chúng ta chọn sẽ là định nghĩa trong thuật ngữ của n.Tiếp theo, một là chúng ta chọn u, định lý cho chúng ta biết chỉ ở đó tồn tạimột chuỗi v, w, x, y, và z; bởi vì chúng ta không biết nó là gì chỉ có cáchduy nhất đó là tiếp nhận mâu thuẫn từ bốn tính chất của chuỗi đó là chọn bất
kỳ của v, w, x, y, z thỏa mãn bốn tính chất dẫn đến mâu thuẫn
Bây giờ chúng ta có một cách hiển thị một ngôn ngữ không phải làngôn ngữ phi ngữ cảnh, sắp xếp ngôn ngữ như thế nào để có triển vọng?Theo chương 7, một máy hữu hạn trạng thái với bộ nhớ phụ trong ngăn xếp
là đủ cho việc tổ chức một CFL Nếu chúng ta có thể tìm thấy ngôn ngữ chomột ngăn xếp đơn dường như là không đủ, từ sự thay đổi đó chúng ta sẽ có
sự sắp xếp đúng Một vài ví dụ cho sự sắp xếp đầy đủ là ngôn ngữ của chuỗi
ở công thức (i)i (xem ví dụ 7.4) mà dễ dàng được gọi là aibi a’s được lưutrong ngăn xếp vì thế số của a’s có thể so sánh với số của b’s Vào lúc tất cảb’s trùng khớp với a’s, thì ngăn xếp trống, có nghĩa là máy đã quên là có baonhiêu Do đó, phương pháp này là không đủ để cho việc tổ chức chuỗi củacông thức aibici Mặc dầu việc quan sát đó là hiển nhiên không có nghĩa là
Trang 8chứng minh, nó đủ cho việc làm ứng cử viên hợp lý cho ví dụ đâu của chúngta.
vw2xy2z chứa sự kiện xảy ra thêm trong w và y; Do đó nó không thể chứabằng số của cả 3 ký tự Tuy nhiên, theo biểu thức (8.4), vw2xy2z L Đây làmột mâu thuẫn, và giả định của chúng ta rằng L là một CFL không thể đúng
Chú ý để có được mâu thuẫn, chúng ta bắt đầu với u L và cho thấy
vw2xy2z không chỉ là một thành phần, không chỉ của L mà còn của ngôn ngữlớn hơn
L1 = {u {a,b,c}*| na(u) = nb(u) = nc(u)}
Do đó, chứng minh của chúng ta cũng chỉ chứng minh L1 không phải làCFL
Ví dụ 8.2
Cho
L = { ss | s {a, b}* }
Trang 9Ngôn ngữ này cũng tương tự như ngôn ngữ hiển nhiên, một trong cácngôn ngữ của palin-dromes, mà là một CFL: Trong cả hai trường hợp, đểnhận ra một chuỗi trong ngôn ngữ, máy cần nhớ nửa đầu để có thể so sánh
nó với nửa thứ hai Đối với palin-dromes, nguyên tắc vào cuối, ra đầu(LIFO) là một cách tiếp cận thích hợp Đối với L, tuy nhiên, khi chúng tagặp phải những ký hiệu đầu tiên trong nửa thứ hai (ngay khi giả định rằngkhi chúng ta biết khi nào thì gặp phải nó), ký hiệu chúng ta cần phải so sánh
nó với là ký hiệu vào đầu tiên, không phải là cuối – nói cách khác, nó đượcđặt ở dưới cùng của ngăn xếp Ở đây một lần nữa, lập luận rằng cách tiếpcận rõ ràng liên quan đến một PDA không làm việc không giống như chứngminh rằng một PDA không thể được thực hiện để làm việc Thay vào đó,chúng ta áp dụng bổ đề Puming
Giả sử L là một CFL, và cho n là số nguyên trong Định lý 8.la Lầnnày, sự lựa chọn của u là không rõ ràng, chúng ta thử cho u = anbnanbn Giả
sử v, w, x, y, và z là các chuỗi đáp ứng biểu thức (8.l) – (8.4) Chúng ta phảitìm ra được mâu thuẫn từ các sự kiện mà không thực hiện bất kỳ giả địnhkhác về năm chuỗi trên
Như trong ví dụ 8.1, các điều kiện trong biểu thức (8,2) cho chúng tabiết wxy có thể chồng lên nhau nhiều nhất là hai trong bốn nhóm tiếp giápcủa ký hiệu Chúng ta hãy xem xét một vài trường hợp
Trước tiên, giả sử w hay y có chứa ít nhất một a từ nhóm đầu tiên củaa’s Vì |wxy| ≤ n, cả w và y cũng không thể chứa bất kỳ ký hiệu từ nửa saucủa u Xét m = 0 trong điều kiện của biểu thức (8.4) Việc bỏ qua w và y lànguyên nhân dẫn đến ít nhất một a ban đầu được bỏ qua và không ảnhhưởng đến nửa thứ hai Nói cách khác,
Trang 10uw°xy°z = aibjanbn
trong đó i < n và j ≤ n Nếu chuỗi này là một dạng của ss (nghĩa là, nếu nóthuộc L), thì trừ khi i = 0, s sẽ phải bắt đầu với a (từ s đầu tiên) và kết thúcbằng b (từ thứ hai) Điều này rõ ràng là không thể Nếu i = 0, tuy nhiên, thìchuỗi là bnanbn, và điều này không phải là dạng của ss cho bất kỳ s Vìuw°xy°z L, chúng ta có một mâu thuẫn trong trường hợp này
Tiếp theo, giả sử wxy không chứa a's từ nhóm đầu tiên nhưng mà whoặc y có chứa ít nhất một b từ nhóm đầu tiên của b's Một lần nữa, chúng taxem xét m = 0; thời gian này chúng ta có thể nói rằng:
Cũng như trong ví dụ 8.1, tồn tại các ngôn ngữ khác mà cơ bản giống chứng minh trước Hai ví dụ trong trường hợp này là {aibiaibi | i ≥ 0} và{aibjaibj | i, j ≥ 0} Một bằng chứng tương tự cho thấy rằng {scs | s {a, b}*}cũng không là ngôn ngữ phi ngữ cảnh Các đánh dấu ở giữa có thể xuất hiện
để loại bỏ sự cần thiết cho nondeterminism; tuy nhiên, những vấn đề cơ bản
là ngăn chặn một PDA từ việc công nhận ngôn ngữ này vẫn còn hiện nay
Trang 11Trong chứng minh kiểu này, tồn tại nhiều sai sót tiềm tàng Nó khôngđược rõ ràng để lựa chọn chuỗi u Trong ví dụ 8.2, anbnanbn chắc chắn khôngphải là sự lựa chọn đúng, nhưng cũng có nhiều sự lựa chọn sẽ không làmviệc (bài tập 8.2).
Một khi u được chọn, việc quyết định những trường hợp để xem xét cóthể là một vấn đề Một cách đơn giản trong ví dụ 8.2, có thể xem xét trongbảy trường hợp:
1 wy chỉ chứa a’s từ nhóm đầu tiên
2 wy chứa a’s từ nhóm đầu tiên và b’s từ nhóm đầu tiên
3 wy chỉ chứa b's từ nhóm đầu tiên
Cuối cùng, một khi bạn có một trường hợp cụ thể để xem xét, bạn vẫnphải chọn những giá trị của m để sử dụng để có được một mâu thuẫn Trongtrường hợp đầu tiên trong ví dụ 8.2, nó không cần thiết phải chọn m = 0; tuynhiên, chuỗi vw0xy0z có lẽ là dễ dàng hơn để mô tả chính xác hơn chuỗi
vw2xy2z Trong một vài trường hợp, cách chọn m = 0 sẽ không làm việc
Trang 12nhưng sẽ lựa chọn m> 1 thì được Trong một số trường hợp khác, ngược lại
Nếu w hoặc y có chứa ít nhất một a, sau đó wy không thể chứa bất kỳc's Vì vậy, vw2xy2z chứa ít nhất là nhiều a và c, và kết quả là không thể cótrong L Nếu không w nor y chứa một a, sau đó vw0xy0z vẫn còn chứa n a;bởi vì wy chứa một trong hai biểu tượng khác, vw0xy0z chứa lần xuất hiện íthơn mà biểu tượng hơn so với u và do đó không phải là trong L Chúng ta đã
có được một mâu thuẫn và có thể kết luận rằng L không là phi ngữ cảnh
Lưu ý rằng {aibjck | i < j và i < k} có thể biểu thị không là phi ngữ cảnh do các đối số chính xác như nhau.
Ví dụ 8.4
Các tính năng của ngôn ngữ lập trình C mà chúng ta xem xét trongphần 5.5, đó là ngôn ngữ phổ biến, có thể được quan tâm bởi các CFG.Trong chương 6, chúng ta đã thấy các ví dụ khác về cách thức mà các CFG
có thể mô tả nhiều cú pháp của ngôn ngữ cấp cao như vậy Các CFG khôngthể làm điều này hoàn toàn, tuy nhiên: Có một số quy định trong các ngôn
Trang 13ngữ mà phụ thuộc vào ngữ cảnh, và định lý 8.1a cho chúng ta cho thấy rằng
L của tất cả các chương trình C không phải là CFL
Một nguyên tắc cơ bản trong C là một biến phải được khai báo trướckhi nó được sử dụng Kiểm tra quy tắc này được tuân theo quy tắc căn bảngiống như việc xác định liệu một chuỗi nhất định có dạng xcx, trong đó x lànhận dạng và c là chuỗi xuất hiện giữa các mẫu của x và sử dụng nó Nhưchúng ta đã xem xét trong ví dụ 8.2, ngôn ngữ {xcx | x € {a,b}* } không phải
là CFL Mặc dù chúng ta đang sử dụng một bảng chữ cái lớn hơn, và ckhông còn là một ký hiệu duy nhất, vấn đề cơ bản là như nhau, định danhcung cấp được phép tùy tiện lâu dài Chúng ta hãy cố gắng sử dụng bổ đềPuming để chứng minh rằng L không phải là CFL (Đừng lo lắng nếu bạnkhông quen với C, vì các chương trình chúng ta sẽ xem xét, bạn không cần
lo lắng)
Giả sử rằng L là một CFL, và cho n là số nguyên trong Định lý 8.1a.Chúng ta cần chọn một chuỗi u trong L mà có độ dài ít nhất là n, bao gồm cảkhai báo một biến và một tham khảo riêng, kế tiếp tới biến Sau đây là phátbiểu:
main () {int aa a; aa a;}
với cả hai định danh đều có n a Tuy nhiên, cho một lý do kỹ thuật cái đó sẽkhông đề cập lâu nữa, chúng ta làm phức tạp chương trình bởi việc bao gồmhai sự tham khảo kế tiếp tới biến thay vì một
main () {int aa a; aa a; aa a;}
ở đây nó được giả thiết rằng cả 3 cái đó định danh đều có là an Có mộtkhoảng trống trong chương trình, sau int, và nó là cần thiết để tách ra Mọi
Trang 14thứ có thể được nói trong chương trình này là nó sẽ làm cho chương trìnhdịch nhanh hơn, có lẽ với một cảnh báo Nó khai báo một biến số nguyên;rồi, hai lần, nó ước lượng biểu thức có giá trị là duy nhất (giá trị có lẽ là bỏ
đi bởi vì chương trình có không khởi tạo biến), và không làm gì với giá trị.Theo bổ đề Puming, u = vwxyz, với biểu thưc (8.2) – ( 8.4) được thỏamãn Đặc biệt, vw0xy0z giả định để là một chương trình C hợp lệ Tuy nhiên,đây là không thể xảy ra Nếu wy chứa rỗng hoặc bất kỳ ký hiệu trước nó, thìvxz vẫn còn chứa đựng ở tối thiểu hầu hết biến đầu tiên giá trị duy nhất, vàkhông có main () {int và khoảng trống, nó không thể là đúng cú pháp.Chúng ta đặt vế trái với trường hợp trong đó wxy là một chuỗi con của an,
an, an Nếu wy chứa dấu chấm phẩy hoặc trong ngoặc, thì chuỗi vxy cũngkhông hợp pháp Phải chăng nó chứa đựng một trong số hai dấu chấm phẩytrung gian, và có lẽ vxy, rồi những phần của một hoặc cả hai người điều tra
lý lịch trên mọi cạnh có hai người điều tra lý lịch, mà bây giờ không phải làcũng như thế Cuối cùng, nếu wy chứa đựng duy nhất vxz, rồi một phầntrong những người điều tra lý lịch và không gì khác làm dịu có một khai bốbiến và những hai biểu thức kế tiếp gồm có một người điều tra lý lịch, thìtuy nhiên, ba người điều tra lý lịch không tất cả là cũng như thế Trong cảhai trường hợp cuối cùng này, khai báo trước – mới sử dụng tài nguyênđược
Chúng ta kết luận rằng vxz không phải là một chương trình C đúng
và bởi vậy L đó không phải là một CFL
(Lý lẽ gần như làm việc với chương trình ngắn hơn chỉ có hai biếnngười điều tra lý lịch, nhưng không khá Trường hợp mà trong đó nó bỏquên là trường hợp trong đó wy chứa đựng dấu chấm phẩy đầu tiên vàkhông gì khác Việc xóa nó vẫn còn để cho lập trình việc lập trình hợp lệ,
Trang 15mấu chốt ở đơn giản một khai bố một biến với một tên dài hơn Việc thêmnhiều sự sao chép cũng hợp pháp bởi vì chúng làm được giải thích nhờnhững sự phát biểu “trống rỗng” vô hại).
Ở đó những ví dụ những quy tắc cú pháp mà có sự xâm phạm khôngthể được phát hiện ra bởi một PDA Chúng ta ghi chú trong ví dụ 8.2 rằng{anbmanbm} không phải là một CFL và chúng ta có thể tưởng tượng một tìnhhuống mà có thể đoán nhận một chuỗi kiểu này là cần thiết khi được yêucầu Giả thiết hai hàm đó f và g được định nghĩa, có n và m tham số hìnhthức, tương ứng Sau đó số tham số trong lời gọi phải thoả với những sốtham số trong định nghĩa tương ứng
Trong phần tiếp theo của mục này, chúng ta bàn luận về một sự tổngquát hoá bổ đề Puming, một dạng yếu của vấn đế này đuợc biết là bổ đềOgden Mặc dù bổ đề Puming cung cấp thông tin về những chuỗi w và yđược Puming – trong biểu thức (8.2) và (8.3) – nói về vị trí những chuỗi connày trong chuỗi u Bổ đề Ogden làm cho nó là có thể để chỉ định những vị trínhất định của u như “riêng biệt” và để bảo đảm cho những phần cuối trongthư viện ít nhất một vài vị trí đặc biệt này Như một kết quả, nó đôi khi tiệnlợi hơn bổ đề Puming, và thỉnh thoảng nó có thể đơợc sử dụng khi bổ đềPuming không dùng được
Định lý 8.2 (Bổ đề Ogden)
Cho rằng L là một ngôn ngữ chính quy Rồi có một số nguyên n để mànếu u là chuỗi bất kỳ trong L của chiều dài n hoặc lớn hơn, và bất kỳ n nàohoặc nhiều vị trí hơn của u được chỉ định trong khi ở đó, rồi " phân biệt " lànhững chuỗi mà v,w,x,y và z thỏa mãn:
u = vwxyz ( 8.5)
Trang 16wy chứa đựng ít nhất một vị trí đặc biệt ( 8.6) wxy chứa đựng không hơn n phân biệt những vị trí ( 8.7)
x chứa đựng ít nhất một vị trí đặc biệt ( 8.8) cho mỗi m >= 0, vwmxymz thuộc L ( 8.9)
Chứng minh
Đúng như trong chứng minh của bổ đề Puming, Để cho n = 2 p +1, nơi p
là số của những biến trong một ngữ pháp CNF phát sinh L - { A } Nghĩrằng u là một chuỗi trong L trong đó n hoặc nhiều vị trí hơn rõ ràng nhưđược phân biệt Để thu được chuỗi v, w, x, y, và z, Chúng ta bắt đầu nhưviệc trước, bởi việc lựa chọn đường đi cho cây u mà một vài biến xuất hiệnhai lần Một lần chúng ta xác định hai nút tương ứng tới A, nếu chúng tamặc định năm chuỗi chính xác trước đó, nó đi theo Eqs đó ( 8.5) và ( 8.9)giữ Chỉ ba thuộc tính khác phụ thuộc vào đường đi mà chúng ta đã chọn, vàbởi vậy chính điều này chúng ta cần phải mô tả
Bắt đầu ở đỉnh, đường đi chứa đựng nút gốc, tương ứng với S Chomỗi nút n phía trong trong đường đi, chúng ta mở rộng đường đi xuống dướimột bước nữa bởi việc lựa chọn nút con của n có lớn hơn số điểm phân biệt
ở những vị trí giữa những con của nó Bây giờ chúng ta nói rằng một nútphía trong trên đường đi này là một điểm nhánh nếu cả hai nút con của nó có
ít nhất một đường phân biệt xuống Nó đi theo mỗi nhánh mà điểm ở dướimột đỉnh có một nửa ít nhất trong khi nhiều nút con đặc biệt như nhánh chỉ ởtrên nó trong đường đi Sử dụng kết quả này, chúng ta thu được định lý sau(tương ứng với Định lý 8.1 trong mẫu trái ngược của nó), sẽ chúng ta khôngchứng minh được
Trang 17Bổ đề 8.2
Nếu cây nhị phân gồm có một nút trên đường đi và những nút con của
nó có h hoặc một vài nhánh, thì những nút lá của nó không bao gồm hơn 2h
nút phân biệt
Chứng minh
Sự chứng minh bởi sự cảm ứng và điều thực tế từ Định lý 8.1, chấpnhận rằng số điểm nhánh được sử dụng theo chiều cao, và số nút lá đặc biệtcủa cây được sử dụng thay vì toàn bộ số lá của cây Lý do mà sự phát biểukéo theo 2h hơn là 2h - 1 là số điểm nhánh nhiều nhất ở đáy cây có hai hơn làmột
Kết luận sự chứng minh của Định lý 8.2 Bởi vì có n nút lá phân biệttrong cây, và n > 2p, Định lý 8.2 ngầm hiểu rằng phải hơn những điểm nhánh
p trong đường đi Cho rằng có p +1 điểm trên xuống dưới trong đường đi, vàcây con mà có gốc là nút cao nhất Bởi vì ở đó chỉ có biến p là hợp lý, ítnhất hai điểm nhánh này có cùng biến Bây giờ chúng ta định nghĩa nămchuỗi v, w, x, y, và z dưới dạng hai nút này chính xác như trong chứng minhcủa bổ đề Puming Tính chất (8.6) đi theo từ định nghĩa của điểm nhánh, vàbiểu thức (8.7) là một hệ quả của Định lý 8.2 Công thức (8.8) là thật rõràng vì A là điểm đáy của nhánh Như chúng ta quan sát trước đó, hai tínhchất trong chứng minh của bổ đề Puming
Chú ý rằng bổ đề Puming thường thì đồng nhất tới trường hợp đặc biệtcủa định lý 8.2 trong đó tất cả các vị trí của u được phân biệt
Ví dụ 8.5