Apakah konteks bahasa berikut ini gratis?
Seperti yang ditunjukkan oleh sdcvvc, sebuah kata dalam bahasa ini juga dapat digambarkan sebagai gabungan dari dua kata dengan panjang yang sama dengan jarak hamming yang 2 atau lebih besar.
Saya pikir ini bukan konteks bebas tetapi saya kesulitan membuktikannya. Saya mencoba memotong bahasa ini dengan bahasa biasa (seperti misalnya) kemudian menggunakan lemma pemompaan dan \ atau homomorfisme tetapi saya selalu mendapatkan bahasa yang terlalu rumit untuk dikarakterisasi dan ditulis turun.
Jawaban:
Catatan [2019-07-30] Buktinya salah ... pertanyaannya lebih rumit daripada kedengarannya.
Setelah upaya yang gagal di sini adalah ide lain.
Jika kita memotong dengan bahasa reguler kita mendapatkan bahasa CF.L Lreg=0∗10∗10∗10∗
Mungkin kita dapat memiliki lebih banyak keberuntungan jika kita menggunakan (string dengan tepat 4 1s).L′reg=0∗10∗10∗10∗10∗
Misalkan , secara informal jika dapat dibagi menjadi dua bagian, sedemikian sehingga setengahnya mengandung persis atau kedua bagian mengandung dua tetapi posisi mereka tidak cocok.L1=L∩L′reg w∈L1 {0,1,3,4} 1s 1
Misalkan adalah CF dan biarkan menjadi tata bahasanya dalam bentuk normal Chomsky, dan biarkanL1 G
Kami memiliki(panjang genap) dan|u|=|v| d(u,v)≥2
Jika kita membatasi perhatian kita pada cara-cara di mana empat 1s dapat dihasilkan, kita memiliki tiga kasus yang ditunjukkan di bagian atas gambar 1. Bagian tengah gambar 1 menunjukkan kasus pertama (tetapi yang lainnya serupa) .w
Gambar 1 (gambar lengkap dapat diunduh di sini )
Jika kita memilih dan kita melihat bahwa nol antara dua pasang 1s harus dapat dipompa secara independen (titik merah pada gambar): khususnya, untuk cukup besar , kita mendapatkan duplikat nonterminal node pada subtree internal (simpul X pada gambar 2) atau pengulangan di jalur menuju yang pertama atau kedua 1 (simpul Y pada gambar 2). Perhatikan bahwa Gambar 2 sedikit disederhanakan: mungkin ada lebih banyak node nonterminal antara kedua , dan juga antara dua ( tetapi dengan yang hanya menghasilkan 0s di sebelah kanan yang pertama 1).a=e,c=2a b,d≫a b≫a X Ys Y→...→Zi→...Y Zi
Gambar 2
Jadi kita dapat memperbaiki sembarang , lalu pilih cukup besar untuk mendapatkan simpul yang dapat dipompa secara independen pada urutan nol antara pertama dan kedua . Untuk urutan nol antara angka 1 ketiga dan keempat, kita dapat memilih . Tapi dapat dipompa secara independen sehingga ada dipompa substring , yaitu sedemikian sehingga dan . String yang kita dapatkan adalah:a=e=k,c=2a b 1 d=b!+b 0 b p ≤ b y b = x y z , | y | = p , | x | ≥ 0 , | z | ≥ 0 x y i z = b ! + b
0b p≤b y b=xyz,|y|=p,|x|≥0,|z|≥0 xyiz=b!+b
tapi kami tidak . Jadi bukan CF dan akhirnya bukan CF.w′∉L1 L1 L
Jika buktinya benar (???) dapat diperluas ke setiap bahasaLk={uv:|u|=|v|,d(u,v)≥k},k≥2
sumber
Setelah 2 upaya gagal, yang dibantah oleh @Hendrik Jan (terima kasih), ini satu lagi, yang tidak lebih berhasil. @Vor menemukan contoh bahasa CF deterministik di mana konstruksi yang sama akan berlaku, jika benar. Ini memungkinkan pengidentifikasian kesalahan dalam penambatan string dalam penerapan lemma. Lemma itu sendiri tampaknya tidak bersalah. Ini jelas konstruksi yang terlalu sederhana. Lihat lebih detail di komentar.y
Bahasa tidak bebas konteks.L={uxvy∣u,v,x,y∈{0,1}∗{ϵ} , ∣u∣=∣v∣ , u≠v , ∣x∣=∣y∣ , x≠y }
Sangat membantu untuk mengingat karakterisasi mana d adalah jarak Hamming, yang diusulkan oleh @sdcvvc. Yang perlu dipikirkan adalah 2 posisi yang dipilih di setiap setengah string sehingga simbol yang sesuai berbeda.L={uv:|u|=|v|,d(u,v)≥2}
Maka Anda menganggap string sedemikian rupa sehingga dan adalah genap. Ini jelas dalam bahasa L, dengan memotong dan mana saja di antara keduanya 1. Kami ingin memompa string itu pada bagian pertama antara 1, sehingga akan menjadi yang tidak seharusnya dalam bahasa. i < j i + j u x 10 j 10 j10i10j i<j i+j u x 10j10j
Kami pertama-tama mencoba menggunakan lemma Ogden , yang seperti lemma pemompaan, tetapi berlaku untuk atau lebih simbol yang ditandai yang ditandai pada string, menjadi panjang pemompaan untuk simbol yang ditandai (tetapi lemma dapat memompa lebih banyak karena dapat memompa juga simbol tanpa tanda). Panjang pompa yang ditandai hanya bergantung pada bahasa. Upaya ini akan gagal, tetapi kegagalan akan menjadi petunjuk.p pp p p
Kami kemudian dapat memilih dan kami menandai simbol pada urutan pertama dari 0's. Kita tahu bahwa tidak ada satu pun dari 1 yang ada di pompa, karena bisa memompa sekali (eksponen 0) alih-alih memompa masuk. Dan memompa keluar 1 akan membuat kita keluar dari bahasa.ii=p i
Namun, kita bisa memompa di kedua sisi 1 kedua secepat atau bahkan lebih cepat di sisi kanan, sehingga 1 kedua tidak akan pernah melewati tengah tali. Juga lemma Ogden tidak memperbaiki batas atas untuk ukuran apa yang dipompa, sehingga tidak mungkin untuk mengatur pemompaan untuk mendapatkan 1 paling kanan tepat di tengah-tengah tali.
Kami menggunakan versi modifikasi dari lemma, di sini disebut Nash's Lemma, yang dapat mengatasi kesulitan ini.
Pertama-tama kita perlu definisi (mungkin memiliki nama lain dalam literatur, tapi saya tidak tahu yang mana - bantuan dipersilahkan). String dikatakan sebagai penghapusan string jika diperoleh dari dengan menghapus simbol dalam . Kami akan mencatat .v v v u ≺ vu v v v u≺v
Nash Lemma: Jika adalah bahasa bebas konteks, maka ada dua nomor dan sehingga untuk setiap string panjang setidaknya di , dan setiap cara “menandai” atau lebih posisi di , dapat ditulis sebagai dengan string , , , , , sedemikian rupa sehinggap > 0 q > 0 w p L p w w w = u x y z v u x y z vL p>0 q>0 w p L p w w w=uxyzv u x y z v
Bukti : Mirip dengan bukti lemma Ogden, tetapi subpohon yang sesuai dengan string dan dipangkas sehingga mereka tidak mengandung jalur dengan dua kali non-terminal yang sama (kecuali untuk akar dari dua subpohon ini). Ini tentu membatasi ukuran string yang dihasilkan dan oleh konstan . String dan , untuk , terkait dengan versi pohon yang tidak ditandai, digunakan terutama dengan untuk menyederhanakan akuntansi ketika lemma diterapkan.x z x z y q x j z j j ≥ 0 j = 1y xz x^z^ y^ q xj zj j≥0 j=1
Kami memodifikasi upaya bukti di atas dengan menandai simbol paling kiri 0, tetapi mereka diikuti oleh simbol 0 untuk memastikan bahwa kami memompa di bagian kiri string, di antara kedua 1 itu. Itu membuat total 0's antara 1's (sebenarnya akan cukup, karena 1 paling kanan tidak bisa di , yang akan memungkinkan untuk hanya menghapusnya).2 q i = p + 2 q i = p + q zp 2q i=p+2q i=p+q z^
Yang tersisa adalah memilih sehingga kita dapat memompa tepat angka yang tepat dari 0 sehingga kedua urutannya sama. Namun sejauh ini, satu-satunya kendala pada adalah lebih besar dari . Dan kita juga tahu bahwa jumlah 0 yang dipompa pada setiap pemompaan adalah antara 1 dan q. Jadi biarkan menjadi produk dari integer pertama . Kami memilih .j i h q j = i + hj j i h q j=i+h
Oleh karena itu, karena kenaikan pemompaan - apa pun itu - ada di , ia membagi . Biarkan menjadi hasil bagi. Jika kita memompa tepat kali, kita mendapatkan string yang tidak ada dalam bahasa. Karenanya L tidak bebas konteks.[ 1 , q ] h k k 10 j 10 jd [1,q] h k k 10j10j
.
Saya pikir saya tidak akan pernah melihat
string yang indah seperti pohon.
Karena jika tidak memiliki parse,
senar tidak berarti apa-apa selain lelucon
sumber
oleh pertanyaan ini saya pikir bebas konteks dan dihasilkan oleh tata bahasa berikutL SABXY→AXBY∣BYAX→0∣0A0∣0A1∣1A0∣1A1→1∣0B0∣0B1∣1B0∣1B1→0∣0X0∣0X1∣1X0∣1X1→1∣0Y0∣0Y1∣1Y0∣1Y1
sumber