Istnieje wiele metod, aby udowodnić, że dany język nie jest regularny , ale co muszę zrobić, aby udowodnić, że jakiś język jest prawidłowy?
Na przykład, jeśli otrzymam informację, że jest regularne, jak mogę udowodnić, że następujące jest również regularne?L ′
Czy mogę narysować niedeterministyczny automat skończony, aby to udowodnić?
Odpowiedzi:
Tak, jeśli możesz wymyślić jedno z poniższych:
dla jakiegoś języka , jest regularne. Istnieje więcej równoważnych modeli , ale powyższe są najczęstsze.LL L
Istnieją również przydatne właściwości poza światem „obliczeniowym”. jest również regularne, jeśliL
możesz go zbudować, wykonując pewne operacje na zwykłych językach, a te operacje są zamknięte dla zwykłych języków , takich jak
i więcej , lub
W podanym przykładzie mamy trochę (regularny) język jako podstawę i chcemy powiedzieć coś o języku z niego wyprowadzonym. Zgodnie z pierwszym podejściem - skonstruuj odpowiedni model dla - możemy założyć dowolny równoważny model dla ; pozostanie oczywiście abstrakcyjne, ponieważ jest nieznany. W drugim podejściu możemy użyć bezpośrednio i zastosować do niego właściwości zamknięcia, aby uzyskać opis dla .L ′ L ′ L L L L ′L L′ L′ L L L L′
źródło
Metody elementarne
Metody logiczne (często stosowane w formalnej weryfikacji)
Metody zaawansowane
Wyrafinowane lematy pompujące. Patrz na przykład
[1] J. Jaffe, Niezbędny i wystarczający lemat pompowania dla zwykłych języków, Sigact News - SIGACT 10 (1978) 48-49.
[2] A. Ehrenfeucht, R. Parikh i G. Rozenberg, Pompowanie lematów dla zbiorów regularnych, SIAM J. Comput. 10 (1981), 536–541.
[3] S. Varricchio, Warunek pompowania dla regularnych zestawów, SIAM J. Comput. 26 (1997) 764–771.
Cóż, quasi-zamówienia. Patrz
[4] W. Bucher, A. Ehrenfeucht, D. Haussler, O wszystkich regulatorach generowanych przez relacje derywacji, Theor. Comput. Sci. 40 (1985) 131–148.
[5] M. Kunz, Regularne rozwiązania nierówności językowych i quasi-zamówienia .
Obsługa racjonalnej serii .N
Metody algebraiczne oparte na Transdukcjach (patrz także Operacje zachowujące zwykłe języki ).
źródło
Odpowiedź Ran G. podaje dość obszerną listę równoważnych modeli, których można użyć do określenia zwykłych języków (i lista jest długa, automaty dwukierunkowe, logika MSO, ale jest to objęte linkiem pod „bardziej równoważnymi modelami ”). I jak podkreśla Raphael, potrzebujemy argumentu, aby przekonać odbiorców, że wybrana reprezentacja jest rzeczywiście poprawna.
Rozpatrując pytanie, dodaje „Na przykład ”. Oznacza to, że musimy podać prawidłową konstrukcję, która przy założeniu , że w każdym z powyższych modeli określimy język , zamienia ten model w jeden dla . Zasadniczo będzie to ten sam typ modelu, ale nie musi tak być: możemy np. Zacząć od deterministycznego FSA dla i skończyć z nieokreślonym dla .L L ′ L L ′… L L′ L L′
Obejmuje to możliwość użycia operacji zamknięcia: w jawnie podanej operacji w przykładzie mamy .L′=(Σ∗∖L)⋅Σ∗
Chodzi mi o to, że odpowiedź jest świetna, ale powinniśmy dodać „konstrukcję od do ”, gdy nie budujemy od podstaw konkretnego języka.L ′L L′
źródło
Od czasu do czasu można spotkać język określony jako „wszystkie ciągi gdzie każdy -elementowe podciąg spełnia ”, gdzie jest jakaś ustalona na stałym poziomie. W takim przypadku język będzie prawidłowy. Chodzi tutaj o zdefiniowanie automatu skończonego, którego niektóre stany „zapamiętują” ostatnio oglądane symboli wejściowych, jak w odpowiedzi na to pytanie .k s k ks k s k k
<some property>
źródło
Inną metodą, nieuwzględnioną w powyższych odpowiedziach, jest skończona transformacja automatu . Jako prosty przykład pokażmy, że zwykłe języki są zamknięte podczas operacji losowej , zdefiniowanej w następujący sposób: Możesz pokazać zamknięcie za pomocą właściwości zamknięcia, ale możesz też pokazać je bezpośrednio za pomocą DFA. Załóżmy, że jest DFA, który akceptuje (dla ). Konstruujemy nowy DFA w następujący sposób:
Bardziej wyrafinowana wersja tej metody wymaga zgadywania . Jako przykład pokażmy, że zwykłe języki są zamknięte podczas cofania , to znaczy (Tutaj .) Jest to jedna ze standardowych operacji zamykania, a zamykanie w odwróceniu łatwo wynika z manipulacji wyrażeniami regularnymi (które można uznać za odpowiednik skończonej transformacji automatu do wyrażenia regularne) - wystarczy odwrócić wyrażenie regularne. Ale możesz również udowodnić zamknięcie za pomocą NFA. Załóżmy, że jest akceptowane przez DFA . Budujemy NFA
(Możemy pozbyć się jeśli pozwolimy na wiele stanów początkowych.) Elementem zgadywania jest tutaj końcowy stan słowa po odwróceniu.q′0
Zgadywanie często obejmuje również weryfikację. Jednym prostym przykładem jest zamykanie w rotacji : Załóżmy, że jest akceptowane przez DFA . Konstruujemy NFA , który działa w następujący sposób. Najpierw NFA zgaduje . Następnie sprawdza, czy i że , przechodząc od do niedeterministycznie. Można to sformalizować w następujący sposób:
Inny wariant techniki obejmuje ograniczniki. Jako przykład rozważmy zmianę zamknięcia odległości edycji : Biorąc pod uwagę DFA dla , e konstruujemy NFA dla następująco:
źródło
Język jest zwykły, jeśli możesz napisać skaner, który decyduje o dowolnych ciągach znaków, niezależnie od tego, czy należą one do języka, używając nie więcej niż stałej ilości pamięci - tzn. Rozpoznanie można wykonać w przestrzeni O (1) .
źródło
Transformacja wyrażeń regularnych jest jednym ze sposobów udowodnienia zamknięcia w niektórych operacjach. Dwa najprostsze przykłady to zamknięcie w wyniku odwrócenia i zamknięcie w przypadku homomorfizmu .
Biorąc pod uwagę wyrażenie regularne reprezentujące język , możemy skonstruować wyrażenie regularne dla , języka odwrotności wszystkich słów w , rekurencyjnie:r L LR L
Wszystkie takie zdarzenie w końcowej zasady . Na przykład możesz sprawdzić, czy . Ustanawia indukcyjne strukturalne że język jest faktycznie . ( 0 ∗ 1 ∗ ) R = 1 ∗ 0 ∗ r R L R(r1r2)R=rR2rR1 (0∗1∗)R=1∗0∗ rR LR
Innym prostym przykładem jest zamknięcie w warunkach homomorfizmu. Biorąc pod uwagę homomorfizm i wyrażenie regularne dla języka , możemy uzyskać wyrażenie regularne dla , zastępując każdą instancję in przez . r L h ( L ) σ r h ( σ )h:Σ→Δ∗ r L h(L) σ r h(σ)
źródło
Innym sposobem jest zbudowanie języka za pomocą operacji, w ramach których wiesz, że są one zamknięte. Jest to rozszerzenie do wyrażania regularnego, ponieważ masz dużo więcej dostępnych operacji (odwróć ciąg, dopełniaj, przecinaj, odcinaj kawałek, po prostu zachowaj część, homomorfizmy i odwrotne homomorfizmy ...)
źródło