Kendileriyle birleştirilen kelimelerin dili için bağlama duyarlı dilbilgisi


9

Aşağıdaki dili açıklayan bağlama duyarlı bir dilbilgisi arıyorum: L={ww|w{bir,b}*,|w|1} .

Benim gibi kuralların olmamasıyla ilgili problemlerim var Xεizin verilir ve bu nedenle kelimenin "orta" olduğunu gösteren herhangi bir terminal olmayan yerleştiremezsiniz. Sorunun bir yolu var mı?


1
Sıkıcı cevap: bir LBA formüle edin ve LBA'ların ve bağlama duyarlı gramerlerin eşit derecede güçlü olduğunu kanıtlamak için kullanılan simülasyonu uygulayın.
Raphael

Yanıtlar:


6

Gerçekten de, belirli bir konuma ekstra bilgi eklemenizi sağlayan basit bir hile vardır: sadece konuma bitişik bir harfi değiştirin ve bilgi ve orijinal harfle işaretleyin.

Örneğinizde, terminal olmayan bir Morta için, ancak silinemediğinden, normal bir harf olarak sayılır. Böylece iki kopyamız var.Ma ve Mbdeğiştirilen harfleri belirtmek için. Derivasyonun sonunda, markörler harf içerikleriyle, örneğin basit üretimlerle değiştirilmelidir.Maa.

Çoğu durumda, Maatüretme işleminin sonunda yapılması gerekir. Bazı yapılarda bunun "zamanlanmış" olmasına gerek yoktur:Mçok erken kaybolursa, türetme uygun bir konum bulamaz ve süreç başarılı bir şekilde durmaz. Diğer durumlarda, kişinin bir tür kontrole ihtiyacı vardır. Bu bazen harfler arasında hareket eden bir sinyal olarak terminal olmayan bir girişle yapılır. Yine, bu sinyal de bir terminal taşımalıdır, aksi takdirde aynı problemlerle karşılaşırsınız.

Monotonik gramerlerde bilgileri taşımak kolaydır (αβ ile |α|β|gibi kurallar kullanarak) XAAXolarak görülebilir. X üstünden atlamak A. Bağlama duyarlı dilbilgisi için bunu üç adımda ayırmanız gerekir:XAXAX,XAXAAX,AAXAX. her üretimde bir harf uygun bir bağlamda değiştirilir. Bu sürecin türetmenin diğer bölümleriyle etkileşime girmediğini görmek biraz hayal gücü gerektiriyor. Örneğin,A son adımda başka bir türetme adımına ilk katılıyor mu?

Mevcut konumlardan daha fazla bilgi olduğunda, bu çok kısa kelimeler için işe yaramayabilir. Bunun en basit çözümü, inşaatınızdaki kısa telleri görmezden gelmek ve bunları ayrı ayrı oluşturmaktır.


Geçici olmayanları sonuna kadar yeniden düzenlemeden önce Ma → a'nın kullanılmaması için ürünün ve belirli bir sıraya bakılması gerekmez mi? Yoksa bir şey mi kaçırıyorum?
MrBolton

Cevabımda buna bir not ekledim. Bazı çözümlerde böyle bir üretimin çok erken uygulanması başarılı bir şekilde tamamlanamayan duygusal bir formla sonuçlanacaktır. Diğer durumlarda yapımlar dikkatle senkronize edilmelidir. Sağduyu ve deneme yanılma meselesi.
Hendrik Ocak

1

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.

SX^lSXraaaaababbababbbbaabbεSXlSXrXlX^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γX^lγX^lXα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^lγXlX^lXlγX^lγXαX^lXαγXlγXlXlXlγXlγXαXlXαγXαγXβXαXβγ

hepsi için (α,β,γ)Σ3. Şimdi, taşıma doğru kontrol jetonuna ulaştığında, solda kullanılan kuralı taklit etmeliyiz:

XlγX^rXlX^rγXαγX^rXαX^rγX^rγXrXγX^rX^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

ABCD

tarafından

ABAYRAYRXRYRXRYRXRDXRDCD

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={wkwΣ}? Aynı zamanda işe yarıyor muL=i1Lk? Herhangi biri için aynı konstrüksiyonu kullanabilir misiniz?Lk düzenli olarak L?


0

Bağlama duyarlı dilbilgisinin nasıl görüneceğini bilmesem de, sorununuzu sembolle atlatabilirsiniz X aşağıdaki gibi.

Birleştirilmiş kelimelerinizin w en azından uzunluk olmalı |w|1. Dolayısıyla, bunları basitçe "kodlayabilir"ε- dilbilgisi kurallarınız gibi bazı kurallar:

birXbirbirbir,  birXbbirb,  bXbirbbir,  bXbbb

Yine de, genel çözümü henüz göremiyorum, çünkü bence gramer kurallarınızın sol tarafları muhtemelen keyfi olarak uzayacak, çünkü bence ön eklerini düşünmeye çalışacaksınız. w bir şekilde kurallarınızda.


Ancak, @ hendrik-jan'ın yaklaşımını kullanmak size iki kural kazandırır.
2013 Rmn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.