Bagaimana cara membuktikan bahwa suatu bahasa tidak teratur?


76

Kami belajar tentang kelas bahasa reguler . Ini dicirikan oleh salah satu konsep antara ekspresi reguler, automata terbatas dan tata bahasa linier kiri, sehingga mudah untuk menunjukkan bahwa bahasa yang diberikan adalah reguler.REG

Bagaimana saya menunjukkan yang sebaliknya? TA saya telah bersikeras bahwa untuk melakukannya, kami harus menunjukkan untuk semua ekspresi reguler (atau untuk semua automata terbatas, atau untuk semua tata bahasa linier kiri) bahwa mereka tidak dapat menggambarkan bahasa yang ada. Ini sepertinya tugas besar!

Saya telah membaca tentang beberapa lemma yang memompa tetapi terlihat sangat rumit.

Ini dimaksudkan sebagai pertanyaan referensi yang mengumpulkan metode bukti biasa dan contoh aplikasi. Lihat di sini untuk pertanyaan yang sama tentang bahasa bebas konteks.

Jawaban:


60

Bukti berdasarkan kontradiksi sering digunakan untuk menunjukkan bahwa suatu bahasa tidak teratur: biarkan properti benar untuk semua bahasa biasa, jika bahasa spesifik Anda tidak memverifikasi , maka itu tidak teratur. Properti berikut dapat digunakan:PPP

  1. Lemma yang memompa, sebagaimana dicontohkan dalam jawaban Dave ;
  2. Sifat penutupan bahasa reguler (operasi yang ditetapkan, gabungan, bintang Kleene, cermin, homomorfisme);
  3. Bahasa reguler memiliki sejumlah terbatas kelas ekivalensi awalan, teorema Myhill – Nerode .

Untuk membuktikan bahwa bahasa tidak teratur menggunakan properti closure, tekniknya adalah menggabungkan dengan bahasa reguler dengan operasi yang menjaga keteraturan agar diperoleh bahasa yang dikenal tidak teratur, misalnya, bahasa dasar . Sebagai contoh, misalkan . Asumsikan adalah reguler, karena bahasa reguler ditutup dengan komplemen demikian juga s melengkapi . Sekarang ambil persimpangan dan bintang yang teratur, kita dapatkan yang tidak teratur.L I = { a n b n | n N } L = { a p b q | p q } L L L c L c a b sayaLLI={anbn|nN}L={apbq|pq}LLLcLcabI

Teorema Myhill – Nerode dapat digunakan untuk membuktikan bahwa tidak teratur. Untuk , . Semua kelas berbeda dan ada tak terhingga jumlah kelas tersebut. Karena bahasa reguler harus memiliki jumlah kelas yang terbatas, tidak teratur.p 0 I / a p = { a r b r b p | r N } = I . { b p } IIp0I/ap={arbrbp|rN}=I.{bp}I


3
Tidak tahu tentang teorema Myhill-Nerode, keren!
Daniil

Wikipedia juga memiliki bagian tentang jumlah kata dalam bahasa reguler: jika Anda dapat membuktikan bahasa Anda tidak sesuai dengan karakterisasi, maka bahasa Anda tidak biasa: en.wikipedia.org/wiki/…
Alex ten Brink

@Daniil, ekspresi reguler tidak dapat dihitung bagi saya perumusan informal populer teorema Myhill-Nerode.
Pemrogram

@AlextenBrink: Itu rapi. Saya kira konstanta dalam pernyataan tersebut adalah nilai eigen dari Laplacian automaton? Ini akan menjadi tambahan yang bagus untuk jawaban di sini.
Louis

@ Louis: sebenarnya, kami tidak menemukan referensi untuk teorema itu sama sekali, jadi jika Anda tahu lebih banyak tentang itu ... Juga lihat: cs.stackexchange.com/questions/1045/…
Alex ten Brink

37

Berdasarkan jawaban Dave, berikut ini adalah "manual" langkah demi langkah untuk menggunakan lemma pemompaan.

Ingat lemma pemompaan (diambil dari jawaban Dave, diambil dari Wikipedia):

Biarkan menjadi bahasa biasa. Kemudian ada bilangan bulat (hanya bergantung pada ) sehingga setiap string dalam panjangnya setidaknya ( disebut "panjang pemompaan") dapat ditulis sebagai (yaitu, dapat menjadi dibagi menjadi tiga substring), memenuhi kondisi berikut:Ln1LwLnnw=xyzw

  1. |y|1
  2. |xy|n dan
  3. sebuah "dipompa" masih dalam : untuk semua , . wLi0xyizL

Asumsikan bahwa Anda diberi beberapa bahasa dan Anda ingin menunjukkan bahwa itu tidak teratur melalui lemma pemompaan. Buktinya terlihat seperti ini:L

  1. Asumsikan bahwa adalah teratur.L
  2. Jika teratur, maka lemma pemompaan mengatakan bahwa ada beberapa angka yang merupakan panjang pemompaan.n
  3. Pilih kata tertentu dengan panjang lebih besar dari . Bagian yang sulit adalah mengetahui kata mana yang harus diambil.wLn
  4. Pertimbangkan SEMUA cara untuk mempartisi menjadi 3 bagian, , dengan dan tidak kosong. Untuk masing-masing dari cara ini, menunjukkan bahwa hal itu tidak dapat dipompa: ada selalu ada beberapa sehingga .ww=xyz|xy|nyi 0 x y i z Li0xyizL
  5. Kesimpulan: kata tidak dapat "dipompa" (tidak peduli bagaimana kita membaginya menjadi ) dalam kontradiksi dengan lemma pemompaan, yaitu, asumsi kami (langkah 1) salah: tidak teratur.wxyzL

Sebelum kita pergi ke contoh, izinkan saya mengulangi Langkah 3 dan Langkah 4 (ini adalah di mana sebagian besar orang salah). Pada Langkah 3 Anda perlu memilih satu kata tertentu di . tuliskan secara eksplisit, seperti "00001111" atau " ". Contoh untuk hal-hal yang bukan kata tertentu: " " atau "kata yang memiliki 000 sebagai awalan".Lanbn ww

Di sisi lain, pada Langkah 4 Anda perlu mempertimbangkan lebih dari satu kasus. Misalnya, jika tidak cukup untuk mengatakan , dan kemudian mencapai kontradiksi. Anda juga harus memeriksa , dan , dan semua opsi lain yang mungkin.w=000111x=00,y=01,z=00x=0,y=0,z=0111x=ϵ,y=000,z=111


Sekarang mari kita ikuti langkah-langkahnya dan buktikan bahwa tidak teratur.L={0k12kk>0}

  1. Asumsikan teratur.L
  2. Biarkan menjadi panjang pemompaan yang diberikan oleh lemma pemompaan.n
  3. Biarkan . (cek kewarasan: sesuai kebutuhan. Mengapa kata ini? kata lain dapat bekerja juga .. butuh beberapa pengalaman untuk menghasilkan tepat ). Sekali lagi, perhatikan bahwa adalah kata khusus: .w=0n12n
    |w|>nww0000n times11112n times
  4. Sekarang mari kita mulai mempertimbangkan berbagai kasus untuk membagi ke dengan dan . Karena tidak peduli bagaimana kami membagi , hanya terdiri dari 0 dan begitu juga . Mari kita asumsikan dan . Kita perlu mempertimbangkan SEMUA opsi, itu semua kemungkinan sedemikian sehingga dan . UNTUK INI bukti untuk semua kasus ini adalah sama, tetapi secara umum mungkin berbeda. ambil dan pertimbangkanwxyz|xy|n|y|>0|xy|<nwxy|x|=s|y|=ks,ks0,k1s+knL i = 0 x y i z = x z LL
    i=0xyiz=xz . kata ini BUKAN dalam karena bentuknya (tidak peduli apa dan adalah), dan karena , kata ini tidak dalam dan kami mencapai kontradiksi .L0nk12nskk1L
  5. Dengan demikian, asumsi kami salah, dan tidak teratur.L

Klip youtube yang menjelaskan cara menggunakan lemma pemompaan di sepanjang garis yang sama dapat ditemukan di sini


1
Ini adalah panjang pemompaan dalam definisi ini!
saadtaame

28

Dari Wikipedia, bahasa pemompaan untuk bahasa biasa adalah sebagai berikut:

Biarkan menjadi bahasa biasa. Kemudian ada bilangan bulat (hanya bergantung pada ) sehingga setiap string dalam panjang setidaknya ( disebut "panjang pemompaan") dapat ditulis sebagai (yaitu, dapat menjadi dibagi menjadi tiga substring), memenuhi kondisi berikut:p 1 L w L p p w = x y z wLp1LwLppw=xyzw

  1. |y|1
  2. |xy|p dan
  3. untuk semua , . adalah substring yang dapat dipompa (dilepas atau diulang beberapa kali, dan string yang dihasilkan selalu dalam ). x y i z L y Li0xyizL
    yL

(1) berarti loop y yang akan dipompa harus memiliki panjang setidaknya satu; (2) berarti loop harus terjadi dalam karakter p pertama. Tidak ada batasan pada x dan z.

Dengan kata sederhana, Untuk bahasa L biasa, kata apa saja yang cukup panjang dapat dibagi menjadi 3 bagian. yaitu , sehingga semua string untuk juga di .w = x y z x y k z k 0 LwLw=xyzxykzk0L

Sekarang mari kita pertimbangkan sebuah contoh . Biarkan .L={(01)n2nn0}

Untuk menunjukkan bahwa ini tidak biasa, Anda perlu mempertimbangkan seperti apa semua dekomposisi , jadi apa semua hal yang mungkin x, y dan z dapat diberikan bahwa (kita memilih untuk melihat kata khusus ini, dengan panjang , di mana adalah panjang pemompaan). Kita perlu mempertimbangkan di mana bagian dari string terjadi. Itu bisa tumpang tindih dengan bagian pertama, dan dengan demikian akan sama dengan , , atau , untuk beberapa (jangan lupa itu ). Itu bisa tumpang tindih dengan bagian kedua, artinyax y z = ( 01 ) p 2 p 3 p p y ( 01 ) k + 1 ( 10 ) k + 1 1 ( 01 ) k 0 ( 10 ) k k 0 | y | 1 y = 2 k k > 0 ( 01 ) k +w=xyzxyz=(01)p2p3ppy(01)k+1(10)k+11(01)k0(10)kk0|y|1y=2k, untuk beberapa . Atau bisa tumpang tindih di dua bagian kata, dan akan memiliki bentuk , , atau , untuk dan .k>0 (10 ) k + 1 2 l 1(01 ) k 2 l 0(10 ) k 2 l k0l1(01)k+12l(10)k+12l1(01)k2l0(10)k2lk0l1

Sekarang pompa masing-masing untuk mendapatkan kontradiksi, yang akan menjadi kata tidak dalam bahasa Anda. Misalnya, jika kita mengambil , lemma pemompaan mengatakan, misalnya, bahwa x y 2 z = x 0 ( 10 ) k 2 l 0 ( 10 ) k 2 l z harus dalam bahasa, untuk pilihan x dan z yang tepat . Tapi kata ini tidak bisa dalam bahasa karena 2 muncul sebelum 1 .y=0(10)k2lxy2z=x0(10)k2l0(10)k2lzxz21

Kasus-kasus lain akan menghasilkan jumlah lebih dari jumlah 2 atau sebaliknya, atau akan menghasilkan kata-kata yang tidak memiliki struktur ( 01 ) n 2 n oleh, misalnya, memiliki dua 0 berturut-turut.(01)2(01)n2n0

Jangan lupa itu . Di sini, berguna untuk mempersingkat buktinya: banyak dari penguraian di atas tidak mungkin karena mereka akan membuat bagian z terlalu lama.|xy|pz

Masing-masing kasus di atas perlu mengarah pada kontradiksi semacam itu, yang kemudian akan menjadi kontradiksi lemma pemompaan. Voila! Bahasa tidak akan teratur.


Contoh dimana hipotesis dibutuhkan akan menyenangkan. |xy|p
Gilles

@Gilles: Saya bahkan tidak yakin apa arti kalimat yang Anda tambahkan.
Dave Clarke

@Gilles: Saya pikir semua dekomposisi adalah mungkin, hanya saja akan dibatasi. Saya tidak yakin apa hubungannya dengan panjang z . kz
Dave Clarke

Duh! Saya melihatnya sekarang. Terima kasih. Namun, itu tidak mengesampingkan salah satu bentuk pembusukan yang disebutkan dalam jawaban; hanya membatasi nilai dan l yang bisa saya ambil. kl
Dave Clarke

1
Jumlah pengeditan yang telah dilakukan untuk menjawab pertanyaan semudah itu membuat saya bertanya-tanya mengapa semua orang mengajarkan lemma pemompaan sebagai "cara" untuk membuktikan ketidakteraturan. Karena penasaran, mengapa tidak mengambil string Anda menjadi sesuatu seperti ? The memompa lemma memberitahu Anda bahwa y tidak memiliki 2 s di dalamnya, dari yang kontradiksi lebih mudah. (01)2p22py2
Louis

14

Untuk bahasa tertentu , biarkanLΣ

SL(z)=n0|LΣn|zn

yang (biasa) menghasilkan fungsi dari , yaitu urutan atas jumlah kata per panjang.L

Pernyataan berikut ini memuat [ FlSe09 , p52 ]:

LREGSL rational

Yaitu, dengan polinomial P,QSL(z)=P(z)Q(z)P,Q

Jadi bahasa apa pun yang fungsi pembangkitannya tidak rasional tidak teratur. Sayangnya, semua bahasa linier juga memiliki fungsi yang menghasilkan rasional¹ sehingga metode ini tidak akan berfungsi untuk bahasa non-reguler yang lebih sederhana. Kelemahan lain adalah bahwa mendapatkan (dan menunjukkan bahwa itu tidak rasional) bisa sulit.SL

Contoh: Pertimbangkan bahasa kata kurung bersarang dengan benar, yaitu bahasa Dyck . Ini dihasilkan oleh tata bahasa yang tidak ambigu

S[S]Sε

yang dapat diterjemahkan ke dalam persamaan

S(z)=z2S2(z)+1

satu solusi (satu dengan semua koefisien positif) di antaranya adalah

S(z)=114z22z2 .

Karena [ Kuic70 ] dan tidak rasional, bahasa Dyck tidak teratur.SL=SS


  1. Bukti untuk pernyataan untuk bahasa biasa bekerja melalui tata bahasa dan transfer ke tata bahasa linier segera (commutativity of multiplication).

   [FlSe09] Analytic Combinatorics oleh P. Flajolet dan R. Sedgewick (2009) [Kuic70] Tentang Entropi Bahasa Bebas Konteks oleh W. Kuich (1970)
  


13

Ini adalah versi yang diperluas dari jawaban saya dari sini Menggunakan Pumping Lemma untuk membuktikan bahasa tidak biasaL={(01)m2mm0} karena ini seharusnya menjadi pertanyaan referensi.

Jadi, Anda pikir lemma pemompaan terlihat rumit? Jangan khawatir. Berikut ini pendekatan pengambilan yang sedikit berbeda, yang tersembunyi di dalam jawaban @ Romuald juga. (Kuis: di mana?)

Mari kita mulai dengan mengingat bahwa setiap bahasa reguler diterima oleh deterministic finite state automaton (DFA). DFA adalah grafik berarah terbatas di mana setiap simpul memiliki tepat satu tepi untuk setiap huruf dalam alfabet. String memberi Anda jalan-jalan di grafik berdasarkan pada titik yang berlabel "mulai", dan DFA menerima jika jalan ini berakhir pada titik yang berlabel "terima". (Verteks disebut "keadaan" karena bidang matematika yang berbeda suka membuat terminologi mereka sendiri untuk hal yang sama.)

Dengan cara berpikir seperti ini, mudah untuk melihat bahwa: Jika string dan menggerakkan DFA ke status yang sama, maka untuk string lainnya , dan menggerakkan DFA ke keadaan yang sama. abcacbcMengapa? Karena titik menyatakan jalan dan string yang menentukan itu menentukan akhir sepenuhnya.

Letakkan sedikit berbeda: Jika teratur dan string dan menggerakkan robot yang mengenali ke kondisi yang sama, maka untuk semua string , baik dan keduanya dalam atau tidak ada sama sekali.LabcacbcL

Kita dapat menggunakan ini untuk menunjukkan bahasa yang tidak biasa dengan membayangkan itu dan kemudian datang dengan dan mengarahkan DFA ke keadaan yang sama, dan sehingga ada dalam bahasa dan tidak. Ambil contoh bahasa dari jawaban @ Dave. Bayangkan itu biasa, jadi ada beberapa DFA yang mengenali dengan status . Prinsip Lubang Pigeon mengatakan bahwa setidaknya dua dari mengirim DFA ke keadaan yang sama, katakan dan . Karena , kita melihat bahwa dalam bahasa danabcacbcm{(01)i:0im+1}a=(01)pb=(01)qpqa2pb2p tidak, jadi bahasa ini tidak bisa teratur.

Yang menyenangkan adalah bahwa contohnya adalah templat untuk membuktikan bahwa bahasa tidak teratur:

  • Temukan keluarga string dengan properti yang masing-masing memiliki "tail" sehingga dalam bahasa dan , karena tidak.{ai:iN}tiaitiaitjij
  • Terapkan argumen di atas kata demi kata. (Ini diperbolehkan, karena selalu ada cukup untuk membiarkan Anda menerapkan Prinsip Pigeon Hole.)ai

Ada trik lain, tetapi yang ini akan bekerja dengan mudah pada sebagian besar masalah pekerjaan rumah Anda.

Sunting: Versi sebelumnya berdiskusi tentang bagaimana ide ini berhubungan dengan Pumping Lemma.


Saya tidak berpikir bahwa mereproduksi bukti Pumping Lemma berguna secara umum, tetapi YMMV. Memahami buktinya bagus dalam hal apa pun; itu segera terhubung dengan sejumlah penutupan dan properti menarik lainnya dari automata terbatas dan bahasa reguler. Saya sangat tidak setuju dengan kalimat terakhir, meskipun: teori automata tidak membosankan sama sekali, dan tentu saja bukan bagian yang paling membosankan dari kelas teori.
Raphael

@ Louis Dalam jawaban Anda bagaimana Anda membuat pernyataan ini we see that a2p is in the language and b2p is not, so this language can't be regular.di bagian terakhir. Tolong bisakah Anda memberi contoh
Himanshu

abq12pq2ab

7

Mengikuti jawaban di sini , saya akan menjelaskan metode membuktikan non-keteraturan berdasarkan kompleksitas Kolmogorv.

Pendekatan ini dibahas dalam "Pendekatan Baru untuk Teori Bahasa Formal oleh Kompleksitas Kolmogorov" , oleh Ming Li dan Paul MB Vitanyi (lihat bagian 3.1).

K(x)xMM(ϵ)=x

LΣcLxΣynthLx={yΣ|xyL}K(y)O(logn)+c

xΣnthLx

  • Otomat yang menerimaL
  • x
  • n

xxLnlogny

LxLxΣL

L={1p|p is prime}L={0n1n|n0}

x{0,1}yixithLxy10i=1ixx=0in=1i0:K(y10i)cy10i=1i1ixx=0nnK(0n)logny1x=1nK(1n)<cn>2c


7

{σ}AN

L(A)={σn:nA}.

AN

  1. L(A)

  2. L(A)

  3. n0,m1nn0nAn+mAA

  4. ai=1iA0.a0a1a2

  5. iAxi

ρρ

ANL(A)

  1. ρ=limn|A{1,,n}|nA

  2. Jika maka adalah terbatas.ρ=0A

  3. Jika maka adalah cofinite (yaitu, terbatas).ρ=1AA¯

Sebagai contoh, bahasa tidak teratur, karena set telah menghilang kepadatan asimtotik, namun tidak terbatas.L({2n:n0})


4

Kelas bahasa reguler ditutup di bawah berbagai operasi penutupan, seperti penyatuan, persimpangan, pelengkap, homomorfisme, penggantian reguler, homomorfisma terbalik, dan banyak lagi. Ini dapat digunakan untuk membuktikan bahwa bahasa yang diberikan tidak teratur dengan mereduksi ke bahasa yang sudah dikenal non-reguler.

Sebagai contoh yang sangat sederhana, anggaplah kita tahu bahwa bahasa tidak teratur. Kemudian kita dapat membuktikan bahwa bahasa (bahasa semua kata dengan dan s) tidak teratur sebagai berikut:{anbn:n0}{w{a,b}:#a(w)=#b(w)}ab

Misalkan adalah reguler. Maka juga biasa. Tapi , yang diketahui tidak biasa.L={w{a,b}:#a(w)=#b(w)}LabLab={anbn:n0}

Ini adalah contoh yang lebih rumit. Mari kita tunjukkan bahwa bahasa tidak teratur.L={(0+1)n2(0+1)n:n0}

Biarkan menjadi pemetaan homomorfisme yang diberikan oleh , , . Jika teratur maka bahasa berikut adalah: . Namun, kita tahu bahwa yang terakhir tidak teratur.hh(0)=0h(1)=1h(2)=ϵLh(L021)={0n1n:n0}

Akhirnya, berikut adalah contoh menggunakan homomorfisme terbalik. Mari kita tunjukkan bahwa bahasa tidak teratur.L={0n10n:n0}

Biarkan menjadi homomorfisme yang diberikan oleh , , . Jika teratur maka adalah, tetapi itu hanya bahasa dari contoh sebelumnya.kk(0)=0k(1)=0k(2)=1Lk1(L)L


3

Gunakan teori Myhill – Nerode.

Biarkan menjadi bahasa. Kami mengatakan bahwa dua kata adalah inequivalent modulo (atau: sehubungan dengan ) jika ada kata sehingga tepat satu dari dalam . Dalam DFA apa pun untuk , (latihan). Ini menyiratkan kriteria berikut:Lx,yLLzxz,yzLLδ(q0,x)δ(q0,y)

Biarkan menjadi bahasa. Anggaplah ada himpunan tak terbatas kata berpasangan berpasangan (yaitu himpunan tak terhingga sehingga setiap dua yang tidak sama adalah modulo ). Maka tidak teratur.LSx,ySLL

Berikut ini contoh sederhana penerapan kriteria ini:

Bahasa tidak teratur.L={anbn:n0}

Bukti. Biarkan . Kami mengklaim bahwa dua kata berbeda dalam adalah modulo . Memang, biarkan , di mana . Kemudian tapi .S={an:n0}SLai,ajSijaibiLaibjL

Fitur penting dari metode ini adalah dijamin akan berhasil: jika tidak teratur maka ada rangkaian kata-kata yang tidak setara berpasangan yang tak terbatas. Ini adalah konsekuensi dari teorema Myhill – Nerode . Secara singkat, ekuivalensi modulo (negasi inequivalence modulo didefinisikan di atas) adalah hubungan ekivalensi, dan bahasa teratur jika jumlah kelas ekivalensi modulo ekivalensi modulo adalah terbatas. Jika tidak teratur, mengeluarkan satu kata dari setiap kelas ekivalensi akan membentuk serangkaian kata-kata yang tidak seimbang.LLLLLL


1

Mengingat bahasa , untuk setiap string yang ada satu set string sehingga . Setiap set tersebut dapat digunakan sebagai keadaan di mesin negara.LxyxyL

Yang perlu Anda lakukan adalah menunjukkan bahwa jumlah set tersebut tidak terbatas.

Sebagai contoh, misalkan . Diberikan untuk beberapa , satu-satunya string sehingga adalah . Jadi untuk setiap kita memiliki set yang berbeda, yang berarti tidak teratur.L=anbn:n0x=anbn1yxyLy=bn1nL

Jadi secara umum, jika Anda menemukan satu set string tanpa batas sehingga setiap memberikan set yang berbeda maka bahasa tidak dapat dikenali oleh mesin keadaan terbatas, dan oleh karena itu tidak teratur.xx{y:xyL}


Bukankah ini hanya Myhill-Nerode?
David Richerby
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.