Tematem tego wykładu jest pokazanie, że wzorce, wyrażenia
regularne i automaty skończone mają taką samą siłę wyrazu.
Wszystkie one opisują dokładnie języki regularne.
Pokażemy, że
,
i
.
-

- Oczywiste, bo każde wyrażenie regularne jest wzorcem.
-

- Indukcyjnie ze względu na strukturę wzorca
budujemy automat z
-przejściami,
o jednym stanie początkowym i jednym stanie akceptującym,
który akceptuje dokładnie słowa pasujące do wzorca.
- Dla wzorców postaci
,
i
a (dla
) odpowiednie automaty
przedstawiono na poniższym rysunku.
 |
a |
|
- Dla wzorca postaci
konstrukcja przebiega w kilku krokach:
- Niech M1 będzie automatem skonstruowanym dla
wzorca
,
.
- Niech
będzie automatem powstałym w wyniku
eliminacji
-przejść i determinizacji
automatu M1.
- Niech
.
Analogicznie jak w dowodzie twierdzenia
, M3
akceptuje dopełnienie języka akceptowanego przez M2:
- Niech M4 będzie automatem powstałym z M3
poprzez dodanie: nowego stanu akceptującego,
-przejść z dotychczasowych stanów
akceptujących do nowego stanu akceptującego i zmianą
dotychczasowych stanów akceptujących na
nieakceptujące.
Konstrukcję tę przedstawia poniższy rysunek:
Konstrukcja ta nie zmienia języka akceptowanego
przez automat,
, natomiast
automat ten spełnia przyjęte założenia o jednym
stanie początkowym i jednym stanie akceptującym.
- Jeśli wzorzec jest postaci:
,
lub
, to konstruujemy automat z
automatów akceptujących
i
, w
sposób przedstawiony na rysunku.
Stany akceptujące zmieniamy tak, że tylko stan
zaznaczony na rysunku pozostaje akceptujący:
- Dla wzorców postaci
i
wykorzystujemy tożsamości:
i wcześniej opisane konstrukcje.
-

- Niech
będzie danym
automatem skończonym (deterministycznym lub niedeterministycznym).
Konstrukcja wyrażenia regularnego opisującego język
akceptowany przez M przebiega rekurencyjnie.
Budujemy wyrażenia regularne opisujące coraz większe
fragmenty automatu.
Niech u i v będą stanami, a X będzie zbiorem stanów,
,
.
Wyrażenie regularne
opisuje te słowa,
za pomocą których można przejść z u do v zatrzymując
się po drodze jedynie w stanach z X.
Wyrażenie
definiujemy indukcyjnie ze względu na
|X|.
- Załóżmy, że
.
Oznaczmy przez
wszystkie znaki
powodujące przejście z u do v.
Możliwe są dwa przypadki: u=v lub
:
Jeśli
i nie ma żadnych przejść z u do v,
to wczytanie żadnego słowa nie spowoduje przejścia z u
do v.
Tak więc:
- Załóżmy, że
.
Niech q będzie dowolnym stanem należącym do X,
.
Wówczas możliwe są dwa rodzaje przejścia z u do v:
Łącząc obie powyższe możliwości, wszystko co może zostać
wczytane w trakcie przejścia z u do v, po drodze
zatrzymując się w stanach należących do X, jest
opisane przez:
Słowa, które są akceptowane przez M to te, które mogą
zostać wczytane przy przejściu z jednego ze
stanów początkowych do jednego ze stanów akceptujących.
Niech
,
.
Wówczas:
Tym samym pokazaliśmy, że: wzorce, wyrażenia regularne,
oraz automaty skończone (wszystkie trzy poznane rodzaje),
wszystkie opisują dokładnie klasę języków regularnych.
Konstrukcja wyrażenia regularnego odpowiadającego automatowi
skończonemu, podana w powyższym dowodzie daje dosyć skomplikowane
wyrażenie regularne.
Zauważmy, że rozmiar wynikowego wyrażenia regularnego rośnie
czterokrotnie z każdym kolejnym stanem automatu!
Jednocześnie wiele powstających podwyrażeń można pominąć, gdyż
nie wnoszą nic do wyniku.
Jeśli więc będziemy chcieli przekształcić jakiś automat na
wyrażenie regularne, to nie musimy sztywno trzymać się
pokazanej powyżej konstrukcji.
Gdy jednak zdrowy rozsądek nie podpowiada nam jak sobie poradzić,
wówczas powinniśmy zastosować konstrukcję z dowodu, zmniejszając
rozmiar rozważanego automatu.
Ilustruje to poniższy przykład:
Przykład
Przekształćmy następujący automat na wyrażenie regularne:
Język akceptowany przez automat jest opisany wyrażeniem.
Patrząc na automat możemy wywnioskować:
Stąd:
Dalej:
Zauważmy, że:
Czyli:
Stąd:
Automaty skończone nie są tylko teoretycznym narzędziem do
badania języków regularnych.
Mają one również wiele zastosowań praktycznych.
Na przykład, stosuje się je do wyszukania wzorca lub podsłowa w
tekście --
dla danego wzorca czy podsłowa należy skonstruować odpowiedni
automat (deterministyczny), a następnie wczytać analizowany
tekst; każde przejście takiego automatu przez stan akceptujący
reprezentuje jedno wystąpienie wzorca czy podsłowa w tekście.
Dalej, analizatory leksykalne są realizowane jako automaty
skończone.
Lex na podstawie specyfikacji tworzy odpowiedni automat
skończony, który wyszukuje wystąpienia leksemów i równocześnie
określa które fragmenty kodu ze specyfikacji należy zastosować.
Automaty skończone mają też zastosowanie w bardzo młodej
dziedzinie informatyki, weryfikacji modelowej
(ang. model-checking).
Weryfikacja modelowa jest stosowana do badania, czy określony
mechanizm (np. układ elektroniczny, protokół komunikacyjny,
prosty program o ograniczonej liczbie stanów) posiada wymagane
własności.
W tym celu tworzy się automat skończony będący modelem systemu.
Język akceptowany przez ten automat reprezentuje możliwe
przebiegi zdarzeń.
Następnie bada się, czy język akceptowany przez automat zawiera
się w języku złożonym z dopuszczalnych przez specyfikację
przebiegów zdarzeń.
Zaletą weryfikacji modelowej w porównaniu z testowaniem jest to,
że weryfikacja modelowa obejmuje wszystkie możliwe
przebiegi zdarzeń, a nie tylko niektóre.
W niniejszym wykładzie pokazaliśmy, że: wzorce, wyrażenia regularne,
oraz automaty skończone (wszystkie trzy poznane rodzaje),
wszystkie opisują dokładnie klasę języków regularnych.
Ponieważ dowód był konstruktywny, widać z niego jak można tłumaczyć
wzorce na automaty i odwrotnie.
- Weryfikacja modelowa
(ang. model-checking) to metoda weryfikacji
polegająca na stworzeniu modelu weryfikowanego systemu w
postaci np. automatu skończonego i wykazaniu jego
poprawności poprzez badanie stworzonego modelu.
-
Dopasuj do siebie automaty i wyrażenia regularne:
- a)
-
- b)
-
- c)
-
- d)
-
- e)
-
- 1)
,
- 2)
,
- 3)
,
- 4)
,
- 5)
.
- Podaj automat skończony akceptujący język opisany wzorcem:
.
- Podaj wyrażenie regularne opisujące język akceptowany przez
następujący automat niedeterministyczny:
- Dopasuj do siebie automaty i wyrażenia regularne:
- a)
-
- b)
-
- c)
-
- d)
-
- e)
-
- 1)
,
- 2)
-
,
- 3)
,
- 4)
,
- 5)
-
.
Rozwiązanie
- Dopasuj automaty do podanych wyrażeń regularnych:
- a)
-
- b)
-
- c)
-
- d)
-
- e)
-
- 1)
-
,
- 2)
-
,
- 3)
-
,
- 4)
-
,
- 5)
-
.
Rozwiązanie
- Podaj automaty skończone (deterministyczne lub nie)
odpowiadające następującym wzorcom:
- Podaj deterministyczne automaty skończone akceptujące języki
opisane wyrażeniami regularnymi:
- a*b*a*,
-
,
-
,
- a(baba)+a,
-
,
-
,
-
,
-
.
- Podaj wyrażenia regularne odpowiadające automatom: