Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| statnice:bakalar:b4b01jag [2025/06/06 21:33] – [Regulární jazyky] mistrjirka | statnice:bakalar:b4b01jag [2025/06/09 18:56] (current) – [Regulární jazyky] tehlajak | ||
|---|---|---|---|
| Line 88: | Line 88: | ||
| **Definice: | **Definice: | ||
| - | Regulární jazyk je jazyk, který lze přijmout deterministickým (alebo nedeterministickým) konečným automatem (DFA/ | + | Regulární jazyk je jazyk, který lze přijmout deterministickým (alebo nedeterministickým) konečným automatem (DFA/NFA). Třída všech regulárních jazyků značíme **Reg**. |
| **Vlastnosti: | **Vlastnosti: | ||
| 1. **Uzávěrnost: | 1. **Uzávěrnost: | ||
| - | - Uzavřena na sjednocení, | + | - Uzavřena na sjednocení, |
| - | - Například, | + | - Například, |
| - **Regulární výrazy:** | - **Regulární výrazy:** | ||
| - | * Každý regulární jazyk lze popsat regulárním výrazem, který obsahuje operace sjednocení (+), součin (kontatenace), | + | * Každý regulární jazyk lze popsat regulárním výrazem, který obsahuje operace sjednocení (+), součin (kontatenace), |
| **Lemma o vkládání (Pumping lemma):**\\ | **Lemma o vkládání (Pumping lemma):**\\ | ||
| - | Pro každý regulární jazyk $L$ existuje číslo $n$, takže pro každé slovo $w \in L$ s $|w| \geq n$ lze rozdělit na $w = xwy$, kde:\\ | + | Pro každý regulární jazyk $L$ existuje číslo $n$, takže pro každé slovo $u \in L$ s $|u| > n$ lze rozdělit na $u = xwy$, kde:\\ |
| - $|xw| \leq n$,\\ | - $|xw| \leq n$,\\ | ||
| - $w \neq \varepsilon$, | - $w \neq \varepsilon$, | ||
| - | - $xw^i y \in L$ pro všechna $i \geq 0$ [3].\\ | + | - $xw^i y \in L$ pro všechna $i \geq 0$.\\ |
| Lemma slouží k dokazování, | Lemma slouží k dokazování, | ||
| Line 111: | Line 111: | ||
| ===== Regulární výrazy ===== | ===== Regulární výrazy ===== | ||
| - | **Regulární výrazy a jejich vztah k regulárním jazykům.** | + | |
| + | **Formální popis regulárních výrazů a jejich ekvivalence s regulárními jazyky přijímanými konečnými automaty.** | ||
| + | |||
| + | Regulární výrazy | ||
| + | |||
| + | Každý regulární výraz lze převést na ekvivalentní ε-NFA (nedeterministický konečný automat s ε-přechody). Základní konstrukce [1]: 1. **Elementární výraz '' | ||
| + | |||
| + | < | ||
| + | \usepackage{amsmath} | ||
| + | \usetikzlibrary{automata, | ||
| + | \begin{document} | ||
| + | \begin{tikzpicture}[shorten >=1pt, node distance=2cm, | ||
| + | \node[state, | ||
| + | \node[state, | ||
| + | \path[-> | ||
| + | \end{tikzpicture} | ||
| + | \end{document} | ||
| + | </ | ||
| + | - **Sjednocení '' | ||
| + | * Kombinace ε-přechody z nového počátečního stavu do počátků R a S. | ||
| + | - **Zřetězení '' | ||
| + | * Přidání ε-přechodů z koncových stavů R do počátečního stavu S. | ||
| + | - **Kleeneho hvězda '' | ||
| + | * Přidání ε-přechodů: | ||
| + | |||
| + | **Příklad převodu '' | ||
| + | |||
| + | < | ||
| + | \usepackage{amsmath} | ||
| + | \usetikzlibrary{automata, | ||
| + | \begin{document} | ||
| + | \begin{tikzpicture}[shorten >=1pt, node distance=2cm, | ||
| + | \node[state, | ||
| + | \node[state] (q1) [above right of=q0] {$q_1$}; | ||
| + | \node[state] (q2) [below right of=q0] {$q_2$}; | ||
| + | \node[state] (q3) [right of=q2] {$q_3$}; | ||
| + | \node[state, | ||
| + | \path[-> | ||
| + | (q0) edge node {$\varepsilon$} (q1) | ||
| + | edge node {$\varepsilon$} (q2) | ||
| + | (q1) edge node {0} (q4) | ||
| + | (q2) edge node {$\varepsilon$} (q3) | ||
| + | (q3) edge [loop above] node {1} () | ||
| + | edge node {$\varepsilon$} (q4); | ||
| + | \end{tikzpicture} | ||
| + | \end{document} | ||
| + | </ | ||
| + | // | ||
| + | - Stav '' | ||
| + | - Cyklus v '' | ||
| + | |||
| + | Regulární jazyky jsou právě ty jazyky, které lze popsat regulárním výrazem nebo přijímat konečným automatem (DFA/ | ||
| ===== Bezkontextové gramatiky ===== | ===== Bezkontextové gramatiky ===== | ||
| - | **Bezkontextové gramatiky. Chomského hierarchie jazyků. Bezkontextové jazyky a jejich vlastnosti. Lemma o vkládání pro bezkontextové jazyky (Pumping lemma pro bezkontextové jazyky).** | ||
| + | **Formální systém pro generování jazyků pomocí pravidel přepisování proměnných, | ||
| + | |||
| + | ==== Chomského hierarchie jazyků ==== | ||
| + | |||
| + | Hierarchie klasifikuje formální jazyky podle výpočetní složitosti jejich gramatik: 1. **Typ 0 (Rekurzivně spočetné jazyky)**: Neomezené gramatiky (Turingovy stroje) 2. **Typ 1 (Kontextové jazyky)**: Kontextové gramatiky (lineárně omezené automaty) 3. **Typ 2 (Bezkontextové jazyky)**: Bezkontextové gramatiky (zásobníkové automaty) 4. **Typ 3 (Regulární jazyky)**: Regulární gramatiky (konečné automaty) | ||
| + | |||
| + | === Bezkontextové gramatiky === | ||
| + | |||
| + | Definovány čtveřicí $G = (V, \Sigma, P, S)$: - $V$: Konečná množina neterminálů (proměnné) - $\Sigma$: Konečná množina terminálů (abeceda) - $P$: Množina pravidel tvaru $A \to \alpha$ ($A \in V$, $\alpha \in (V \cup \Sigma)^*$) - $S \in V$: Počáteční symbol | ||
| + | |||
| + | **Příklad gramatiky** pro jazyk $L = \{a^nb^n \mid n \geq 0\}$:\\ | ||
| + | $G = (\{S\}, \{a,b\}, P, S)$ s pravidly:\\ | ||
| + | 1. $S \to aSb$\\ | ||
| + | 2. $S \to \varepsilon$ | ||
| + | |||
| + | === Vlastnosti bezkontextových jazyků === | ||
| + | |||
| + | - **Uzávěrové vlastnosti**: | ||
| + | * Uzavřené na: Sjednocení, | ||
| + | |||
| + | * Neuzavřené na: Průnik, doplněk | ||
| + | - **Rozhodnutelné problémy**: | ||
| + | * Prázdnost jazyka ($L(G) \overset{? | ||
| + | |||
| + | * Náležitost slova ($w \overset{? | ||
| + | - **Paměťový mechanismus**: | ||
| + | |||
| + | === Lemma o vkládání (Pumping Lemma) === | ||
| + | |||
| + | **Formulace**: | ||
| + | 1. $|vwx| \leq p$\\ | ||
| + | 2. $|vx| \geq 1$\\ | ||
| + | 3. $\forall i \geq 0: uv^iwx^iy \in L$ | ||
| + | |||
| + | **Aplikace**: | ||
| + | **Příklad**: | ||
| + | - Zvolíme $z = a^pb^pc^p$\\ | ||
| + | - Pro libovolné rozdělení $z = uvwxy$:\\ | ||
| + | - Pokud $vwx$ obsahuje dva druhy symbolů, pumpováním porušíme pořadí\\ | ||
| + | - Pokud obsahuje jeden symbol, pumpováním změníme počet jen u jednoho písmena | ||
| ===== Zásobníkové automaty ===== | ===== Zásobníkové automaty ===== | ||
| - | **Zásobníkové automaty (nedeterministické i deterministické ) a jejich vztah k bezkontextovým jazykům.** | + | |
| + | **Zásobníkové automaty (nedeterministické i deterministické) a jejich vztah k bezkontextovým jazykům.** | ||
| + | |||
| + | ==== Definice ==== | ||
| + | |||
| + | Zásobníkový automat (PDA) je sedmice $A = (Q, \Sigma, \Gamma, \delta, q_0, Z_0, F)$, kde: - $Q$: konečná množina stavů. - $\Sigma$: vstupní abeceda. - $\Gamma$: zásobníkové symboly. - $\delta$: přechodová funkce $\delta: Q \times (\Sigma \cup \{\varepsilon\}) \times \Gamma \to \mathcal{P}(Q \times \Gamma^*)$. - $q_0$: počáteční stav. - $Z_0$: počáteční zásobníkový symbol. - $F \subseteq Q$: koncové stavy. | ||
| + | |||
| + | ==== Typy zásobníkových automatů ==== | ||
| + | |||
| + | - < | ||
| + | **Nedeterministický PDA (NPDA):** | ||
| + | * Přechody mohou být více možností. | ||
| + | * Přijímá jazyk $L(A) = \{ w \mid (q_0, w, Z_0) \vdash_A^* (p, \varepsilon, | ||
| + | * **Příklad: | ||
| + | < | ||
| + | \usepackage{amsmath} | ||
| + | \usetikzlibrary{automata, | ||
| + | \begin{document} | ||
| + | |||
| + | \begin{tikzpicture}[node distance=2cm] | ||
| + | \node[state, | ||
| + | \path[-> | ||
| + | (q0) edge [loop above] node {\(a, Z_0 \to AZ_0\)} (q0) | ||
| + | (q0) edge [loop below] node {\(b, A \to \varepsilon\)} (q0); | ||
| + | \end{tikzpicture} | ||
| + | |||
| + | \end{document} | ||
| + | </ | ||
| + | * Na $a$ zásobník naplní symboly $A$. | ||
| + | * Na $b$ zásobník vyprázdní $A$. | ||
| + | </ | ||
| + | - < | ||
| + | **Deterministický PDA (DPDA):** | ||
| + | * Pro každý stav $q$, symbol $a \in \Sigma \cup \{\varepsilon\}$ a vrchol $X \in \Gamma$ je $|\delta(q, | ||
| + | * Pokud $\delta(q, | ||
| + | * **Příklad: | ||
| + | < | ||
| + | \usepackage{amsmath} | ||
| + | \usetikzlibrary{automata, | ||
| + | \begin{document} | ||
| + | |||
| + | \begin{tikzpicture}[node distance=2cm] | ||
| + | \node[state, | ||
| + | \node[state, | ||
| + | \path[-> | ||
| + | (q0) edge [loop above] node {\(a, Z_0 \to AZ_0\)} (q0) | ||
| + | (q0) edge node {\(b, A \to \varepsilon\)} (q1) | ||
| + | (q1) edge [loop below] node {\(b, A \to \varepsilon\)} (q1); | ||
| + | \end{tikzpicture} | ||
| + | |||
| + | \end{document} | ||
| + | </ | ||
| + | * Determinismus vyžaduje, aby přechody na $a$ a $b$ byly navzájem vyloučené. | ||
| + | </ | ||
| + | |||
| + | ==== Vztah k bezkontextovým jazykům ==== | ||
| + | |||
| + | * **Věta 0.4.9:** Každá bezkontextová gramatika $G$ lze převést na NPDA $A$, takže $L(G) = N(A)$. | ||
| + | * **Podstatné rozdíly: | ||
| + | * NPDA přijímají všechny bezkontextové jazyky. | ||
| + | * DPDA přijímají podmnožinu (deterministické jazyky). Například jazyk $\{ a^n b^n c^n \}$ není deterministický. | ||
| + | |||
| + | ==== Bezprefixové jazyky ==== | ||
| + | |||
| + | * Jazyk přijatý DPDA prázdným zásobníkem je **bezprefixový** (neobsahuje slovo jako prefix jiného slova). | ||
| + | * Pro každý DPDA $A$ existuje DPDA $B$, který přijímá $N(A) = L(B)$ koncovým stavem [1]. | ||
| + | |||