Apakah set Sebelum dan Setelah untuk tata bahasa bebas konteks selalu bebas konteks?

14

Biarkan G menjadi tata bahasa bebas konteks. Serangkaian terminal dan nonterminals dari G dikatakan menjadi bentuk sentensial dari G jika Anda bisa mendapatkannya dengan menerapkan produksi dari G nol atau beberapa kali untuk simbol awal S . Mari SF(G) adalah himpunan bentuk sentensial G .

Mari αSF(G) dan membiarkan β menjadi substring dari α - kita sebut β sebuah fragmen dari SF(G) . Sekarang mari

Before(β)={γ | δ.γβδSF(G)}

dan

After(β)={δ | γ.γβδSF(G)} .

Apakah bahasa bebas konteks Before(β) dan After(β) ? Bagaimana jika G tidak ambigu? Jika G tidak ambigu, apakah Before(β) dan After(β) juga dijelaskan oleh bahasa bebas konteks yang tidak ambigu?

Ini adalah tindak lanjut dari pertanyaan saya sebelumnya , setelah upaya sebelumnya untuk membuat pertanyaan saya lebih mudah untuk dijawab gagal. Sebuah jawaban negatif akan membuat pertanyaan yang saya kerjakan sangat sulit dijawab.

Alex ten Brink
sumber

Jawaban:

8

Mari kita rasakan dulu dan setelah ( β ) . Pertimbangkan pohon derivasi yang mengandung β ; "mengandung" di sini berarti bahwa Anda dapat memotong sub pohon sehingga β adalah subword dari depan pohon. Kemudian, set sebelum (setelah) adalah semua bidang potensial dari bagian pohon kiri (kanan) dari β :Before(β)After(β)βββ

tree with before and after sets
[ sumber ]

Jadi kita harus membangun tata bahasa untuk bagian pohon yang berjejer secara horizontal. Tampaknya cukup mudah karena kita sudah memiliki tata bahasa untuk seluruh pohon; kita hanya perlu memastikan bahwa semua bentuk sentensial adalah kata-kata (ubah abjad), saring yang tidak mengandung (yang merupakan properti reguler karena β sudah diperbaiki) dan potong semua setelah (sebelum) β , termasuk β . Pemotongan ini juga harus dimungkinkan.ββββ


Sekarang menjadi bukti formal. Kami akan mengubah tata bahasa seperti diuraikan dan penggunaan penutupan sifat untuk melakukan penyaringan dan pemotongan, yaitu kita melakukan bukti non-konstruktif.CFL

Biarkan tata bahasa bebas konteks. Sangat mudah untuk melihat bahwa SF ( G ) bebas konteks; membangun G = ( N , T , δ , N S ) seperti ini:G=(N,T,δ,S)SF(G)G=(N,T,δ,NS)

  • N={NAAN}
  • T=NT
  • δ={α(A)α(β)Aβδ}{NAAAN}

dengan untuk semua t T dan α ( A ) = N A untuk semua a N . Jelas bahwa L ( G ) = SF ( G ) ; oleh karena itu Pref penutupan closure yang sesuai ( SF ( G ) ) dan suffix closure suff ( SF ( G ) ) juga bebas konteks-.α(t)=ttTα(A)=NAaNL(G)=SF(G)Pref(SF(G))Suff(SF(G))

Sekarang, untuk semua bahasa adalah L ( β ( N T ) ) dan L ( ( N T ) β ) . Seperti C F L ditutup di bawah persimpangan dan kanan / kiri quotient dengan bahasa biasa, kita mendapatkanβ(NT)L(β(NT))L((NT)β)CFL

Before(β)=(Pref(SF(G))  L((NT)β))/βCFL

dan

.After(β)=(Suff(SF(G))  L(β(NT)))βCFL


¹ adalah tertutup di bawah kanan (dan kiri) quotient ; Pref ( L ) = L / Σ * dan sama untuk Suff hasil awalan resp. penutupan akhiran.CFLPref(L)=L/ΣSuff

Raphael
sumber
Saya mulai menulis jawaban kemudian menyadari bukti saya sama dengan milik Anda. Aku harus begini (terkompresi cocok di sini): membentuk tata bahasa dengan menambahkan terminal baru A (metavariable a) untuk setiap non-terminal A dan produksi A A . Maka bentuk-bentuk sentensial dari G adalah kata-kata yang dikenali oleh G yang terdiri dari metavariabel. Ini adalah persimpangan CFG dengan bahasa reguler dan dengan demikian teratur. Kumpulan awalan CFG adalah CFG (ambil PDA dan buat setiap negara bagian final). B e f o r e ( γ ) =GA^AAA^GG lagi CFG a. Before(γ)={γγβL(Prefix(G^))}
Gilles 'SANGAT berhenti menjadi jahat'
1
@Gilles, tiga komentar tentang itu: 1) bentuk-bentuk sentensial biasanya (dengan benar) mengandung bahasa. 2) "membuat setiap negara final" - itu tidak akan berhasil; Anda juga akan menerima awalan non-kata. 3) Langkah terakhir "memotong" sufiks tampaknya sulit untuk menjadi teliti. : / Apakah Anda memiliki bukti yang ketat tetapi lebih kompak dari milik saya?
Raphael
1) tidak masalah (ubah untuk memiliki atau tidak memiliki terminal untuk setiap terminal). 2) Ups, saya memotong terlalu banyak: membuat setiap negara bagian yang dapat mencapai final keadaan final. 3) Lakukan satu terminal b pada satu waktu; di PDA, tandai status dari mana seseorang dapat mencapai kondisi akhir dengan mengonsumsi b sebagai final. Ya, itu akan membutuhkan lebih banyak ekspansi untuk membuat ini ketat. Gbb
Gilles 'SANGAT berhenti menjadi jahat'
9

Ya, dan Setelah ( β ) adalah bahasa bebas konteks. Begini cara saya membuktikannya. Pertama, sebuah lemma (yang merupakan inti). Jika L adalah CF maka:Before(β)After(β)L

Before(L,β)={γ | δ.γβδL}

dan

After(L,β)={γ | δ.δβγL}

adalah CF.

Bukti? For membuat transduser T- β kondisi-terbatas non-deterministik yang memindai string, mengeluarkan setiap simbol input yang dilihatnya dan secara simultan mencari β secara deterministik . Setiap kali T β melihat simbol pertama β, ia bercabang secara non-deterministik dan berhenti menghasilkan simbol sampai ia selesai melihat β atau terlihat melihat simbol yang menyimpang dari β , berhenti pada kedua kasus. Jika T β melihat βBefore(L,β)TββTββββTββsecara penuh, ia menerima pada saat berhenti, yang merupakan satu-satunya cara ia menerimanya. Jika ia melihat penyimpangan dari , ia menolak.β

Lemma bisa disulap untuk menangani kasus-kasus di mana bisa tumpang tindih dengan dirinya sendiri (seperti sebuah b a b - terus mencari β bahkan saat di tengah-tengah scanning untuk sebelum β ) atau muncul beberapa kali (sebenarnya, asli non-determinisic forking sudah menangani itu). βababββ

Sudah cukup jelas bahwa , dan karena CFL ditutup di bawah transduksi keadaan-terbatas, Before ( L , β ) adalah CF. Tβ(L)=Before(L,β)Before(L,β)

Argumen serupa berlaku untuk , atau bisa juga dilakukan dengan pembalikan string dari Before ( L , β ) , CFL juga ditutup dengan pembalikan:After(L,β)Before(L,β)

After(L,β)=rev(Before(rev(L),rev(β)))

Sebenarnya, sekarang saya melihat argumen pembalikan, akan lebih mudah untuk memulai dengan , karena transduser untuk itu lebih mudah untuk dijelaskan dan diverifikasi - itu menghasilkan string kosong sambil mencari β . Ketika menemukan β itu bercabang non-deterministik, satu garpu terus mencari salinan lebih lanjut dari β , garpu lainnya menyalin semua karakter berikutnya secara verbatim dari input ke output, menerima semua sementara.After(L,β)βββ

Yang tersisa adalah membuat ini berfungsi untuk bentuk sentensial serta CFL. Tapi itu cukup mudah, karena bahasa bentuk sentimental CFG itu sendiri adalah CFL. Anda dapat menunjukkan bahwa dengan mengganti setiap non-terminal di seluruh G dengan mengatakan X , menyatakan X sebagai terminal, dan menambahkan semua produksi X X ke tata bahasa.XGXXXX

Saya harus memikirkan pertanyaan Anda tentang ambiguitas.

David Lewis
sumber