Test GR
{theor}{TWIERDZENIE}[section] {rem}{UWAGA}[section] {corol}{WNIOSEK}[section] {fact}{FAKT}[section] {ex}{PRZYKŁAD}[section] {defin}{DEFINICJA}[section] {lem}{LEMAT}[section]
{prf}{DOWÓD}
{algorithm}{Algorytm}
{ automat skończenie stanowy}
- Wprowadzenie
- W rozdziale tym zdefiniujemy automat - drugi, obok gramatyki, model
obliczeń. Określimy język rozpoznawany przez automat i podamy warunki równoważne na to, by język był rozpoznawany.
- Słowa kluczowe
- automat skończenie stanowy, język rozpoznawany, prawa kongruencja
automatowa, homomorfizm automatów, monoid przejść automatu.
AUTOMATY
Wprowadzimy teraz pojęcie automatu. Jak już wspomnieliśmy w wykładzie drugim automat to drugi, obok gramatyki, model obliczeń będący przedmiotem badań teorii języków i automatów. Model realizujący warunek efektywności analitycznej, czyli taki na podstawie którego możliwe jest sformułowanie algorytmu rozstrzygającego w skończonej liczbie kroków, czy dowolne słowo należy czy też nie należy do języka rozpoznawanego przez ten automat. Lub inaczej możemy powiedzieć, że taki automat daje algorytm efektywnie rozstrzygający czy dowolne obliczenie sformułowane nad alfabetem automatu jest poprawne.
Wprowadzony w tym wykładzie automat, zwany automatem skończenie stanowym, jest jednym z najprostszych modeli obliczeń. Jest to model z bardzo istotnie ograniczoną pamięcią. Działanie takiego automatu sprowadza się do zmiany stanu pod wpływem określonego zewnętrznego sygnału czy impulsu.
Pomimo tych ograniczeń urządzenia techniczne oparte o modele takich automatów spotkać możemy dość często. Jako przykład służyć mogą automatyczne drzwi, automaty sprzedające napoje, winda czy też urządzenia sterujące taśmą produkcyjną.
Ćwiczenie [Uzupelnij]
Drzwi automatycznie otwierane są sterowane automatem, którego działanie opisać można, przyjmując następujące oznaczenia. Fakt, że osoba chce wejść do pomieszczenia zamykanego przez takie drzwi, identyfikowany przez odpowiedni czujnik, opiszemy symbolem . Zamiar wyjścia symbolem . Symbol będzie związany z równoczesnym zamiarem wejścia jakiejś osoby i wyjścia innej. Wreszcie symbol oznaczał będzie brak osób, które chcą wejść lub wyjść. Zatem zbiór , to alfabet nad którym określimy automat o stanach: Parser nie mógł rozpoznać (błąd składni): {\displaystyle OTWARTE, ZAMKNIĘTE} poniższym grafem.
RYSUNEK ja-lekcja3-w-rys6
ANIMACJA ja-lekcja-w-rys7 działania drzwi
Automaty reagują więc na określone sygnały zewnętrzne reprezentowane przez litery alfabetu zmieniając swój stan. Jeśli ustalimy stan początkowy automatu oraz dopuszczalne stany końcowe, to automat będzie testował dowolne słowo z startując ze stanu początkowego. Jeśli rezultatem finalnym działania automatu (obliczenia) będzie stan końcowy, to słowo będzie rozpoznawane przez automat, a obliczenie określone takim słowem poprawne.
Podamy teraz definicję automatu. Niech oznacza dowolny alfabet. Od tego momentu wykładu zakładamy, że alfabet jest zbiorem skończonym.
Automatem nad alfabetem nazywamy system , w którym
- jest dowolnym skończonym zbiorem zwanym zbiorem stanów,
- jest funkcją przejść.
Automat będąc w stanie po przeczytaniu litery zmienia stan na zgodnie z funkcją przejścia .
Funkcję przejść rozszerzamy na cały wolny monoid
do postaci
przyjmując:
dla każdego oraz
dla każdego i dla dowolnego
Działanie automatu pokazane jest na rysunku.
rys3.1
Zdefiniowany powyżej automat nazywamy skończonym lub
skończenie stanowym ze względu na założenie skończoności zbioru stanów .
Ćwiczenie [Uzupelnij]
Niech będzie alfabetem, a automatem takim, że
, a funkcja przejść zadana jest przy pomocy tabelki
{
{Podamy teraz bardzo interesujący przykład zastosowania automatów skończonych. Przedstawimy mianowicie wykorzystanie tak zwanych automatów synchronizujących w przemyśle. Automat synchronizujący nad alfabetem to automat o następującej własności: istnieje stan oraz słowo takie, że dla każdego stanu tego automatu . Istnieje więc pewne uniwersalne słowo , pod wpływem którego wszystkie stany przechodzą w jeden, ustalony stan automatu . Mówimy, że następuje wtedy synchronizacja wszystkich stanów automatu.
Poniżej prezentujemy przykład zaczerpnięty z pracy Ananicheva i Volkova (D. S. Ananichev, M. V. Volkov, Synchronizing Monotonic Automata, Lecture Notes in Computer Science, 2710(2003), 111--121.), ukazujący ideę użycia automatów synchronizujących w tej dziedzinie.
Ćwiczenie [Uzupelnij]
RYSUNEK pojedynczego detalu - ja-lekcja3-w-rys-s1
Załóżmy, że pewna fabryka produkuje detale w kształcie kwadratu z "wypustką" na jednym boku (patrz rys. Uzupelnic ja-lekcja3-w-rys-s1|). Po wyprodukowaniu detale należy umieścić w opakowaniach w ten sposób, by wszystkie były w tej samej orientacji - mianowicie "wypustką" w lewo.
Załóżmy ponadto dla uproszczenia, że detale mogą przyjmować jedną z czterech orientacji (rys. Uzupelnic ja-lekcja3-w-rys-s2|): "wypustką" w górę, w dół, w lewo lub w prawo.
RYSUNEK ja-lekcja3-w-rys-s2
Należy zatem skonstruować takie urządzenie (orienter), które będzie ustawiało wszystkie detale w żądanej orientacji. Oczywiście istnieje wiele metod rozwiązania tego problemu, ale z praktycznego punktu widzenia potrzebne jest rozwiązanie najprostsze i najtańsze. Jednym z takich sposobów jest umieszczanie detali na pasie transmisyjnym z zamontowaną wzdłuż niego pewną ilością przeszkód dwojakiego rodzaju: niskich (low) oraz wysokich (HIGH). Wysoka przeszkoda ma tę własność, że każdy detal, który ją napotka zostanie obrócony o 90 stopni w prawo (zakładamy, że elementy jadą od lewej do prawej strony). Przeszkoda niska obróci o 90 stopni w prawo tylko te detale, które są ułożone "wypustką" w dół. Na rys. Uzupelnic ja-lekcja3-w-rys-s3| przedstawione zostały przejścia pomiędzy orientacjami detali w zależności od napotkania odpowiedniej przeszkody.
RYSUNEK ja-lekcja3-w-rys-s3
Można zauważyć, że automat z rysunku Uzupelnic ja-lekcja3-w-rys-s3| jest automatem synchronizującym. Słowem, które go synchronizuje jest następująca sekwencja przeszkód:
low-HIGH-HIGH-HIGH-low-HIGH-HIGH-HIGH-low.
Niezależnie od tego, w jakiej orientacji początkowej znajduje się detal, po przejściu przez powyższą sekwencję przeszkód zawsze będzie ułożony "wypustką" w lewo. Sytuację przedstawia poniższa animacja:
ANIMACJA ja-lekcja3-w-anim-s4
Rozszerzymy teraz wprowadzone pojęcie automatu w ten sposób by uzyskać możliwość efektywnego rozstrzygania czy dowolne słowo utworzone nad alfabetem reprezentuje poprawne obliczenie, czyli spełnia kryteria określone przez rozszerzony automat.
Język jest rozpoznawany (akceptowany) wtedy i tylko wtedy, gdy istnieje automat skończony stan oraz zbiór takie, że
Stan
nazywamy stanem początkowym,
a zbiorem stanów końcowych automatu .
Rozszerzony w powyższy sposób automat, poprzez dodanie stanu początkowgo i zbioru stanów końcowych, w dalszym ciągu nazywamy automatem i oznaczamy jako piątkę lub czwórkę , jeśli wiadomo, nad jakim alfabetem rozważamy działanie automatu.
Fakt, że język jest rozpoznawany przez automat zapisujemy jako
Rodzinę wszystkich języków rozpoznawalnych nad alfabetem oznaczamy przez .
Podobnie jak w przypadku gramatyk nie ma jednoznacznej odpowiedniości pomiędzy językami rozpoznawalnymi a automatami. Wprowadza się więc relację, która identyfikuje automaty rozpoznające ten sam język.
Automaty i są równoważne, jeśli rozpoznają ten sam język, czyli
W dalszych rozważaniach języków rozpoznawanych ograniczymy się do automatów , które spełniają warunek Nie zawęża to naszych rozważań. Jeśli bowiem język jest rozpoznawany przez pewien automat , to jest również rozpoznawany przez automat
który spełnia powyższy warunek. Zauważmy, że przyjmując to założenie upraszczamy strukturę automatu. Z punktu widzenia grafu automatu można powiedzieć, że nie występują w nim wierzchołki (stany) nieosiagalne ze z . Poniżej przedstawiamy algorytm usuwający z automatu stany nieosiągalne ze stanu początkowego.
{{UsuńStanyNieosiągalne} - usuwa z automatu stany nieosiągalne} [1] Wejście: - automat
Wyjście: - automat równoważny automatowi bez stanów nieosiągalnych.
procedure {Oznacz}
{Parser nie mógł rozpoznać (błąd składni): {\displaystyle p \in S:\ \exists a \in A\ f(x,a)=p \wedge \mbox{\textbf{zaznaczone}}[p]==0} }
zaznaczone;
{Oznacz};
end procedure
{}
zaznaczone;
zaznaczone;
{Oznacz};
Parser nie mógł rozpoznać (błąd składni): {\displaystyle S' = \{s \in S:\ \mbox{\textbf{zaznaczone}}[s]==1\}} ;
;
jeśli istnieje przynajmniej jeden stan, dla którego funkcja przejścia nie jest określona dla jakiejś litery , dodaj stan do i dla każdego stanu i litery jeśli jest nieokreślone, to zdefiniuj ;
;
;
Powyższy algorytm, dla ustalonego alfabetu , posiada złożoność , czyli liniową względem liczby stanów.
Ćwiczenie [Uzupelnij]
Jeśli w przykładzie Uzupelnic ex.3.1.1| przyjmiemy stan jako stan początkowy, jako zbiór stanów końcowych, to automat rozpoznaje język
złożony ze słów, kończących się na .
Słowo nie jest akceptowane.
rys3.3
Słowo jest akceptowane.
rys3.4
Każdy automat wyznacza w wolnym monoidzie
prawą kongruencję, nazywaną prawą kongruencją automatową, określoną w następujący
sposób:
Dla automatu skończonego ( o skończonym zbiorze stanów), a takie rozważamy, relacja ma skończony indeks, czyli skończoną liczbę klas równoważności.
Ćwiczenie [Uzupelnij]
Automat z przykładu Uzupelnic ex.3.1.1| ze stanem jako początkowym wyznacza relację równoważności o trzech klasach:
Na odwrót, każda prawa kongruencja wyznacza automat, zwany ilorazowym, w następujący sposób:
_Parser nie mógł rozpoznać (błąd składni): {\displaystyle jest automatem ze stanem początkowym } [1]_
{A}_{ } Parser nie mógł rozpoznać (błąd składni): {\displaystyle jest automatem skończonym wtedy i~tylko wtedy, gdy relacja ma skończony indeks.\\ Z definicji prawej kongruencji wynika, że funkcja przejść } f^*Parser nie mógł rozpoznać (błąd składni): {\displaystyle jest określona poprawnie. \begindefin Niech {A} <nowiki>=</nowiki>(S,f)<math> i } {B} =(T,g)Parser nie mógł rozpoznać (błąd składni): {\displaystyle będą dowolnymi automatami. Odwzorowanie } :S T Parser nie mógł rozpoznać (błąd składni): {\displaystyle nazywamy \textbf{homomorfizmem automatów}\index{homomorfizm automatów} wtedy i~tylko wte\-dy, jeśli } s S, w A^*(f(s,w)) = g((s),w).
_{{A}_{ }}= ,
- Rozważmy automat i odwzorowanie
gdzie
Istnienie słowa wynika z faktu, że jest stanem początkowym, natomiast z definicji relacji wynika, że odwzorowanie jest poprawnie określone.
Odwzorowanie ma być homomorfizmem, czyli dla każdego stanu i dowolnego
słowa spełniać warunek
Warunek ten wynika z następujących równości
gdzie .
Z prostych obserwacji wynika, że jest suriekcją i iniekcją.
- Dowód implikacji ""
Załóżmy, że Parser nie mógł rozpoznać (błąd składni): {\displaystyle \: \sim _{\mathcal{A}_1}\: \subseteq \: \sim _{\mathcal{A}_2 } } . Niech
będzie odwzorowaniem takim, że
Stąd, że jest stanem początkowym automatu
wynika, że istnieje słowo potrzebne do określenia epimorfizmu .
Z założenia Parser nie mógł rozpoznać (błąd składni): {\displaystyle \: \sim _{\mathcal{A}_1}\: \subseteq \: \sim _{\mathcal{A}_2} }
wynika, że jest poprawnie zdefiniowaną funkcją.
Uzasadnienie faktu, że jest
homomorfizmem, jest analogiczne jak w punkcie Uzupelnic tb| dla .
jest suriekcją, gdyż
jest stanem początkowym automatu .
ponieważ .
Dowód implikacji ""
Niech będzie epimorfizmem
takim, że .
Wówczas prawdziwy jest następujący ciąg wnioskowań.
To oznacza, że .
Symbolem oznaczamy rodzinę wszystkich funkcji określonych na zbiorze i przyjmujących wartości w . Łatwo zauważyć, iż rodzina ta wraz ze składaniem odwzorowań jest monoidem .
Niech będzie dowolnym automatem. Reprezentacją automatu nazywamy funkcję określoną dla dowolnych i równością
Reprezentacja automatu jest homomorfizmem monoidu w monoid , bowiem dla dowolnych spełnione są warunki
{M}({A})= _Szablon:A(A^{*}) S^{S}.
{M}({A})= _Szablon:A(a):a A ^{*}
M({A})= _Szablon:A(1), _Szablon:A(a), _Szablon:A(b),
_Szablon:A(a^2), _Szablon:A(b), _Szablon:A(ba), _Szablon:A(aba)
.
M({A})= _Szablon:A(1),_Szablon:A(a),
_Szablon:A(b),_Szablon:A(a^2),_Szablon:A(ab),
_Szablon:A(ba),_Szablon:A(aba).
L = _{w L}[w]_.
L = _{w L}[w]_.
L = ^{-1}( (L)).
Uzupelnic tg|Uzupelnic tf|Uzupelnic te|Uzupelnic td| Uzupelnic tg|
: A^* M,
u v (u) = (v).
L = _{w L}[w]_ .
u w (u) = (w) (L) u ^{-1}( (u)) ^{-1}( (L)) = L.
L = _{w L}[w]_ .
f^*([w]_,u) =[wu]_ , T = [w]_ : w L
:A^{*} A^{*}/_{Ker _Szablon:A},
(v)=[v]_{Ker _Szablon:A}.
{c}
(u) (L) v L : (u)= (v)
v L : [u]_{_{Ker _Szablon:A}}=[v]_{_{Ker _Szablon:A}}
v L : _Szablon:A(u)= _Szablon:A(v) ,
v L : s S f(s,u)=f(s,v)
f(s_0,u) = f(s_0,v) T,