Bir dilin bağlamsız olduğunu nasıl ispatlayabilirim?


26

Orada birçok teknik bir dil olduğunu kanıtlamak için değil bağlam içermeyen, ama nasıl bir dil olduğunu ispat yok olduğu bağlamdan-bağımsız?

Bunu kanıtlamak için hangi teknikler var? Açıkçası, bunun bir yolu, dil için bağlamsız bir dilbilgisi sergilemektir. Belirli bir dil için bağlamsız bir dilbilgisi bulmak için sistematik teknikler var mı?

Düzenli diller için orada olan sistematik yollar düzenli dilbilgisi / sonlu durum otomat türetmek için: Örneğin, Myhill-Nerode teoremi bir yol sağlar. Bağlamsız diller için karşılık gelen bir teknik var mı?


Buradaki motivasyonum (umarım), belirli bir dilin bağlamsız olduğunu kanıtlamaya çalışırken, genellikle yardımcı olan tekniklerin listesini içeren bir referans sorusu oluşturmaktır. Burada bunun özel durumları olan pek çok sorumuz olduğu için, bu tür bir sorunla karşılaştığında kullanabileceği genel yaklaşımı veya genel teknikleri belgelememiz iyi olurdu.


Her zamanki notumu bırakmama izin ver: eldeki dil için bağlamsız bir dilbilgisi sağlarken , yaklaşımı oldukça hantal hale getirebilecek bir doğruluk kanıtına ihtiyacınız var .
Raphael

Bunu uygun bir referans sorusu yapmak adına, sorunlu damperlere atabiliriz, dilbilgileri ve otomatları bulmakla ilgili bir cevap ekleyebilir misiniz? Teşekkürler!
Raphael

Materyal buraya taşınana kadar, Rick Decker ve babhe'nin kopya bir soruda bağlamsız bazı deyimler topladığına dikkat edin .
Raphael

Yanıtlar:


13

Birçok örnekte işe yarayan pratik bir yaklaşım [ancak her zaman değil, biliyorum], dizelerin yuva yapısını dilde bulmaya çalışıyor . "İç içe bağımlılıklar", dizenin farklı bölümlerinde aynı anda üretilmelidir.

Ayrıca temel araç kutumuz var :

  1. bitiştirme: Dili ardışık iki bölüme ayırabilirseniz bu üretimi kullanınSS1S2

  2. birliği: ayrık parçalara ayrıldıSS1S2

  3. yineleme:SS1Sε

örnek 1

İşte yuvalama için bir örnek (teşekkür ederim Raphael).

L={bkal(bc)manbok,l,m,n,oN,ko,2l=n,m2}

Değiştir tarafından . Şimdi şartlarda düşebiliriz .2 l nn2ln

Değiştir tarafından (karıştırılmamalıdır? is 'oh' değil 'sıfır'). Birliği için araçlar uygulayın. Burada ile çalışıyoruz . Ayrıca iff ve burada yeni bir değişkendir. Değiştir tarafından .kok>o or k<ook>ok>ok=s+os>0sks+o

L1={bs+oal(bc)ma2lbol,m,o,sN,s>0,m2}

Bazı basit yazılar.

L1={bbsboalbcbc(bc)m(aa)lbol,m,o,sN}

Şimdi iç içe geçmiş yapıyı görüyoruz ve bir dilbilgisi oluşturmaya başlıyoruz.

S1TV , , (bakınız: burada birleştirme ve yineleme)TbUUbUε

VbVbW ( her iki tarafta 'ler )o b

WaWaaX

XYZ , ,YbcbcZbcZε

Örnek 2

K={akblcml=m+k}

İlk "açık" bir yeniden yazma.

K={akbm+kcmm,k0}={akbmbkcmm,k0}

Dilbilimde buna "çapraz-seri bağımlılık" denir: serpiştirme (genellikle) güçlü bir şekilde bağlamsızlığı gösterir. Tabii ki ve biz kurtulduk.k,m,k,mm+k=k+m

K={akbk+mcmm,k0}={akbkbmcmm,k0}

yapımları olan , ,SXYXaXbεYbYcε

Benzer şekildeK={akblcmm=k+l}={akblclckk,l0}

yapımları ile ,SaScXXbXcε


Son yorum: bu teknikler, dilinizi ümit edecek bir bağlamsız dilbilgisi konusunda size yardımcı olacaktır. Dilbilgisinin dilinizi tanımak için gerçekten işe yaradığından emin olmak için bir doğruluk kanıtı gerekli olabilir.


11

Kullanılabilecek bir CFL karakteristiği var, Chomsky-Schützenberger teoremi .

Dyck dili

Let bir alfabe. Bu tanımlar , Dyck -Dil ve bağlam-gramer göre ile verilenTDT(TT^)TG=({S},TT^,δ,S)δ

SaSa^Sε,aT .

Chomsky-Schützenberger teoremi

LΣ , varsa ve yalnızca varsa bağlam içermez

  • bir alfabe ,T
  • normal bir dil veR(TT^)
  • homomorfizmaψ:(TT^)Σ

Böylece

L=ψ(DTR) .

Homomorfizmin kelimelere (sembol ile sembol) ve sonra dillere (kelimeden kelimeye) genişletildiğine dikkat edin.

Örnek

düşünün . İleL={anbncmn,mN

  • T={[,} (ve, kanonik olarak ),T^={],}
  • R=L([]) ve
  • ψ(x)={a,x=[b,x= ]ε,x=c,x= 

Teorem, , bağlamdanL

DTR={[n]nmmn,mN} .

Örnek 2

Bu ABS içerik içermez.L={bkal(bc)manbok,l,m,n,oN,ko,2l=n,m2}

Burada bir parantez türünü gerek , diğeri , diğeri modellemek için kullanılan ve başka o neden . Kullanırızabcbbko

  • T={[,,,<} ,
  • R=L(<+>+[++])L([++]<+>+) ve
  • ψ(x)={b,x{,,<}a,x=[aa,x= ]bc,x=ε,else

teoremi uygular. Görmek için uygun sembolleri (örneğin göre, daha aslında daha gerekmez ve ) bir eşit sık meydana zorunda . Bu kısıtlamayı ile tanımladığımız düzenli ifadelere ekleyerek ,L=ψ(DTR)[]wDTR

DTR={<p>po[lmm]lop1,o0,l0,m2} {}

ve onunla

ψ(DTR)={bp+oal(bc)ma2lbop1,o0,l0,m2} {}={bkal(bc)manbok,l,m,n,oN,k>o,2l=n,m2} {}=L.

Gramer ve otomatlara

Sonunda bir otomat veya dilbilgisi almak istiyorsak, önümüzde biraz daha işimiz var.

  • Bir otomat doğru, D_T için ve için bir NFA oluşturun . Eski standart ve biz dili (ayrıca bkz uygun bir temsilinde verilir sağlanan ikincisi için algoritmalar var burada ). Kesişme her ikisinin başka bir standart bir yapı ve tek tek her geçiş için uygulanabilir. R ψDTRψ

  • Bir gramer, için inşa biri Doğru (yine standart olmalı), diğeri almak ve onlara kesiştiği . Ardından kural setine uygulayın (sembol için sembol).D T ψRDTψ

Muhtemelen, bu algoritmik beri kolay karmaşıklık uygun , ve bulunmasında yatmaktadır . Bu yaklaşımın (genellikle) doğrudan PDA / dilbilgisi oluşturmaktan daha basit olup olmadığını bilmiyorum ama eldeki dilin önemli özelliklerine odaklanmaya izin verebilir. Kendiniz deneyinR ψTRψ


Herhangi bir dilin bağlamsız olup olmadığı kesin değildir.
reinierpost
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.