Greibach 23

This commit is contained in:
Vladimir Lemus 2023-10-04 15:38:04 -06:00
parent 29cf96657c
commit 6ac8828011
3 changed files with 112 additions and 14 deletions

Binary file not shown.

View File

@ -183,21 +183,119 @@ Para llegar a la forma normal de Greibach seguimos los pasos:
\noindent que quiere decir que la regla de producción para la variable $A$ puede obtenerse con producciones solo aplicadas al símbolo de la extrema izquierda de la forma enunciada. Si lo vemos de la forma que hemos enunciado las gramáticas independientes de contexto, partiendo de una variable inicial, que va a combinaciones de variables, y esas variables eventualmente van a símbolos terminales, es un poco caminar para atrás (normalmente armamos los términos de izquierda a derecha, para la forma normal de Greibach los armamos de derecha a izquierda).
\end{enumerate}
Un método más detallado puede encontrarse en el libro de Shyamalendu\cite{Shyamalendu}, libro que recomeindo ver con precauciń, pues según yo tiene algunos errores (muy probablemente yo soy el del error), pero para este caso me parece un procedimiento más detallado para llegar a la forma normal de Greibach\footnote{Por cierto, la forma normal de Greibach es derivada del trabajo de Sheila Greibach, computóloga estadounidense que trabaja en la UCLA, vale la pena reconocer el trabajo de las computólogas.}.
Antes de empezar necesitamos unos lemas que serán útiles en la conversión.
\newtheorem{lem}{Lema}
\begin{lem}
Si $G=(\Sigma,\Gamma,S,\rightarrow)$ es una gramática independiente de contexto, y si $A\rightarrow A\alpha$ y $A\rightarrow \beta_1|\beta_2|...|\beta_n$ perteneces a las reglas de producción ($\rightarrow$) de $G$, entonces una nueva gramática $G'(\Sigma,\Gamma,S,\rightarrow_{G'})$ puede construirse remplazando $A\rightarrow \beta_1|beta_2|...|\beta_n$ en $A\rightarrow A\alpha$, resultando
\begin{equation*}
A\rightarrow \beta_1\alpha | \beta_2 \alpha |...|\beta_n\alpha
\end{equation*}
Esta producción pertenece a ($\rightarrow_{G'}$) y puede probarse que $L(G)=L(G')$.
\label{lem:1}
\end{lem}
Que nos da una manera de pasar de una producción con puros símbolos terminales aislados a una con parejas de símbolos terminales.
Otro lema útil
\begin{lem}
Sea $G=(\Sigma,\Gamma,S,\rightarrow)$ es una gramática independiente de contexto y el conjunto de producciones $A$ que pertenecen a $(\rightarrow)$ sean $A\rightarrow A\alpha_1 | A\alpha_2 | ... | A\alpha_m | \beta_1 | \beta_2 | ...| \beta_m$
Si se introduce una nueva no terminal $X$. Sea $G'=(\Sigma,\Gamma',S.\rightarrow_{G'})$, donde $\Gamma'=\Gamma \cup X$ y $(\rightarrow_{G'})$ puede construirse remplazando las producciones $A$ por
\begin{enumerate}
\item \begin{align*}
A&\rightarrow \beta_i \ 1\leq i\leq n \\
A&\rightarrow \beta_iX
\end{align*}
\item \begin{align*}
X&\rightarrow \alpha_j \ 1\leq j\leq m \\
X&\rightarrow \alpha_jX
\end{align*}
\end{enumerate}
Se puede probar que $L(G)=L(G')$.
\label{lem:2}
\end{lem}
Con estos se pueden dar pasos para pasar a la forma normal de Greibach:
\begin{enumerate}
\item Pasar la gramática a forma normal de Chomsky de acuerdo a las instrucciones líneas arriba.
\item Renombrar los no terminales $V_N$ como $(A_1,A_2,...,A_n)$ con el símbolo inicial $A_1$.
\item Usando el \ref{lema:1} modificar las producciones para que todas queden de la forma $A_i\rightarrow A_j V$, con $i\leq j$.
\item Aplicando de manera repetida ambos lemas todas las producciones se modificarán hasta quedar en la forma normal de Greibach.
\end{enumerate}
Veamos para nuestro ejemplo y lo ponemos en una notación más sencilla, partimos de la regla más sencilla:
Recordemos como quedó nuestra Gramática en forma normal de Chomsky:
\begin{align*}
B_1 &\rightarrow 0 \\
B &\rightarrow 0B_1 \\
U &\rightarrow 0B_1A \\
A &\rightarrow 0B_1AB | 0B_1 | 0B_1B| 0B_1ABB | 0B_1BB|0B_1A \\
S &\rightarrow 0B_1AB | 0B_1 | 0B_1B| 0B_1ABB | 0B_1BB|0B_1A
S &\rightarrow \mathbf{U}B|B_1B_1|BB|AB|BA \\
A &\rightarrow \mathbf{U}B|B_1B_1|BB|AB|BA \\
\mathbf{U} &\rightarrow BA \\
B &\rightarrow B_1B_1 \\
B_1 &\rightarrow 0
\end{align*}
Lo que hicimos fue sustituir el 0 a la extrema izquierda en la regla $B \rightarrow B_1B_1$ y ahí sustituir en todas las variables que llevan a un cero en la extrema izquierda, ya tenemos nuestras producciones en la forma normal de Greibach.
Quizá esto requiera más explicación, estoy al pendiente.
Ya está en forma normal de Chomsky por lo que pasamos al paso 2 renombrar en orden:
\begin{align*}
A_1 &\rightarrow A_3A_4|A_5A_5|A_4A_4|A_2A_4|A_4A_2 \\
A_2 &\rightarrow A_3A_4|A_5A_5|A_4A_4|\mathbf{A_2A_4}|A_4A_2 \\
A_3 &\rightarrow A_4A_2 \\
A_4 &\rightarrow A_5A_5 \\
A_5 &\rightarrow 0
\end{align*}
Por suerte aquí cumple el orden de que $A_i\rightarrow A_jV$ con $i\leq j$, no hay que renombrar mucho más, pero notemos que en la producción $A_2$ aparece la producción $A_2\rightarrow A_2A_4$ que cumple estar en la forma $A\rightarrow A\alpha$ mientras las demás cumplen $A\rightarrow \beta_1|\beta_2|...|\beta_n$. De acuerdo a \ref{lem:1} se sustituye por $A\rightarrow \beta_1\alpha | \beta_2 \alpha |...|\beta_n\alpha$, es decir:
\begin{align*}
A_1 &\rightarrow A_3A_4|A_5A_5|A_4A_4|A_2A_4|A_4A_2 \\
A_2 &\rightarrow A_3A_4|A_5A_5|A_4A_4|\mathbf{A_3A_4A_4|A_5A_5A_4|A_4A_4A_4|A_4A_2A_4}|A_4A_2 \\
A_3 &\rightarrow A_4A_2 \\
A_4 &\rightarrow A_5A_5 \\
A_5 &\rightarrow 0
\end{align*}
Lo que sigue es sustituir los primeros terminales del lado derecho de cada producción hasta que el primer sí,bolo sea un terminal:
\begin{align*}
A_1 \rightarrow& A_4A_2A_4|0A_5|A_5A_5A_4| A_3A_4A_4|A_5A_5A_4|A_4A_4A_4| \\
& |A_3A_4A_4A_4|A_5A_5A_4A_4|A_4A_4A_4A_4|A_4A_2A_4A_4|A_4A_2A_4|A_5A_5A_2 \\
A_2 \rightarrow& A_4A_2A_4|0A_5|A_5A_5A_4|A_4A_2A_4A_4|0A_5A_4|A_5A_5A_4A_4| \\
& A_5A_5A_2A_4|A_5A_5A_2 \\
A_3 \rightarrow& A_5A_5A_2 \\
A_4 \rightarrow& 0A_5 \\
A_5 \rightarrow& 0
\end{align*}
El siguiente paso:
\begin{align*}
A_1 \rightarrow& A_5A_5A_2A_4|0A_5|0A_5A_4| A_5A_5A_2A_4A_4|0A_5A_4|0A_5A_4A_4| \\
& |A_5A_5A_2A_4A_4A_4|0A_5A_4A_4|0A_5A_4A_4A_4|0A_5A_2A_4A_4|0A_5A_2A_4|0A_5A_2 \\
A_2 \rightarrow& 0A_5A_2A_4|0A_5|0A_5A_4|0A_5A_2A_4A_4|0A_5A_4|0A_5A_4A_4| \\
& 0A_5A_2A_4|0A_5A_2 \\
A_3 \rightarrow& 0A_5A_2 \\
A_4 \rightarrow& 0A_5 \\
A_5 \rightarrow& 0
\end{align*}
Por último:
\begin{align*}
A_1 \rightarrow& 0A_5A_2A_4|0A_5|0A_5A_4| 0A_5A_2A_4A_4|0A_5A_4|0A_5A_4A_4| \\
& |0A_5A_2A_4A_4A_4|0A_5A_4A_4|0A_5A_4A_4A_4|0A_5A_2A_4A_4|0A_5A_2A_4|0A_5A_2 \\
A_2 \rightarrow& 0A_5A_2A_4|0A_5|0A_5A_4|0A_5A_2A_4A_4|0A_5A_4|0A_5A_4A_4| \\
& 0A_5A_2A_4|0A_5A_2 \\
A_3 \rightarrow& 0A_5A_2 \\
A_4 \rightarrow& 0A_5 \\
A_5 \rightarrow& 0
\end{align*}
Y listo, está en forma normal de Greibach.
\subsection{Extra: Chomsky y su disco punk}
Esto no tiene que ver con el tema, es un dato curioso para que no les sea tan aburrida la lectura. Noam Chomsky es muy conocido por ser, quizá, el intelectual estado unidense más famoso en el mundo, de una ideología cercana al anarquismo es un fuerte crítico al imperialismo de su país, un defensor a ultranza de la libertad de expresión y un pacifista (seguro a estas alturas ustedes saben que aunque muchos medios y persona suelen emparentar al anarquismo con la violencia, no necesariamente van pegadas).
@ -213,7 +311,7 @@ Pueden oír el \emph{split} en la siguiente liga de youtube: \url{https://www.yo
\begin{thebibliography}{10}
\bibitem{Kozen} Kozen, Dexter C. ``Automata and Computability'' Springer (1997)
\bibitem{Sipser} Sipser, Michael ``Introduction to the Theory of Computation'' 2a ed., Thomson Course Tecnology (2006)
\bibitem{Shyamalendu} Shyamalendu, Kandar. ``Introduction to Automatha Theory, Formal Languages and COmputation'', Dorling Kinderslay (India) - Pearson (2013)
\end{thebibliography}

View File

@ -209,7 +209,7 @@ De manera similar pueden convertir la minimización no acotada.
El lenguaje IMP es un modelo sencillo, aún con partes de abstracción, de un lenguaje de programación de ato nivel. Se pueden reconocer estructuras como el $if$ y el $while$ presentes en la mayoría de lenguajes de programación usados.
Se define como una gram{atica independiente de contexto, pero es un lenguaje Turing completo
Se define como una gramática independiente de contexto, pero es un lenguaje Turing completo
\begin{align*}
P &\rightarrow skip \mid X:=A\mid (P;P)\mid (if\ B\ then\ P\ else\ P) \mid (while\ B\ do\ P) \\