Skip to content
Snippets Groups Projects
Commit 7d9f5b72 authored by Martin Mareš's avatar Martin Mareš
Browse files

Obousměrné automaty

parent e124f518
No related branches found
No related tags found
No related merge requests found
...@@ -780,7 +780,7 @@ Ukažte, jak tyto výrazy počítat indukcí podle~$k$ a jak z~nich získat regu ...@@ -780,7 +780,7 @@ Ukažte, jak tyto výrazy počítat indukcí podle~$k$ a jak z~nich získat regu
pro jazyk automatu. Srovnejte délky výrazu s~předchozím cvičením. pro jazyk automatu. Srovnejte délky výrazu s~předchozím cvičením.
} }
\ex{\em{Kvocienty jazyků:} Pro jazyky $A$ a~$B$ nad abecedou~$\Sigma$ definujeme \ex[quotex]{\em{Kvocienty jazyků:} Pro jazyky $A$ a~$B$ nad abecedou~$\Sigma$ definujeme
\em{pravý kvocient} $A/B = \{ \gamma\in\Sigma^* \mid \exists \beta\in B: \gamma\beta\in A \}$ \em{pravý kvocient} $A/B = \{ \gamma\in\Sigma^* \mid \exists \beta\in B: \gamma\beta\in A \}$
a \em{levý kvocient} $B\setminus A = \{ \gamma\in\Sigma^* \mid \exists \beta\in B: \beta\gamma\in A \}$. a \em{levý kvocient} $B\setminus A = \{ \gamma\in\Sigma^* \mid \exists \beta\in B: \beta\gamma\in A \}$.
Je to tedy množina všech slov, která se dají získat ze slova v~$A$ odebráním suffixu/prefixu, Je to tedy množina všech slov, která se dají získat ze slova v~$A$ odebráním suffixu/prefixu,
......
...@@ -240,7 +240,8 @@ doleva; pokud narazí na~\|>|, nesmí jít doprava. ...@@ -240,7 +240,8 @@ doleva; pokud narazí na~\|>|, nesmí jít doprava.
Obousměrné automaty se tedy mohou po vstupu libovolně pohybovat, ale nesmí Obousměrné automaty se tedy mohou po vstupu libovolně pohybovat, ale nesmí
ho měnit. Na rozdíl od obyčejných automatů mohou divergovat. ho měnit. Na rozdíl od obyčejných automatů mohou divergovat.
Překvapivě opět rozhodují jenom regulární jazyky (toto tvrzení ponecháme bez důkazu). Překvapivě opět rozhodují jenom regulární jazyky (toto tvrzení dokážeme
v~oddílu \secref{tfa}).
\subsection{Vícepáskové stroje} \subsection{Vícepáskové stroje}
...@@ -879,10 +880,6 @@ Všechny jazyky v~těchto třídách jsou rozhodnutelné. ...@@ -879,10 +880,6 @@ Všechny jazyky v~těchto třídách jsou rozhodnutelné.
\exercises \exercises
\ex{Dokažte, že $\cc{SPACE}(c)$ a $\cc{NSPACE}(c)$ jsou pro všechny konstanty
$c\in\N$ rovny třídě regulárních jazyků~$\Ell_1$. Využijte tvrzení o~obousměrných
automatech z~oddílu \secref{tmvariants}.}
\exx{Třídy $\cc{P}$ a $\cc{NP}$ jsme už jednou zavedli v~kapitole Průvodce o~těžkých problémech \exx{Třídy $\cc{P}$ a $\cc{NP}$ jsme už jednou zavedli v~kapitole Průvodce o~těžkých problémech
(ale pouze pro binární abecedu, zatímco zde připouštíme obecnou). Třídu $\cc{NP}$ jsme v~Průvodci definovali pomocí (ale pouze pro binární abecedu, zatímco zde připouštíme obecnou). Třídu $\cc{NP}$ jsme v~Průvodci definovali pomocí
certifikátů. Dokažte, že je to ekvivalentní se zdejší definicí pomocí nedeterministického stroje.} certifikátů. Dokažte, že je to ekvivalentní se zdejší definicí pomocí nedeterministického stroje.}
...@@ -897,4 +894,88 @@ tato inkluze je ostrá?} ...@@ -897,4 +894,88 @@ tato inkluze je ostrá?}
\endexercises \endexercises
\sectionstar[tfa]{Obousměrné konečné automaty}
Když jsme v~oddílu \secref{tmvariants} zkoumali varianty Turingových strojů,
narazili jsme na \em{obousměrný konečný automat} neboli TFA \em{(two-way finite-state automaton).}
Nebyl by to výstižnější model výpočtů v~konstantním prostoru než konečný automat?
Nyní dokážeme, že to vyjde nastejno -- každý jazyk přijímaný obousměrným automatem je regulární.
Připomeňme definici: TFA je Turingův stroj, který dostane vstup $\|<|\alpha\|>|$
a nemá ho povoleno měnit. Navíc na levé zarážce~$\|<|$ nesmí vykonat pohyb doleva
a na pravé zarážce~$\|>|$ nesmí jít doprava. Aby byl TFA podobnější konečným automatům,
výpočet začíná s~hlavou na prvním znaku slova~$\alpha$. To je ale detail: TFA můžeme snadno upravit,
aby výpočet začínal na~$\|<|$ -- stačí přidat nový počáteční stav, v~němž provedeme jeden pohyb
hlavou doprava a přejdeme do původního počátečního stavu.
Uvažme TFA rozpoznávající nějaký jazyk~$L$.
Nechť $\alpha$ značí vstup automatu a $n$ jeho délku.
Dodefinujme $\alpha[-1] = \|<|$ a $\alpha[n] = \|>|$.
Představme si, že jsme někde uvnitř výpočtu, hlava stojí na $i$-tém políčku slova~$\alpha$,
stroj se právě přepíná ze stavu~$s$ do~$s'$ a chystá se odejít doprava do nějakého suffixu $\alpha[i+1:{}]$.
Jak bude výpočet pokračovat? Jedna možnost je, že se stroj po čase vrátí zprava na $i$-té políčko v~nějakém novém stavu,
přičemž nic kromě stavu stroje se nezměnilo (na pásku nemůžeme zapisovat).
Nebo se předtím stroj stihl zastavit a přijmout/odmítnout.
Případně se stroj zacyklil v~nekonečné smyčce, což rovněž odpovídá odmítnutí vstupu.
Formálně můžeme chování stroje na suffixu vstupu $\alpha[i:{}]$ popsat nějakou funkcí~$f_i(s)$,
která počátečnímu stavu~$s\in Q\setminus\{q_+, q_-\}$ přiřadí stav~$s'\in Q$, v~němž stroj odchází
ze suffixu doleva. Pokud je $s=q_+$, stroj se místo odejití doleva zastavil a přijal.
Pokud $s=q_-$, stroj odmítl zastavením nebo zacyklením se.
Ukážeme, jak sestrojit funkci~$f_i$, pokud už známe~$f_{i+1}$.
Chceme-li stanovit $f(s)$, budeme konstruovat posloupnost stavů $s_0$, $s_1$, $s_2$, \dots.
Na počátku položíme $s_0=s$.
Nechť známe~$s_j$. Podíváme se, co stroj provede, přečte-li ve stavu~$s_j$ znak~$\alpha[i]$.
Vyhodnotíme tedy přechodovou funkci $\delta(s_j, \alpha[i])$, čímž získáme instrukci, která
přechází do stavu~$s'_j$, zapisuje nezměněný znak~$\alpha[i]$ a možná pohybuje hlavou:
\list{o}
\:Pokud hlava odchází doleva, položíme $f_i(s) = s'_j$ a jsme hotovi.
\:Pokud hlava zůstává na místě, položíme $s_{j+1} = s'_j$ a pokračujeme ve vytváření posloupnosti
s~několika výjimkami: Je-li $s'_j$ rovno $q_+$ nebo~$q_-$, položíme $f_i(s) = s'_j$ a skončíme.
Je-li $s'_j$ rovno některému z~předešlých~$s_k$ pro $k\le j$, stroj se zacyklil, takže položíme
$f_i(s) = q_-$ a skončíme.
\:Pokud hlava odchází doprava, využijeme známou funkci $f_{i+1}$ popisující chování na suffixu
$\alpha[i+1:{}]$, takže položíme $s_{j+1} = f_{i+1}(s'_j)$. Opět ošetříme případy, kdy je tento
stav roven $q_+$, $q_-$, případně některému z~předchozích stavů v~posloupnosti.
\endlist
Všimněte si, že funkce~$f_i$ je jednoznačně určena funkcí~$f_{i+1}$ a znakem $\alpha[i]$.
To nám dává návod na sestrojení konečného automatu, který bude procházet vstupem zprava doleva
a postupně přepočítávat funkci~$f_i$. Stavy automaty odpovídají všem funkcím z~$Q\setminus\{q_+,q_-\}$ do~$Q$,
takže jich je konečně mnoho.
Zbývá dořešit, jak automat začne a jak skončí.
Použijeme-li naši konstrukci pro funkci~$f_n$, tedy chování výpočtu na pravé zarážce~\|>|,
nikdy se nezeptá na neexistující~$f_{n+1}$. To proto, že stroj se na pravé zarážce nemůže
pohybovat doprava. Funkce~$f_n$ je tedy nezávislá na vstupu, takže může posloužit jako
počáteční stav automatu.
Až automat přečte levou zarážku~$\|<|$, bude jeho stav roven funkci~$f_{-1}$.
Nyní do této funkce dosadíme počáteční stav~$q_0$ původního TFA.
Je-li $f_{-1}(q_0)$ rovno~$q_+$, vstup přijmeme, jinak odmítneme.
Tím jsme sestrojili automat dosvědčující regularitu. Ovšem ne původního jazyka~$L$,
nýbrž jazyka $L' = L\rev\cdot\{\|<|\}$, v~němž jsou slova pozpátku a ukončená zarážkou.
Teď si stačí uvědomit, že z~regularity~$L'$ plyne regularita~$L\rev$ a z~ní zase regularita~$L$.
Regularitu $L\rev$ můžeme zdůvodnit cvičením \exref{quotex}, protože $L\rev$ je kvocient $L' / \{\|<|\}$.
Nebo to lze provést přímo úpravou koncových stavů: za koncové prohlásíme ty stavy, z~nichž vede přechod
před znak~$\|<|$ do některého z~původních koncových stavů.
Regularitu~$L$ dostaneme z~uzavřenosti regulárních výrazů na otočení (cvičení \exref{regrev}).
\exercises
\ex{Dokažte, že třída $\cc{SPACE}(c)$ pro libovolnou konstantu~$c$ odpovídá
jazykům rozpoznatelným TFA, tedy regulárním. Nezapomeňte na pracovní pásky.}
\ex{Rozšiřte definici TFA o~nedeterminismus. Dokažte, že nedeterministické TFA také rozpoznávají
pouze regulární jazyky. Z~toho plyne, že $\cc{NSPACE}(c) = \cc{SPACE}(c) = \Ell_3$.}
\endexercises
\endchapter \endchapter
...@@ -15,4 +15,4 @@ Rekurzivní: ...@@ -15,4 +15,4 @@ Rekurzivní:
Rozšíření: Rozšíření:
- obousměrné konečné automaty - cvičení: automaty s kamínkem
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment