mirror of
https://github.com/TMD44/elte-ik-pti-bsc-zarovizsga.git
synced 2025-08-11 21:39:05 +02:00
405 lines
27 KiB
TeX
405 lines
27 KiB
TeX
\documentclass[margin=0px]{article}
|
|
|
|
\usepackage{listings}
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage{graphicx}
|
|
\usepackage{float}
|
|
\usepackage[a4paper, margin=0.7in]{geometry}
|
|
\usepackage{subcaption}
|
|
\usepackage{amsthm}
|
|
\usepackage{amssymb}
|
|
\usepackage{amsmath}
|
|
\usepackage{fancyhdr}
|
|
\usepackage{setspace}
|
|
|
|
\onehalfspacing
|
|
|
|
\renewcommand{\figurename}{ábra}
|
|
\newenvironment{tetel}[1]{\paragraph{#1 \\}}{}
|
|
|
|
\pagestyle{fancy}
|
|
\lhead{\it{PTI BSc Záróvizsga tételek}}
|
|
\rhead{12. Formális nyelvek és automaták}
|
|
|
|
\title{\textbf{{\Large ELTE IK - Programtervező Informatikus BSc} \vspace{0.2cm} \\ {\huge Záróvizsga tételek}} \vspace{0.3cm} \\ 12. Formális nyelvek és automaták}
|
|
\author{}
|
|
\date{}
|
|
|
|
\begin{document}
|
|
\maketitle
|
|
|
|
\begin{tetel}{Formális nyelvek és automaták}
|
|
Generatív grammatikák és a Chomsky-féle hierarchia. Grammatikák normálformái. Reguláris kifejezések. Véges automata. Veremautomata. Nyelvosztályok zártsági tulajdonságai. A reguláris és a környezetfüggetlen nyelvosztályok algoritmikus problémái.
|
|
\end{tetel}
|
|
|
|
\section{Formális nyelvtanok és a Chomsky-féle hierarchia}
|
|
\subsection{Alapfogalmak}
|
|
\begin{description}
|
|
\item[Ábécé, szó] \hfill \\
|
|
Szimbólumok véges nemüres halmazát ábécének nevezzük.
|
|
|
|
Egy $V$ ábécé elemeiből képzett véges sorozatokat $V$ feletti szavaknak vagy sztringeknek nevezzük. A 0 hosszúságú sorozatot üres szónak nevezzük és
|
|
$\varepsilon$-nal jelöljük.
|
|
|
|
A $V$ ábécé feletti szavak halmazát (beleértve az üres szót is) $V^*$-gal, a nemüres szavak halmazát $V^+$-szal jelöljük.
|
|
|
|
\item[Konkatenáció] \hfill \\
|
|
Az $ x = uv$ szót az $u,v \in V$ szavak konkatenációjának nevezzük.
|
|
|
|
A konkatenáció asszociatív, de (általában) nem kommutatív.
|
|
|
|
$V^*$ zárt a konkatenációra. Azaz:
|
|
\begin{align*}
|
|
u,v \in V^* \Rightarrow uv \in V^*
|
|
\end{align*}
|
|
Továbbá $\varepsilon$ egységelemnek tekinthető $V^*$-gal és a konkatenációval. Azaz:
|
|
\begin{align*}
|
|
u \in V^* \Rightarrow u\varepsilon \in V^* \textrm{, és }\varepsilon u \in V^*
|
|
\end{align*}
|
|
\item[Egyéb definíciók] \hfill
|
|
\begin{itemize}
|
|
\item $u,v \in V$. Az $u$ szót a $v$ részszavának nevezzük, ha $ v = xuy , \ (x,y \in V)$ teljesül. Ha még $xy\neq\varepsilon$, akkor $u$ valódi részszó.
|
|
|
|
\item $ v = xuy \ (x,y,u,v \in V)$. Ekkor:
|
|
\begin{itemize}
|
|
\item Ha $x=\varepsilon$, akkor $u$-t a $v$ szó prefixének nevezzük
|
|
\item Ha $y=\varepsilon$, akkor $u$-t a $v$ szó szufixének nevezzük
|
|
\end{itemize}
|
|
|
|
\item Egy $u\in V$ szó tükörképe alatt a szimbólumai fordított sorrendben való felírását értjük. (Jele: $u^{-1}$)
|
|
\end{itemize}
|
|
\end{description}
|
|
\subsection{Formális nyelvtanok}
|
|
\begin{description}
|
|
\item[Nyelv] \hfill \\
|
|
Ha $L \subset V^*$, akkor $L$-et $V$ feletti nyelvnek tekintjük.
|
|
|
|
Az üres nyelv (egy szót sem tartalmaz) jele: $\emptyset$
|
|
|
|
$L$ nyelv véges nyelv, ha véges számú szót tartalmaz, különben végtelen nyelv.
|
|
|
|
Nyelvekre vonatkozó műveletek:
|
|
\begin{itemize}
|
|
\item $ L_1 \cup L_2 = \{u | \ u \in L_1 $ vagy $ u \in L_2\}$ : az $L_1$ és $L_2$ nyelv uniója
|
|
\item $ L_1 \cap L_2 = \{u | \ u \in L_1 $ és $ u \in L_2\}$ : az $L_1$ és $L_2$ nyelv metszete
|
|
\item $ L_1 - L_2 = \{u | \ u \in L_1 $ és $ u \notin L_2\}$ : az $L_1$ és $L_2$ nyelv különbsége
|
|
\item $\overline{L} = V^* - L$ : az $L \subseteq V^*$ komplementere
|
|
\item $L_1L_2 = \{u_1u_2 | \ u_1 \in L_1, u_2 \in L_2\}$ : az $L_1$ és $L_2$ nyelv konkatenációja\\
|
|
Minden nyelvre fennáll: $\emptyset L = L \emptyset = \emptyset$ illetve $\{\varepsilon\}L = L\{\varepsilon\} = L$
|
|
\item $L^i$ : az $L$ nyelv $i$-edik ($i \geq 1$) iterációja (a konkatenációra nézve), és $L^0 = \{\varepsilon\}$
|
|
\item $ L^* = \bigcup\limits_{i\geq1} L^i$ : az $L$ nyelv iteratív lezártja
|
|
\end{itemize}
|
|
Az unió, konkatenáció és iteráció lezárása műveleteket reguláris művelteknek nevezzük.
|
|
\item[Grammatika] \hfill \\
|
|
Nyelvek sokféle módon előállíthatók. A produkciós rendszerekkel való előállítás egyik módja a nyelvek generálása grammatikával.
|
|
|
|
A $G$ generatív grammatikán egy $(N,T,P,S)$ négyest értünk, ahol:
|
|
\begin{itemize}
|
|
\item $N$ és $T$ diszjunkt ábécék, a nemterminális ($N$) és terminális ($T$) szimbólumok ábécéi.
|
|
\item $S\in N$ a kezdőszimbólum.
|
|
\item $P$ az $(x,y)$ rendezett párok halmaza, ahol $x,y \in (N \cup T)^*$ és $x$ legalább egy nemterminális szimbólumot tartalmaz. \\
|
|
A $P$ halmaz elemeit átírási szabályoknak nevezzük.
|
|
\end{itemize}
|
|
Az $(x,y)$ jelölés helyett az $x \rightarrow y$ jelölést alkalmazzuk. (Ha $\rightarrow \notin (N\cup T)$ )
|
|
\item[Levezetés] \hfill \\
|
|
$ G = (N,T,P,S) $, és $u,v \in (N\cup T)^*$. A $v$ szó közvelenül (egy lépésben) levezethető $u$ szóból $G$-ben, ha
|
|
\begin{align*}
|
|
u = u_1xu_2, \ v = u_1yu_2 \ \textrm{és} \ x \rightarrow y \in P \quad (u_1, u_2 \in (N \cup T)^*)
|
|
\end{align*}
|
|
Ezt $ u \Longrightarrow_G v$ jelöljük.
|
|
|
|
Azt mondjuk, hogy a $v$ szó $k \ (\geq 1)$ lépésben levezethető az $u$ szóból $G$-ben, ha
|
|
\begin{align*}
|
|
\exists u_1, ... , u_{k+1} \in (N\cup T)^*: u = u_1, v = u_{k+1} \ \textrm{és} \ u_i \Longrightarrow_G u_{i+1} \quad (1 \leq i \leq k)
|
|
\end{align*}
|
|
|
|
A $v$ szó levezethető az $u$ szóból G-ben, ha $u=v$ vagy $\exists k \geq 1$ szám, hogy $v$ $k$ lépésben levezethető $u$-ból.\\
|
|
Másképp: A $v$ szó levezethető az $u$ szóból G-ben (jele: $ u \Longrightarrow_G^* v $), ha $u=v$ vagy $\exists z \in (N\cup T)^*$ szó, hogy $ u \Longrightarrow_G^* z $ és $ z \Longrightarrow_G v $
|
|
\item[Generált nyelv] \hfill \\
|
|
$L(G)$ a $G=(N,T,P,S)$ grammatika által generált nyelv, ha:
|
|
\begin{align*}
|
|
L(G) = \{w | \ S \Longrightarrow_G^* w, w \in T^*\}
|
|
\end{align*}
|
|
\end{description}
|
|
\subsection{Chomsky-féle hierarchia}
|
|
$G = (N,T,P,S)$ generatív grammatika $i$-típusú ($i=0,1,2,3$), ha $P$ szabályhalmazára a következők teljesülnek:
|
|
\begin{description}
|
|
\item[Mondatszerkezetű grammatika (i=0)] \hfill \\
|
|
Nincs korlátozás
|
|
\item[Környezetfüggő grammatika (i=1)] \hfill \\
|
|
$P$ minden szabálya $u_1Au_2 \rightarrow u_1vu_2$ alakú, ahol, $A\in N$ és $ v \neq \varepsilon $, ($u_1,u_2, v \in (N \cup T)^*$).
|
|
Kivéve az $S \rightarrow \varepsilon$ szabályt (ha létezik). Ekkor $S$ nem fordul elő egyetlen szabály jobboldalán sem.
|
|
\item[Környezetfüggetlen grammatika (i=2)] \hfill \\
|
|
$P$ minden szabálya $A \rightarrow v$ alakú, ahol, $A\in N, v \in (N \cup T)^*$.
|
|
\item[Reguláris grammatika (i=3)] \hfill \\
|
|
$P$ minden szabálya $A \rightarrow vB$ vagy $A \rightarrow v$ alakú, ahol, $A,B\in N, v \in T^*$.
|
|
\end{description}
|
|
|
|
\noindent
|
|
$L$ nyelv $i$-típusú, ha $i$-típusú grammatikával generálható. Az $i$-típusú nyelvek osztályát $\mathcal{L}_i$ jelöljük.
|
|
|
|
\noindent
|
|
Az $i$-típusú nyelvosztályok a következő tulajdonságokkal rendelkeznek:
|
|
\begin{itemize}
|
|
\item $ \mathcal{L}_3 \subset \mathcal{L}_2 \subset \mathcal{L}_1 \subset \mathcal{L}_0 $
|
|
\item Az $\mathcal{L}_i \ (i=0,1,2,3)$ nyelvosztályok mindegyike zárt a reguláris műveletekre.
|
|
\end{itemize}
|
|
\section{Automaták}
|
|
Formális nyelvek megadása nemcsak generatív, hanem felismerő eszközökkel is lehetséges, azaz olyan számítási eszközök segítségével, amelyek szavak feldolgozására és azonosítására alkalmasak.
|
|
Ilyen eszköz például az automata, amely egy szó, mint input hatására kétféleképpen viselkedhet: vagy elfogadja, vagy elutasítja.
|
|
\subsection{Véges Automata}
|
|
\begin{description}
|
|
\item[Definíció] \hfill \\
|
|
A véges automata egy rendezett ötös,
|
|
\[A=(Q,T,\delta,q_0, F)\]
|
|
ahol:
|
|
\begin{itemize}
|
|
\item Q - állapotok véges nemüres halmaza
|
|
\item T - input szimbólumok ábécéje
|
|
\item $\delta : Q \times T \rightarrow Q$ - állapot-átementi függvény
|
|
\item $q_0 \in Q$ - kezdőállapot
|
|
\item $F \subseteq Q$ - elfogadó állapotok halmaza
|
|
\end{itemize}
|
|
|
|
Működés:\\
|
|
A véges automata diszkrét időintervallumokban végrehajtott lépések sorozata által működik. Minden egyes lépés során az automata elolvassa a következő input szimbólumot és átmegy egy olyan állapotba, amelyet az állapotátmeneti függvény meghatároz (az aktuális állapot és input szimbólum alapján).
|
|
|
|
Kezdetben az $A$ véges automata a $q_0$ kezdőállapotban van és az olvasófej az input szalagon levő $u \in T^*$ szó első betűjét dolgozza fel. Ezután a véges automata lépések sorozatát végrehajtva elolvassa az input $u$ szót; betűről betűre haladva olvas és új állapotba kerül.
|
|
|
|
Miután az $u$ input szó utolsó betűjét is elolvasta a véges automata, vagy $q \in F,$ azaz elfogadó állapotba kerül, és akkor az $u$ szót az automata elfogadja, vagy az új állapot nem lesz eleme $F$-nek, és ekkor az automata a szót nem fogadja el.
|
|
|
|
|
|
\item[VDA - Véges determinisztikus automata] \hfill \\
|
|
A $\delta$ függvény egyértékű, ezért minden egyes $(q, a)$ párra, ahol $(q, a) \in Q \times T$ egyetlen olyan $s$ állapot létezik, amelyre $\delta(q, a) = s$ teljesül. Ezért ezt a véges automatát determinisztikusnak nevezzük.
|
|
\item[VNDA - Véges nemdeterminisztikus automata] \hfill \\
|
|
Ha többértékű állapot-átmeneti függvényt is megengedünk, azaz $\delta : Q \times T \rightarrow 2^Q$, akkor nemdeterminisztikus véges automatáról beszélünk. (Ebben az esetben aktuális állapotnak egy állapothalmaz valamely elemét, mintsem egyetlen állapotot tekinthetünk.)
|
|
|
|
Ez azt jelenti, hogy a kezdeti állapot helyettesíthető egy $Q_0 \subseteq Q$ kezdőállapot halmazzal.
|
|
(És az is előfordulhat, hogy egy a input szimbólum esetén $\delta(q, a)$ üres az aktuális állapotok mindegyikére.)
|
|
\item[Tulajdonságok] \hfill \\
|
|
Az állapot-átmeneteket
|
|
\[qa \rightarrow p\]
|
|
alakú szabályok formájában is írhatjuk $p \in \delta(q, a) $ esetén. Jelöljük $M_\delta$-val az $A = (Q, T, \delta,Q_0, F)$ nemdeterminisztikus véges automata $\delta$ állapot-átmenet függvénye által az előbbi módon származó szabályok halmazát.
|
|
|
|
Ha minden egyes $(q, a)$ párra egyetlen $qa \rightarrow p$ szabály van $M_\delta$-ban, akkor a véges automata determinisztikus, egyébként nemdeterminisztikus.
|
|
|
|
\begin{itemize}
|
|
\item Közvetlen redukció: \\
|
|
Legyen $A = (Q, T, \delta, q_0, F)$ egy véges automata és legyenek $u, v \in QT^*$ szavak. Azt mondjuk, hogy az $A$ automata az $u$ szót a $v$ szóra redukálja egy lépésben/közvetlenül. Ha van olyan $qa \rightarrow p$ szabály $M_\delta$-ban, és van olyan $w \in T^*$ szó, amelyre $u = qaw$ és $v = pw$ teljesül.
|
|
|
|
\item Redukció:\\
|
|
Az $A = (Q, T, \delta, q_0, F)$ véges automata az $u \in QT^*$ szót a $v \in QT^*$ szóra redukálja $(u \Longrightarrow_A^* v)$, ha $u = v$, vagy $ \exists z \in QT^*$, amelyre $u \Longrightarrow_A^* z$ és $z \Longrightarrow_A v$ teljesül.
|
|
|
|
\item Az automata által elfogadott nyelv:\\
|
|
Az $A = (Q, T, \delta, q_0, F)$ véges automata által elfogadott/felismert nyelv alatt az \[ L(A) = \{u \in T^* | \ q_0u \Longrightarrow_A^* p, \quad q_0 \in Q_0 \textrm{ és } p \in F\} \] szavak halmazát értjük. (Az üres szó, akkor és csak akkor van benne az automata által elfogadott $L(A)$ nyelvben, ha $Q_0 \cap F \neq \emptyset$).
|
|
|
|
\item Tétel:\\
|
|
Minden $A$ nemdeterminisztikus véges automatához meg tudunk adni egy 3-típusú $G$ grammatikát úgy, hogy $L(G) = L(A)$ teljesül.
|
|
|
|
\item Tétel: \\
|
|
Minden 3-típusú G grammatikához meg tudunk adni egy $A$ véges automatát úgy, hogy $L(A) = L(G)$ teljesül. \\
|
|
|
|
|
|
Ezek után fenáll a kérdés: Létezik-e olyan reguláris nyelv, amely VNDA-val felismerhető, de nem ismerhető fel VDA-val? \\
|
|
Válasz: Nincs.
|
|
|
|
\item Tétel:\\
|
|
Minden $A = (Q, T, \delta,Q_0, F)$ VNDA-hoz meg tudunk konstruálni egy $A' = (Q', T, \delta', q_0', F')$ VDA-t úgy, hogy $L(A) = L(A')$ teljesül.
|
|
\end{itemize}
|
|
\end{description}
|
|
\subsection{Veremautomata}
|
|
\begin{description}
|
|
\item[Definíció] \hfill \\
|
|
A veremautomata egy rendezett hetes
|
|
\[A = (Z,Q, T, \delta, z_0, q_0, F)\]
|
|
ahol
|
|
\begin{itemize}
|
|
\item Z - a veremszimbólumok véges halmaza,
|
|
\item Q - az állapotok véges halmaza,
|
|
\item T - az inputszimbólumok véges halmaza,
|
|
\item $\delta : Z \times Q \times (T \cup \{\varepsilon\}) \rightarrow 2^{Z^* \times Q}$ - átmeneti függvény
|
|
\item $z_0 \in Z $ - a kezdeti veremszimbólum,
|
|
\item $q_0 \in Q $ - a kezdeti állapot,
|
|
\item $F \subseteq Q$ - az elfogadó állapotok halmaza
|
|
\end{itemize}
|
|
|
|
A veremautomata konfigurációja alatt egy $uq$ alakú szót értünk, ahol $u \in Z^*$ a verem aktuális tartalma és $q \in Q$ az aktuális állapot. \\
|
|
A kezdeti konfiguráció $z_0q_0$.
|
|
|
|
Működés: \\
|
|
Tegyük fel, hogy az $A$ veremautomata olvasófeje az $a$ inputszimbólumon áll, a veremautomata $q$ állapotban van, valamint a verem tetején levő szimbólum $z$. Legyen $ \delta(z, q, a) = {(u_1, r_1), . . . , (u_n, r_n)}$, ahol $u_i \in Z^*$ és $r_i \in Q, 1 \leq i \leq n$. Ekkor $A$ következő állapota valamely $r_i$ lesz és egyidejűleg $z$-t helyettesíti az $u_i$ szóval, továbbá az olvasófej egy cellával jobbra lép az input szalagon.\\
|
|
Ha $\delta(z, q, \varepsilon)$ nem üres, akkor ún. $\varepsilon$-átmenet hajtható végre.
|
|
|
|
Ha az input szalag a $w \in T^*$ szót tartalmazza és a $z_0q_0$ kezdeti konfigurációból kiindulva a lépések sorozatát végrehajtva az $A$ veremautomata egy $up$ konfigurációba ér, ahol $p$ elfogadó állapot, akkor azt mondjuk, hogy $A$ elfogadta a $w$ szó.
|
|
|
|
\item[Tulajdonságok] \hfill
|
|
\begin{itemize}
|
|
\item Közvetlen redukció: \\
|
|
$\alpha, \beta \in Z^*QT^*$\\
|
|
Az $A$ veremautomata az $\alpha $ szót a $\beta$ szóra redukálja egy lépésben ($\alpha \Longrightarrow_A \beta$), ha:
|
|
\[\exists z \in Z, \ p,q \in Q, \ a \in T \cup \{\varepsilon\}, \ r,u \in Z^* \textrm{ és } w\in T^*\]
|
|
hogy:
|
|
\[(u,p) \in \delta(z,q,a) \textrm{ és } \alpha = rzqaw \textrm{ és } \beta = rupw\]
|
|
\item Redukció: \\
|
|
Az A veremautomata az $\alpha$ szót a $\beta$ szóra redukálja ($\alpha \Longrightarrow_A^* \beta$), ha vagy $\alpha = \beta$, vagy
|
|
$ \exists \gamma_1,...,\gamma_n \in Z^*QT^*$ szavakból álló véges sorozat, hogy $\alpha = \gamma_1, \ \beta = \gamma_n, \quad \textrm{ és } \quad \\ {\gamma_i \Longrightarrow_A \gamma_{i+1} \quad (i=1,...,n-1)}$
|
|
\item A veremautomata által elfogadott nyelv: \\
|
|
Az A veremautomata által (elfogadó állapottal) elfogadott nyelv:
|
|
\[L(A) = \{ w \in T^* | \ z_0q_0w \Longrightarrow_A^* up, \textrm{ ahol } u \in Z^*, p \in F \} \]
|
|
\item Determinizmus: \\
|
|
A $\delta$ leképezést szabályok formájában is megadhatjuk. Az így nyert szabályhalmazt $M_\delta$-val jelöljük. Tehát
|
|
\begin{enumerate}
|
|
\item $zqa \rightarrow up \in M_\delta$ ha $(u, p) \in \delta(z, q, a)$
|
|
\item $zq \rightarrow up \in M_\delta$ ha $(u, p) \in \delta(z, q, \varepsilon)$
|
|
\end{enumerate}
|
|
|
|
Az $A = (Z,Q, T,\delta, z_0, q_0, F)$ veremautomatát determinisztikusnak mondjuk, ha minden $(z, q) \in Z \times Q$ pár esetén:
|
|
\begin{enumerate}
|
|
\item $\forall a \in T: |\delta(z, q, a)| = 1$ és $\delta(z, q, \varepsilon) = \emptyset$
|
|
|
|
vagy
|
|
\item $|(z, q, \varepsilon)| = 1 $ és $\forall a \in T: \delta(z, q, a) = \emptyset$
|
|
\end{enumerate}
|
|
\item Üres veremmel elfogadott nyelv: \\
|
|
Az $N(A)$ nyelvet az $A$ veremautomata üres veremmel fogadja el, ha
|
|
\[ N(A) = \{w \in T^* | \ z_0q_0w \Longrightarrow_A^* p, \textrm{ ahol } p \in Q \} \]
|
|
\item Tétel: \\
|
|
Bármely $G$ környezetfüggetlen grammatikához meg tudunk adni egy olyan $A$ veremautomatát, amelyre $L(A) = L(G)$ teljesül.
|
|
\item Tétel: \\
|
|
Minden $A$ veremautomatához meg tudunk adni egy környezetfüggetlen $G$ grammatikát úgy, hogy $L(G) = N(A)$ teljesül.
|
|
\end{itemize}
|
|
\end{description}
|
|
\section{Reguláris nyelvek tulajdonságai és alkalmazásai}
|
|
\subsection{3-típusú grammatikák normálformája}
|
|
Minden 3-típusú, azaz reguláris nyelv generálható egy olyan grammatikával, amelynek szabályai:
|
|
\begin{itemize}
|
|
\item $ X \rightarrow aY$, ahol $X,Y \in N$ és $a \in T$
|
|
\item $X \rightarrow \varepsilon$, ahol $X \in N$
|
|
\end{itemize}
|
|
\subsection{Reguláris kifejzések}
|
|
\begin{description}
|
|
\item[Motiváció] \hfill \\
|
|
Ismeretes, hogy minden véges nyelv reguláris. Tudjuk továbbá, hogy az $\mathcal{L}_3$ nyelvosztály (a reguláris nyelvek osztálya) zárt az unió, a konkatenáció és az iteráció lezártja műveletekre nézve.
|
|
|
|
Következésképpen, kiindulva véges számú véges nyelvből és az előzőekben felsorolt, ún. reguláris műveleteket véges sokszor alkalmazva reguláris nyelvet kapunk.
|
|
|
|
Kérdés az, hogy vajon ezzel az eljárással minden reguláris nyelvet
|
|
elő tudunk-e állítani, azaz, ez a módszer elégséges-e az $\mathcal{L}_3$ nyelvosztály leírására?
|
|
\item[Definíció] \hfill \\
|
|
Legyenek $V$ és $V' = \{\varepsilon, \cdot, +, *, (, )\}$ diszjunkt ábécék. A $V$ ábécé feletti reguláris kifejezéseket rekurzív módon a következőképpen definiáljuk:
|
|
\begin{enumerate}
|
|
\item $\varepsilon$ reguláris kifejezés $V$ felett.
|
|
\item Minden $a \in V$ reguláris kifejezés $V$ felett.
|
|
\item Ha R reguláris kifejezés V felett, akkor $(R)^*$ is reguláris kifejezés $V$ felett. [iteratív lezárás]
|
|
\item Ha $Q$ és $R$ reguláris kifejezések $V$ felett, akkor $(Q) \cdot (R)$ [konkatenáció] és $(Q) + (R)$ [unió] is reguláris kifejezés $V$ felett.
|
|
\end{enumerate}
|
|
|
|
\textit{Megjegyzés: Minden reguláris kifejezés jelöl (meghatároz) valamely reguláris nyelvet. (Pl.: $\varepsilon$ a $\{\varepsilon\}$ nyelvet, $a+b$ az $\{a\} \cup \{b\} = \{a,b\}$ és $a\cdot b$ az $\{a\}\{b\} = \{ab\}$ nyelvet.) A reguláris kifejezés a szintaxis, az, hogy hogyan értelmezzük, a szemantika.}
|
|
\item[Axiómák]\hfill \\
|
|
$P,Q,R$ reguláris kifejezések. Ekkor fennállnak a következő tulajdonságok:
|
|
\begin{itemize}
|
|
\item Asszociativitás:
|
|
\[P+(Q+R) = (P+Q)+R\]
|
|
\[P\cdot(Q\cdot R) = (P\cdot Q)\cdot R\]
|
|
\item Kommutativitás:
|
|
\[P+Q = Q+P\]
|
|
\item Disztributivitás:
|
|
\[P\cdot (Q+R) = P\cdot Q + P\cdot R\]
|
|
\[(P+Q)\cdot R = P\cdot R + Q\cdot R\]
|
|
\item Egységelem:
|
|
\[\varepsilon\cdot P = P\cdot\varepsilon = P\]
|
|
\[P^* = \varepsilon + P \cdot P^*\]
|
|
\[P^* = (\varepsilon+P)^*\]
|
|
\end{itemize}
|
|
|
|
A fenti axiómák azonban még önmagukban nem elegendőek az összes reguláris kifejezés előállítására (helyettesítés segítségével). Szükség van még az alábbi inferencia szabályra:
|
|
\[P=R+P\cdot Q \quad \land \quad \varepsilon \notin Q \quad \Longrightarrow \quad P = R\cdot Q^*\]
|
|
|
|
Vegyük még hozzá az $\emptyset$ szimbólumot a reguláris kifejezések halmazához, amely az üres nyelvet jelöli. (Ebben az esetben nincs szükségünk az $\varepsilon$ szimbólumra, mivel $\emptyset^* = \{\varepsilon\}$). Így, a definícióban helyettesíthetjük az $\varepsilon$ szimbólumot az $\emptyset$ szimbólummal. Ekkor helyettesítjük $\varepsilon$-t a megelőző axióma rendszerben $(\emptyset)^*$-gal és még egy további
|
|
axiómát tekintünk:
|
|
\[\emptyset\cdot P = P\cdot\emptyset = \emptyset\]
|
|
A fenti szabályok elégségesek ahhoz, hogy levezessünk minden érvényes egyenlőséget
|
|
reguláris kifejezések között.
|
|
\item[Reguláris kifejezések és reguláris nyelvek] \hfill \\
|
|
Minden reguláris kifejezés egy reguláris (3-típusú) nyelvet jelöl, és megfordítva, minden reguláris nyelvhez megadható egy, ezen nyelvet jelölő reguláris kifejezés.\\ (Ezzel választ adtunk a motivációban feltett kérdésre.)
|
|
\end{description}
|
|
\subsection{Lineáris grammatikák és nyelvek}
|
|
\begin{description}
|
|
\item[Definíció] \hfill \\
|
|
Egy $G=(N,T,P,S)$ környezetfüggetlen grammatikát lineárisnak nevezünk, ha minden szabálya:
|
|
\begin{enumerate}
|
|
\item $A\rightarrow u, \quad A \in N, u \in T^*$
|
|
\item $A\rightarrow u_1Bu_2, \quad A,B\in N, u_1,u_2 \in T^*$
|
|
\end{enumerate}
|
|
Továbbá $G$-t bal-lineárisnak, illetve jobb-lineárisnak mondjuk, ha $u_1 = \varepsilon$, illetve $u_2 = \varepsilon$ minden 2. alakú szabályra.
|
|
|
|
Egy $L$ nyelvet lineárisnak, bal-lineárisnak, illetve jobb-lineárisnak mondunk,
|
|
ha van olyan $G$ lineáris, bal-lineáris, illetve jobb-lineáris grammatika,
|
|
amelyre $L = L(G)$ teljesül.
|
|
\item[Lineáris és reguláris grammatikák, nyelvek] \hfill \\
|
|
A jobb-lineáris grammatikák azonosak a reguláris grammatikákkal (3-típusúak).
|
|
|
|
Tétel: \\
|
|
Minden bal-lineáris grammatika reguláris (3-típusú) nyelvet generál.
|
|
\end{description}
|
|
\section{Környezetfüggetlen nyelvek tulajdonságai és elemzésük}
|
|
\subsection{Környezetfüggetlen grammatikák normálformái}
|
|
Környezetfüggetlen grammatikák normálformái olyan grammatikai transzformációval előállított grammatikák, melyek:
|
|
\begin{itemize}
|
|
\item bizonyos szintaktikai feltételeknek/tulajdonságoknak tesznek eleget
|
|
\item (általában) valamilyen szempontból egyszerűbbek, mint az eredeti grammatikák
|
|
\item ugyanazt a nyelvet generálják (így ugyanazon típusba tartoznak)
|
|
\end{itemize}
|
|
Tétel:\\
|
|
Minden $G = (N, T, P, S)$ környezetfüggetlen grammatikához meg tudunk konstruálni egy vele ekvivalens $G' = (N', T, P', S')$ környezetfüggetlen grammatikát úgy, hogy: $G'$ minden szabályának jobboldala nemüres szó [kivéve azt az esetet, mikor $\varepsilon \in L(G)$, ekkor $S' \rightarrow \varepsilon$ az egyetlen szabály, melynek jobboldala az üres szó és ekkor $S'$ nem fordul elő $G'$ egyetlen szabályának jobboldalán sem.]
|
|
\begin{description}
|
|
\item[$\varepsilon$-mentes grammatika] \hfill \\
|
|
A $G$ grammatika $\varepsilon$-mentes, ha egyetlen szabályának jobboldala sem az üres szó.
|
|
|
|
Tétel:\\
|
|
Minden környezetfüggetlen $G$ grammatikához meg tudunk konstruálni egy $G'$ $\varepsilon$-mentes környezetfüggetlen grammatikát, amelyre $L(G') = L(G) - \{\varepsilon\}$ teljesül.
|
|
\item[Chomsky normálforma] \hfill \\
|
|
A $G = (N, T, P, S)$ környezetfüggetlen grammatikát Chomsky-normálformájúnak mondjuk, ha minden egyes szabálya:
|
|
\begin{itemize}
|
|
\item $X \rightarrow a$, ahol $X \in N, a \in T$
|
|
\item $X \rightarrow YZ$, ahol $X,Y,Z \in N$
|
|
\end{itemize}
|
|
Tétel:\\
|
|
Minden $\varepsilon$-mentes $G=(N,T,P,S)$ környezetfüggetlen grammatikához meg tudunk konstruálni egy vele ekvivalens $G' = (N', T, P', S)$ Chomsky-normálformájú környezetfüggetlen grammatikát.
|
|
|
|
Tétel (az előző következménye):\\
|
|
Minden $G$ környezetfüggetlen grammatika esetében eldönthető, hogy egy $u$ szó benne van-e $G$ grammatika által generált nyelvben.
|
|
\item[Redukált grammatika] \hfill
|
|
\begin{itemize}
|
|
\item A környezetfüggetlen grammatika egy nemterminálisát inaktívnak/nem aktívnak nevezzük, ha nem vezethető le belőle terminális szó.
|
|
\item A környezetfüggetlen grammatika egy nemterminálisát nem elérhetőnek nevezzük, ha nem fordul elő egyetlen olyan szóban sem, amely a kezdőszimbólumból levezethető.
|
|
\item Egy nemterminálist nem hasznosnak mondunk, ha vagy inaktív, és/vagy nem elérhető.
|
|
\item Az, hogy egy $A$ nemterminális elérhető-e vagy aktív-e, az eldönthető.
|
|
\item Egy környezetfüggetlen grammatika redukált, ha minden nemterminálisa aktív és elérhető.
|
|
\end{itemize}
|
|
Tétel:\\
|
|
Minden környezetfüggetlen grammatikához meg tudunk konstruálni egy vele ekvivalens redukált környezetfüggetlen grammatikát.
|
|
|
|
\end{description}
|
|
\subsection{Levezetési fa}
|
|
A környezetfüggetlen grammatikák levezetéseit fákkal is jellemezhetjük. A levezetési fa egy szó előállításának lehetőségeiről ad információkat. A levezetési fa egy irányított gráf, amely speciális tulajdonságoknak tesz eleget:
|
|
\begin{itemize}
|
|
\item A gyökér cimkéje: $S$
|
|
\item A többi csúcs cimkéje ($N\cup T$) valamely eleme
|
|
\end{itemize}
|
|
A levezetési fa nem minden esetben adja meg a levezetés során alkalmazott szabályok sorrendjét. Két levezetés lényegében azonos, ha csak a szabályok alkalmazásának sorrendjében különbözik.
|
|
|
|
Egy környezetfüggetlen grammatika minden levezetési fája egy egyértelmű (egyetlen) legbaloldalibb levezetést határoz meg. A legbaloldalibb levezetés során minden levezetési lépésben a legbaloldalibb nemterminálist kell helyettesítenünk.
|
|
\\\\
|
|
Tétel:\\
|
|
Minden környezetfüggetlen grammatikáról eldönthető, hogy az általa generált nyelv az üres nyelv-e vagy sem.
|
|
\subsection{Bar-Hillel Lemma}
|
|
Minden $L$ környezetfüggetlen nyelvhez meg tudunk adni két $p$ és $q$ természetes számot úgy, hogy minden olyan szó $L$-ben, amely hosszabb, mint $p$
|
|
\[uxwyz\]
|
|
alakú, ahol $|xwy| \leq q$, $xy \neq \varepsilon$ , és minden
|
|
\[ux^iwy^iv\]
|
|
szó is benne van az $L$ nyelvben minden $i \geq 0$ egész számra ($u,x,w,y,v \in T^*$).
|
|
\\\\
|
|
Tétel:\\
|
|
Eldönthető, hogy egy környezetfüggetlen grammatika végtelen nyelvet generál-e vagy sem.
|
|
\end{document} |