Jawaban standar pendek: muncul dengan LBA yang menerima bahasa dan menggunakan simulasi yang digunakan untuk membuktikan bahwa tata bahasa yang peka konteks dan LBA menentukan kumpulan bahasa yang sama. Tapi tentu saja bukan itu yang Anda cari.
Dalam kasus khusus ini, cobalah untuk berpikir menggunakan tata bahasa linear-kanan untuk dua kali, satu untuk kiri dan satu untuk setengah kanan. Yang harus Anda pastikan bahwa kedua tata bahasa berasal "sinkron".Σ∗
Ini bisa dilakukan dengan menukar token kontrol. Dengan kata lain, tata bahasa kiri mengambil aturan, menghasilkan token kontrol pas dan meneruskannya ke tata bahasa kanan. Tata bahasa kanan melihat token kontrol dan mengeksekusi aturan fitting. Perhatikan bahwa Anda juga dapat menerapkan komunikasi dua arah dengan cara ini, tetapi tidak perlu di sini.
Ada satu masalah dengan tata bahasa konteks-sensitif: mereka tidak pernah bisa menghapus non-terminal (kecuali jika kata kosong dalam bahasa). Oleh karena itu, kita harus membuat hanya non-terminal sebanyak yang kita butuhkan; tidak ada yang bisa berlebihan.S→ε
Salah satu cara untuk mencapai ini adalah dengan menggunakan trik yang sama seperti untuk bukti-bukti tertentu tentang LBA: menghasilkan semua non-terminal yang akan Anda butuhkan terlebih dahulu , yaitu menyiapkan "tape". Kemudian, "bergeraklah" pada rekaman itu. Hanya "di akhir", ganti semua non-terminal dengan terminal.
Jadi mari dengan Σ = { a , b }G=(N,Σ,δ,S)Σ={a,b} (konstruksi siap meluas ke huruf yang lebih besar) dan , δ diberikan oleh aturan berikut.Nδ
adalah aturan untuk menghasilkan "pita". Perhatikan bahwa topi menunjukkan "posisi kepala" dan indeksl,rmenunjukkan setengah dari kata yang bukan milik terminal. Kata-kata singkat dihasilkan dengan demikian untuk mengamankan beberapa aturan di bawah ini. Sekarang kita perlu aturan untuk menurunkan satu simbol di bagian kiri:SS′→X^lS′Xr∣aaaa∣abab∣baba∣bbbb∣aa∣bb∣ε→XlS′Xr∣XlX^r
l,r
untuk semua(α,γ)∈Σ2. Perhatikan bagaimana kita menggunakan indeks atas untuk membawa simbol yang dihasilkan ke kanan. XadanXbadalah "final" non-terminal yang hanya akan digunakan untuk memindahkan token kontrol dan untuk menurunkan terminal nanti. Perhatikan lebih jauh bahwa aturan kedua adalah (hanya) yang digunakan untuk simbol terakhir dari setengah bagian kanan.
Untuk bergerak membawa ke kanan setengah, kita harus bergerak melewati kedua tersisaXldan sudah dihasilkanXα:X^lXlX^lXα→XγX^γl→XγXγα
(α,γ)∈Σ2XaXb
XlXα
untuk semua(α,β,γ)∈Σ3. Sekarang, setelah carry mencapai token kontrol yang tepat, kita harus meniru aturan yang digunakan di sebelah kiri:X^γlXlX^γlXαXγlXlXγlXαXγαXβ→X^lXγl→X^lXγα→XlXγl→XlXγα→XαXγβ
(α,β,γ)∈Σ3
untuk semua(α,γ)∈Σ2. Perhatikan bahwa aturan pertama digunakan untuk simbol pertama dari setengah kanan, dan bahwa aturan terakhir hanya dapat digunakan untuk simbol terakhir, jika tidak derivasi tidak pernah berakhir. Sekarang kita hanya perlu aturan penghentianXγlX^rXγαX^rX^γrXrX^γr→XlX^γr→XαX^γr→XγX^r→Xγ
(α,γ)∈Σ2
untuk semua α ∈ Σ dan kita selesai. Aturan-aturan ini juga hanya dapat diterapkan setelah semuanya (ke kiri) dilakukan, jika tidak derivasi tidak akan berakhir.
Perhatikan bahwa tata bahasa ini ambigu. Tidak hanya bisa bisa XXα→α
α∈Σ
(aman) diterapkan di mana saja di sebelah kiri "head" kiri kapan saja, tetapi juga ada beberapa carry yang sedang berjalan pada waktu yang sama. Karena mereka tidak pernah bisa menyalip satu sama lain, urutan yang benar dipertahankan.
Satu komentar harus dibuat tetap: tata bahasa di atastidakpeka konteks karena banyak aturan mengubahkeduanyaXα→α
simbol di sisi kiri. Ini tidak diperbolehkan untuk tata bahasa yang sensitif terhadap konteks. Untungnya, kita dapat mensimulasikan aturan dari formulirR
AB→CD
oleh
jadi kita baik dan bisa bekerja dengan tata bahasa yang lebih kecil. Menunjukkan bahwa interferensi antara banyak simulasi seperti itu tidak ada salahnya dibiarkan sebagai latihan.ABAYRXRYRXRD→AYR→XRYR→XRD→CD
Lk={wk∣w∈Σ∗}L=⋃i≥1LkLkL