opora

frantisek.plesicek
from frantisek.plesicek More from this publisher
10.02.2019 Views

Kapitola 3 Regulární jazyky Cílem této kapitoly je důkladné pochopení alternativních prostředků specifikace regulárních jazyků, důkazových technik, které verifikují jejich ekvivalenci a formálních algoritmů zápisů jejich vzájemných převodů. Vede dále k pochopení základních vlastností regulárních jazyků, jež činí tuto třídu nejvíce aplikovatelnou v řadě technických i netechnických oblastí. Kapitola stanovuje rámce teorie, které jsou využívány i v následujících částech učebního textu. 3.1 Jazyky přijímané konečnými automaty a deterministický konečný automat 3.1.1 Konečný automat Definice 3.1 Konečný automat (KA) je 5-tice M = (Q, Σ, δ, q 0 , F ), kde (1) Q je konečná množina stavů, (2) Σ je konečná vstupní abeceda, (3) δ je zobrazení Q × Σ → 2 Q , které nazýváme funkcí přechodu (2 Q je množina podmnožin množiny Q), (4) q 0 ∈ Q je počáteční stav, (5) F ⊆ Q je množina koncových stavů. Je-li ∀q ∈ Q ∀a ∈ Σ : |δ(q, a)| ≤ 1, pak M nazýváme deterministickým konečným automatem (zkráceně DKA), v případě, že ∃q ∈ Q ∃a ∈ Σ : |δ(q, a)| > 1 pak nedeterministickým konečným automatem (zkráceně NKA). Deterministický konečný automat často také definujeme jako 5-tici M = (Q, Σ, δ, q 0 , F ), kde δ je parciální přechodová funkce tvaru δ : Q × Σ → Q. Je-li přechodová funkce δ totální, pak M nazýváme úplně definovaným deterministickým konečným automatem. Lemma 3.1.1 Ke každému DKA M existuje „ekvivalentní“ úplně definovaný DKA M ′ . Důkaz. (idea) Množinu stavů automatu M ′ rozšíříme o nový, nekoncový stav (anglicky označovaný jako SINK stav) a s využitím tohoto stavu doplníme prvky přechodové funkce δ ′ automatu M ′ tak, aby byla totální. ✷ Činnost konečného automatu M je dána posloupností přechodů; přechod z jednoho stavu do druhého je řízen funkcí přechodu δ, která na základě přítomného stavu q i a právě přečteného symbolu a ∈ Σ vstupního řetězce předepisuje budoucí stav q j automatu. Je-li M deterministický konečný automat, δ předepisuje vždy jediný budoucí stav q j ∈ Q (pokud funkce δ není definována, tak přechod není možný). V případě nedeterministického konečného automatu δ předepisuje množinu budoucích stavů Q j , Q j ∈ 2 Q . 21

KAPITOLA 3. REGULÁRNÍ JAZYKY 22 δ z c · e ♯ q 0 q 8 q 7 q 6 q 4 q 1 q 2 q 2 q 1 q 3 q 2 q 4 q 3 q 2 q 5 q 5 q 4 q 1 q 6 q 5 q 7 q 7 q 6 q 4 q 1 q 8 q 7 q 6 q 4 Tabulka 3.1: Funkce přechodů automatu M Definice 3.2 Je-li M = (Q, Σ, δ, q 0 , F ) konečný automat, pak dvojici C = (q, w) z Q×Σ ∗ nazýváme konfigurací automatu M. Konfigurace tvaru (q 0 , w) je počáteční konfigurace, konfigurace tvaru (q, ɛ), q ∈ F je koncová konfigurace. Přechod automatu M je reprezentován binární relací ⊢ M na množině konfigurací C. Pro všechna q, q ′ ∈ Q a w, w ′ ∈ Σ ∗ definujeme, že platí (q, w) ⊢ M (q ′ , w ′ ), tehdy a jen tehdy, když w = aw ′ pro nějaké a ∈ Σ a q ′ ∈ δ(q, a) (tj. δ(q, a) = Q j , Q j ∈ 2 Q , q ′ ∈ Q j ). Označíme symbolem ⊢ k M, k ≥ 0, k-tou mocninu (C ⊢ 0 C ′ právě když C = C ′ ), symbolem ⊢ + M tranzitivní uzávěr a symbolem ⊢ ∗ M tranzitivní a reflexivní uzávěr relace ⊢ M . Bude-li zřejmé, že jde o automat M, pak uvedené relace zapíšeme pouze ve tvaru ⊢, ⊢ k , ⊢ + , ⊢ ∗ . Definice 3.3 Říkáme, že vstupní řetězec w je přijímán konečným automatem M, jestliže (q 0 , w) ⊢ ∗ (q, ɛ), q ∈ F . Jazyk přijímaný konečným automatem M označujeme symbolem L(M) a definujeme ho jako množinu všech řetězců přijímaných automatem M: L(M) = {w | (q 0 , w) ∗ ⊢(q, ɛ) ∧ q ∈ F } Příklad 3.1 Konečný deterministický automat M = ({g 0 , q 1 , q 3 , q 4 , q 5 , q 6 , q 7 , q 8 }, {c, z, 10 , ·, ♯}, δ, q 0 , {q 1 }), jehož funkce přechodu δ je definována tabulkou 3.1, přijímá jazyk zápisů čísel, jak ho známe z některých programovacích jazyků. Symbolem c značíme prvek množiny {0, 1, . . . , 9}, symbolem z prvek množiny {+, −}; znak ♯ ukončuje zápis čísla. Např. vstupnímu řetězci zc.cezc♯ (např. číslu +3.1e − 5) bude odpovídat tato posloupnost konfigurací: (q 0 , zc.cezc♯) ⊢ (q 8 , c.cezc♯) (q 7 , .cezc♯) (q 6 , cezc♯) (q 5 , ezc♯) (q 4 , zc♯) (q 3 , c♯) (q 2 , ♯) (q 1 , ɛ)

KAPITOLA 3. REGULÁRNÍ JAZYKY 22<br />

δ z c · e ♯<br />

q 0 q 8 q 7 q 6 q 4<br />

q 1<br />

q 2 q 2 q 1<br />

q 3 q 2<br />

q 4 q 3 q 2<br />

q 5 q 5 q 4 q 1<br />

q 6 q 5<br />

q 7 q 7 q 6 q 4 q 1<br />

q 8 q 7 q 6 q 4<br />

Tabulka 3.1: Funkce přechodů automatu M<br />

Definice 3.2 Je-li M = (Q, Σ, δ, q 0 , F ) konečný automat, pak dvojici C = (q, w)<br />

z Q×Σ ∗ nazýváme konfigurací automatu M. Konfigurace tvaru (q 0 , w) je počáteční<br />

konfigurace, konfigurace tvaru (q, ɛ), q ∈ F je koncová konfigurace. Přechod automatu<br />

M je reprezentován binární relací ⊢ M<br />

na množině konfigurací C. Pro<br />

všechna q, q ′ ∈ Q a w, w ′ ∈ Σ ∗ definujeme, že platí (q, w) ⊢ M<br />

(q ′ , w ′ ), tehdy a jen<br />

tehdy, když w = aw ′ pro nějaké a ∈ Σ a q ′ ∈ δ(q, a) (tj. δ(q, a) = Q j , Q j ∈<br />

2 Q , q ′ ∈ Q j ). Označíme symbolem ⊢ k M, k ≥ 0, k-tou mocninu (C ⊢ 0 C ′ právě<br />

když C = C ′ ), symbolem ⊢ + M<br />

tranzitivní uzávěr a symbolem ⊢ ∗ M<br />

tranzitivní a reflexivní<br />

uzávěr relace ⊢ M<br />

. Bude-li zřejmé, že jde o automat M, pak uvedené relace<br />

zapíšeme pouze ve tvaru ⊢, ⊢ k , ⊢ + , ⊢ ∗ .<br />

Definice 3.3 Říkáme, že vstupní řetězec w je přijímán konečným automatem M,<br />

jestliže (q 0 , w) ⊢ ∗ (q, ɛ), q ∈ F . Jazyk přijímaný konečným automatem M označujeme<br />

symbolem L(M) a definujeme ho jako množinu všech řetězců přijímaných<br />

automatem M:<br />

L(M) = {w | (q 0 , w) ∗ ⊢(q, ɛ) ∧ q ∈ F }<br />

Příklad 3.1 Konečný deterministický automat<br />

M = ({g 0 , q 1 , q 3 , q 4 , q 5 , q 6 , q 7 , q 8 }, {c, z, 10 , ·, ♯}, δ, q 0 , {q 1 }),<br />

jehož funkce přechodu δ je definována tabulkou 3.1, přijímá jazyk zápisů čísel,<br />

jak ho známe z některých programovacích jazyků. Symbolem c značíme prvek<br />

množiny {0, 1, . . . , 9}, symbolem z prvek množiny {+, −}; znak ♯ ukončuje zápis<br />

čísla.<br />

Např. vstupnímu řetězci zc.cezc♯ (např. číslu +3.1e − 5) bude odpovídat tato<br />

posloupnost konfigurací:<br />

(q 0 , zc.cezc♯) ⊢ (q 8 , c.cezc♯)<br />

(q 7 , .cezc♯)<br />

(q 6 , cezc♯)<br />

(q 5 , ezc♯)<br />

(q 4 , zc♯)<br />

(q 3 , c♯)<br />

(q 2 , ♯)<br />

(q 1 , ɛ)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!