opora

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

KAPITOLA 3. REGULÁRNÍ JAZYKY 45 ε 2 a 3 ε 1 ε ε 6 4 b 5 (d) Automat N 4 pro r 4 = (r 3 ) je stejný jako N 3 , zkonstruujeme tedy rovnou N 5 pro výraz r 5 = r4 ∗ = (a + b) ∗ : ε ε 2 a 3 ε 0 ε 1 ε ε ε 6 7 4 b 5 ε (e) Regulárnímu výrazu r 6 = a přísluší automat N 6 : (f) Regulárnímu výrazu r 7 = r 5 r 6 přísluší automat N 7 : ε a 7 8 ε 2 a 3 ε ε 0 1 ε ε ε 6 7 a 8 4 b 5 ε (. . . ) Pokračujeme, až do získání automatu z příkladu 3.25. Převod RV na RKA zavádí mnoho vnitřních stavů a je proto obvykle následován použitím algoritmu minimalizace DKA (algoritmus 3.5). Příklad 3.28 Ověřte, zda deterministický konečný automat z příkladu 3.26 je či není minimální. Pro porovnávání regulárních gramatik, konečných automatů a regulárních výrazů můžeme shrnout, že 1. gramatiky typu 3 (pravé/levé regulární gramatiky, pravé/levé lineární gramatiky), 2. (rozšířené/nedeterministické/deterministické) konečné automaty a 3. regulární výrazy mají ekvivalentní vyjadřovací sílu. gramatiky typu 3 konečné automaty regulární výrazy

KAPITOLA 3. REGULÁRNÍ JAZYKY 46 3.5 Vlastnosti regulárních jazyků Podobně jako u dalších tříd jazyků budeme nyní zkoumat následující vlastnosti regulárních jazyků: (1) vlastnosti strukturální, (2) vlastnosti uzávěrové a (3) rozhodnutelné problémy pro regulární jazyky. 3.5.1 Strukturální vlastnosti regulárních jazyků Věta 3.17 Každý konečný jazyk je regulární. Důkaz: Nechť L = {w 1 , w 2 , . . . , w n }, w i ∈ Σ. Pak L = L(G), kde G = ({S}, Σ, {S → w 1 , S → w 2 , . . . , S → w n }, S). G je zřejmě gramatika typu 3. ✷ Opak věty 3.17 zjevně neplatí: Příklad 3.29 Sestrojte gramatiku typu 3 generující jazyk {0, 1} ∗ . Řešení: ⇒ G = ({S}, {0, 1}, {S → ε, S → 0S, S → 1S}, S) Pumping lemma Pokud se zajímáme o vlastnost, zda jazyk spadá do dané třídy jazyků, je užitečné tzv. Pumping lemma. Neformálně řečeno Pumping lemma tvrdí, že v každé dostatečně dlouhé větě každého regulárního jazyka jsme schopni (poblíž jejího začátku) najít poměrně krátkou sekvenci, kterou je možné vypustit, resp. zopakovat libovolný počet krát, přičemž dostáváme stále věty daného jazyka. Věta 3.18 Nechť L je nekonečný regulární jazyk. Pak existuje celočíselná konstanta p > 0 taková, že platí: w ∈ L ∧ |w| ≥ p ⇒ w = x y z ∧ y ≠ ε ∧ |xy| ≤ p ∧ x y i z ∈ L pro i ≥ 0. Důkaz: Nechť L = L(M), M = (Q, Σ, δ, q 0 , F ) je konečný automat, kde |Q| = n > 0. Položme p = n. Je-li w ∈ L a |w| ≥ n, pak M přijme větu w „průchodem“ alespoň n + 1 konfiguracemi a tudíž alespoň dvě z nich obsahují stejný stav, tedy: (q 0 , w) = (q 0 , xyz) ∗ ⊢ (r, yz) k ⊢ (r, z) ∗ ⊢ (q F , ε), q F ∈ F pro nějaký stav r ∈ Q a k takové, že 0 < k ≤ n. Dále je zřejmé, že k „zopakování“ stavu r dojde nejpozději po přečtení prvních n znaků vstupního řetězce a tudíž |xy| ≤ p. Pak ale existuje posloupnost konfigurací: (q 0 , xy i z) ∗ ⊢ (r, y i z) + ⊢ (r, y i−1 z) . + ⊢ (r, z) ∗ ⊢ (q F , ε)

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

3.5 Vlastnosti regulárních jazyků<br />

Podobně jako u dalších tříd jazyků budeme nyní zkoumat následující vlastnosti<br />

regulárních jazyků:<br />

(1) vlastnosti strukturální,<br />

(2) vlastnosti uzávěrové a<br />

(3) rozhodnutelné problémy pro regulární jazyky.<br />

3.5.1 Strukturální vlastnosti regulárních jazyků<br />

Věta 3.17<br />

Každý konečný jazyk je regulární.<br />

Důkaz: Nechť L = {w 1 , w 2 , . . . , w n }, w i ∈ Σ.<br />

Pak L = L(G), kde G = ({S}, Σ, {S → w 1 , S → w 2 , . . . , S → w n }, S). G je<br />

zřejmě gramatika typu 3.<br />

✷<br />

Opak věty 3.17 zjevně neplatí:<br />

Příklad 3.29 Sestrojte gramatiku typu 3 generující jazyk {0, 1} ∗ .<br />

Řešení: ⇒ G = ({S}, {0, 1}, {S → ε, S → 0S, S → 1S}, S)<br />

Pumping lemma<br />

Pokud se zajímáme o vlastnost, zda jazyk spadá do dané třídy jazyků, je užitečné<br />

tzv. Pumping lemma. Neformálně řečeno Pumping lemma tvrdí, že v každé dostatečně<br />

dlouhé větě každého regulárního jazyka jsme schopni (poblíž jejího začátku) najít<br />

poměrně krátkou sekvenci, kterou je možné vypustit, resp. zopakovat libovolný<br />

počet krát, přičemž dostáváme stále věty daného jazyka.<br />

Věta 3.18 Nechť L je nekonečný regulární jazyk. Pak existuje celočíselná konstanta<br />

p > 0 taková, že platí:<br />

w ∈ L ∧ |w| ≥ p ⇒ w = x y z ∧<br />

y ≠ ε ∧ |xy| ≤ p ∧<br />

x y i z ∈ L pro i ≥ 0.<br />

Důkaz: Nechť L = L(M), M = (Q, Σ, δ, q 0 , F ) je konečný automat, kde |Q| =<br />

n > 0. Položme p = n. Je-li w ∈ L a |w| ≥ n, pak M přijme větu w „průchodem“<br />

alespoň n + 1 konfiguracemi a tudíž alespoň dvě z nich obsahují stejný stav, tedy:<br />

(q 0 , w) = (q 0 , xyz) ∗ ⊢ (r, yz) k ⊢ (r, z) ∗ ⊢ (q F , ε), q F ∈ F<br />

pro nějaký stav r ∈ Q a k takové, že 0 < k ≤ n. Dále je zřejmé, že k „zopakování“<br />

stavu r dojde nejpozději po přečtení prvních n znaků vstupního řetězce a tudíž<br />

|xy| ≤ p.<br />

Pak ale existuje posloupnost konfigurací:<br />

(q 0 , xy i z)<br />

∗<br />

⊢ (r, y i z)<br />

+<br />

⊢ (r, y i−1 z)<br />

.<br />

+<br />

⊢ (r, z)<br />

∗<br />

⊢ (q F , ε)

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

Saved successfully!

Ooh no, something went wrong!