Zastosuj algorytm Automat2GReg do automatu o następującej
funkcji przejść:
gdzie jest stanem początkowym oraz .
Rozwiązanie
Pętla w liniach 7.--17. do zbioru doda następujące
produkcje: , , , , ,
, , . Ponieważ stanami końcowymi są i , w pętli (w
liniach 12.--14.) dodane zostaną jeszcze produkcje oraz .
Postępując zgodnie z algorytmem
GReg2Automat, obliczamy funkcję przejść tworzonego automatu
(w tym przypadku niedeterministycznego) o stanach
(stanem początkowym jest ):
, , ,
. Ponieważ w gramatyce istnieje produkcja , stan oznaczamy jako końcowy.
Rozwiązanie punktu 2
Ponieważ w gramatyce występuje produkcja , która ma postać niezgodną z postacią produkcji
będących wejściem algorytmu, przekształcamy gramatykę, usuwając tę
produkcję i dodając dwie inne: oraz . Teraz możemy skonstruować automat. Jego zbiór stanów
to , stanem początkowym jest , a funkcja przejść
zdefiniowana jest następująco:
, , , .
Ponieważ w gramatyce wystąpiły produkcje oraz
, stany oraz są stanami końcowymi.
W wykładzie podany został algorytm Automat2WR1 budujący
wyrażenie regularne na podstawie zadanego automatu. Opiszemy teraz
inną metodę rozwiązania tego problemu, wykorzystującą równania na
językach.
Dany niech będzie automat . Chcemy
zbudować wyrażenie regularne opisujące język akceptowany przez
. Do wyprowadzenia metody potrzebować będziemy lematu
Ardena.
Lemat 0.1. [Arden]
Niech i będą językami regularnymi. Wtedy równanie
posiada jedyne rozwiązanie , które jest językiem
regularnym.
Zdefiniujmy najpierw jako język tych słów, które byłyby
akceptowane przez
, gdyby stanem końcowym był stan
, tzn. gdyby
:
.
Zauważmy, że jeśli do stanu wchodzą strzałki prowadzące ze
stanów odpowiednio z etykietami
(i tylko takie), to
.
Obserwacja ta jest podstawą do konstrukcji metody otrzymywania
wyrażenia regularnego na podstawie automatu. Będziemy budować układ
równań, w którym każde równanie będzie postaci ,
, gdzie traktowane są jak
niewiadome. Następnie układ taki rozwiążemy ze względu na każdą
zmienną (tu pomocny będzie lemat Ardena). Szukanym przez nas
wyrażeniem regularnym będzie wyrażenie postaci ,
gdzie jest zbiorem indeksów stanów końcowych automatu
.
Można postawić w tym momencie pytanie, czy budowany układ równań ma
rozwiązanie, a jeśli tak, to czy jest ono jedyne. Okazuje się że w
rozważanej przez nas sytuacji ma to miejsce, choć dowód tego faktu
nie jest natychmiastowy. Fakt ten, podobnie jak lemat Ardena,
podajemy tutaj bez dowodu.
Algorytm Automat2WR2 - buduje inną metodą wyrażenie
regularne opisujące język akceptowany przez automat skończony
Funkcja rozwiąż w algorytmie Automat2Wr2
rozwiązuje układ równań (mający na podstawie wcześniejszych uwag
jednoznaczne rozwiązania), zwraca obliczone języki , .
Rozwiązanie można wykonać metodą rugowania, przechodząc od do
. Równanie rozwiązujemy, korzystając
ze wzoru w lemacie Ardena (rolę w lemacie odgrywa ) i
podstawiamy do pozostałych równań (tzn. równań dla ).
Mając już wyliczone , wyliczamy kolejne idąc od do
. Dla lepszego zrozumienia metody przedstawiamy następujący
przykład.
Przykład 1.1.
Dany niech będzie automat pokazany na rysunku 1 (pominęliśmy tu dla uproszczenia jedną
strzałkę wychodzącą ze stanu w celu uniknięcia zwiększenia
liczby stanów, gdyż chcąc formalnie narysować automat
deterministyczny, musielibyśmy dodać stan i zdefiniować
, , ale widać, że wcale nie
trzeba wtedy obliczać języka , gdyż z tego stanu nie da się już
wyjść - jest to tzw. sink state).
Rysunek 1
Ułóżmy równania do naszego układu równań. Mamy:
Mamy więc . Korzystając z lematu Ardena,
otrzymujemy . Podstawiając obliczone
do równania i obliczając pozostałe , otrzymujemy
ostatecznie:
Po pierwsze zauważmy, że w obliczeniach nie musimy
uwzględniać stanu ani języka stowarzyszonego z tym
stanem. Układ równań będzie więc posiadał 3 równania o 3
niewiadomych , oraz :
Teraz w równaniu drugim zastępujemy prawą stroną równania pierwszego:
.
Korzystamy z lematu Ardena i otrzymujemy
. Podstawiamy to do równania
i otrzymujemy ostatecznie:
.
Można pokazać, że wyrażenie to jest równoważne następującemu:
.
Ćwiczenie 4
Dane niech będą automaty: -stanowy i
-stanowy , oba nad alfabetem i akceptujące
odpowiednio języki i . Pokaż, że
problem stwierdzenia, czy dla dowolnego zachodzi , jest rozstrzygalny:
poprzez skonstruowanie niedeterministycznego automatu posiadającego stanów,
poprzez skonstruowanie deterministycznego automatu -stanowego.
Rozwiązanie punktu 1
Niech
oraz będą zadanymi
automatami. Konstruujemy automat
taki, że , ,
, gdy , , gdy , a funkcja przejść jest zdefiniowana następująco:
Zbiór stanów końcowych automatu staje się więc zbiorem
stanów początkowych dla automatu , przy czym, jeśli
, to każdy ze stanów jest równocześnie stanem
końcowym w automacie . Zauważ, że:
.
Oba warunki występujące po prawej stronie równoważności są
algorytmicznie weryfikowalne i da się je sprawdzić w czasie
. Konstrukcja automatu w oczywisty sposób
również jest algorytmizowalna i da się ją wykonać w czasie
.
Ponieważ , więc posiada stanów.
Rozwiązanie punktu 2
Skorzystaj z konstrukcji z ćwiczenia 1 z ćwiczeń 7
Ćwiczenie 5
Skonstruuj algorytm (oraz określ jego złożoność) dla następującego
problemu (tym samym dowodząc jego rozstrzygalności):
Dany jest automat . Czy
?
Rozwiązanie
Bez straty ogólności możemy założyć, że automat jest
deterministyczny. W algorytmie wykorzystamy procedurę
Zaznacz przedstawioną poniżej.
Algorytm wykonuje przeszukanie automatu metodą DFS. Jego złożoność jest więc - liniowa ze względu na ilość stanów automatu. Złożoność pamięciowa także wynosi .
Algorytm PustośćJęzyka - sprawdza, czy język akceptowany
przez zadany automat jest pusty
Skonstruuj algorytmy dla następujących problemów rozstrzygalnych:
Równoważność dowolnych automatów i .
Nieskończoność języka dla dowolnego automatu .
Wskazówka do punktu 1
Metoda pierwsza: istnieje dokładnie jeden
automat minimalny. Metoda druga: rozważ automat akceptujący
przecięcie tak jak w punkcie
(2) zadania 4. punkt 2. Jaki warunek muszą spełniać stany , aby ?
Wskazówka do punktu 2
1. Automat akceptuje nieskończenie wiele słów,
gdy w wyrażeniu regularnym odpowiadającym temu automatowi występuje
gwiazdka Kleene'ego. Użyj metody z twierdzenia Kleene'ego
(Twierdzenie 1.1, punkt 5.).