Làm thế nào để chứng minh rằng một ngôn ngữ không thường xuyên?


75

Chúng tôi đã học về lớp ngôn ngữ thông thường . Nó được đặc trưng bởi bất kỳ một khái niệm nào trong số các biểu thức chính quy, automata hữu hạn và ngữ pháp tuyến tính trái, vì vậy thật dễ dàng để chỉ ra rằng một ngôn ngữ nhất định là thông thường.R E GREG

Làm thế nào để tôi hiển thị ngược lại, mặc dù? TA của tôi đã kiên quyết rằng để làm như vậy, chúng tôi sẽ phải hiển thị cho tất cả các biểu thức chính quy (hoặc cho tất cả các automata hữu hạn hoặc cho tất cả các ngữ pháp tuyến tính trái) mà chúng không thể mô tả ngôn ngữ trong tay. Đây dường như là một nhiệm vụ lớn!

Tôi đã đọc về một số bổ đề bơm nhưng có vẻ rất phức tạp.

Đây được dự định là một câu hỏi tham khảo thu thập các phương pháp chứng minh thông thường và các ví dụ ứng dụng. Xem ở đây cho cùng một câu hỏi về ngôn ngữ không ngữ cảnh.

Câu trả lời:


60

Bằng chứng mâu thuẫn thường được sử dụng để chỉ ra rằng một ngôn ngữ không thường xuyên: hãy để một thuộc tính đúng với tất cả các ngôn ngữ thông thường, nếu ngôn ngữ cụ thể của bạn không xác minh , thì đó không phải là ngôn ngữ thông thường. Các thuộc tính sau có thể được sử dụng:P PPP

  1. Bổ đề bơm, như được minh họa trong câu trả lời của Dave ;
  2. Thuộc tính đóng của các ngôn ngữ thông thường (hoạt động tập hợp, ghép nối, sao Kleene, gương, đồng cấu);
  3. Một ngôn ngữ thông thường có một số lượng hữu hạn của lớp tương đương tiền tố, định lý Nerode Myhill .

Để chứng minh rằng ngôn ngữ không thường xuyên sử dụng các thuộc tính đóng, kỹ thuật này là kết hợp với các ngôn ngữ thông thường bằng các thao tác duy trì tính đều đặn để có được ngôn ngữ không thường xuyên, ví dụ: ngôn ngữ cổ điển . Chẳng hạn, hãy để . Giả sử là thường xuyên, vì các ngôn ngữ thông thường được đóng dưới bổ sung, bổ sung của cũng là . Bây giờ, hãy chọn giao điểm của và thường xuyên, chúng ta có không thường xuyên.L L I = { a n b n | n N } L = { a p b q | p q } L L L c L c a b ILLTôi= { aviết sai rồibviết sai rồi| n N }L = { apbq| pq}LLLcLcmộtbTôi

Định lý Nerode Myhill có thể được sử dụng để chứng minh rằng không thường xuyên. Với , . Tất cả các lớp là khác nhau và có vô số đếm được của các lớp như vậy. Là một ngôn ngữ thông thường phải có số lượng lớp hữu hạn, không thường xuyên.Tôi p 0 tôi / một p = { một r b r b p | r N } = tôi . { b p } tôiTôip 0Tôi/ ap= { arbrbp| rN } = tôi. { bp}Tôi


3
Không biết gì về định lý Myhill-Nerode, tuyệt!
Daniil

Wikipedia cũng có một phần về số lượng từ trong một ngôn ngữ thông thường: nếu bạn có thể chứng minh ngôn ngữ của bạn không phù hợp với đặc tính, thì ngôn ngữ của bạn không thường xuyên: en.wikipedia.org/wiki/ Lỗi
Alex ten Brink

@Daniil, các biểu thức chính quy dường như không thể đếm được đối với tôi một công thức không chính thức phổ biến của định lý Myhill-Nerode.
AProgrammer

@AlextenBrink: Đó là gọn gàng. Tôi đoán các hằng số trong tuyên bố là giá trị riêng của Laplacian của máy tự động? Điều này sẽ làm cho một bổ sung tốt đẹp cho các câu trả lời ở đây.
Louis

@Louis: trên thực tế, chúng tôi nhận thấy không có tài liệu tham khảo cho định lý rằng ở tất cả, vì vậy nếu bạn biết thêm về nó ... Xem thêm: cs.stackexchange.com/questions/1045/...
Alex ten Brink

37

Dựa trên câu trả lời của Dave, đây là "hướng dẫn" từng bước để sử dụng bổ đề bơm.

Nhớ lại bổ đề bơm (lấy từ câu trả lời của Dave, dưới dạng Wikipedia):

Hãy để là một ngôn ngữ thông thường. Sau đó, tồn tại một số nguyên (chỉ phụ thuộc vào ) sao cho mọi chuỗi trong có độ dài ít nhất ( được gọi là "chiều dài bơm") có thể được viết là (nghĩa là có thể chia thành ba chuỗi con), thỏa mãn các điều kiện sau:L Ln 1 n 1L Lw wL Ln viết sai rồin viết sai rồiw = x y z w = x yzww

  1. | y | 1| y| 1
  2. | x y | n| xy| n
  3. một "bơm" vẫn còn trong : cho tất cả , . w wL Li 0 i 0x y i z Lx yTôizL

Giả sử rằng bạn được cung cấp một số ngôn ngữ và bạn muốn chứng minh rằng nó không thường xuyên thông qua bổ đề bơm. Bằng chứng trông như thế này:LL

  1. Giả sử rằng thường xuyên.LL
  2. Nếu nó là thường xuyên, thì bổ đề bơm nói rằng tồn tại một số là chiều dài bơm.viết sai rồiviết sai rồi
  3. Chọn một từ cụ thể có độ dài lớn hơn . Phần khó là biết phải dùng từ nào.w L wLnn
  4. Xem xét TẤT CẢ các cách để phân vùng thành 3 phần, , với và không trống. Đối với mỗi trong các cách sau, cho thấy rằng nó không thể được bơm: có luôn tồn tại một số đến nỗi .w ww = x y z w=xyz| x y | n |xy|ny yi 0 x y i z Li0xyizL
  5. Kết luận: từ không thể được "bơm" (cho dù chúng ta chia nó thành như thế nào ) trái ngược với bổ đề bơm, nghĩa là giả định của chúng tôi (bước 1) là sai: không thường xuyên.w wx y z xyzLL

Trước khi chúng ta đi đến một ví dụ, hãy để tôi nhắc lại Bước 3 và Bước 4 (đây là lúc hầu hết mọi người đi sai). Trong Bước 3, bạn cần phải chọn một từ cụ thể trong . viết nó rõ ràng, như "00001111" hoặc " ". Ví dụ cho những thứ không phải là một từ cụ thể: " " hoặc "một từ có 000 làm tiền tố".L La n b nanbn ww

Mặt khác, trong Bước 4, bạn cần xem xét nhiều hơn một trường hợp. Chẳng hạn, nếu thì không đủ để nói , và sau đó đạt đến một mâu thuẫn. Bạn cũng phải kiểm tra và và tất cả các tùy chọn có thể khác.w = 000111 w=000111x = 00 , y = 01 , z = 00 x=00,y=01,z=00x = 0 , y = 0 , z = 0111 x=0,y=0,z=0111x = ϵ , y = 000 , z = 111x=ϵ,y=000,z=111


Bây giờ, hãy làm theo các bước và chứng minh rằng không thường xuyên.L = { 0 k 1 2 kk > 0 }L={0k12kk>0}

  1. Giả sử là thường xuyên.LL
  2. Gọi là chiều dài bơm được đưa ra bởi bổ đề bơm.viết sai rồin
  3. Đặt . (kiểm tra vệ sinh: khi cần thiết. Tại sao từ này? các từ khác cũng có thể hoạt động tốt .. cần một số kinh nghiệm để đưa ra đúng ). Một lần nữa, lưu ý rằng là một từ cụ thể: .w = 0 n 1 2 nw=0n12n | w | > N w w 000 ... 0 n  lần 111 ... 1 2 n  lần
    |w|>nww0000n times11112n times
  4. Bây giờ, hãy bắt đầu xem xét các trường hợp khác nhau để chia thành với và . Vì dù chúng tôi chia như thế nào , sẽ chỉ bao gồm 0 và cũng vậy . Giả sử và . Chúng ta cần xem xét TẤT CẢ các tùy chọn, đó là tất cả các có thể sao cho và . Đối với điều này , bằng chứng cho tất cả các trường hợp này là như nhau, nhưng nói chung nó có thể khác nhau. lấy và xem xétw wx y z xyz| x y | n |xy|n| y | > 0 |y|>0| x y | < n |xy|<nw wx xy y| x | = s |x|=s| y | = k |y|=ks , k s,ks 0 , k 1 s0,k1s + k n s+knLL
    i = 0 i=0x y i z = x z xyiz=xz . từ này KHÔNG có trong vì nó có dạng (bất kể và là gì) và vì , từ này không ở và chúng tôi đạt được mâu thuẫn .LL0 n - k 1 2 n0nk12n s sk kk 1 k1LL
  5. Do đó, giả định của chúng tôi là không chính xác, và không thường xuyên.LL

Một clip youtube giải thích cách sử dụng bổ đề bơm dọc theo cùng một dòng có thể được tìm thấy ở đây


1
Đó là chiều dài bơm trong định nghĩa này!
saadtaame

28

Từ Wikipedia, ngôn ngữ bơm cho các ngôn ngữ thông thường là như sau:

Hãy để L là một ngôn ngữ thông thường. Sau đó, có tồn tại một số nguyên p 1 (chỉ phụ thuộc vào L ) sao cho mỗi chuỗi w trong L có độ dài ít nhất p ( p được gọi là "chiều dài bơm") có thể được viết như w = x y z (ví dụ, w lon được chia thành ba chuỗi con), thỏa mãn các điều kiện sau:Lp1LwLppw=xyzw

  1. | y | 1|y|1
  2. | x y | p|xy|p
  3. cho tất cả i 0 , x y i z L . y là chuỗi con có thể được bơm (loại bỏ hoặc lặp lại bất kỳ số lần nào và chuỗi kết quả luôn nằm trong L ). i0xyizL
    yL

(1) có nghĩa là vòng lặp y được bơm phải có độ dài ít nhất một; (2) có nghĩa là vòng lặp phải xảy ra trong các ký tự p đầu tiên. Không có giới hạn về x và z.

Nói một cách đơn giản, đối với bất kỳ ngôn ngữ thông thường L, bất kỳ từ nào đủ dài w L có thể được chia thành 3 phần. tức là w = x y z , sao cho tất cả các chuỗi x y k z cho k 0 cũng trong L .wLw=xyzxykzk0L

Bây giờ hãy xem xét một ví dụ . Đặt L = { ( 01 ) n 2 nn 0 } .L={(01)n2nn0}

Để chỉ ra rằng điều này không thường xuyên, bạn cần xem xét tất cả các phép phân tách w = x y z trông như thế nào, vì vậy tất cả những điều có thể x, y và z có thể được đưa ra là x y z = ( 01 ) p 2 p (chúng tôi chọn xem xét từ đặc biệt này, có độ dài 3 p , trong đó p là chiều dài bơm). Chúng ta cần xem xét nơi phần y của chuỗi xảy ra. Nó có thể trùng lặp với phần đầu tiên, và do đó sẽ bằng ( 01 ) k + 1 , ( 10 )w=xyzxyz=(01)p2p3ppy(01)k+1k + 1 ,1(01 ) k hoặc0(10 ) k , đối với một số(đừng quên rằng). Nó có thể trùng với phần thứ hai, nghĩa là, với một số. Hoặc nó có thể trùng nhau trên hai phần của từ và sẽ có dạng,,hoặc, vớivà.(10)k+11(01)k0(10)kk 0 | y | 1 y = 2 k k > 0 ( 01 ) k + 1 2 l ( 10 ) k + 1 2 l 1 ( 01 ) k 2 l 0 ( 10 ) k 2 l k 0 l 1k0|y|1y=2kk>0(01)k+12l(10)k+12l1(01)k2l0(10)k2lk0l1

Bây giờ bơm từng cái để có được một mâu thuẫn, đó sẽ là một từ không có trong ngôn ngữ của bạn. Ví dụ: nếu chúng ta lấy , thì bổ đề bơm nói, chẳng hạn, phải bằng ngôn ngữ , cho một lựa chọn thích hợp của và . Nhưng từ này không thể có trong ngôn ngữ là số xuất hiện trước .y = 0 ( 10 ) k 2 l x y 2 z = x 0 ( 10 ) k 2 l 0 ( 10 ) k 2 l z x z 2 1y=0(10)k2lxy2z=x0(10)k2l0(10)k2lzxz21

Các trường hợp khác sẽ dẫn đến số lượng nhiều hơn số lượng hoặc ngược lại, hoặc sẽ dẫn đến các từ không có cấu trúc , ví dụ, có hai số liên tiếp.( 01 ) 2 ( 01 ) n 2 n 0(01)2(01)n2n0

Đừng quên điều đó . Ở đây, thật hữu ích để rút ngắn bằng chứng: nhiều phân tách ở trên là không thể vì chúng sẽ làm cho phần quá dài.| x y | p z|xy|pz

Mỗi trường hợp trên cần phải dẫn đến một mâu thuẫn như vậy, sau đó sẽ là một mâu thuẫn của bổ đề bơm. Voila! Ngôn ngữ sẽ không thường xuyên.


Một ví dụ trong đó giả thuyết là cần thiết. | x y | p|xy|p
Gilles

@Gilles: Tôi thậm chí không chắc câu bạn đã thêm nghĩa là gì.
Dave Clarke

@Gilles: Tôi nghĩ rằng tất cả các phân tách đều có thể, chỉ là sẽ bị chặn. Tôi không chắc nó phải làm gì với độ dài của . k zkz
Dave Clarke

Tât nhiên! Tôi thấy nó bây giờ. Cảm ơn. Tuy nhiên, nó không loại trừ bất kỳ hình thức phân rã nào được đề cập trong câu trả lời; nó chỉ giới hạn những giá trị của và tôi có thể lấy. k lkl
Dave Clarke

1
Số lượng chỉnh sửa đã được thực hiện để trả lời một câu hỏi dễ như vậy khiến tôi tự hỏi tại sao mọi người lại dạy bổ đề bơm là "cách" để chứng minh sự không đều đặn. Vì tò mò, tại sao không lấy chuỗi của bạn thành một cái gì đó như ? Bổ đề bơm cho bạn biết rằng không có giây trong đó, từ đó mâu thuẫn sẽ đơn giản hơn. ( 01 ) 2 p 2 2 p y 2(01)2p22py2
Louis

14

Đối với một ngôn ngữ nhất định L Σ * , chúng ta hãyLΣ

S L ( z ) = n 0 | L Σ n | z nSL( z) = n 0| L Σviết sai rồi| zviết sai rồi

các (bình thường) tạo ra chức năng của L , tức là chuỗi của nó đếm từ mỗi chiều dài.L

Câu lệnh sau giữ [ FlSe09 , p52 ]:

L R E GS L  hợp lýL R E GSL hợp lý

Nghĩa là, S L ( z ) = P ( z )Q ( z ) vớiđa thứcP,Q.SL( z) = P( z)Q ( z)P, Q

Vì vậy, bất kỳ ngôn ngữ có chức năng tạo không hợp lý là không thường xuyên. Thật không may, tất cả các ngôn ngữ tuyến tính cũng có các hàm tạo hợp lý - vì vậy phương pháp này sẽ không hoạt động đối với các ngôn ngữ không thông thường đơn giản hơn. Một nhược điểm khác là việc có được (và cho thấy rằng nó không hợp lý) có thể khó khăn.S LSL

Ví dụ: Xem xét ngôn ngữ của các từ ngoặc đơn được lồng chính xác, tức là ngôn ngữ Dyck . Nó được tạo ra bởi ngữ pháp rõ ràng

S [ S ] S | εS[ S] Sε

có thể được dịch thành phương trình

S ( z ) = z 2 S 2 ( z ) + 1S( z) = z2S2( z) + 1

một giải pháp (một giải pháp có tất cả các hệ số dương) trong đó là

S ( z ) = 1 - 1 - 4 z 22 z 2S( z) = 1 - 1 - 4 z2------2 z2 .

Vì [ Kuic70 ] và không hợp lý, ngôn ngữ Dyck không thường xuyên.S L = S SSL= SS


  1. Bằng chứng cho tuyên bố cho các ngôn ngữ thông thường hoạt động thông qua ngữ pháp và chuyển sang ngữ pháp tuyến tính ngay lập tức (tính giao hoán của phép nhân).

     [FlSe09] Kết hợp phân tích của P. Flajolet và R. Sedgewick (2009) [Kuic70] Về Entropy của ngôn ngữ không ngữ cảnh của W. Kuich (1970)
    


13

Đây là phiên bản mở rộng của câu trả lời của tôi từ đây Sử dụng Bổ đề bơm để chứng minh ngôn ngữ không thường xuyênL = { ( 01 ) m 2 mm 0 }L = { ( 01 )m2mm0} vì đây được coi là câu hỏi tham khảo.

Vì vậy, bạn nghĩ rằng bổ đề bơm có vẻ phức tạp? Đừng lo lắng. Đây là một cách tiếp cận hơi khác, cũng được ẩn trong câu trả lời của @ Romuald. (Câu đố: ở đâu?)

Hãy bắt đầu bằng cách nhớ rằng mọi ngôn ngữ thông thường được chấp nhận bởi một máy tự động trạng thái hữu hạn xác định (DFA). DFA là một đồ thị có hướng hữu hạn trong đó mỗi đỉnh có chính xác một cạnh ngoài cho mỗi chữ cái trong bảng chữ cái. Các chuỗi cung cấp cho bạn một bước đi trong biểu đồ dựa trên một đỉnh có nhãn "bắt đầu" và DFA chấp nhận nếu bước đi này kết thúc tại một đỉnh có nhãn "chấp nhận". (Các đỉnh được gọi là "trạng thái" vì các lĩnh vực toán học khác nhau muốn tạo ra thuật ngữ riêng cho cùng một thứ.)

Với cách nghĩ này, dễ dàng nhận thấy rằng: Nếu các chuỗi và điều khiển DFA về cùng một trạng thái, thì đối với bất kỳ chuỗi , và nào khác , điều khiển DFA về cùng một trạng thái. a b c a c b cabcacbcTại sao? Bởi vì điểm nêu của một bước đi và chuỗi xác định nó xác định kết thúc hoàn toàn.

Đặt hơi khác một chút: Nếu là thường xuyên và các chuỗi và điều khiển một máy tự động nhận dạng đến cùng một trạng thái, thì đối với tất cả các chuỗi , cả và đều ở hoặc không.L a b c a c b c LLabcacbcL

Chúng ta có thể sử dụng điều này để hiển thị các ngôn ngữ không thường xuyên bằng cách tưởng tượng nó và sau đó đưa ra và lái một DFA đến cùng một trạng thái, và để có ngôn ngữ và thì không. Lấy ngôn ngữ ví dụ từ câu trả lời của @ Dave. Hãy tưởng tượng nó là thường xuyên, vì vậy nó có một số DFA nhận ra với các trạng thái . Nguyên tắc hố Pigeon nói rằng ít nhất hai trong số gửi DFA đến cùng trạng thái, giả sử và . Vì , chúng tôi thấy rằng có trong ngôn ngữ vàmột b c một c b c m { ( 01 ) i : 0 i m + 1 } một = ( 01 ) p b = ( 01 ) q p q một 2 p b 2 pabcacbcm{(01)i:0im+1}a=(01)pb=(01)qp qmột 2pb 2p không phải, vì vậy ngôn ngữ này không thể thường xuyên.

Điều tuyệt vời là ví dụ này thực sự là một khuôn mẫu để chứng minh rằng các ngôn ngữ không thường xuyên:

  • Tìm một họ chuỗi với thuộc tính mà mỗi chuỗi có một "đuôi" sao cho có ngôn ngữ và , vì không có.{ a i : i N } t i a i t i a i t j i j{ aTôi: tôi N }tTôimộtTôitTôimộtTôitjtôi j
  • Áp dụng các đối số trên nguyên văn. (Điều này được cho phép, vì luôn có đủ để cho phép bạn gọi Nguyên tắc Lỗ Bồ câu.)một tôimộtTôi

Có những thủ thuật khác, nhưng cách này sẽ dễ dàng thực hiện trên hầu hết các vấn đề bài tập về nhà của bạn.

Chỉnh sửa: Một phiên bản trước đó đã có một số cuộc thảo luận về cách ý tưởng này liên quan đến Bổ đề Bơm.


Tôi không nghĩ rằng việc tái tạo bằng chứng về Bổ đề bơm nói chung là hữu ích, nhưng YMMV. Hiểu bằng chứng là tốt trong mọi trường hợp; nó ngay lập tức được kết nối với một số bao đóng và các thuộc tính thú vị khác của automata hữu hạn và các ngôn ngữ thông thường. Tôi hoàn toàn không đồng ý với câu cuối cùng, mặc dù: lý thuyết automata hoàn toàn không nhàm chán, và nó chắc chắn không phải là phần nhàm chán nhất của các lớp lý thuyết.
Raphael

@Louis Trong câu trả lời của bạn, làm thế nào bạn đưa ra tuyên bố này we see that a2p is in the language and b2p is not, so this language can't be regular.cuối cùng. Xin vui lòng cho tôi một ví dụ
Himanshu

@Himanshu ab đều đưa bạn đến cùng một trạng thái q 1 . Do đó, bất cứ điều gì bạn đọc sau đó ( 2 p ở đây), sẽ đưa bạn đến trạng thái tương tự q 2 , bất kể bạn bắt đầu với điều gì - a hoặc b . mộtbq12pq2mộtb
Al.G.

7

Sau câu trả lời ở đây , tôi sẽ mô tả một phương pháp chứng minh tính không đều đặn dựa trên độ phức tạp Kolmogorv.

Cách tiếp cận này được thảo luận trong "Cách tiếp cận mới đối với lý thuyết ngôn ngữ chính thức của độ phức tạp Kolmogorov" , bởi Ming Li và Paul MB Vitanyi (xem phần 3.1).

Đặt K ( x ) biểu thị độ phức tạp Kolmogorov của chuỗi x , tức là độ dài mã hóa ngắn nhất của máy Turing M , sao cho M ( ϵ ) = x (bất kỳ định nghĩa thông thường nào cũng sẽ làm được). Sau đó, người ta có thể sử dụng bổ đề sau để chứng minh tính không đều đặn:K( x )xMM( ϵ ) = x

KC-đặn : Hãy L Σ * là một ngôn ngữ thông thường, sau đó có tồn tại một hằng số c mà chỉ phụ thuộc vào L , như vậy mà cho tất cả x Σ * , Nếu yn ' t h string (tương ứng với thứ tự tự từ điển ) trong L x = { y Σ * | x y L } , sau đó K ( y ) O ( log n )L Σ*cLx Σ*yviết sai rồi't hLx= { yΣ*| xyL }+ c .K( y) O ( nhật kýn ) + c

Người ta có thể hiểu được (và chứng minh) bổ đề trên như sau, đối với bất kỳ x Σ * , để mô tả n ' t h chuỗi trong L x người ta cần phải xác định:x Σ*viết sai rồi't hLx

  • Máy tự động chấp nhận LL
  • Trạng thái trong máy tự động sau khi xử lý tiền tố xx
  • Chỉ số nviết sai rồi

Kể từ khi chúng ta chỉ cần nhớ trạng thái sau khi xử lý x , và không x chính nó, chúng ta có thể che giấu yếu tố này trong hằng số phụ thuộc vào L . Chỉ số n yêu cầu các bit log n để mô tả và chúng ta nhận được kết quả trên (để hoàn thiện, người ta cần thêm các hướng dẫn cụ thể cần thiết để tạo y , nhưng điều này chỉ thêm một yếu tố không đổi vào mô tả cuối cùng).xxLviết sai rồiđăng nhậpviết sai rồiy

Bổ đề này cho thấy làm thế nào để ràng buộc sự phức tạp Kolmogorov của tất cả các chuỗi đó là thành viên của L x đối với một số ngôn ngữ thông thường Lx Σ * . Để thể hiện tính không đều đặn, người ta có thể giả sử L là chính quy và chứng minh rằng các giới hạn quá hạn chế (ví dụ độ phức tạp Kolmogrov bị ràng buộc đối với một chuỗi các chuỗi vô hạn).LxLx Σ*L

Câu trả lời được liên kết ở trên có một ví dụ về cách sử dụng bổ đề này để hiển thị L = { 1 p | p là số nguyên tố } không thường xuyên, một số ví dụ khác được đưa ra trong bài báo. Để đầy đủ, chúng tôi chỉ ra ở đây cách chứng minh L = { 0 n 1 n | n 0 } là không thường xuyên.L = { 1p| p là số nguyên tố}L = { 0viết sai rồi1viết sai rồi| n0}

Đưa ra một số x { 0 , 1 } * , chúng ta biểu thị bởi y x i các i ' t h từ trong L x . Lưu ý rằng y 0 i 1 = 1 i . Sử dụng bổ đề trên, tập trung vào tiền tố x có dạng x = 0 i và sửa n = 1 , chúng ta thu được i 0 : K ( y 0 i 1x { 0 , 1 }*yxTôiTôi't hLxy0Tôi1= 1Tôixx = 0Tôin = 1) c . Vì y 0 i 1 = 1 i , điều này có nghĩa là chúng ta có thể ràng buộc độ phức tạp Kolmogorov của tất cả các chuỗi có dạng 1 i bằng một hằng số, điều này rõ ràng là sai. Điều đáng nói là chúng ta có thể kiểm tra một đơn x , ví dụ: x = 0 n cho đủ lớn n mà đáp ứng K ( 0 n ) log n (chúng tôi bắt đầu với một tiền tố phức tạp cao). Vì y x 1 = 1 n , chúng tôi nhận đượci 0 : K( y0Tôi1) cy0Tôi1= 1Tôi1Tôixx = 0viết sai rồiviết sai rồiK( 0viết sai rồi) logviết sai rồiyx1= 1viết sai rồiK ( 1 n ) < c , mâu thuẫn (giả sử n > 2 c ).K( 1viết sai rồi) < cn > 2c


7

Trong trường hợp ngôn ngữ đơn nguyên (ngôn ngữ trên bảng chữ cái cỡ 1), có một tiêu chí đơn giản. Hãy để chúng tôi khắc phục một bảng chữ cái { σ } , và cho A N , xác định L ( A ) = { σ n : n A } .{ σ}Một N

L ( A ) = { σviết sai rồi: N A } .

Định lý. Hãy Một N . Sau đây là tương đương:Một N

  1. L ( A ) là thường xuyên.L ( A )

  2. L ( A ) không có ngữ cảnh.L ( A )

  3. Có tồn tại n 0 , m 1 sao cho với mọi n n 0 , nó cho rằng n A khi và chỉ khi n + m A . (Chúng tôi nói rằng A cuối cùngđịnh kỳ .)viết sai rồi0, M 1n n0n An + m AMột

  4. Hãy để một i = 1 i A . Sau đó 0. một 0 một 1 một 2 ... là hợp lý.mộtTôi= 1i A0. một0một1một2Giáo dục

  5. Chức năng tạo Σ i A x i là một chức năng hợp lý.Σi AxTôi

Định lý có thể được chứng minh bằng nhiều cách, ví dụ bằng cách sử dụng Bổ đề bơm, lý thuyết Myhill-Nerode, định lý Parikh của, cấu trúc của DFAs trên ngôn ngữ unary (họ trông giống như một " ρ ", như trong Pollard của ρ thuật toán), và vân vân . Đây là một hệ quả hữu ích.ρρ

Hệ quả. Đặt A N và giả sử L ( A ) là thường xuyên.Một NL ( A )

  1. Giới hạn ρ = lim n | Một { 1 , ... , n } |n tồn tại (Đây làmật độ tiệm cậncủaA.)ρ = limn | Một{1,...,n} |viết sai rồiMột

  2. Nếu ρ = 0 thì A là hữu hạn.ρ = 0Một

  3. Nếu ρ = 1 thì A là cofinite (có nghĩa là, ¯ Một là hữu hạn).ρ = 1MộtMột¯¯¯¯

Như một ví dụ, ngôn ngữ L ( { 2 n : n 0 } ) là không bình thường, vì các thiết lập đã biến mất mật độ tiệm cận, nhưng là vô hạn.L ( { 2viết sai rồi: n 0 } )


4

Các lớp ngôn ngữ thông thường được đóng lại dưới các hoạt động đóng khác nhau, chẳng hạn như liên kết, giao nhau, bổ sung, đồng cấu, thay thế thường xuyên, đồng cấu nghịch đảo, v.v. Điều này có thể được sử dụng để chứng minh rằng một ngôn ngữ nhất định không thường xuyên bằng cách rút gọn thành ngôn ngữ vốn được coi là không thường xuyên.

Như một ví dụ rất đơn giản, giả sử rằng chúng ta đều biết rằng ngôn ngữ { một n b n : n 0 }{ aviết sai rồibviết sai rồi: n 0 } là không thường xuyên. Sau đó, chúng ta có thể chứng minh rằng ngôn ngữ { w { một , b } * : # một ( w ) = # b ( w ) }{ w { a , b }*: #một( w ) = #b( w ) } (ngôn ngữ của tất cả các từ với bình đẳng nhiều mộtmột s và bb s) là không thường xuyên như sau:

Giả sử L = { w { a , b } : # a ( w ) = # b ( w ) }L = { w { a , b }*: #một( w ) = #b( w ) } đều đặn. Sau đó L một * b *L a*b* cũng sẽ được thường xuyên. Nhưng L một * b * = { một n b n : n 0 }L a*b*= { aviết sai rồibviết sai rồi: n 0 } , được biết đến không phải là thường xuyên.

Đây là một ví dụ phức tạp hơn. Hãy để chúng tôi chứng minh rằng ngôn ngữ L ' = { ( 0 + 1 ) n 2 ( 0 + 1 ) n : n 0 }L'= { ( 0 + 1 )viết sai rồi2 ( 0 + 1 )viết sai rồi: n0 } là không thường xuyên.

Hãy hh được ánh xạ đồng cấu do h ( 0 ) = 0h ( 0 ) = 0 , h ( 1 ) = 1h ( 1 ) = 1 , h ( 2 ) = εh ( 2 ) = ε . Nếu L 'L' là bình thường thì như vậy sẽ ngôn ngữ sau là: h ( L '0 * 21 * ) = { 0 n 1 n : n 0 }h ( L'0*21*) = { 0viết sai rồi1viết sai rồi: n 0 } . Tuy nhiên, chúng tôi biết rằng sau này không thường xuyên.

Cuối cùng, đây là một ví dụ sử dụng phép đồng hình nghịch đảo. Hãy để chúng tôi chứng minh rằng ngôn ngữ L " = { 0 n 10 n : n 0 }L′ ′= { 0viết sai rồi10viết sai rồi: n 0 } là không thường xuyên.

Gọi kk là phép đồng hình được cho bởi k ( 0 ) = 0k ( 0 ) = 0 , k ( 1 ) = 0k ( 1 ) = 0 , k ( 2 ) = 1k ( 2 ) = 1 . Nếu L "L′ ′ là thường xuyên sau đó như vậy sẽ k - 1 ( L " )k- 1( L′ ′) được, nhưng đó chỉ là ngôn ngữ L 'L' từ ví dụ trước.


3

Sử dụng lý thuyết Myode của Nerode.

Hãy để LL là một ngôn ngữ. Chúng ta nói rằng hai chữ x , yx,yinequivalent modulo LL (hoặc: đối với với LL ) nếu tồn tại một chữ zz như vậy mà chính xác một trong x z , y zxz,yz là trong LL . Trong bất kỳ DFA cho LL , δ ( q 0 , x ) δ ( q 0 , y )δ(q0,x)δ(q0,y) (tập thể dục). Điều này ngụ ý các tiêu chí sau:

Hãy để LL là một ngôn ngữ. Giả sử tồn tại một tập hợp vô hạn các từ không tương đương theo cặp (nghĩa là một tập hợp vô hạn SS sao cho hai bất kỳ xx,yS không bằng x , y S đều không tương đương modulo LL ). Thì L không đều đặn.

Dưới đây là một ví dụ đơn giản về việc áp dụng tiêu chí này:

Ngôn ngữ L = { một n b n : n 0 } là không thường xuyên.

Bằng chứng. Đặt S = { a n : n 0 } . Chúng tôi tuyên bố rằng bất kỳ hai từ khác nhau trong S là modulo L không tương đương . Thật vậy, hãy để a i , a jS , trong đó i j . Sau đó, một i b iL nhưng một i b jL .

Một tính năng quan trọng của phương pháp này là nó được đảm bảo để thành công: nếu L không đều đặn thì tồn tại một tập hợp vô hạn các từ không tương đương theo cặp. Đây là một hệ quả của định lý Nerode Myhill . Tóm lại, modulo tương đương L (phủ định của modulo L không tương đương được định nghĩa ở trên) là một mối quan hệ tương đương, và một ngôn ngữ L là thường xuyên nếu số lớp tương đương của modulo L tương đương là hữu hạn. Nếu L không thường xuyên, lấy một từ trong mỗi lớp tương đương sẽ tạo thành một tập hợp vô hạn các từ không tương đương.


1

Cho một ngôn ngữ L , cho mỗi chuỗi x có là một tập hợp các chuỗi y như rằng x y L . Mỗi bộ như vậy có thể được sử dụng như một trạng thái trong một máy trạng thái.

Tất cả bạn cần làm là chỉ ra rằng số lượng các bộ như vậy là không hữu hạn.

Như một ví dụ, chúng ta hãy L = một n b n : n 0 . Với x = một n b đối với một số n 1 , chuỗi chỉ y như rằng x y Ly = b n - 1 . Vì vậy, với mỗi n chúng ta có một bộ khác nhau, có nghĩa là L không thường xuyên.

Vì vậy, nói chung, nếu bạn tìm thấy một chuỗi x vô hạn sao cho mỗi x cung cấp một tập { y : x y L } khác nhau thì ngôn ngữ không thể được nhận ra bởi một máy trạng thái hữu hạn và do đó không phải là chính quy.


Đây không phải chỉ là Myhill-Nerode sao?
David Richerby
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.