Czy dany język regularny zawiera nieskończony podzbiór bez prefiksów?

11

Zestaw słów nad skończonym alfabetem nie zawiera prefiksu, jeśli nie ma dwóch odrębnych słów, w których jedno jest prefiksem drugiego.

Pytanie brzmi:

Jaka jest złożoność sprawdzania, czy zwykły język podany jako NFA zawiera nieskończony podzbiór bez prefiksów?

Odpowiedź (z powodu Michaiła Rudoya, tutaj poniżej) : Można to zrobić w czasie wielomianowym, a myślę, że nawet w NL.

Parafrazując odpowiedź Michaiła, niech będzie wejściowym NFA w normalnej formie (bez przejść epsilon, przycinanie) i niech (odpowiednio ) jest język uzyskać poprzez stan jak stanu początkowego i jako stanu końcowego (odp. stan jako inital i zestaw jako końcowy). Dla słowa niech będzie nieskończonym słowem uzyskanym przez iterację .( Σ , q 0 , F , δ ) (Σ,q0,F,δ)L [ p , r ] L[p,r]L [ p , R ] L[p,R]p p{ r } {r}p pR Ru uu ωuω uu

Następujące są równoważne:

  1. Język L [ q 0 , F ]L[q0,F] zawiera nieskończony podzbiór bez prefiksów.
  2. q QqQ ,u L [ q , q ] { ε } uL[q,q]{ε} v L [ q , F ]vL[q,F] więcvv nie jest przedrostkiemu ωuω .
  3. qQqQ L[q,q]{ε}L[q,q]{ε} uL[q,q]uL[q,q] vL[q,F]vL[q,F] więcvv nie jest prefiksemuωuω .

Dowód:

3 2 trywialne.

Dla 2 1 wystarczy zobaczyć, że dla dowolnego wL[q0,q]wL[q0,q] mamy, że w(u|v|)vw(u|v|)v jest nieskończonym podzbiorem L[q0,F]L[q0,F] .

Wreszcie, 1 3 jest dowodem „poprawności” w odpowiedzi Michaiła.

Googlo
źródło

Odpowiedzi:

7

Twój problem można rozwiązać w czasie wielomianowym.

Na początek przekonwertuj podany NFA na równoważny NFA z następującymi dodatkowymi właściwościami:

  • Nie ma przejść epsilon
  • Wszystkie stany są osiągalne od stanu początkowego

Pomocny podprogram

Załóżmy, że mamy NFA NN , stan qq i niepusty ciąg ss . Poniższy podprogram pozwoli nam ocenić wartość prawdy następującego wyrażenia: „każda ścieżka w NN od stanu qq do stanu akceptacji odpowiada ciągowi, który jest prefiksem ciągu s nsn dla niektórych nn .” Ponadto ten podprogram będzie działał w czasie wielomianowym.

Najpierw zbuduj NFA SS z | s | + 1|s|+1 stanów, które akceptuje wszystkie ciągi, które nie są prefiksy s nsn dla dowolnego nn ( | s ||s| nie akceptują stany w pętli, aby śledzić, gdzie w „wzór” na s s s s s ...sssss jesteśmy tak daleko, i jeden akceptuje stan, jeśli już odeszliśmy od tego wzoru). Następnie skonstruuj NFA N ',N który jest dokładnie jak N,N ale ma qq jako stan początkowy. Na koniec skonstruuj ostateczną NFA N N′′którego językiem jest przy użyciu standardowej konstrukcji skrzyżowania NFA. Zauważ, że wszystkie te konstrukcje są wielomianowe pod względem wielkości danych wejściowych.L(N)L(N′′)L(S)L(N)L(S)L(N)

Następnie po prostu sprawdź, czy język jest pusty (co można zrobić w czasie wielomianowym za pomocą prostego wyszukiwania grafowego). wtedy i tylko wtedy, gdy , lub innymi słowy, każdy łańcuch w nie jest w L ( S ) . Innymi słowy, język N jest pusty wtedy i tylko wtedy, gdy N akceptuje tylko ciągi znaków, które są prefiksami s n dla niektórych n . Można to przeformułować jako dokładnie stwierdzenie, które próbowaliśmy ocenić: „każda ścieżka w N od stanu qN N′′ L ( N ) = L(N′′)=L ( S ) L ( N ) = L(S)L(N)=L ( N )L(N)L(S)N′′NsnnNqstan akceptacji odpowiada ciągowi, który jest przedrostkiem ciągu s nsn dla niektórych nn . "

Główny algorytm

Rozważ zestaw stanów w NFA, które są w jakiejś pętli. Dla każdego takiego stanu qq wykonaj następujące czynności:

Niech P 2P2 będzie dowolną prostą pętlą zawierającą qq . Niech as jako ciąg odpowiadający pętli P 2P2 . Ponieważ NFA nie ma przejść epsilon, ss nie jest pusty. Następnie zastosuj podprogram do NFA, stan qq i łańcuch ss . Jeśli podprogram mówi nam, że każda ścieżka rozpoczynająca się od qq w NFA i kończąca się na stanie akceptacji odpowiada prefiksowi s nsn dla niektórych n,n to przechodzi do następnego stanu qq . W przeciwnym razie wyjdź, że dany język NFA zawiera nieskończony podzbiór wolny od prefiksów.

Jeśli spróbujemy każdego stanu q,q który jest w pętli, a algorytm nigdy nie wyprowadza danych wyjściowych, oznacza to, że język danego NFA nie zawiera nieskończonego podzbioru wolnego od prefiksów.

Prawidłowość (pierwsza połowa)

Po pierwsze, załóżmy, że powyższy algorytm stwierdza, że ​​dany język NFA zawiera nieskończony podzbiór wolny od prefiksów. Powiedzmy, że ta moc została wybrana przy rozpatrywaniu trochę pętli P 2P2 i niektóre państwa qq . Tak jak poprzednio, as jest łańcuchem odpowiadające P 2P2 . Następnie wiemy zgodnie z podprogramem, że nie każda ścieżka rozpoczynająca się od qq w NFA i kończąca się na stanie akceptacji odpowiada przedrostkowi s nsn dla niektórych nn (ponieważ jest to jedyne wyjście podprogramu, które prowadzi do głównego algorytmu wyjście w tym qq ).

Niech P 3P3 będzie ścieżką, której istnienie jest zapewnione przez podprogram: ścieżka od qq do stanu akceptacji, tak że odpowiadający ciąg tt nie jest przedrostkiem s nsn dla żadnego nn .

Niech P 2P2 składa się z mm kopii P 2,P2 gdzie mm jest wystarczająco duży, aby m | s | > | t | m|s|>|t|. Ponieważ P 2P2 jest pętli Pq , P ' 2P2 mogą być traktowane jako tor z Qq na Pq . Ciąg odpowiadający P 2P2 to s msm

Niech P 1P1 będzie ścieżką od stanu początkowego do qq (która istnieje, ponieważ każdy stan jest osiągalny od początku) i niech rr będzie łańcuchem odpowiadającym tej ścieżce.

Zatem ścieżka składająca się z P 1P1 , xx kopii P 2P2 i P 3P3 jest ścieżką obliczeń akceptujących. Ciąg odpowiadający tej ścieżce to r ( s m ) x tr(sm)xt . Zatem NFA akceptuje każdy ciąg postaci r ( s m ) x tr(sm)xt . Jest to nieskończony zestaw ciągów akceptowanych przez NFA i twierdzę, że ten zestaw ciągów nie zawiera prefiksów. W szczególności załóżmy, że r ( s m ) x tr(sm)xt jest przedrostkiem r (y m ) r tr(sm)yt z y > xy>x . Innymi słowy, tt jest prefiksem ( s m ) y - x t(sm)yxt . Ponieważ ( s m ) y - x(sm)yx ma długość m ( y - x ) | s | m | s | > | t | m(yx)|s|m|s|>|t|oznacza to, że tt jest prefiksem ( s m ) y- x = s m ( y - x )(sm)yx=sm(yx) . Ale wiemy na podstawie wyniku podprogramu, żettnie jest przedrostkiem s nsn dla żadnegonn. Zatemr( s m ) x tr(sm)xtnie może być prefiksemr( s m ) y tr(sm)yt, a zgodnie z potrzebami zestaw ciągów znaków nie zawiera prefiksu.

Dlatego pokazałem, że jeśli główny algorytm wypisuje, że język danego NFA zawiera nieskończony podzbiór wolny od prefiksów, to w rzeczywistości tak jest.

Prawidłowość (druga połowa)

Następnie pokażę drugą połowę: jeśli język danego NFA zawiera nieskończony podzbiór wolny od prefiksów, to główny algorytm wypisze ten fakt.

Załóżmy, że dany język NFA zawiera nieskończony podzbiór bez prefiksów. Niech AA będzie zbiorem (akceptujących) ścieżek obliczeniowych odpowiadających tym ciągom. Zauważ, że AA jest nieskończonym zestawem akceptujących ścieżek obliczeniowych, których odpowiadające ciągi nigdy nie są przedrostkami.

Powiedz, że stan „zapętla się” w NFA, jeśli istnieje pętla w NFA przez ten stan, a w przeciwnym razie „nie zapętla”. Rozważ wszystkie ścieżki od stanu początkowego do dowolnego stanu zapętlenia, które przechodzą tylko przez stany niepętlowe (z wyjątkiem jednego stanu zapętlenia, w którym się kończą). Niech PP będzie zbiorem tych ścieżek. Każda ścieżka p PpP nie może mieć pętli, ponieważ wówczas stany w tej pętli byłyby stanami pętli, a zatem pp przechodziłoby przez stan pętli. Tak więc długości ścieżek w PP są ograniczone przez liczbę stanów w NFA, a zatem PP jest skończone (na przykład, jeśli stan początkowy jest stanem zapętlonym, wówczas jedyną taką ścieżką jest pusta ścieżka).

Możemy podzielić AA na | P | + 1|P|+1 podzestawy na podstawie tego, jak zaczynają się ścieżki obliczeniowe w A. AW szczególności, w przypadku p PpP , niech P jest zbiorem wszystkich ścieżek obliczeń w A, które zaczynają się od ścieżki P i pozwolić B jest zbiorem wszystkich innych ścieżek A . Oczywiście, wszystkie P S i B są rozłączne i ich suma jest cały zestaw . Ponadto B.ApApBAApBABzawiera tylko ścieżki, które nigdy nie przechodzą przez stan zapętlenia, a zatem nigdy nie zapętlają; zatem BB jest skończone. Możemy zatem dojść do wniosku, że niektóre A pAp muszą być nieskończone (w przeciwnym razie AA byłby związkiem skończonych wielu zbiorów skończonych).

Ponieważ A pAp jest nieskończone, istnieje nieskończenie wiele ścieżek obliczeniowych, z których żaden łańcuch nie jest przedrostkiem, które akceptują ścieżki zaczynające się od pp . Niech qq będzie stanem osiągniętym na końcu ścieżki pp . Możemy dojść do wniosku, że istnieje nieskończenie wiele ścieżek akceptujących, nazwijmy ten zestaw A A , zaczynając od qq wszystkie, które odpowiadają ciągom znaków, które nie są przedrostkami.

Podczas głównego algorytmu uruchamiamy podprogram w stanie qq i niektórych ciągach ss . Ten podprogram mówi nam, czy każda akceptowalna ścieżka rozpoczynająca się od qq odpowiada ciągowi, który jest prefiksem s nsn dla niektórych nn . Gdyby tak było, wszystkie nieskończenie wiele ścieżek akceptujących w A 'A byłyby prefiksami s nsn dla różnych nn , co oznaczałoby, że wszystkie one są przedrostkami siebie. Tak nie jest, więc dochodzimy do wniosku, że gdy główny algorytm uruchamia podprogram w stanie qq, wynikiem jest inny możliwy wynik. To jednak prowadzi główny algorytm do wyjścia, że ​​język NFA zawiera nieskończony podzbiór wolny od prefiksów.

To kończy dowód poprawności.

Michaił Rudoy
źródło
Nie rozumiem, jak działa obsługa pętli, ponieważ dany stan q może być częścią (wykładniczo) wielu pętli. Oczywiście, jeśli dowolne dwie z tych pętli można użyć do wygenerowania nieokresowej sekwencji, to koniec. q
japh
Co rozumiesz przez obsługę pętli? W głównym algorytmie dla każdego stanu q wybierasz tylko jedną pętlę przechodzącą przez q (dowolną pętlę z potencjalnie wykładniczo wielu) i wywołujesz tę pętlę P 2 (posłowie uruchamiasz podprogram w stanie q i ciąg s, gdzie s jest ciąg powiązany z P 2 ). Podprogram zasadniczo zajmuje się sprawdzaniem, czy możliwe jest wygenerowanie nieokresowej sekwencji przy użyciu tej pętli. Jeśli tak, to koniec. Jeśli nie (a co więcej nie dla każdego q ), to cały Twój język jest połączeniem okresowych sekwencji, więc skończymy. qqP2qssP2q
Michaił Rudoy
Aby uczynić moje pytanie jaśniejsze, oto prosty NFA z początkowego stanu q , stanu końcowego T i trzy przejścia: P a q , q b q , q T . Pętla dla a nie wygeneruje ciągów bez prefiksów, ale pętla dla b będzie. qTqaqqbqqaTab
japh
Faktycznie, pętla dla generuje prefiks bezpłatny zestaw: zestaw strun * b w całej użytkowania pętla. W moim algorytmu, jeśli pętla wybrać dla q jest pętla następnie podprogram zadecyduje, że nie, nie każdy akceptując ścieżka zaczynając q ma ciąg postaci * , a więc główny algorytm powie, że nieskończona prefiks -wolny podzbiór istnieje. Jeśli pętla używana przez algorytm dla q jest zamiast tego pętlą b , wówczas podprogram określa, że ​​nie każda ścieżka akceptująca rozpoczynająca się od q ma ciąg postaci baabaaqaqaqbq iw tym przypadku algorytm ma tę samą moc wyjściową. b
Michaił Rudoy
Dziękuję Michaił! Myślę, że twoja odpowiedź rozwiązuje pytanie.
Googlo,
2

Definicje

Definicja 1 : Niech SS będzie zbiorem słów. Mówimy, że SS jest ładnie nieskończenie wolny od przedrostka (wymyślona nazwa na potrzeby tej odpowiedzi), jeśli istnieją słowa u 0 , , u n , u0,,un, i v 1 , , v n , v1,,vn, takie, że:

  • Dla każdego n 1n1 , u nun i v nvn są niepuste i zaczynają się od odrębnych liter;

  • S = { u 0 v 1 , , u 0u n v n + 1 , }S={u0v1,,u0unvn+1,} .

Intuicja polega na tym, że możesz umieścić wszystkie te słowa na nieskończonym ukorzenionym drzewie ( jest to korzeń, są liście i pozostałe są wewnętrzne węzły) o następującym kształcie, tak że słowa w SS są dokładnie etykietami ścieżek od korzenia do liścia:

   u₀    u₁    u₂
■-----•-----•-----•⋅⋅⋅
      |     |     |
      | v₁  | v₂  | v₃
      |     |     |
      ▲     ▲     ▲

Twierdzenie 1.1 : Ładnie nieskończony zbiór bez prefiksów jest bez prefiksów.

Dowód zdania 1.1 : Załóżmy, że u 0u n v n + 1u0unvn+1 jest ścisłym przedrostkiem u 0u m v m + 1u0umvm+1 . Istnieją dwa przypadki:

  • Jeśli n < m,n<m to v n + 1vn+1 jest prefiksem u n + 1u m v m + 1un+1umvm+1 . Jest to niemożliwe, ponieważ u n + 1un+1 i v n + 1vn+1 mają wyraźne pierwsze litery.

  • Jeśli n > m,n>m to u m + 1u n v n + 1um+1unvn+1 jest prefiksem v m + 1vm+1 . Jest to niemożliwe, ponieważ u m + 1um+1 i v m + 1vm+1 mają wyraźne pierwsze litery.

Twierdzenie 1.2 : Ładnie nieskończony zbiór bez prefiksów jest nieskończony.

Dowód tezy 1,2 W dowód 1.1, wykazano, że jeśli n mnm wówczas U 0 ... u n v n + 1u0unvn+1 i U 0 ... U m v m + 1u0umvm+1 nie są porównywalne w celu prefiks. Dlatego nie są równi.


Główny dowód

Twierdzenie 2 : Dowolny nieskończony zbiór bez prefiksów zawiera niezły nieskończony zbiór bez prefiksów.

Twierdzenie 3 : Język zawiera nieskończony zbiór bez prefiksów tylko wtedy, gdy zawiera ładnie nieskończony zbiór bez prefiksów.

Dowód poniżej.

Dowód zdania 3 : według zdania 2. według zdań 1.1 i 1.2.

Twierdzenie 4 : Zbiór ładnie pozbawionych prefiksów podzbiorów języka regularnego (zakodowanych jako nieskończone słowo ¯ u 0 ^ v 1 ¯ u 1 ^ v 2 ¯ u 2u0¯¯¯¯¯v1ˆu1¯¯¯¯¯v2ˆu2¯¯¯¯¯ ) jest ω-ω nieregularny (i ma rozmiar Büchi automat rozpoznający to wielomian wielkości NFA rozpoznającej zwykły język).

Dowód poniżej.

Twierdzenie 5 : Podejmowanie decyzji, czy zwykły język opisany przez NFA zawiera nieskończony podzbiór wolny od prefiksów, można wykonać wielomianem czasowym wielkości NFA.

Dowód twierdzenia 5 : Według twierdzenia 3 wystarczy sprawdzić, czy zawiera on ładnie nieskończony podzbiór wolny od prefiksów, co można zrobić w czasie wielomianowym, budując automat Büchi podany w twierdzeniu 4 i testując niepustość jego język (który można wykonać w czasie liniowo w rozmiarze automatu Büchi).


Dowód propozycji 2

Lemat 2.1 : Jeśli SS jest zbiorem bez prefiksów, to także w - 1 Sw1S (dla dowolnego słowa ww ).

Dowód 2.1 : Z definicji.

Lemat 2.2 : Niech SS będzie nieskończonym zestawem słów. Niech w : = LCP ( S n )w:=lcp(Sn) najdłuższa prefiks wspólne dla wszystkich słów SS . SS i w - 1 Sw1S mają tego samego kardynała.

Dowód 2.2 : Zdefiniuj f : w - 1 S Sf:w1SS przez f ( x ) = w xf(x)=wx . Jest dobrze zdefiniowany przez definicję w - 1 Sw1S , iniekcyjny z definicji ff i przymiotnikowy z definicji ww .

Dowód tezy 2 Budujemy U nun i v nvn przez indukcję nn , z założenia indukcyjnego H nHn składa się z następujących części:

  • (P1)(P1) For all k{1,,n}k{1,,n}, u0uk1vkSu0uk1vkS;

  • (P2)(P2) For all k{1,,n}k{1,,n}, ukuk and vkvk are non-empty and start with distinct letters;

  • (P3)(P3) Sn:=(u0un)1SSn:=(u0un)1S is infinite;

  • (P4)(P4) There is no non-empty prefix common to all words in SnSn. In other words: There is no letter aa such that SnaΣSnaΣ.

Remark 2.3: If we have sequences that verify HnHn without (P4)(P4), we can modify unun to make them to also satisfy (P4). Indeed, it suffices to replace un by unlcp(Sn). (P1) is unaffected. (P2) is trivial. (P4) is by construction. (P3) is by lemma 3.

We now build the sequences by induction on n:

  • Initialization: H0 is true by taking u0:=lcp(S) (i.e. by taking u0:=ε and applying remark 3.1).

  • Induction step: Suppose that we have words u1,,un and v1,,vn such that Hn for some n. We will build un+1 and vn+1 such that Hn+1.

Since Sn is infinite and prefix-free (by lemma 1), it does not contain ε so that Sn=aΣ(SnaΣ). Since Sn is infinite, there is a letter a such that SnaΣ is infinite. By (P4), there is a letter b distinct from a such that SnbΣ is non-empty. Pick vn+1SnbΣ. Taking un+1 to be a would satisfy (P1), (P2) and (P3) so we apply remark 3.1 to get (P4): un+1:=alcp(a1Sn).

(P1) u1unvn+1u1un(SnbΣ)S.

(P2) By definition of un+1 and vn+1.

(P3) a1Sn is infinite by definition of a, and Sn+1 is therefore infinite by lemma 3.

(P4) By definition of un+1.


Proof of proposition 4

Proof of proposition 4: Let A=(Q,,Δ,q0,F) be a NFA.

The idea is the following: we read u0, remember where we are, read v1, backtrack to where we were after reading u0, read u1, remember where we are, ... We also remember the first letter that was read in each vn to ensure that un starts with another letter.

I've been told that this could be easier with multi-head automata but I'm not really familiar with the formalism so I'll just describe it using a Büchi automaton (with only one head).

We set Σ:=¯ΣˆΣ, where the overlined symbols will be used to describes the uks and the symbols with hats for the vks.

We set Q:=Q×({}(Q×Σ)), where:

  • (q,) means that you are reading some un;

  • (q,(p,a)) means that you finished reading some un in the state p, that you are now reading vn+1 that starts with an a, and that once you are done, you will go back to p to read a un+1 that does not start with a.

We set q0:=(q0,) because we start by reading u0.

We define F as F×Q×Σ.

The set of transitions is defined as follows:

  • "un" For each transition qaq, add (q,)¯a(q,);

  • "un to vn+1" For each transition qaq, add (q,)ˆa(q,(q,a));

  • "vn" For each transition qaq, add (q,(p,a))ˆa(q,(p,a));

  • "vn to un" For each transition pap where p is final and letter b distinct from a, add (q,(p,b))¯a(p,);

Lemma 4.1: ¯u0^v1¯u1^v2¯un^vn+1 is accepted by A iff for each n1, un and vn are non-empty and start with distinct letters, and for each n0, u0unvn+1L(A).

Proof of lemma 4.1: Left to the reader.

xavierm02
źródło