Bağlamsız dillerin döngüsel geçiş altında kapatıldığına dair kolay kanıt


11

Çevrimsel kaydırma (aynı zamanda dönme veya konjugasyon bir dil) LL olarak tanımlanır . Vikipedi'ye göre (ve burada ) bağlamsız diller bu operasyon kapsamında, Oshiba ve Maslov'dan gelen makalelere atıfla kapatılmıştır. Bu gerçeğin kolay bir kanıtı var mı?{ y x x y L }{yxxyL}

Normal diller için kapanma bu formda " Normal operatörlerin çevrim operatörü altında kapalı olduğunu kanıtlayın " şeklinde ele alınmaktadır .

Yanıtlar:


5

Aşağı açılan otomatik verileri kullanmayı deneyebilirsiniz. Orijinal dil için bir aşağı açılan otomat verildiğinde, döngüsel kayma için bir tane oluşturuyoruz. Yeni otomat tekabül eden, iki aşamada faaliyet yy ve xx kelimesinin bir parçası y xyx ( x yxy orijinal dilde). Otomat terminal olmayan bir pop istiyorum zaman ilk aşamada, AA , yerine terminal olmayan bir itme A 'A ; fikir, ilk aşamanın sonunda, yığının ters sırayla, x okunduktan sonra yığında bulunan sembolleri içermesidir.xorijinal otomat tarafından. İkinci aşamada (anahtar olmayan deterministik) 'de, bunun yerine, bir terminal olmayan itme AA , bir terminal olmayan pop bırakılır A 'A . Orijinal otomasyon gerçekten x okunduktan xsonra yığını oluşturabiliyorsa, yenisi tüm yığını tam olarak patlatabilir.

Düzenleme: İşte daha fazla ayrıntı. Bize alfabe Σ , durum Q kümesi, kabul durum F kümesi, terminal olmayan Γ , başlangıç ​​durum q 0 ve bir dizi izin verilen geçiş içeren bir PDA verildiğini varsayalım . Her bir kabul edilebilir bir geçiş formda olan ( q , bir , bir , q ' , α ) , yani bu zaman durumu olarak q , okunması üzerine bir A (ya da bir = £ değenni üst ise, bir serbest geçiş var ki bu durumda,) yığın yığını A ΣQFΓq0(q,a,A,q,α)qaAa=ϵΓ (ya da bir = ε yığın boş olduğunu gösterir,), daha sonra PDA durum için hareket (bir belirli olmayan model) olabilir q ' yerine, bir ile a Γ * .AΓA=ϵqAαΓ

Yeni PDA, her A Γ için yeni bir terminal olmayan A ′'ya sahiptir . Her iki durum için q , q Q ve A Γ { ϵ } için iki durum vardır ( q , q , 1 ) , ( q , q , 2 , A ) . Başlangıç ​​durumları (gerçek başlangıç ​​durumu aralarında ϵ- geçişleri aracılığıyla belirleyici olmayan bir şekilde seçilir ) (AAΓq,qQAΓ{ϵ}(q,q,1),(q,q,2,A)ϵq , q , 1 ) . Her geçiş için ( q , a , A , q , α ) karşılık gelen geçişler ( ( q , q , 1 ) , a , A , ( q , q , 1 ) , α ) ve ( ( q , q , 2 , B(q,q,1)(q,a,A,q,α)((q,q′′,1),a,A,(q,q′′,1),α)) , a , A , ( q , q , 2 , B ) , α ) . Başka geçişler de var.((q,q′′,2,B),a,A,(q,q′′,2,B),α)

Her geçiş için ( q , a , A , q , α ) geçişler vardır ( ( q , q , 1 ) , a , B , ( q , q , 1 ) , B A α ) , burada B Γ { ϵ } ve ϵ =(q,a,A,q,α)((q,q′′,1),a,B,(q,q′′,1),BAα)BΓ{ϵ}ϵ . Her son durum için q F , geçişler vardır ( ( q , q " , 1 ) , ε , A , ( q 0 , q " , 2 , ε ) , A ) , burada bir y olan { ε } .ϵ=ϵqF((q,q′′,1),ϵ,A,(q0,q′′,2,ϵ),A)AΓ{ϵ}

Her geçiş için ( q , a , ϵ , q , α ) geçişler vardır ( ( q , q , 2 , A ) , a , B , ( q , q , 2 , A ) , B α ) , burada A Γ { ϵ } . Her geçiş için(q,a,ϵ,q,α)((q,q′′,2,A),a,B,(q,q′′,2,A),Bα)A Γ {ϵ}( q , a , ϵ , q , A ) , geçişler vardır ( ( q , q , 2 , B ) , a , A , ( q , q , 2 , A ) , ϵ ) , burada B Γ { ϵ } . Her geçiş için ( q , a(q,a,ϵ,q,A)((q,q′′, 2 , B ) ,a,A, (q,q′′, 2 , A ) , ϵ )B Γ { ϵ }, A , q , B ) , "genel geçişler" ( ( q , q , 2 , C ) , a , B A , ( q , q , 2 , C ) , ϵ ) ; bunlar, ara yeni bir durum boyunca iki geçiş dizisi olarak uygulanır. Geçişler ( q , a , ϵ , q ,(q, a , A ,q',B)((q,q′′,2,C),a,BA,(q,q′′,2,C),ϵ)α ) ile | α | 2 de benzer şekilde ele alınır. Her geçiş için ( q , a , A , q , A ) geçişler vardır ( ( q , q , 2 , A ) , a , B , ( q , q , 2 , A ) , B ) , burada B (q,a,ϵ,q,α)|α|2(q,a,A,q,A)((q,q′′,2,A),a,B,(q,q′′,2,A),B)Γ { ϵ } . Geçişler ( q , a , A , q , A α ) benzer şekilde ele alınır. Son olarak, tek bir nihai durum f ve geçişler vardır ( ( q , q , 2 , A ) , ϵ , ϵ , f , ϵ ) .BΓ{ϵ}(q,a,A,q,Aα)f((q,q,2,A),ϵ,ϵ,f,ϵ)

(Kaçırdığım birkaç geçiş olabilir ve atladığım bazı ayrıntılar biraz dağınık.)

Hatırlayın , x y'nin orijinal PDA tarafından kabul edildiği bir y x kelimesini kabul etmeye çalışıyoruz . Bir durum ( q , q , 1 ) , 1. aşamada, q durumunda olduğumuz ve orijinal PDA'nın x okuduktan sonra q durumunda olduğu anlamına gelir . Bir durum ( q , q , 2 , A ) benzerdir, burada A , son açılan A ′'ya karşılık gelir . 1. aşamada, A yxxy(q,q,1)qqx(q,q,2,A)AAAA'yı patlatmak yerine . Bunu x işlenirken üretilen her terminal olmayan için yaparız , ancak yalnızca y işlenirken patlar . 2. aşama olarak, pop izin verilen A ' yerine iterek A . Bunu yaparsak, stokun üst kısmının gerçekten A olduğunu hatırlamamız gerekir ; bu sadece yığın üzerinde simüle edilmiş PDA'da yığının üst kısmı ϵ veya B formuyla aynı olan "geçici" bir şey olmadığında geçerlidir .AxyAAAϵB

İşte basit bir örnek. Bir otomat düşünün x n y n iter A her biri için , x , ve çıkar A her biri için y . Yeni otomat iki biçimdeki kelimeleri kabul eder: y k x n y n - k ve x k y n x n - k . Birinci formdaki kelimeler için, 1. aşama k zamanlarını A itmek , 2. aşama k zamanlarını A itmek, nxnynAxAyykxnynkxkynxnkkAkA- k kere A ve haşhaş n - k kere A . İkinci formdaki kelimeler için önce k çarpı A , sonra pop k çarpı A , n - k çarpı A , aşama 2'ye geçiş ve pop n - k çarpı A .nkAnkAkAkAnkAnkA

Burada, her bir parantez türünün hemen torunları farklı bir türe ait olması gereken çeşitli türlerdeki ("()", "[]", "<>") dengeli parantezlerin dili için daha karmaşık bir örnek verilmiştir. Örneğin, "([] <>)" tamam, ancak "()" yanlış. Her bir "(" biz itmek için A üstü yığın değilse bir her biri için, ")," pop A . Benzer şekilde B , C , "[]" ve "<>" ile ilişkilidir. Burada ">) ([()] <". Biz tüketmek ">)", itme kelimeyi kabul nasıl C ' A ' , ve geçiş aşaması 2. Biz tüketmek "(" için A haşhaş ve yığın A'nın hatırlanması . "[()]" Tüketiyoruz, itiyoruz ve patlıyoruzA AABCCAAAB bir ; B'yi iterken, "gerçek" yığının üst kısmının A olduğunu biliyoruz ve bu nedenle köşeli parantezlere izin veriliyor (">) (() <" tarafından kandırılmayacağız); A'yı iterken, yığının üst kısmı B ( ϵ veya X formunda olmayan) olduğundan, B'nin de "gerçek" yığının üstüolduğunu biliyoruzve bu nedenle yuvarlak parantezlere izin verilir ( yığının üstündeki gölge A )olmasına rağmen). Son olarak, "<" ve pop C tüketiyoruz.BABAABϵXBAC


Üzgünüm, anlamakta zorlanıyorum - daha fazla açıklayabilir misiniz? Otomasyon nerede başlar ve geçişleri nelerdir? Ve her yığın sembolü için A A anahtarı oluyor mu? Teşekkürler! AA
usul

Çok ilginç bir öneri. Teşekkürler. Bunu batırmak için biraz çiğneyeceğim.
Hendrik

@usul, Detayları kendiniz doldurmanız gerekecek. Anahtar A A ' (ilk aşamada) otomat pop "istediğini" ne zaman gerçekleşmesi gerektiğini A ama yapamıyor ve bunun yerine iter A ' . Bunu deterministik olmayan bir hareket olarak düşünebilirsiniz. AAAA
Yuval Filmus

@Yuval: üzgünüm ama bunu yapamam. Fikrinizi anladığım gibi, yeni otomat y parçasını simüle ederek , patlamaları ve itmeleri değiştirerek başlar . Ardından , y üzerinde okurken orijinal otomanın α ile başladığı yığında α oluşturun . Waht iterek orijinal başlar mı? Sonra nwe otomatının boş yığından çıkması gerekir. Hala sezgilerinizin değerli olduğunu düşünüyorum, ancak biraz daha fazla özen gerekiyor gibi görünüyor. yααy
Hendrik

@Hendrik, özür dilerim, ama karşı örneğini takip edemem. Yeni otomatın hangi noktada boş yığından çıkması gerektiğini düşünüyorsunuz?
Yuval Filmus

4

Greibach normal formunu düşünün . Eğer tek değişiklik yapımları gereken bir kaydırılmış bir dil inşa etmek S alfa A 1 ... A n için S A 1 ... A n a ve yeni bir terminal dışı eklemek S ' gibi davranacağını o S için kullanılan durumda bazı bazı üretim başvurulan S .SαA1AnSA1AnαSSS


Teşekkürler, ama bu tek bir harfle değişir. Rastgele sayıda harfle genel rotasyon ile ilgileniyorum.
Hendrik Jan

3
@HendrikJan, Eğer shift 1 ( L ) bağlam içermiyorsa, shift n ( L ) = shift 1 ( shift 1 ( ( L ) )) kesinlikle bağlamdan bağımsız olacaktır. yöntemi uygulayarak, bir öneride , n kere. Ayrıca gerçekleştirebilmesi kayması n, ( L ) "düzleşme" verilen gramer doğrudan gramer. örneğin, eğer , n = 2 ve gramer yapımları olan Sα A B ve A β C , S α β C B üretimi eklerve döndürürsünüz. Tabii ki, dilbilginizin boyutu çok hızlı büyüyebilir.
Karolis Juodelė

1
Sabit n için haklısın. Fakat burada n sabittir veya sınırlıdır. Örneğin, L = { a n b nn 0 } ise { a k b n a k + = n } { b k a n b k + = n } elde ederiz .
Hendrik Ocak

@HendrikJan, anlıyorum. Yanlışlıkla sorunun sonlu bir kayma ile ilgili olduğunu varsaydım. Cevabımı tekrar gözden geçireceğim ...
Karolis Juodelė

4

Eski Hopcroft ve Ullman klasik Otomata Teorisine Giriş (1979) ' u kontrol etmek iyi bir fikirdi . Çevrim altındaki kapatma Egzersiz 6.4c'dir ve S ** olarak işaretlenmiştir. Çift yıldız, kitaptaki en zor sorunlardan biri olduğu anlamına gelir. Neyse ki S, bir çözümle seçilen sorunlardan biri olduğunu gösteriyor.

Çözüm aşağıdaki gibidir. Chomsky normal formda bir CFG alın. Herhangi bir derivasyon ağacını düşünün ve temel olarak ters çevirin. Orijinal ağaçta S = X 1 , X 2 , , X n yolunu düşünün . Solda ağacın x 1 , x 2 , , x n sağına katkıları vardır y 1 , y 2 , , y n , yani türetilen dize x 1 x 2x n'ye eşittiry ny 2 y 1 . (Aslında yol sola devam ettiğinde dilbilgisi CNF olduğundan, katkı sağda olacak ve karşılık gelen x i boş olacak vb.)

Ağaç baş aşağı bir yol vardır S ' , X n , ... X 2 , X 1 katkılarıyla y n , ... , y 2 y 1 sola ve x n , ... , x 2 x 1 sağa, yani sonuç y ny 2 y 1 x 1 x 2x n için bir türevdir . Gereğince, gerektiği gibi.

Yapının tüm detayları kitapta verilmiştir.

Bunun Yuval tarafından (kabul edilen) çözümü nasıl hatırlattığına dikkat edin. Patlatılan yerine itilen terminaller yığın üzerinde ters sıradadır. Ağaçta baş aşağıya oldukça benzer.

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.