Kısa varsayılan cevap: dili kabul eden bir LBA bulun ve bağlama duyarlı gramerlerin ve LBA'nın aynı dil kümesini tanımladığını kanıtlamak için kullanılan simülasyonu kullanın. Ama elbette peşinde olduğunuz bu değil.
Bu özel durumda, doğru doğrusal bir dilbilgisi kullanmayı düşünmeye çalışın. Σ∗iki kez, biri sol ve diğeri sağ yarısı için. Tek yapmanız gereken her iki dilbilgisinin de "senkronize" olmasını sağlamaktır.
Bu, bir kontrol belirtecini değiştirerek yapılabilir. Yani, sol gramerler bir kural seçer, fitting kontrol jetonunu oluşturur ve onu doğru gramere geçirir. Sağ dilbilgisi denetim belirtecini görür ve sığdırma kuralını uygular. İki yönlü iletişimi de bu şekilde uygulayabileceğinizi unutmayın, ancak burada gerekli değildir.
Bağlama duyarlı dilbilgisi ile ilgili bir sorun vardır: terminal olmayanları asla silemezler (hariç S→εboş kelime dilde ise). Bu nedenle, sadece ihtiyaç duyacağımız kadar terminal olmayan yaratmalıyız; hiçbiri gereksiz olamaz.
Bunu başarmanın bir yolu, LBA ile ilgili bazı kanıtlar için aynı hileyi kullanmaktır: önce ihtiyacınız olacak tüm terminal olmayanları üretin , yani "bandı" hazırlayın. Daha sonra, bu kaset üzerinde "hareket et". Sadece "sonda" terminal olmayan tüm terminalleri terminallerle değiştirin.
İzin ver G=(N,Σ,δ,S) ile Σ={a,b} (yapı kolayca daha büyük harflere uzanır) ve N, δ aşağıdaki kurallara göre verilir.
SS′→X^lS′Xr∣aaaa∣abab∣baba∣bbbb∣aa∣bb∣ε→XlS′Xr∣XlX^r
"kaset" oluşturmak için kurallardır. Şapkanın "kafa pozisyonunu" ve endeksleri gösterdiğine dikkat edinl,rterminal olmayan bir kelimenin hangi yarısına ait olduğunu belirtir. Bu nedenle kısa kelimeler, aşağıdaki bazı kuralları güvence altına almak için üretilir. Şimdi sol kısımda bir sembol türetmek için kurallara ihtiyacımız var:
X^lXlX^lXα→XγX^γl→XγXγα
hepsi için (α,γ)∈Σ2. Oluşturulan sembolü sağa taşımak için üst dizini nasıl kullandığımıza dikkat edin.Xa ve Xb"son" terminaller, sadece kontrol jetonunu hareket ettirmek ve daha sonra terminalleri türetmek için kullanılacaktır. Ayrıca, ikinci kuralın (yalnızca) sağ yarının son sembolü için kullanıldığını unutmayın.
Taşımayı sağ yarıya taşımak için, kalan her ikisini de geçmeliyizXl ve zaten oluşturuldu Xα:
X^γlXlX^γlXαXγlXlXγlXαXγαXβ→X^lXγl→X^lXγα→XlXγl→XlXγα→XαXγβ
hepsi için (α,β,γ)∈Σ3. Şimdi, taşıma doğru kontrol jetonuna ulaştığında, solda kullanılan kuralı taklit etmeliyiz:
XγlX^rXγαX^rX^γrXrX^γr→XlX^γr→XαX^γr→XγX^r→Xγ
hepsi için (α,γ)∈Σ2. İlk kuralın sağ yarının ilk sembolü için kullanıldığına ve son kuralın yalnızca son sembol için kullanılabileceğine dikkat edin, aksi takdirde türetme asla sona ermez. Şimdi sadece sonlandırma kurallarına ihtiyacımız var
Xα→α
hepsi için α∈Σve işimiz bitti. Bu kurallar da her şey (solda) yapıldıktan sonra uygulanabilir, aksi takdirde türetme sona ermez.
Bu dilbilgisinin belirsiz olduğunu unutmayın. Sadece yapabilirXα→α(güvenli bir şekilde) herhangi bir zamanda sol "başlığın" soluna herhangi bir yere uygulanabilir, ancak aynı anda birden fazla taşıyıcı da olabilir. Asla birbirlerini geçemedikleri için doğru düzen korunur.
Bir açıklama hala yapılmalıdır: birçok kural sol taraftaki sembollerin her ikisini de değiştirdiğinden , gramerin üstü bağlama duyarlı değildir . Bağlama duyarlı dilbilgileri için buna izin verilmez. Neyse ki, herhangi bir kuralı simüle edebilirizR şeklinde
AB→CD
tarafından
ABAYRXRYRXRD→AYR→XRYR→XRD→CD
bu yüzden iyiyiz ve daha küçük dilbilgisi ile çalışabiliriz. Bu tür çoklu simülasyonlar arasındaki etkileşimin zarar görmediğini göstermek bir egzersiz olarak bırakılmıştır.
Bunu nasıl genişleteceğinizi görüyor musunuz? Lk={wk∣w∈Σ∗}? Aynı zamanda işe yarıyor muL=⋃i≥1Lk? Herhangi biri için aynı konstrüksiyonu kullanabilir misiniz?Lk düzenli olarak L?