Dilbilgisinin kesin olduğunu nasıl kanıtlayabilirim?


25

Benim sorunum bir gramerin net olmadığını nasıl kanıtlayabilirim? Aşağıdaki gramer bilgisine sahibim:

Sstatementif expression then Sif expression then S else S

ve bunu net olmayan bir gramer için yapın, bunun doğru olduğunu düşünüyorum:

  • SS1S2

  • S1if expression then Sif expression then S2 else S1

  • S2if expression then S2 else S2statement

Belirsiz bir gramerin her dönem için bir ayrıştırma ağacına sahip olduğunu biliyorum.

Yanıtlar:


20

En az bir dilbilgisi dili için netliğini kanıtlamanın bir yolu vardır . İki adımdan oluşur:LG=(N,T,δ,S)L

  1. Kanıtlamak .LL(G)
  2. Kanıtlamak.[zn]SG(z)=|Ln|

İlk adım oldukça açık: Gramerin istediğiniz kelimeleri (en azından) ürettiğini, bunun doğruluğunu gösterir.

İkinci adım, uzunluklu kelimeler için çok sayıda sözdizimi ağacına sahip olduğunu , nin uzunluklu kelimeleri - 1 ile olduğunu gösterir. Chomsky ve Schützenberger [1] 'e geri dönen yapı işlevini kullanır , yanin L n GGnLnG

SG(z)=n=0tnzn

ile sözdizimi ağaç sayısı uzunluğu kelimeleri alır . Tabii kiBunun çalışması için.G n | L n |tn=[zn]SG(z)Gn|Ln|

Güzel bir şey olduğunu için kapalı bir form bulma rağmen, bağlamdan-bağımsız diller için elde etmek kolay (genellikle) olan zor olabilir. Transform uç-olmayan bir tane değişken ile bir işlev denklem sisteme:t n GSGtnG

[A(z)=(A,a0ak)δ i=0k τ(ai) :AN] with τ(a)={a(z),aNz,aT.

Bu göz korkutucu görünebilir, ancak örnekte açıkça görüleceği üzere yalnızca sözdizimsel bir dönüşümdür. Fikri oluşturulan uç semboller üs sayılır olmasıdır ve sistem aynı biçime sahiptir, çünkü , olarak toplam olarak genellikle meydana gelir terminalleri ile üretilebilir . Detaylar için Kuich [2] 'e bakınız.G z n n GzGznnG

Bu denklem sisteminin çözümü (bilgisayar cebiri!), ; şimdi "sadece" katsayıyı çekmelisiniz (kapalı, genel biçimde). TCS Kısa Notlar ve bilgisayar cebir genellikle bunu yapabilirsiniz.S(z)=SG(z)


Örnek

Basit dilbilgisi kurallarını düşününG

SaSabSbε .

(adım 1, indüksiyonla ispat) olduğu açıktır . Var uzunluğunun palindrom ise da olduğu, , aksi.2 , nL(G)={wwRw{a,b}} nn02n2nn0

Denklem sisteminin verimini ayarlama

S(z)=2z2S(z)+1

kimin çözümü

SG(z)=112z2 .

katsayıları palindromların sayıları ile çakışır , bu nedenle belirsizdir. GSG G


  1. Bağlamsız Dillerin Cebirsel Teorisi, Chomsky, Schützenberger (1963)
  2. Bağlamsız dillerin entropisi hakkında Kuich (1970)

3
@Raphael’in bildiği gibi, belirsizlik kesin değildir, bu nedenle adımlarınızdan en az biri mekanize edilemez. Hangileri hakkında fikrin var mı? için kapalı bir form musunuz? tn
Martin Berger

2
Derecesi çok yüksekse denklem sistemi algoritmik olarak çözülemeyebilir ve kesin katsayıları üreteç fonksiyonlarından çıkarmak (çok) zor olabilir. Not diyelim ki, küçük dereceden denklem sistemlerine Chomsky Normal Form açar - - "uygulama" olarak, olsa da, bir çoğu kez küçük "derecesi" nin grammars ile ilgilenen ve en azından almak için yöntem vardır için -asymptotics katsayıları; bu belirsizliği sağlamak için yeterli olabilir. kanıtlamak için, katsayıları çekmeden göstermenin yeterli olduğunu unutmayın; Bu kimliği kanıtlamak zor olsa da. S L ( z ) = S G ( Z )SL(z)=SG(z)
Raphael

@Raphael teşekkür ederim. Örneğin Chomsky normal formunu kullansa bile, kararsızlığın nasıl ortaya çıktığını ayrıntılı olarak ortaya çıkaran herhangi bir metni biliyor musunuz? (Kuich'i alamam.)
Martin Berger

@MartinBerger Yapılacaklar listesine sadece yorumunuzu yeniden keşfettim; uzun süre sessizlik için üzgünüm (Sanırım) genel olarak hesaplanamayan üç adım vardır: 1) belirleyin . 2) Hesapla. 3) belirleyin . Özellikle, 2) için kullanılacak gösterimi nedir? | L n | [ z n ] S g ( z ) LSG|Ln|[zn]Sg(z)L
Raphael

nin temsili neden bir problem? Örneğin derleyiciler için CFG'leri temsil etmenin çoklu yollarından herhangi birini kullanabiliriz. Belki nasıl temsil ? L nLLn
Martin Berger

6

Bu iyi bir soru, ancak bazı Google çalışanları size belirsizliğe karar vermek için genel bir yöntem olmadığını söylerdi , bu yüzden sorunuzu daha belirgin hale getirmeniz gerekiyor.


2
OP, algoritmalar değil, prova teknikleri ister.
Raphael

Ben de öyle düşünüyorum; soruda söz edilebilir.
reinierpost

1
Google hakikat meselesi değildir, çünkü bilgili demokratik değildir ve Google sonuçlarıdır. Bu durumda Google’a güvenmem, çünkü insanlar kopyaladıklarının doğruluğunu kontrol etmeden sıklıkla birbirlerini kopyalarlar. Bir kanıt göstermeden, yanlış olabilirler.
SasQ

5
@SasQ: Kelimemi tam anlamıyla okudun. Google’ın bana verdiği şey şeyleri açıklayan atiküllerin URL’leri.
reinierpost

4

Bazı gramerler için, indüksiyonla (kelime uzunluğunun üzerinde) ispat mümkündür.


Örneğin göz önünde dilbilgisi üzerinde , aşağıdaki kurallara göre verilen:Σ = { a , b }GΣ={a,b}

SaSabSbε

in bütün kelimeleri - sadece - yalnızca bir tane sol türetme var.L ( G ) ε1L(G)ε

Bazı için nin bütün kelimelerinin sadece bir tane sol türetme olduğunu varsayın .n NnnN

Şimdi bazı için rasgele düşünün . Açıkçası, . Eğer , her sol türetme ilk kural olması gerektiğini biliyoruz ; eğer , . Bu tüm davaları kapsar. İndüksiyon hipotezi ile için tam olarak bir tane sol türev olduğunu biliyoruz . Kombinasyonda, için de tam bir sol türev olduğu sonucuna vardık . n > 0 w 1Σ w 1 = a S a S a w 1 = b S b S b w ww=w1wwnL(G)Σnn>0w1Σw1=aSaSaw1=bSbSbww


Bu zorlaşırsa

  • birden fazla terminal yok,
  • dilbilgisi doğrusal değildir ve / veya
  • gramer özyinelemelidir.

Tüm dilbilgisi formlarına (dilbilgisi verimsiz terminalleri yoksa) ve "terminal" olmayan terminallere yönelik iddiayı güçlendirmeye yardımcı olabilir.

Ben düşünüyorum Greibach Normal forma dönüştürme güzel sol özyineleme özen edebilir ilk bu adımı uygulayarak için, (me) belirsizliği korur.

Anahtar, en azından bir türev adımını düzelten (en azından) her kelimenin bir özelliğini tanımlamaktır . Gerisi indüktif olarak takip eder.


3

Temel olarak, bu bir çocuk üretimi sorunu. İlk ifadeyle başlayın ve çocuklarını yaratın .... Özyinelemeli bir şekilde (DFS) yapmaya devam edin ve epeyce bir yinelemeden sonra, aynı genişletilmiş ifadeyi iki farklı çocuktan üretip üretemediğinizi görün. Bunu yapabiliyorsanız, belirsizdir. Ancak bu algoritmanın çalışma zamanını belirlemenin bir yolu yoktur. Belki de 30 seviye çocuk ürettikten sonra güvenli olduğunu varsayalım :) (Tabii 31'inci bomba olabilir)


1
OP, algoritmalar değil, prova teknikleri ister.
Raphael

2
Bu bir gramerin belirsiz olup olmadığını kanıtlamanın bir yolu olamaz. Nitekim, bu bombalamanın gerçekleştiği zaman kararsızdır.
Sнаđошƒаӽ
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.