11.07.2015 Views

Teor´ıa de Autómatas y Lenguajes Formales

Teor´ıa de Autómatas y Lenguajes Formales

Teor´ıa de Autómatas y Lenguajes Formales

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Teoría <strong>de</strong> Autómatas y <strong>Lenguajes</strong> <strong>Formales</strong>Alvaro E. CamposPontificia Universidad Católica <strong>de</strong> ChileEscuela <strong>de</strong> IngenieríaDepartamento <strong>de</strong> Ciencia <strong>de</strong> la ComputaciónMarzo 1995


Contents0 PROLOGO 50.1 ¿Qué es un Lenguaje? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50.2 Sintaxis versus Semántica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50.3 Los Problemas a Estudiar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60.4 Aplicación a Otros Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60.5 Clases <strong>de</strong> <strong>Lenguajes</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70.6 Otros Problemas a Estudiar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80.7 Problemas No Decidibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 MATEMÁTICAS BÁSICAS 91.1 Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.1.1 Operaciones con Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.1.2 Conjuntos Infinitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.2 Inducción Matemática . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.2.1 Otras Bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.2.2 Inducción Completa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.2.3 Definiciones Inductivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151.3 Grafos y Arboles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.3.1 Grafos Dirigidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.3.2 Árboles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.4 Relaciones Binarias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191.4.1 Propieda<strong>de</strong>s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201.4.2 Relaciones <strong>de</strong> Equivalencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211.4.3 Clausuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 LENGUAJES FORMALES 252.1 Símbolos y Alfabetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.2 Palabras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.2.1 Longitud <strong>de</strong> una Palabra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262.2.2 Concatenación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272.2.3 Subpalabras, Prefijos y Sufijos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282.2.4 Reverso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282.3 <strong>Lenguajes</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.3.1 Concatenación <strong>de</strong> <strong>Lenguajes</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302.3.2 Clausuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312.3.3 Representación <strong>de</strong> <strong>Lenguajes</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322.4 Autómatas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331


2 CONTENTS3 ACEPTACIÓN Y GENERACIÓN DE LENGUAJES REGULARES 353.1 Autómatas Finitos Determinísticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.2 Autómatas Finitos No Determinísticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.3 Autómatas Finitos con Transiciones en Vacío . . . . . . . . . . . . . . . . . . . . . . . . . . . 443.4 Teorema <strong>de</strong> Myhill-Nero<strong>de</strong>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473.5 Minimización <strong>de</strong> Autómatas Finitos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503.6 Traductores <strong>de</strong> Estado Finito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543.7 Expresiones Regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563.8 Aplicaciones <strong>de</strong> los <strong>Lenguajes</strong> Regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654 PROPIEDADES DE LOS LENGUAJES REGULARES 674.1 Lema <strong>de</strong> Bombeo para Conjuntos Regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674.2 Propieda<strong>de</strong>s <strong>de</strong> Clausura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694.3 Algoritmos <strong>de</strong> Decisión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725ACEPTACIÓN Y GENERACIÓN DE LENGUAJES LIBRES DE CONTEXTO 755.1 Autómatas Apiladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755.2 Definiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765.3 Gramáticas Libres <strong>de</strong> Contexto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 805.4 Configuración <strong>de</strong> las Gramáticas Libres <strong>de</strong> Contexto . . . . . . . . . . . . . . . . . . . . . . . 815.5 Árboles <strong>de</strong> Derivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835.6 Simplificación <strong>de</strong> Gramáticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885.7 Formas Normales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915.8 Equivalencia entre LLC y Autómatas Apiladores . . . . . . . . . . . . . . . . . . . . . . . . . 965.9 Ambigüedad Inherente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016 PROPIEDADES DE LOS LENGUAJES LIBRES DE CONTEXTO 1056.1 Lema <strong>de</strong> Bombeo para <strong>Lenguajes</strong> Libres <strong>de</strong> Contexto . . . . . . . . . . . . . . . . . . . . . . . 1056.2 Propieda<strong>de</strong>s <strong>de</strong> Clausura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1096.3 Algoritmos <strong>de</strong> Decisión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1137 ACEPTACIÓN Y GENERACIÓN DE LENGUAJES ENUMERABLES RECURSIVA-MENTE Y LENGUAJES RECURSIVOS 1177.1 Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177.2 Mo<strong>de</strong>lo <strong>de</strong> la Máquina <strong>de</strong> Turing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1187.3 Técnicas para la construcción <strong>de</strong> Máquinas <strong>de</strong> Turing . . . . . . . . . . . . . . . . . . . . . . 1207.3.1 Almacenamiento en el Control Finito . . . . . . . . . . . . . . . . . . . . . . . . . . . 1207.3.2 Pistas Múltiples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1217.3.3 Marcar Símbolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1217.3.4 Correr Símbolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1227.3.5 Subrutinas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1227.4 <strong>Lenguajes</strong> y Funciones Computables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1227.5 Extensiones al Mo<strong>de</strong>lo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1247.5.1 Cinta Infinita en Ambas Direcciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1247.5.2 Máquinas <strong>de</strong> Turing con Varias Cintas . . . . . . . . . . . . . . . . . . . . . . . . . . . 1267.5.3 Movidas No Determinísticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1277.5.4 Máquinas Multidimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1277.5.5 Máquinas <strong>de</strong> Varias Cabezas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1287.5.6 Máquinas Off-Line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1287.6 Hipótesis <strong>de</strong> Church . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1297.7 Máquinas <strong>de</strong> Turing como Generadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130


4 CONTENTS


Chapter 0PROLOGOComo lo sugiere el nombre <strong>de</strong> estos apuntes: Teoría <strong>de</strong> Autómatas y <strong>Lenguajes</strong> <strong>Formales</strong>, el tema central aestudiar en ellos será el concepto <strong>de</strong> lenguaje. En particular, este concepto se analizará <strong>de</strong>s<strong>de</strong> el punto <strong>de</strong> vista<strong>de</strong> su aplicación a problemas computacionales y se verán distintos dispositivos y algoritmos para trabajarcon ellos. Se estudiarán lenguajes <strong>de</strong> distinto grado <strong>de</strong> complejidad, los cuales requieren <strong>de</strong> dispositivos cadavez más sofisticados para manejarlos. El objetivo <strong>de</strong> esta pequeña introducción es mostrar, en forma muysomera y general, los distintos aspectos en que se concentrarán estos apuntes.0.1 ¿Qué es un Lenguaje?Enfrentados a esta pregunta, se trata, en lo posible, <strong>de</strong> encontrar una respuesta que presente una <strong>de</strong>finiciónamplia <strong>de</strong>l concepto <strong>de</strong> lenguaje. De tal forma que ella sea suficiente para abarcar los lenguajes naturalescomo Castellano, Inglés y Japonés; los lenguajes <strong>de</strong> programación, como COBOL, Pascal y PROLOG; ya<strong>de</strong>más, cualquier otro lenguaje conocido, como las fórmulas bien formadas <strong>de</strong>l cálculo <strong>de</strong> predicados <strong>de</strong>primer or<strong>de</strong>n, o como las ecuaciones que representan reacciones químicas posibles.Un lenguaje (formal) se <strong>de</strong>fine como un conjunto, ya sea finito o infinito, <strong>de</strong> sentencias construidas apartir <strong>de</strong> un conjunto finito <strong>de</strong> elementos llamados símbolos. Cada una <strong>de</strong> las sentencias <strong>de</strong> un lenguaje esuna secuencia con un número finito <strong>de</strong> estos símbolos.Todos los lenguajes naturales, ya sea en su forma hablada o escrita, son lenguajes según esta <strong>de</strong>finición.Cada sentencia <strong>de</strong> ellos está construida por un número finito <strong>de</strong> elementos, sean éstos fonemas, palabras,letras u otros símbolos. Aún cuando en principio hay un número infinito <strong>de</strong> sentencias posibles, cada sentenciase pue<strong>de</strong> representar por una secuencia finita <strong>de</strong> esos elementos.En forma similar, las sentencias posibles en un lenguaje <strong>de</strong> programación, es <strong>de</strong>cir, los programas escritosen ese lenguaje, se construyen <strong>de</strong> palabras reservadas, letras, dígitos y otros símbolos especiales. Cadaprograma contiene un número finito <strong>de</strong> ellos, aunque hay un número infinito <strong>de</strong> programas posibles <strong>de</strong> serescritos en cada lenguaje.0.2 Sintaxis versus SemánticaLa noción intuitiva <strong>de</strong> lenguje, que se ha formalizado en forma simple más arriba, tiene dos componentesbásicos:Sintaxis Principios y procesos que permiten combinar los símbolos para formar las sentencias <strong>de</strong> un lenguajeparticular. Correspon<strong>de</strong> a la pregunta: ¿Qué es gramaticalmente correcto?Semántica Mecanismo subyacente a través <strong>de</strong>l cual se le asigna un significado a las sentencias <strong>de</strong> un lenguajeparticular. Correspon<strong>de</strong> a las preguntas: ¿Qué significa esta sentencia? ¿Qué sentencias tienen sentido?5


0.5. CLASES DE LENGUAJES 7uso <strong>de</strong> la palabra lenguaje sea, a primera vista, <strong>de</strong>masiado restrictiva. Las i<strong>de</strong>as enunciadas para lenguajestienen también otras <strong>de</strong>rivaciones <strong>de</strong> importancia.Por ejemplo, <strong>de</strong> acuerdo con la <strong>de</strong>finición <strong>de</strong> lenguaje en uso, es posible <strong>de</strong>finir el siguiente lenguaje:L + = {X#Y #Z/ X, Y y Z son enteros no negativos tales que Z = X + Y }Nótese que L + es un conjunto infinito <strong>de</strong> sentencias. Cada una <strong>de</strong> ellas tiene longitud finita y estáconstruida por elementos tomados <strong>de</strong>l conjunto finito <strong>de</strong> símbolos: { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, # }, es <strong>de</strong>cir,L + es un lenguaje. En realidad, el lenguaje L + expresa la función suma entre números enteros no negativos.Esta misma i<strong>de</strong>a pue<strong>de</strong> exten<strong>de</strong>rse a cualquier función binaria. Para cada función binaria, f, es posible<strong>de</strong>finir el lenguaje:L f = {X#Y #Z/ X, Y y Z son enteros no negativos tales que Z = f(x, y)}Y, en general, también es posible exten<strong>de</strong>r esta i<strong>de</strong>a a funciones <strong>de</strong> uno o más argumentos, con tan solousar el número apropiado <strong>de</strong> símbolos “#” como separadores. Más aún, también es posible exten<strong>de</strong>rla adominios que no sean el <strong>de</strong> los números enteros no negativos.Por sobre todo, la <strong>de</strong>finición <strong>de</strong> los lenguajes L f y la construcción <strong>de</strong> mecanismos <strong>de</strong> aceptación para ellos,es una forma <strong>de</strong> estudiar algoritmos para estudiar la función f. En particular, si se tiene un dispositivo queacepta todas y sólo las sentencias <strong>de</strong> un lenguaje L f , ese dispositivo <strong>de</strong>be incluir la noción <strong>de</strong> un algoritmopara calcular la función f.0.5 Clases <strong>de</strong> <strong>Lenguajes</strong>Los lenguajes se pue<strong>de</strong>n clasificar según el tipo <strong>de</strong> dispositivos <strong>de</strong> aceptación y generación que existen paraellos. Estas clases correspon<strong>de</strong>n a lenguajes <strong>de</strong> distinta complejidad que, a su vez, representan problemas<strong>de</strong> complejidad diferente. En particular se estudiarán las siguientes tres clases, las <strong>de</strong> la clásica jerarquía <strong>de</strong>Chomsky, a<strong>de</strong>más <strong>de</strong> algunas subclases <strong>de</strong> ellas:• <strong>Lenguajes</strong> Regulares.• <strong>Lenguajes</strong> Libres <strong>de</strong> Contexto.• <strong>Lenguajes</strong> Enumerables Recursivamente.Para cada clase hay un tipo <strong>de</strong> dispositivo <strong>de</strong> aceptación para todas y sólo las sentencias <strong>de</strong> esos lenguajes:autómatas <strong>de</strong> distinto grado <strong>de</strong> complejidad. También existe, para cada clase, un tipo <strong>de</strong> gramática quegenera todas y sólo las sentencias <strong>de</strong> esos lenguajes.Los dispositivos <strong>de</strong> generación <strong>de</strong> los lenguajes regulares y <strong>de</strong> los lenguajes libres <strong>de</strong> contexto, son ampliamenteusados como mo<strong>de</strong>los para expresar la sintaxis <strong>de</strong> los lenguajes <strong>de</strong> programación. Sus mecanismos<strong>de</strong> aceptación forman la base para el diseño <strong>de</strong> los analizadores léxicos y sintácticos <strong>de</strong> los compiladores. Enla actualidad, la aplicación <strong>de</strong> estas técnicas ha permitido que esas fases <strong>de</strong> los compiladores sean generadasen forma automática por programas que utilizan dichos mo<strong>de</strong>los como base <strong>de</strong> trabajo.Las máquinas <strong>de</strong> Turing, dispositivos que aceptan y que también pue<strong>de</strong>n generar los lenguajes enumerablesrecursivamente, fueron formuladas originalmente como un mo<strong>de</strong>lo <strong>de</strong> un computador <strong>de</strong> propósito general,esto fue aún antes <strong>de</strong> que existieran los computadores electrónicos mo<strong>de</strong>rnos. Hoy en día, aún se consi<strong>de</strong>ranun mo<strong>de</strong>lo apropiado <strong>de</strong> la capacidad <strong>de</strong> un computador, siempre que no se consi<strong>de</strong>re la cantidad <strong>de</strong> recursosnecesarios, ni la eficiencia <strong>de</strong> implementación. Así los lenguajes enumerables recursivamente se consi<strong>de</strong>ranlos lenguajes más generales que pue<strong>de</strong>n ser generados por un proceso implementable en un computador. Es<strong>de</strong>cir, la máquina <strong>de</strong> Turing es un mo<strong>de</strong>lo razonable <strong>de</strong> la capacidad <strong>de</strong> un computador, aunque obviamenteno <strong>de</strong>l hardware o software real, ya que por la simplicidad <strong>de</strong>l mo<strong>de</strong>lo, las máquinas <strong>de</strong> Turing trabajan muyineficientemente; pero aún así, ellas pue<strong>de</strong>n hacer cualquier cosa que es posible hacer en un computador.


8 CHAPTER 0. PROLOGO0.6 Otros Problemas a EstudiarAdicionalmente a los dispositivos <strong>de</strong> aceptación y mecanismos <strong>de</strong> generación para cada una <strong>de</strong> estas clases<strong>de</strong> lenguajes, también se estudiarán los siguientes tipos <strong>de</strong> problemas:Propieda<strong>de</strong>s <strong>de</strong> Clausura: ¿Qué operaciones es legítimo realizar con lenguajes <strong>de</strong> estas clases manteniéndose<strong>de</strong>ntro <strong>de</strong> ella? Esto tiene importancia por el concepto <strong>de</strong> modularidad, es <strong>de</strong>cir, dividiruna tarea en partes realizables individualmente. Una vez dividida la tarea, el problema es : ¿es posiblere-ensamblar las partes componentes y obtener un lenguaje que requiera el mismo tipo <strong>de</strong> dispositivos,o es necesario recurrir a dispositivos más po<strong>de</strong>rosos?Problemas <strong>de</strong> Decisión: ¿Qué propieda<strong>de</strong>s <strong>de</strong> un lenguaje, o <strong>de</strong> sus sentencias, pue<strong>de</strong>n ser <strong>de</strong>cididaspor un algoritmo que inspeccione un dispositivo <strong>de</strong> aceptación o generación? Por ejemplo, dada unagramática <strong>de</strong> algún tipo, ¿es posible <strong>de</strong>terminar si es útil?, es <strong>de</strong>cir, ¿es posible saber si <strong>de</strong>fine unlenguaje no vacío?0.7 Problemas No DecidiblesLa impresión generalizada <strong>de</strong> la gente, es que los computadores pue<strong>de</strong>n, en principio, realizar todo trabajoque se <strong>de</strong>see, provisto que no importe el costo, ni el tiempo que pueda tomar. A lo más, la gente estaríadispuesta a aceptar que a lo mejor no se conoce un algoritmo para realizar cierto trabajo, pero no que hayaciertas tareas que no se pue<strong>de</strong>n realizar.Sin embargo, es posible <strong>de</strong>mostrar que hay ciertas tareas que las máquinas <strong>de</strong> Turing, y por lo tanto loscomputadores, no pue<strong>de</strong>n hacer. La primera vez que se conoce esta realidad es muy difícil <strong>de</strong> creerla; incluso,la gente trata <strong>de</strong> sobrellevar el choque que le produce, pensando que se trata <strong>de</strong> tareas muy rebuscadas, quenadie estaría interesado en ejecutar en la práctica. Desgraciadamente, este razonamiento tampoco es válido;hay muchas tareas que sería bueno po<strong>de</strong>r hacer, pero que simplemente no se pue<strong>de</strong>n realizar. Un ejemplo esel siguiente:Problema <strong>de</strong> Detención: Dada una máquina <strong>de</strong> Turing y sus datos <strong>de</strong> entrada, ¿se <strong>de</strong>tendrá en algúnmomento y dará su respuesta? O en otros términos, ¿es posible saber si un programa tiene un errorque lo haga entrar en un ciclo infinito?La respuesta es no. No es posible escribir un algoritmo (un programa) tal que dado, por ejemplo, cualquierprograma en FORTRAN y sus datos <strong>de</strong> entrada, diga si este último se <strong>de</strong>tendrá o no al ser ejecutado conesos datos. Es claro que es posible saber si un programa se <strong>de</strong>tiene trás una cierta cantidad <strong>de</strong> tiempo,basta usar un cronómetro y verificarlo. La i<strong>de</strong>a <strong>de</strong>trás <strong>de</strong> la no-<strong>de</strong>cidibilidad <strong>de</strong> problemas es que no hayun programa único que pueda resolver el problema en todos los casos y para todos los datos <strong>de</strong> entrada. Esposible que algunos casos especiales o problemas limitados puedan ser resueltos.


Chapter 1MATEMÁTICAS BÁSICASEste capítulo resume los principales conceptos matemáticos necesarios para el estudio <strong>de</strong> los lenguajes formales.Entre ellos se incluyen nociones generales como conjuntos, inducción matemática, grafos, árboles yrelaciones binarias. Los conceptos más generales serán tratados someramente, suponiendo un conocimientoprevio <strong>de</strong> la materia y con el exclusivo fin <strong>de</strong> fijar un lenguaje común y recordar los aspectos más importantespara estos apuntes.1.1 ConjuntosUn conjunto es, simplemente, una colección <strong>de</strong> objetos. Por ejemplo, la colección <strong>de</strong> los dígitos binarios 0 y1 es un conjunto y se <strong>de</strong>nota por {0, 1}. Los objetos que forman un conjunto son llamados sus miembroso elementos. Por ejemplo, 0 es un elemento <strong>de</strong>l conjunto L <strong>de</strong>finido anteriormente; este hecho se expresacomo “0 ∈ L”, y se lee como “0 pertenece a L”. Es usual referirse a ésto con frases como “0 está en L” o “Lcontiene a 0”. Por otro lado, el dígito <strong>de</strong>cimal 2 no es un elemento <strong>de</strong> L, lo que se <strong>de</strong>nota por 2 ∉ L, y selee “2 no pertenece a L”.En un conjunto, cada objeto sólo pue<strong>de</strong> estar o no estar; no interesan las repeticiones <strong>de</strong> un objeto. Es<strong>de</strong>cir, el conjunto {a, b, a} es el mismo conjunto que {a, b}. Similarmente, tampoco interesa el or<strong>de</strong>n <strong>de</strong> loselementos; por ejemplo, {0, 1, 2}, {2, 0, 1} y {1, 2, 0} son exactamente el mismo conjunto. En resumen, dosconjuntos son iguales (son el mismo conjunto) si y sólo si tienen exactamente los mismos elementos.Hay un conjunto que no tiene miembros. Por supuesto, sólo pue<strong>de</strong> haber un conjunto con esta característica:se le <strong>de</strong>nomina el conjunto vacío y se le <strong>de</strong>nota usualmente por el símbolo ∅. De cualquier otroconjunto se dice que es no vacío, para indicar que sí tiene elementos.Hasta aquí, ha sido posible <strong>de</strong>finir los conjuntos listando todos sus elementos, separados por comas yencerrados entre llaves. Algunos conjuntos no pue<strong>de</strong>n ser <strong>de</strong>scritos <strong>de</strong> esta manera porque son infinitos,es <strong>de</strong>cir, tienen un número infinito <strong>de</strong> elementos. Por ejemplo, el conjunto <strong>de</strong> los números naturales es unconjunto infinito. De todo conjunto que no es infinito, se dice que es finito.Para <strong>de</strong>scribir conjuntos infinitos se hace necesario utilizar un constructor <strong>de</strong> conjuntos, <strong>de</strong> la forma:o también{x /P (x)},{x ∈ A/P (x)}.El primero representa al conjunto <strong>de</strong> todos los objetos para los cuales la proposición P se cumple. Enel segundo caso, se especifica que esos objetos <strong>de</strong>ben ser miembros <strong>de</strong>l conjunto A, y es equivalente a la<strong>de</strong>finición:{x /P (x) y x ∈ A}.9


10 CHAPTER 1.MATEMÁTICAS BÁSICASEjemplo 1 El conjunto <strong>de</strong> los número enteros pares se pue<strong>de</strong> <strong>de</strong>finir utilizando el siguiente constructor <strong>de</strong>conjuntos:{i/i es un entero y existe un entero j tal que i = 2j}Si cada elemento <strong>de</strong> un conjunto A es también miembro <strong>de</strong> un conjunto B, se dice que A es un subconjunto<strong>de</strong> B (A ⊆ B), o que B incluye a A (B ⊇ A). De acuerdo con esto, todo conjunto es un subconjunto <strong>de</strong> símismo. Si A es un subconjunto <strong>de</strong> B, pero es distinto <strong>de</strong> B, entonces A es un subconjunto propio <strong>de</strong> B, yse <strong>de</strong>nota por A ⊂ B. También se dice que dos conjuntos son disjuntos cuando no tienen ningún elementoen común.1.1.1 Operaciones con ConjuntosVarias operaciones permiten combinar dos conjuntos para formar un tercer conjunto, tal como los númerosse pue<strong>de</strong>n combinar con las operaciones aritméticas para obtener otro. Las operaciones más usuales entreconjuntos son las siguientes:1. La unión <strong>de</strong> A y B:A ∪ B = {x/x ∈ A o x ∈ B}2. La intersección <strong>de</strong> A y B:A ∩ B = {x/x ∈ A y x ∈ B}3. La diferencia <strong>de</strong> A y B:A − B = {x ∈ A y x ∉ B}4. El producto cartesiano <strong>de</strong> A y B:A × B = {(x, y)/x ∈ A e y ∈ B}5. El conjunto potencia <strong>de</strong> A:2 A = {S/S ⊆ A}Ejemplo 2 Sea A el conjunto {a, b} y sea B el conjunto {b, c}, entonces las operaciones antes <strong>de</strong>finidasproducen los siguientes conjuntos:A ∪ B = {a, b, c}A ∩ B = {b}A − B = {a}A × B = {(a, b), (a, c), (b, b), (b, c)}2 A = {∅, {a}, {b}, {a, b}}Es interesante notar que si A y B son conjuntos finitos que tienen n y m miembros respectivamente,A ∪ B tiene a lo más n + m elementos, A ∩ B tiene a lo más el mínimo entre n y m elementos y A − B tienea lo más n elementos; pero, en general, el número <strong>de</strong> elementos <strong>de</strong> estos conjuntos pue<strong>de</strong> ser menor, comose aprecia en el Ejemplo 2. Sin embargo, A × B tiene exactamente n ∗ m elementos y 2 A tiene exactamente2 n elementos, sin importar cuáles sean los conjuntos originales.✷✷


1.1. CONJUNTOS 111.1.2 Conjuntos InfinitosUna propiedad básica <strong>de</strong> los conjuntos finitos es su tamaño, es <strong>de</strong>cir, el número <strong>de</strong> miembros que contiene.Algunos hechos sobre el tamaño <strong>de</strong> los conjuntos finitos son tan evi<strong>de</strong>ntes, que difícilmente necesitan <strong>de</strong>mostración.Uno <strong>de</strong> ellos es que si A es un subconjunto <strong>de</strong> B, el tamaño <strong>de</strong> A es menor o igual al <strong>de</strong> B; yque en caso <strong>de</strong> ser un subconjunto propio, el tamaño es simplemente menor.Sin embargo, si se extien<strong>de</strong> la noción <strong>de</strong> tamaño a los conjuntos infinitos, tratando <strong>de</strong> seguir un caminointuitivo, siempre se producirán dificulta<strong>de</strong>s. Por ejemplo, ¿Hay más cubos perfectos (0, 1, 8, 27, . . . ) quemúltiplos <strong>de</strong> 13 (0, 13, 26, 39, . . . )? Se pue<strong>de</strong> especular con la respuesta, pero se ha <strong>de</strong>mostrado que lo únicorazonable es suponer que tienen el mismo tamaño.Se dice que dos conjuntos, A y B, son equinumerosos (tienen la misma cardinalidad o, simplemente, elmismo número <strong>de</strong> elementos), si hay una función f : A → B que sea biyectiva. Así, por ejemplo, los cubosperfectos y los múltiplos <strong>de</strong> 13 son equinumerosos; la biyección está dada por f(13n) = n 3 , para todo númeronatural n.Ejemplo 3 Sea A el conjunto <strong>de</strong> los enteros pares y B el conjunto <strong>de</strong> todos los enteros. Obviamente, A esun subconjunto propio <strong>de</strong> B. Sin embargo, A y B tienen la misma cardinalidad: son equinumerosos. Lafunción:f(i) = 2i para todo entero i,es una biyección entre los enteros y los números pares. Similarmente, se pue<strong>de</strong> <strong>de</strong>mostrar que los imparesson, también, equinumerosos con los enteros.En general, un conjunto es finito si es equinumeroso con el conjunto {1, . . . ,n}, para algún númeronatural n. Un conjunto es infinito si no es finito. Por ejemplo, el conjunto <strong>de</strong> los números naturales esinfinito; también son infinitos el conjunto <strong>de</strong> los números enteros, los reales, los cubos perfectos y muchosotros. Empero, no todos los conjuntos infinitos son equinumerosos entre sí: hay diferentes cardinalida<strong>de</strong>sentre ellos.Un conjunto se dice infinito contable si tiene la misma cardinalidad que los números naturales y se dicecontable si es finito o infinito contable. Un conjunto que no es contable es incontable. El conjunto <strong>de</strong> los cubosperfectos, los enteros y los racionales son algunos ejemplos <strong>de</strong> conjuntos infinitos contables; los irracionales,los reales y los complejos, son incontables.Ejemplo 4 Se <strong>de</strong>mostrará que el conjunto potencia <strong>de</strong> N, el conjunto <strong>de</strong> todos los subconjuntos <strong>de</strong> númerosnaturales, es incontable. Es <strong>de</strong>cir, que hay más subconjuntos <strong>de</strong> números naturales que números naturalesmismos.Suponga que 2 N es un conjunto infinito contable —ciertamente no es finito, ya que N es infinito— es<strong>de</strong>cir, suponga que hay una biyección f : N → 2 N . Luego, 2 N pue<strong>de</strong> listarse como:2 N = {S 0 , S 1 , S 2 , . . .},en que para cada número natural i, f(i) = S i . Consi<strong>de</strong>re ahora el conjunto:D = {n ∈ N/n ∉ S n },el conjunto <strong>de</strong> los números naturales que no pertenecen al subconjunto que enumeran. Claramente, D esun subconjunto <strong>de</strong> N; y como tal, <strong>de</strong>be ser S k para algún número natural k. La pregunta que es necesariohacer, es: ¿Pertenece k a S k ?• Suponga que la respuesta es sí, que k ∈ S k . Entonces, por la <strong>de</strong>finición <strong>de</strong> D, k ∉ D. Pero D = S k ,por lo tanto, k ∉ S k . Una contradicción.✷


12 CHAPTER 1.MATEMÁTICAS BÁSICAS• Suponga que la respuesta es no, que k ∉ S k . Entonces, por la <strong>de</strong>finición <strong>de</strong> D, k ∈ D. Pero D = S k ,por lo tanto, k ∈ S k . Otra contradicción.Luego, en ambos casos se llega a una contradicción. Como no hay una tercera alternativa, se concluye quela hipótesis <strong>de</strong> que existe un número natural k, tal que D = S k , es errónea; es <strong>de</strong>cir, que D, que es unsubconjunto <strong>de</strong> los números naturales, no correspon<strong>de</strong> a ninguno <strong>de</strong> los S i . En otras palabras, hay mássubconjuntos <strong>de</strong> números naturales que números naturales mismos y, por lo tanto, el conjunto potencia <strong>de</strong>los números naturales es incontable, como se quería mostrar.El método usado en el Ejemplo 4, es conocido con el nombre <strong>de</strong> diagonalización. Es una técnica muyutilizada que se basa en el uso <strong>de</strong> los números en un doble papel; como ocurre con el número n en la<strong>de</strong>finición <strong>de</strong>l conjunto D <strong>de</strong> ese ejemplo, en que se usa para representar a uno <strong>de</strong> los subconjuntos <strong>de</strong> Ny, simultáneamente, a los números que no pertenecen a ese subconjunto específico. El nombre <strong>de</strong>l métodoproviene <strong>de</strong> representar el proceso como una tabla en que, para este ejemplo, las filas representan a lossubconjuntos <strong>de</strong> N y las columnas, a los números naturales, <strong>de</strong> tal modo que en el casillero (i, j) haya un 1si el número j pertenece al i- ésimo subconjunto, y un cero si no es así; al hacer ésto, el conjunto D queda<strong>de</strong>finido por los valores en la diagonal <strong>de</strong> la tabla y en general se le conoce como el conjunto diagonal enestas <strong>de</strong>mostraciones.1.2 Inducción MatemáticaEn estos apuntes, muchas proposiciones se <strong>de</strong>muestran usando el llamado Principio <strong>de</strong> Inducción Matemática.Este principio indica que para probar que una cierta proposición P (n) es válida para todo número natural n,es suficiente probar que se cumple para cero y, a<strong>de</strong>más, probar que si se cumple para algún número natural,se cumple también para el número siguiente. Es <strong>de</strong>cir, basta establecer:• P (0), y que• para todo número natural n: P (n) implica P (n + 1).La primera parte, P (0), es llamada la base y normalmente es la más simple <strong>de</strong> probar. La segunda parte esllamada el paso inductivo o la inducción; su antece<strong>de</strong>nte, P (n), es conocido como la hipótesis <strong>de</strong> induccióno hipótesis inductiva, y es un hecho que pue<strong>de</strong> emplearse, sin necesidad <strong>de</strong> prueba, al hacer la <strong>de</strong>mostración<strong>de</strong> P (n + 1), la conclusión <strong>de</strong>seada en la inducción.El principio <strong>de</strong> inducción es equivalente a otro principio matemático, conocido como el principio <strong>de</strong>lmenor entero, y expresa, fundamentalmente, la noción <strong>de</strong> que un número natural es el número cero, o es elsucesor <strong>de</strong> otro número natural. Es <strong>de</strong>cir, expresa la i<strong>de</strong>a intuitiva <strong>de</strong> que cualquier número natural pue<strong>de</strong>ser formado a partir <strong>de</strong>l número cero en un número finito <strong>de</strong> pasos, en un proceso que, en cada uno <strong>de</strong> suspasos, agrega uno al número formado hasta el paso anterior.Se le ha llamado inducción a este proceso porque primero <strong>de</strong>be <strong>de</strong>cidirse, por algún otro método, cuál esla proposición que va a ser probada, y sólo entonces pue<strong>de</strong> utilizarse para, en realidad, <strong>de</strong>mostrar la vali<strong>de</strong>z<strong>de</strong> la suposición. Este principio no permite <strong>de</strong>ducir cuál es la proposición a ser probada; ella <strong>de</strong>be obtenersepor otros métodos con anterioridad. En realidad, el concepto es muy diferente <strong>de</strong>l llamado razonamientoinductivo, empleado por los científicos para crear una hipótesis, a partir <strong>de</strong> un número <strong>de</strong> observaciones <strong>de</strong>la realidad.Ejemplo 5 Se prueba que la fórmula 1 + 2 + · · · + n = n(n + 1)/2, se cumple para todo número natural n.La <strong>de</strong>mostración es por inducción en n, sobre los números naturales.Base (n = 0): La suma <strong>de</strong>l lado izquierdo es cero, pues no hay nada que sumar. La expresión <strong>de</strong>l lado<strong>de</strong>recho queda 0(0 + 1)/2, que también es cero, tal como se quería.✷


1.2.INDUCCIÓN MATEMÁTICA 13Inducción (n ≥ 0): La hipótesis <strong>de</strong> inducción asegura que 1 + 2 + · · · + n = n(n + 1)/2. Se <strong>de</strong>sea mostrarque la fórmula se cumple también para n + 1; es <strong>de</strong>cir, que 1 + 2 + · · · + n + (n + 1) = (n + 1)(n + 2)/2.Se tiene:1 + 2 + · · · + n + (n + 1) = (1 + 2 + · · · + n) + (n + 1) (asociatividad <strong>de</strong> la suma)= n(n + 1)/2 + (n + 1) (hipótesis <strong>de</strong> inducción)= (n + 1)(n/2 + 1) (factorizando)= (n + 1)(n + 2)/2como se <strong>de</strong>seaba mostrar.Luego, por el principio <strong>de</strong> inducción matemática, se concluye que la fórmula se cumple para todos los númerosnaturales.Una forma <strong>de</strong> compren<strong>de</strong>r intuitivamente la vali<strong>de</strong>z <strong>de</strong>l principio <strong>de</strong> inducción matemática, es a través<strong>de</strong> una analogía entre los números naturales y una serie infinita (pero contable) <strong>de</strong> cartas <strong>de</strong> un juego <strong>de</strong>dominó, dispuestas <strong>de</strong> forma tal que una carta al caer pueda botar a la carta siguiente. En esta analogía,cada carta correspon<strong>de</strong> a uno <strong>de</strong> los números naturales, y el hecho que una carta caiga, correspon<strong>de</strong> a quela proposición se cumple para el número natural respectivo. Al <strong>de</strong>mostrar la inducción, se está probandoque si cualquiera <strong>de</strong> las cartas cae, la siguiente carta también caerá. La base, por el contrario, establece unhecho concreto: la carta número cero cae. Ambas cosas son, obviamente, suficientes para concluir que todaslas cartas caerán, y que, en realidad, cada carta caerá <strong>de</strong>spués <strong>de</strong> un lapso finito <strong>de</strong> tiempo. Es <strong>de</strong>cir, paraconcluir que la proposición es válida para todos los números naturales.1.2.1 Otras BasesSi se quiere mostrar que una proposición P (n) se cumple para todos los números naturales mayores o igualesa un cierto número natural k, también se pue<strong>de</strong> emplear el principio <strong>de</strong> inducción matemática. En este casose <strong>de</strong>be aplicar <strong>de</strong> forma que la base corresponda a P (k) y, a<strong>de</strong>más, en la inducción se pue<strong>de</strong> consi<strong>de</strong>rar queel número n es mayor o igual a k. Es <strong>de</strong>cir, basta establecer:• P (k), y que• para todo número natural n ≥ k: P (n) implica P (n + 1).Esta formulación expresa la noción <strong>de</strong> que cualquier número natural mayor o igual a k, pue<strong>de</strong> ser formadoa partir <strong>de</strong>l número k, en un número finito <strong>de</strong> pasos; en que en cada paso, se agrega uno al número formadohasta el paso anterior.Ejemplo 6 Se <strong>de</strong>muestra que 2 n > n 3 , para todo número natural mayor o igual a 10. La <strong>de</strong>mostración espor inducción en n, sobre los números naturales, a partir <strong>de</strong>l número 10.Base (n = 10): En este caso se tiene, 2 n = 2 10 = 1024 y, por otro lado, n 3 = 10 3 = 1000. Es <strong>de</strong>cir, paran = 10, 2 n > n 3 , como se quería probar.Inducción (n ≥ 10): La hipótesis <strong>de</strong> inducción asegura que 2 n > n 3 cuando n ≥ 10. Se <strong>de</strong>sea mostrar queesta <strong>de</strong>sigualdad también se cumple para n + 1; es <strong>de</strong>cir, que 2 n+1 > (n + 1) 3 . Entonces, se tiene:2 n > n 3 = nn 2 (hipótesis <strong>de</strong> inducción)> 9n 2 = 3n 2 + 3n 2 + 3n 2 (porque n ≥ 10)> 3n 2 + 3n + 1 (porque n es positivo)Utilizando nuevamente la hipótesis <strong>de</strong> inducción y sumándola a la última <strong>de</strong>sigualdad obtenida, setiene:2 n + 2 n > n 3 + 3n 2 + 3n + 1✷


14 CHAPTER 1.MATEMÁTICAS BÁSICAS<strong>de</strong> don<strong>de</strong> se concluye, usando la expresión para el cubo <strong>de</strong> un binomio, que:2 n+1 > (n + 1) 3como se quería mostrar.Luego, por el principio <strong>de</strong> inducción matemática, se concluye que la <strong>de</strong>sigualdad se cumple para todoslos números naturales mayores o iguales a 10. Es interesante <strong>de</strong>stacar que en el paso inductivo, no sólo sehizo uso <strong>de</strong> la hipótesis <strong>de</strong> inducción, sino que también se utilizó la condición que indica que N es mayor oigual a 10 en este caso.Nuevamente, la analogía con las cartas <strong>de</strong>l juego <strong>de</strong> dominó sirve para explicar, al menos intuitivamente,esta formulación <strong>de</strong>l principio <strong>de</strong> inducción. En estas aplicaciones, el hecho concreto establecido por la basees que la carta número k cae. Este hecho, sumado a lo probado con la inducción —en la que a<strong>de</strong>más eslegítimo suponer que n es mayor o igual que k, pues son esas las cartas que interesan— es suficiente paraestablecer que todas las cartas, a partir <strong>de</strong> la carta número k, caerán. Y por lo tanto se pue<strong>de</strong> concluir quela proposición se cumple para todo número natural mayor o igual al número k.1.2.2 Inducción CompletaExisten muchas otras formas <strong>de</strong> expresar el principio <strong>de</strong> inducción. Una generalización bastante útil, esla llamada inducción completa. Ella expresa, en una <strong>de</strong> sus formas, que para <strong>de</strong>mostrar que una ciertaproposición P (n) es válida para todos los números naturales, es suficiente probar que se cumple para cero y,a<strong>de</strong>más, probar que si se cumple para todos los naturales entre la base y un número natural n cualquiera,se cumple también para el número siguiente a ése: n + 1. Es <strong>de</strong>cir, basta establecer:• P (0), y que• para todo número natural n: P (0), P (1), . . . y P (n) implican P (n + 1).La diferencia con el principio enunciado anteriormente, radica en que la hipótesis <strong>de</strong> inducción es muchomás fuerte en este caso, ya que permite suponer que la proposición se cumple no sólo para n, sino que engeneral, para cualquier número menor que n + 1, y mayor o igual a la base. La posibilidad <strong>de</strong> utilizar estahipótesis hace que las <strong>de</strong>mostraciones sean, algunas veces, mucho más sencillas y cortas que si se usara elenunciado original; aún cuando la <strong>de</strong>mostración sería igualmente posible, ya que la inducción completa noes un principio nuevo, sino que una consecuencia <strong>de</strong>l principio original.Ejemplo 7 Se <strong>de</strong>muestra que todo número natural n, mayor o igual a dos, se pue<strong>de</strong> escribir como el producto<strong>de</strong> números primos 1 . Un número primo es un número natural mayor que uno, que no tiene divisores exactos,excepto 1 y el número mismo. La <strong>de</strong>mostración es por inducción completa en n, sobre los números naturales,a partir <strong>de</strong>l número dos.Base (n = 2): El número 2 se pue<strong>de</strong> escribir como el producto <strong>de</strong> números primos en que el único factor esel número 2 mismo. Claramente 2 es un primo, ya que es mayor que 1 y sólo es divisible, en formaexacta, por 1 y por 2, el número mismo.Inducción (n ≥ 2): La hipótesis <strong>de</strong> inducción asegura que todo número natural k entre 2 y n, ambosinclusive, se pue<strong>de</strong> escribir como el producto <strong>de</strong> números primos. Se <strong>de</strong>sea <strong>de</strong>mostrar que el númeron + 1 también pue<strong>de</strong> <strong>de</strong>scomponerse en esta forma.1 Ésta es una parte <strong>de</strong>l llamado Teorema Fundamental <strong>de</strong> la Aritmética, que indica que todo número natural mayor que uno,pue<strong>de</strong> expresarse en forma única como el producto <strong>de</strong> números primos. La unicidad se refiere a que hay un único conjunto <strong>de</strong>primos envueltos en ese producto, y a que cada número primo tiene multiplicidad fija en él.✷


16 CHAPTER 1.MATEMÁTICAS BÁSICASEjemplo 9 Se calcula los seis primeros números <strong>de</strong> la serie <strong>de</strong> Fibonacci (f 0 , . . . , f 5 ), empleando la <strong>de</strong>finicióndada en el Ejemplo 8 para esta secuencia.f 0 = 0 f 3 = f 2 + f 1 = 2f 1 = 1 f 4 = f 3 + f 2 = 3f 2 = f 1 + f 0 = 1 f 5 = f 4 + f 3 = 5Es usual que cuando se trata <strong>de</strong> probar propieda<strong>de</strong>s <strong>de</strong> entes que han sido <strong>de</strong>finidos inductivamente,lo más conveniente sea utilizar, precisamente, el principio <strong>de</strong> inducción. Esto se <strong>de</strong>be a que la <strong>de</strong>finicióncoinci<strong>de</strong> apropiadamente con la división que se hace entre el caso básico y el paso inductivo en este método,facilitando, en consecuencia, la <strong>de</strong>mostración.Ejemplo 10 Se <strong>de</strong>muestra que la siguiente relación, entre números <strong>de</strong> Fibonacci, se cumple para todonúmero natural n, mayor o igual a uno:f 2 n = f n−1 ∗ f n+1 + (−1) n+1La <strong>de</strong>mostración se hará por inducción completa en n, sobre los números naturales, a partir <strong>de</strong>l número uno.Base (n = 1): En este caso se tiene: f n−1 ∗ f n+1 + (−1) n+1 = f 0 ∗ f 2 + (−1) 2 = 0 ∗ 1 + 1 = 1. Por otro lado,fn 2 = f 1 2 = 1. Es <strong>de</strong>cir, para n = 1 la relación se cumple, como se quería probar.Inducción (n ≥ 1): La hipótesis <strong>de</strong> inducción asegura que f 2 k = f k−1 ∗ f k+1 + (−1) k+1 , para todo númeronatural k, entre 1 y n, ambos inclusive. Se <strong>de</strong>sea mostrar que esta <strong>de</strong>sigualdad también se cumple paran + 1; es <strong>de</strong>cir, quef 2 n+1 = f n ∗ f n+2 + (−1) n+2La <strong>de</strong>mostración <strong>de</strong>l paso inductivo se hará en dos partes. Primero se verá el caso en que n = 1 y,posteriormente, el caso en que n ≥ 2.Caso 1 (n = 1): En este caso se tiene: f n ∗ f n+2 + (−1) n+2 = f 1 ∗ f 3 + (−1) 3 = 1 ∗ 2 − 1 = 1. Por otrolado, se tiene f 2 2 = 1, también; como se <strong>de</strong>seaba probar.Caso 2 (n ≥ 2): En este caso se tiene,fn+1 2 = (f n + f n−1 ) 2 (<strong>de</strong>finición, pues n + 1 > 1)= fn 2 + 2f n f n−1 + fn−1 2 (cuadrado <strong>de</strong> binomio)= fn 2 + 2f n f n−1 + f n−2 f n + (−1) n (hipótesis, con k = n − 1 ≥ 1)= f n (f n + f n−1 + f n−1 + f n−2 ) + (−1) n= f n (f n+1 + f n ) + (−1) n (<strong>de</strong>finición, pues n + 1 > n > 1)= f n f n+2 + (−1) n+2 (<strong>de</strong>finición, pues n + 2 > 1)como se <strong>de</strong>seaba mostrar.Luego, por el principio <strong>de</strong> inducción matemática, se concluye que la relación se cumple para todos losnúmeros naturales mayores o iguales a 1. Es importante <strong>de</strong>stacar que fue necesario dividir el paso inductivoen dos partes, pues cuando n = 1 no es lícito hacer referencia a f n−2 , ya que no existe, ni tampoco esaplicable la hipótesis <strong>de</strong> inducción para f n−1 , pues sólo es aplicable entre la base y n, no para f 0 , valor parael cual no tiene sentido por lo <strong>de</strong>más.En un análisis más profundo, toda <strong>de</strong>mostración <strong>de</strong> una propiedad <strong>de</strong> los números enteros se basa, <strong>de</strong> unau otra manera, en el principio <strong>de</strong> inducción matemática, ya que si se va a los conceptos básicos, los númerosenteros mismos están <strong>de</strong>finidos esencialmente en forma inductiva. Aunque no se mencionó explícitamente,ésto ha ocurrido también en las pruebas por inducción <strong>de</strong> los primeros ejemplos <strong>de</strong> esta sección. En formaimplícita , se han usado <strong>de</strong>finiciones inductivas <strong>de</strong> la suma, producto, potencia y <strong>de</strong> los números naturalesmismos, lo que contribuye a efectuar estas <strong>de</strong>mostraciones por inducción.✷✷


1.3. GRAFOS Y ARBOLES 171.3 Grafos y ArbolesUn grafo (finito), <strong>de</strong>notado como G = (V, R), es una estructura que consta <strong>de</strong> un conjunto finito <strong>de</strong> vérticesV , también llamados nodos; y <strong>de</strong> un conjunto <strong>de</strong> pares no or<strong>de</strong>nados <strong>de</strong> vértices, R, llamados las ramas <strong>de</strong>lgrafo. La forma usual <strong>de</strong> representar grafos es a través <strong>de</strong> un diagrama en que los nodos se grafican comopuntos y las ramas, como líneas entre los vértices que forman el par respectivo.Ejemplo 11 En la Figura 1.1 se muestra la representación gráfica usual para el grafo G = (V, R), cuyascomponentes están <strong>de</strong>finidas por:V = {1, 2, 3, 4, 5}R = {(i, j)/i + j = 4 o |i − j| = 3}Hay cinco nodos y cuatro ramas en dicho grafo; éstas últimas son: (1, 3), (1, 4), (2, 2), (2, 5).✬✩✬✩✎ ☞✓✏✂✓✏✁✓✏ ✓✏ ✓✏1 2 3 4 5✒✑ ✒✑ ✒✑ ✒✑ ✒✑✷✫✪Figure 1.1: Representación gráfica <strong>de</strong>l grafo GUn camino en un grafo, es una secuencia <strong>de</strong> vértices v 1 , v 2 , . . . , v n , con n ≥ 1, en que hay una rama(v i , v i+1 ) por cada i tal que 1 ≤ i ≤ n; los nodos v 1 y v n son llamados el vértice inicial y final, respectivamente,y se dice que el camino es <strong>de</strong> v 1 a v n . Un camino es entonces una secuencia <strong>de</strong> vértices, tal que es posiblepasar <strong>de</strong> uno <strong>de</strong> ellos al siguiente en la secuencia, a través <strong>de</strong> una rama <strong>de</strong>l grafo. La longitud <strong>de</strong>l caminoes n − 1, es <strong>de</strong>cir, el número <strong>de</strong> ramas que lo forman. Por ejemplo, 3–1–4 es un camino en el grafo <strong>de</strong> laFigura 1.1 y tiene longitud 2; también lo es el nodo 4, o cualqier otro vértice por sí solo, estos últimos tienenlongitud 0, por supuesto.Un camino <strong>de</strong> longitud al menos 1, en que los vértices inicial y final correspon<strong>de</strong>n al mismo nodo, esllamado un circuito y equivale a un lazo cerrado en el diagrama para el grafo. Así, por ejemplo, 2–2, es uncircuito <strong>de</strong> longitud 1 en el grafo <strong>de</strong> la Figura 1.1.1.3.1 Grafos DirigidosUn grafo dirigido (finito), <strong>de</strong>notado por G = (V, A), consta <strong>de</strong> un conjunto finito <strong>de</strong> vértices, V ; y <strong>de</strong> unconjunto <strong>de</strong> pares or<strong>de</strong>nados <strong>de</strong> vértices A, llamados arcos. Un arco (u, v) se <strong>de</strong>nota por u → v y se diceque es un arco <strong>de</strong> u a v; el nodo u es un pre<strong>de</strong>cesor <strong>de</strong>l nodo v y v es un sucesor <strong>de</strong> u en el grafo. Losdiagramas que representan grafos dirigidos son similares a los usados para grafos, pero los arcos, que sonramas dirigidas, se dibujan como líneas con un sentido <strong>de</strong>finido —normalmente como flechas— dirigidas<strong>de</strong>s<strong>de</strong> el nodo pre<strong>de</strong>cesor al nodo sucesor en el arco.Ejemplo 12 La Figura 1.2 muestra el diagrama correspondiente al grafo G = (V, A), cuyas componentesquedan <strong>de</strong>finidas por:V = {1, 2, 3, 4}A = {i → j/i < j}En este grafo, el vértice 3 es un sucesor <strong>de</strong> los vértices 1 y 2, y un pre<strong>de</strong>cesor <strong>de</strong>l vértice 4.


18 CHAPTER 1. MATEMÁTICAS BÁSICAS★✥✎☞✓✏ ✓✏ ✓✏ ❄✓✏ ❄1 ✲ 2 ✲ 3 ✲ 4✒✑ ✒✑ ✒✑ ✒✑✧✦ ✻Figure 1.2: Representación gráfica <strong>de</strong>l grafo GUn camino en un grafo dirigido es una secuencia <strong>de</strong> vértices v 1 ,v 2 , . . ., v n , con n ≥ 1, en que hay un arcov i → v i+1 por cada i tal que 1 ≤ i ≤ n; en este caso se dice que el camino es <strong>de</strong> v 1 a v n y que pasa a través<strong>de</strong> los nodos v 2 , . . . , v n−1 . La longitud <strong>de</strong> un camino se <strong>de</strong>fine en forma análoga que para los grafos y mi<strong>de</strong> elnúmero <strong>de</strong> arcos involucrados en él. Por ejemplo, 1–2–4 es un camino <strong>de</strong> 1 a 4 en el grafo <strong>de</strong> la Figura 1.2,y tiene longitud 2. Un circuito es un camino <strong>de</strong> longitud mayor o igual a 1, que va <strong>de</strong> un nodo a sí mismo.El grafo <strong>de</strong> la Figura 1.2 no tiene circuitos.1.3.2 ÁrbolesUn árbol, o más exactamente un árbol dirigido or<strong>de</strong>nado, es un grafo dirigido con las siguientes propieda<strong>de</strong>sadicionales:• Hay un vértice, llamado la raíz, que no tiene pre<strong>de</strong>cesores y <strong>de</strong>s<strong>de</strong> el cual hay un camino a cada nodo<strong>de</strong>l árbol.• Cada vértice tiene exactamente un pre<strong>de</strong>cesor, con la única excepción <strong>de</strong> la raíz, que no tiene pre<strong>de</strong>cesores.• Los sucesores <strong>de</strong> cada vértice están or<strong>de</strong>nados. Or<strong>de</strong>namiento que se conoce como or<strong>de</strong>n <strong>de</strong> izquierdaa <strong>de</strong>recha.< expresion> ✏✏✏ ✏✏✏< expresion> x < expresion> ✏✏✏ ✏✏✏< expresion> * < expresion>✏✏✏ ✏✏✏( < expresion> )d ✏✏✏ ✏✏✏< expresion> - < expresion>✷bcFigure 1.3: Diagrama sintáctico para la expresión a + (b − c) ∗ dAl representar gráficamente los árboles, es usual poner la raíz arriba y todos los arcos apuntando haciaabajo; con esta convención es posible dibujar los arcos como simples ramas no dirigidas, ya que se subentien<strong>de</strong>


1.4. RELACIONES BINARIAS 19que su dirección es hacia abajo. Los sucesores <strong>de</strong> cada vértice se dibujan <strong>de</strong> izquierda a <strong>de</strong>recha, <strong>de</strong> acuerdoal or<strong>de</strong>n <strong>de</strong>finido para ellos.Ejemplo 13 La Figura 1.3 muestra el diagrama <strong>de</strong> un árbol que correspon<strong>de</strong> al “diagrama sintáctico” <strong>de</strong> laexpresión aritmética a + (b − c) ∗ d. En este caso no se muestran los nombres <strong>de</strong> los nodos, sino las etiquetasasociadas a ellos. Varios nodos tienen la misma etiqueta.La raíz <strong>de</strong> ese árbol es el nodo con etiqueta que aparece más arriba que todos los <strong>de</strong>más;<strong>de</strong>s<strong>de</strong> ella hay un camino a los otros dieciseis vértices, y no tiene pre<strong>de</strong>cesores. Sus tres sucesores son,or<strong>de</strong>nados <strong>de</strong> izquierda a <strong>de</strong>recha, los nodos con etiquetas , + y que aparecen bajoél.Existe una terminología especial para árboles basada en la genealogía, que difiere <strong>de</strong> la terminologíageneral para grafos dirigidos arbitrarios. En un árbol, un sucesor <strong>de</strong> un nodo se llama un hijo y el pre<strong>de</strong>cesores llamado el padre. Si hay un camino <strong>de</strong> un vértice u a un vértice v, se dice que u es un ancestro <strong>de</strong> v yque v es un <strong>de</strong>scendiente <strong>de</strong> u; ambos nodos pue<strong>de</strong>n ser el mismo vértice y, por lo tanto, todo nodo es unancestro y <strong>de</strong>scendiente <strong>de</strong> sí mismo. Un vértice que no tiene hijos es una hoja y todos los <strong>de</strong>más, incluidala raíz, son llamados nodos interiores.Ejemplo 14 En el árbol <strong>de</strong> la Figura 1.3, el nodo con etiqueta + es un hijo <strong>de</strong> la raíz, y este último nodoes su padre. El vértice con etiqueta d es un <strong>de</strong>scendiente <strong>de</strong> sí mismo y <strong>de</strong> otros tres nodos <strong>de</strong>l árbol; la raízes un ancestro <strong>de</strong> todos los nodos <strong>de</strong>l árbol. Los nodos con etiqueta son todos nodos interiores,los <strong>de</strong>más son las hojas.Es posible exten<strong>de</strong>r el or<strong>de</strong>n que existe entre los hijos <strong>de</strong> cada nodo, a un or<strong>de</strong>namiento <strong>de</strong> izquierda a<strong>de</strong>recha entre todas las hojas <strong>de</strong> un árbol. en realidad, se pue<strong>de</strong> exten<strong>de</strong>r a dos vértices cualesquiera, siempreque ninguno <strong>de</strong> ellos sea un ancestro <strong>de</strong>l otro y, obviamente, una hoja no es nunca ancestro <strong>de</strong> otra hoja. Laextensión <strong>de</strong>l or<strong>de</strong>n a dos nodos cualesquiera que cumplan con esta condición se hace <strong>de</strong> la siguiente manera.Dados dos nodos n 1 y n 2 en el árbol, se trazan los caminos —invertidos— <strong>de</strong>s<strong>de</strong> cada uno <strong>de</strong> ellos hacia laraíz, hasta que se encuentran en algún vértice v. Sean h 1 y h 2 los hijos <strong>de</strong> v en los caminos hacia n 1 y n 2 ,respectivamente. Si n 1 no es ancestro <strong>de</strong> n 2 , o viceversa, h 1 y h 2 son nodos distintos y , por lo tanto, uno<strong>de</strong> ellos está a la izquierda <strong>de</strong>l otro como hijos <strong>de</strong> v. Si h 1 está a la izquierda <strong>de</strong> h 2 , entonces n 1 está a laizquierda <strong>de</strong> n 2 ; si no, n 2 está a la izquierda <strong>de</strong> n 1 .Ejemplo 15 En el árbol <strong>de</strong> la Figura 1.3, el nodo con etiqueta c está a la izquierda <strong>de</strong>l nodo con etiquetad. Los caminos <strong>de</strong>s<strong>de</strong> ellos hacia la raíz se encuentran en el nodo con etiqueta que es el hijo <strong>de</strong>más a la <strong>de</strong>recha <strong>de</strong> la raíz <strong>de</strong>l árbol. El nodo con etiqueta c está en el camino que pasa por el hijo <strong>de</strong> más ala izquierda <strong>de</strong> ese vértice, y el con etiqueta d, en el que pasa por el hijo <strong>de</strong> más a la <strong>de</strong>recha. Obviamenteel primero está a la izquierda <strong>de</strong>l segundo en el or<strong>de</strong>n para esos nodos, por lo que se concluye que el nodocon etiqueta c está a la izquierda <strong>de</strong>l nodo con etiqueta d, en el or<strong>de</strong>n extendido.1.4 Relaciones BinariasUna relación binaria es un conjunto <strong>de</strong> pares or<strong>de</strong>nados; es <strong>de</strong>cir, es un subconjunto <strong>de</strong>l producto cartesiano<strong>de</strong> dos conjuntos. si ambos conjuntos son el mismo conjunto, S, se le <strong>de</strong>nomina relación en S. Intuitivamente,es el conjunto <strong>de</strong> todos los pares <strong>de</strong> objetos en S entre los que la relación se cumple. Si R es una relación yel par (a, b) pertenece a ella, se acostumbra escribir aRb indicando que el elemento a está en relación R conb; en forma similar, cuando (a, b) ∉ R, se escribe a ̸R.✷✷✷


20 CHAPTER 1.MATEMÁTICAS BÁSICASUna relación binaria R en un conjunto finito S, pue<strong>de</strong> representarse por un grafo dirigido en que cadanodo <strong>de</strong>l grafo correspon<strong>de</strong> a un elemento <strong>de</strong> S, y en que hay un arco <strong>de</strong> un vértice v 1 a un vértice v 2 , si ysólo si v 1 Rv 2 . Una relación binaria R en un conjunto finito S se representa, entonces, por el grafo dirigidoG = (S, R). A la inversa, cualquier grafo dirigido G = (V, A) pue<strong>de</strong> interpretarse como la representación <strong>de</strong>una relación binaria A en el conjunto V , <strong>de</strong> sus nodos.Ejemplo 16 Sea R = {(1, 2), (1, 4), (2, 1), (2, 3), (3, 3), (3, 1), (4, 3)} una relación binaria <strong>de</strong>finida en el conjuntoS = {1, 2, 3, 4}. El grafo dirigido que la representa se muestra en la Figura 1.4.★✥✎ ☞✓✏ ❄✓✏ ❄✓✏ ✓✏1 2 ✲✄ 3 ✛✛ 4✒✑ ✒✑ ✒✑ ✒✑✻✖ ✌✍ ✌ ✻✫✪Figure 1.4: Representación gráfica para la relación R✷1.4.1 Propieda<strong>de</strong>sEs posible <strong>de</strong>finir muchas propieda<strong>de</strong>s que las relaciones binarias pue<strong>de</strong>n o no cumplir.propieda<strong>de</strong>s más usadas y sus <strong>de</strong>finiciones para una relación R en S, son las siguientes:Algunas <strong>de</strong> las1. Reflexividad: R es refleja si y sólo siaRa, para todo a ∈ S.2. Irreflexividad: R es irrefleja si y sólo sia ̸Ra, para todo a ∈ S.3. Simetría: R es simétrica si y sólo siaRb implica bRa, para todo a y b ∈ S.4. Asimetría: R es asimétrica si y sólo siaRb implica b ̸Ra, para todo a y b ∈ S.5. Antisimetría: R es antisimétrica si y sólo siaRb y bRa implica a = b, para todo a y b ∈ S.6. Transitividad: R es transitiva si y sólo siaRb y bRc implica aRc, para todo a, b y c ∈ S.Es conveniente hacer notar que según estas <strong>de</strong>finiciones, toda relación asimétrica <strong>de</strong>be ser irrefleja. Por elcontrario, una relación antisimétrica pue<strong>de</strong> ser refleja, irrefleja o no tener ninguna <strong>de</strong> esas dos propieda<strong>de</strong>s.


1.4. RELACIONES BINARIAS 21Ejemplo 17 La relación “ancestro <strong>de</strong>”, sobre el conjunto <strong>de</strong> personas, y <strong>de</strong> acuerdo a lo que intuitivamentese entien<strong>de</strong> por este concepto, es irrefleja, ya que nadie es ancestro <strong>de</strong> sí mismo; asimétrica —y tambiénantisimétrica—, ya que si una persona es ancestro <strong>de</strong> otra, esta última no pue<strong>de</strong> ser ancestro <strong>de</strong> la primera.Y, finalmente, es una relación transitiva, pues si una persona es ancestro <strong>de</strong> otra y ésta, a su vez, es ancestro<strong>de</strong> una tercera persona, la primera es un ancestro <strong>de</strong> esta última.Nótese, sin embargo, que la relación “ancestro <strong>de</strong>”, sobre el conjunto <strong>de</strong> los nodos <strong>de</strong> un árbol, <strong>de</strong> acuerdoa las <strong>de</strong>finiciones dadas en la sección anterior, es una relación refleja, antisimétrica y transitiva, lo que enrealidad difiere <strong>de</strong>l concepto intuitivo.Las relaciones simétricas pue<strong>de</strong>n representarse simplemente, empleando grafos. Es sabido que en estoscasos, si (a, b) está en la relación, también lo estará el par (b, a) y, por lo tanto, no es necesario retener lainformación sobre el or<strong>de</strong>n <strong>de</strong> los pares. Cualquier grafo G = (V, R) pue<strong>de</strong> enten<strong>de</strong>rse como la representación<strong>de</strong> una relación simétrica, R, en el conjunto <strong>de</strong> vértices V . A su vez, cualquier relación simétrica R en unconjunto finito S, pue<strong>de</strong> representarse por el grafo G = (S, R). Sin embargo, esta forma <strong>de</strong> representaciónno será utilizada en estos apuntes.✷1.4.2 Relaciones <strong>de</strong> EquivalenciaUna relación binaria que es refleja, simétrica y transitiva se <strong>de</strong>nomina relación <strong>de</strong> equivalencia. El nombrese <strong>de</strong>be a que dos objetos relacionados por una relación <strong>de</strong> equivalencia son esencialmente equivalentes—cumplen el mismo papel— en cuanto al propósito <strong>de</strong> la relación.Una propiedad muy importante <strong>de</strong> una relación <strong>de</strong> equivalencia R en un conjunto S, es que divi<strong>de</strong> a esteúltimo en varios subconjuntos no vacíos y disjuntos entre sí, llamados clases <strong>de</strong> equivalencia. La unión <strong>de</strong>todas estas clases, cuyo número pue<strong>de</strong> ser infinito, forma el conjunto S. Cada elemento <strong>de</strong> cualquiera <strong>de</strong>estas clases, está en la relación R con todos los otros miembros <strong>de</strong> ese conjunto; sin embargo, miembros <strong>de</strong>clases diferentes no están nunca en relación. Es <strong>de</strong>cir, una relación <strong>de</strong> equivalencia R en un conjunto S,<strong>de</strong>fine subconjuntos no vacíos S 1 , S 2 , . . . que cumplen las siguientes propieda<strong>de</strong>s:• S = S 1 ∪ S 2 ∪ . . .• Si i ≠ j, S i ∩ S j = ∅• Para todo a y b ∈ S i : aRb• Si i ≠ j, para todo a ∈ S i y b ∈ S j : a ̸RbEjemplo 18 Un ejemplo <strong>de</strong> relación <strong>de</strong> equivalencia es congruencia módulo un entero k y se escribei ≡ j mod k, si y sólo si i − j es divisible por k. Es simple <strong>de</strong>mostrar que esta relación en los númerosenteros es una relación <strong>de</strong> equivalencia, es <strong>de</strong>cir, que es refleja, simétrica y transitiva. Las clases <strong>de</strong> equivalenciaque <strong>de</strong>fine son los siguientes k conjuntos, cada uno <strong>de</strong> ellos es un conjunto infinito contable:{. . . , −2k, −k, 0, k, 2k, . . .}{. . . , −2(k − 1), −(k − 1), 1, k + 1, 2k + 1, . . .}. . . . . . . . . . . .{. . . , −(k + 1), −1, k − 1, 2k − 1, 3k − 1, . . .}✷


22 CHAPTER 1.MATEMÁTICAS BÁSICASTal como una relación <strong>de</strong> equivalencia en S particiona a este conjunto en sus clases <strong>de</strong> equivalencia,también es cierto que toda partición 2 <strong>de</strong> un conjunto, induce una relación <strong>de</strong> equivalencia en él. En efecto,la relación <strong>de</strong> equivalencia inducida es:{(a, b)/a y b pertenecen al mismo subconjunto en la partición }.1.4.3 ClausurasSi P es un conjunto <strong>de</strong> propieda<strong>de</strong>s <strong>de</strong> relaciones, la clausura-P <strong>de</strong> una relación R, es la relación más pequeñaque incluye a R y que tiene las propieda<strong>de</strong>s en P. No cualquier conjunto <strong>de</strong> propieda<strong>de</strong>s es posible. Porejemplo, no cualquier relación tiene clausura irrefleja. Sin embargo, toda relación binaria tiene clausura conrespecto a cualquier combinación <strong>de</strong> reflexividad, simetría y transitividad.Dos clausuras serán especialmente importantes para estos apuntes. La primera <strong>de</strong> ellas, la clausuratransitiva <strong>de</strong> una relación R, <strong>de</strong>notada como R + , se pue<strong>de</strong> <strong>de</strong>finir <strong>de</strong> la siguiente manera:• Si aRb, entonces aR + b.• Si aR + b y bR + c, entonces aR + c.• Nada más pertenece a R + .Es simple mostrar que la relación así <strong>de</strong>finida es en realidad la relación más pequeña que incluye a R y estransitiva, es <strong>de</strong>cir, que es su clausura transitiva.La segunda clausura que interesará es la clausura refleja y transitiva <strong>de</strong> una relación R en un conjuntoS. Esta relación, <strong>de</strong>nominada R∗, se pue<strong>de</strong> <strong>de</strong>finir en forma análoga a la anterior. Sin embargo, es tambiénfácil ver que correpon<strong>de</strong> al conjunto:R ∗ = R + ∪ {(a, a)/a ∈ S}Ejemplo 19 Sea R = {(a, b), (b, b), (b, c)}, una relación en el conjunto S = {a, b, c}. Entonces sus clausurastransitiva, refleja y transitiva son:R + = {(a, b), (a, c), (b, b), (b, c)}R ∗ = {(a, a), (a, b), (a, c), (b, b), (b, c), (c, c)}Los grafos dirigidos que representan las relaciones R, R + , y R ∗ , se muestran, en ese or<strong>de</strong>n, en laFigura 1.5.✷2 Una partición <strong>de</strong> un conjunto A es un subconjunto <strong>de</strong> su conjunto potencia, esto es, un conjunto <strong>de</strong> sus subconjuntos. Cadasubconjunto <strong>de</strong> A en una partición es no vacío. A<strong>de</strong>más, dos subconjuntos distintos cualesquiera son disjuntos y la unión <strong>de</strong>todos ellos forma el conjunto A. Es <strong>de</strong>cir, cada elemento <strong>de</strong> A está en exactamente uno <strong>de</strong> los subconjuntos, y cada uno <strong>de</strong>ellos contiene al menos un elemento <strong>de</strong> A.


1.4. RELACIONES BINARIAS 23✓ ✏✓✏ ✡✓✏✛✠ ✓✏a ✲ b ✲ c✒✑ ✒✑ ✒✑✓ ✏✓✏ ✡✓✏✛✠ ✓✏a ✲ b ✲ c✒✑ ✒✑ ✒✑✧✦ ✻✓ ✏✓ ✏✓ ✏✡✓✏✛✠ ✡✓✏✛✠ ✡✓✏✛✠a ✲ b ✲ c✒✑ ✒✑ ✒✑✧✦ ✻Figure 1.5: Representación gráfica para las relaciones R, R + y R ∗


24 CHAPTER 1. MATEMÁTICAS BÁSICAS


Chapter 2LENGUAJES FORMALESLa teoría <strong>de</strong> computación es el estudio, <strong>de</strong>s<strong>de</strong> un punto <strong>de</strong> vista matemático, <strong>de</strong> los computadores y suscapacida<strong>de</strong>s. No se trata <strong>de</strong> estudiar algún computador en particular, sino <strong>de</strong> generalizar el concepto yformalizar la noción <strong>de</strong> lo que es computable. Para hacer este estudio, se requiere <strong>de</strong>finir un mo<strong>de</strong>lo <strong>de</strong> losobjetos manipulados por los computadores. Como mo<strong>de</strong>lo matemático para los datos, en el sentido amplioque incluye a todos los objetos que los computadores manejan —ya sean programas o datos propiamentetales— se utilizan secuencias finitas <strong>de</strong> símbolos.Este capítulo presenta conceptos propios <strong>de</strong>l tema a tratar en estos apuntes, como son las nociones <strong>de</strong>palabra y <strong>de</strong> lenguajes abstractos, concentrándose principalmente en su <strong>de</strong>finición y en algunas propieda<strong>de</strong>sy operaciones básicas entre ellos.2.1 Símbolos y AlfabetosUn símbolo es una entidad abstracta que no se <strong>de</strong>finirá formalmente, tal como el concepto <strong>de</strong> punto no se<strong>de</strong>fine en geometría. Las letras y los dígitos son ejemplos típicos <strong>de</strong> símbolos que se usan frecuentemente;aún cuando cualquier objeto pue<strong>de</strong> consi<strong>de</strong>rarse un símbolo. Un conjunto finito <strong>de</strong> símbolos será llamado unalfabeto. Un ejemplo <strong>de</strong> alfabeto, conocido por toda la gente, es el alfabeto Romano, cuyos símbolos son cadauna <strong>de</strong> las letras usadas en el lenguaje Castellano: {a, b, c, . . . , z}. Un alfabeto particularmente relacionadocon los computadores actuales, es el <strong>de</strong>nominado alfabeto binario: {0, 1}. En realidad cualquier objeto pue<strong>de</strong>pertenecer a un alfabeto, ya que cualquier objeto pue<strong>de</strong> ser un símbolo. Des<strong>de</strong> un punto <strong>de</strong> vista formal, unalfabeto es simplemente un conjunto finito con culquier tipo <strong>de</strong> componentes. Sin embargo, por simplicidad,se usará como símbolos sólo las letras, los dígitos y algunos otros caracteres comúnmente usados, como $,#, ̸ c , etcétera.2.2 PalabrasUna palabra sobre un cierto alfabeto es una secuencia finita <strong>de</strong> símbolos tomados <strong>de</strong> él. Este concepto, quetambién se conoce por el vocablo inglés string, representa lo que intuitivamente se entien<strong>de</strong> por palabra,frase o sentencia, si se incluye en estas últimas todos los símbolos que sirven para contruirlas; esto es, nosólo las letras y símbolos <strong>de</strong> puntuación, sino que también los espacios en blanco usados como separadores.El concepto <strong>de</strong> palabra que aquí se presenta difiere <strong>de</strong>l sentido usual, en que no se le asigna significado nirepresentación a estas secuencias <strong>de</strong> símbolos, y sólo se está interesado en cómo se construyen a partir <strong>de</strong><strong>de</strong> los símbolos <strong>de</strong>l alfabeto 1 . Los vocablos frase y sentencia se usarán como sinónimo <strong>de</strong> palabra en estosapuntes. Cualquier símbolo <strong>de</strong>l alfabeto pue<strong>de</strong> aparecer cero o más veces en una palabra. No es necesario1 Tampoco <strong>de</strong>be confundirse esta noción con el concepto homónimo que refiere a la parte <strong>de</strong> la memoria <strong>de</strong> un computadorque es normalmente manipulada en forma conjunta por la unidad central <strong>de</strong> proceso.25


26 CHAPTER 2. LENGUAJES FORMALESque todos ellos estén en cada palabra, ni que cada símbolo que aparezca lo haga una sola vez. En lugar <strong>de</strong>escribir la secuencia como una lista <strong>de</strong> símbolos separados por comas y encerrada entre paréntesis, como seacostumbra escribir en otras secuencias en matemática, simplemente se escribirán los símbolos yuxtapuestos.Ejemplo 20clase es una palabra sobre el alfabeto romano.01101 es una palabra sobre el alfabeto binario.$105.0 es una palabra sobre el alfabeto {0, 1, 5, ., $}.Utilizando el isomorfismo natural que existe entre los símbolos <strong>de</strong> un alfabeto y las palabras sobre esealfabeto que están compuestas por un único símbolo, se acostumbra i<strong>de</strong>ntificar esas palabras con el símboloque las forma. Por lo tanto, se consi<strong>de</strong>ra que, por ejemplo, el símbolo a es lo mismo que la palabra a.Una palabra pue<strong>de</strong> no tener símbolos. En ese caso se le conoce como palabra vacía o palabra nula, y se larepresenta por ε. Debe quedar claro que ε no es un símbolo, sino que es el nombre <strong>de</strong> una palabra. Lo quesuce<strong>de</strong> es que esa palabra, la palabra vacía, consta <strong>de</strong> ningún símbolo y, por lo tanto, no se pue<strong>de</strong> representarpor la secuencia <strong>de</strong> los símbolos que la componen, requiriéndose el uso <strong>de</strong> un nombre para referirse a ella.En general se usarán letras, como U, V, W, X, Y y Z, o sus minúsculas, y algunas letras griegas para <strong>de</strong>notarpalabras es <strong>de</strong>cir, como nombres para ellas. Es obvio que por claridad y para evitar confusiones, no esconveniente utilizar ε o cualquier otro caracter usado como nombre <strong>de</strong> una palabra, como un símbolo <strong>de</strong>lalfabeto. Formalmente, una palabra sobre un alfabeto Σ cualquiera, se <strong>de</strong>fine inductivamente a través <strong>de</strong> lassiguientes reglas:• ε es una palabra sobre Σ.• Si x es una palabra sobre Σ y a es un símbolo en Σ, ax es una palabra sobre Σ.La primera regla asegura que que la palabra vacía es una palabra sobre el alfabeto Σ. La segunda reglaindica como construir una palabra a partir <strong>de</strong> otra, basta anteponer cualquier símbolo <strong>de</strong>l alfabeto a lossímbolos <strong>de</strong> la palabra original. Una <strong>de</strong>finición alternativa es suponer que las palabras crecen hacia el lado<strong>de</strong>recho. Es interesante <strong>de</strong>stacar que ε es una palabra sobre cualquier alfabeto; en realidad, es la únicapalabra que se pue<strong>de</strong> construir a partir <strong>de</strong> los símbolos <strong>de</strong> cualquier alfabeto.2.2.1 Longitud <strong>de</strong> una PalabraTal como en el caso <strong>de</strong> los números naturales o, como se vio anteriormente, en el caso <strong>de</strong> los conjuntos, haytambién varias funciones, operaciones y relaciones interesantes <strong>de</strong> estudiar en las palabras. En este punto ylos siguientes, se verán algunas <strong>de</strong> ellas. Una <strong>de</strong> las cosas que interesa conocer es el largo <strong>de</strong> una palabra.Para ello se <strong>de</strong>fine la longitud <strong>de</strong> una palabra x, usualmente <strong>de</strong>notada por |x|, como el número <strong>de</strong> símbolosque componen la palabra. Esta es una función que asigna a cada palabra un número natural. La palabravacía, al no tener ningún símbolo, tiene longitud cero; es la única palabra, cualquiera sea el alfabeto, conlongitud cero.Ejemplo 21 Consi<strong>de</strong>re, por ejemplo, las siguientes palabras|clase| = 5|101| = 3|ε| = 0Formalmente, la función longitud pue<strong>de</strong> <strong>de</strong>finirse inductivamente empleando las dos reglas siguientes:• |ε| = 0✷✷


2.2. PALABRAS 27• Si x es una palabra sobre Σ y a ∈ Σ : |ax| = 1 + |x|.Es <strong>de</strong>cir, la palabra nula tiene longitud cero, y cualquier palabra construida al anteponer un símbolo <strong>de</strong>lalfabeto a otra palabra, tiene una longitud superior en uno, a la longitud <strong>de</strong> esta última; diferencia quecorrepon<strong>de</strong> al símbolo que se está agregando.2.2.2 ConcatenaciónDos palabras sobre un mismo alfabeto pue<strong>de</strong>n ser combinadas para formar una tercera palabra, utilizandola operación conocida como concatenación. La concatenación <strong>de</strong> dos palabras x e y sobre un alfabeto Σ,escrita como x◦y, o simplemente xy, es la palabra formada al escribir los símbolos <strong>de</strong> la primera, x, seguidosinmediatamente por los símbolos <strong>de</strong> la segunda, y.Ejemplo 22 Sean u y v las siguientes palabras sobre el alfabeto romano: u = ca y v = sa. Entonces laconcatenación <strong>de</strong> u y v es:u ◦ v = uv = casa,y la concatenación <strong>de</strong> v con u es:v ◦ u = vu = saca.Formalmente, la operación <strong>de</strong> concatenación se <strong>de</strong>fine inductivamente a través <strong>de</strong> las siguientes reglas:• Para toda palabra y sobre Σ : ε ◦ y = y.• Para todo símbolo a ∈ Σ y palabras x e y sobre Σ : (ax) ◦ y = a(x ◦ y).La primera regla indica que la concatenación <strong>de</strong> la palabra nula con cualquier otra palabra resulta ser,simplemente, esta última palabra. La segunda regla indica cómo hacer la concatenación cuando el primeroperando es una palabra compuesta por la anteposición <strong>de</strong> un símbolo <strong>de</strong>l alfabeto a otra palabra. ElEjemplo 22 <strong>de</strong>jó en claro que la concatenación <strong>de</strong> palabras no es conmutativa. Sin embargo, es posible<strong>de</strong>mostrar que sí se trata <strong>de</strong> una operación asociativa. Es <strong>de</strong>cir, para toda palabra w, x e y, sobre unalfabeto Σ cualquiera,w ◦ (x ◦ y) = (w ◦ x) ◦ y.También se pue<strong>de</strong> <strong>de</strong>mostrar que, en realidad, la palabra nula es el elemento neutro en la operación <strong>de</strong>concatenación <strong>de</strong> palabras. Es <strong>de</strong>cir, para toda palabra w, sobre un alfabeto cualquiera, se cumple que:w ◦ ε = ε ◦ w = w.A<strong>de</strong>más se cumple la siguiente propiedad que relaciona la función longitud con la operación <strong>de</strong> concatenación.Para todo par <strong>de</strong> palabras x e y sobre Σ,|x ◦ y| = |x| + |y|.La notación w k se usa para representar la concatenación consecutiva <strong>de</strong> k copias <strong>de</strong> una misma palabraw. Es <strong>de</strong>cir,w k = w ◦ w ◦ . . . ◦ w (k veces)Debe notarse que en la expresión anterior no es necesario emplear paréntesis, puesto que la operación <strong>de</strong>concatenación es asociativa.✷


28 CHAPTER 2. LENGUAJES FORMALES2.2.3 Subpalabras, Prefijos y SufijosUna palabra es una subpalabra <strong>de</strong> otra palabra, cuando sus símbolos aparecen entre los símbolos <strong>de</strong> lasegunda, en forma consecutiva y en el mismo or<strong>de</strong>n; es <strong>de</strong>cir cuando un trozo contiguo <strong>de</strong> la segunda es iguala la primera. Formalmente, una palabra v se dice una subpalabra <strong>de</strong> otra palabra w, si y sólo si existendos palabras x e y sobre el alfabeto, tales que w = x ◦ v ◦ y. En la <strong>de</strong>finición anterior, cualquiera <strong>de</strong> laspalabras x e y, o ambas, pue<strong>de</strong> ser la palabra nula. Por lo tanto, si x = y = ε, se concluye que toda palabraes una subpalabra <strong>de</strong> sí misma. También , si se consi<strong>de</strong>ra que x = w y que v = y = ε, se ve que la palabranula es una subpalabra <strong>de</strong> todas las palabras. Cuando la subpalabra es tal que sus símbolos aparecen alcomienzo <strong>de</strong> la otra palabra, se le llama un prefijo <strong>de</strong> ésta última. Si aparecen al final, se le llama un sufijo.Intuitivamente, una palabra es un prefijo <strong>de</strong> otra, cuando ésta comienza con aquélla; será un sufijo cuandotermina con ella. Formalmente, si w = u ◦ v para alguna palabra u sobre el alfabeto, v se dice un sufijo <strong>de</strong>w. En forma similar, si w = u ◦ v para alguna palabra v, u se dice un prefijo <strong>de</strong> w. Según estas <strong>de</strong>finiciones,cada palabra es un sufijo, prefijo y subpalabra <strong>de</strong> sí misma. Un sufijo, prefijo o subpalabra que no sea lapalabra misma se llama un sufijo, prefijo o subpalabra propia. Debe notarse que la palabra vacía es un sufijo,prefijo y subpalabra propia <strong>de</strong> todas las palabras, excepto <strong>de</strong> sí misma.Ejemplo 23PUES es un prefijo <strong>de</strong> PUESTOS.PUES es un sufijo <strong>de</strong> DESPUES.PUES es una subpalabra <strong>de</strong> PUESTOS, DESPUES y también <strong>de</strong> APUESTA.Es interesante notar que en una palabra pue<strong>de</strong> haber varias ocurrencias <strong>de</strong> una misma subpalabra. Porejemplo, la palabra binaria 101010 tiene tres ocurrencias <strong>de</strong> las subpalabras 0, 1 y 10, y dos ocurrencias<strong>de</strong> las subpalabras 01, 010, 101, 1010. Una ocurrencia incluye, a<strong>de</strong>más <strong>de</strong> la subpalabra que interesa, unaposición <strong>de</strong>ntro <strong>de</strong> la palabra que indica don<strong>de</strong> comienza esa instancia <strong>de</strong> la subpalabra.2.2.4 ReversoOtra función interesante entre palabras sobre un alfabeto, es la función conocida como el reverso <strong>de</strong> unapalabra. Intuitivamente, esta función transforma la palabra dada como argumento, en la palabra formadapor los mismos símbolos pero en or<strong>de</strong>n inverso. Formalmente, el reverso <strong>de</strong> una palabra w, <strong>de</strong>notada comow r , se <strong>de</strong>fine por las siguientes reglas:• ε r = ε• Para todo símbolo a ∈ Σ y toda palabra x sobre Σ : (ax) r = x r ◦ aÉste es otro ejemplo <strong>de</strong> una <strong>de</strong>finición inductiva. La primera regla <strong>de</strong>fine cuál es el reverso <strong>de</strong> la palabranula; la segunda, indica cómo <strong>de</strong>terminar el reverso <strong>de</strong> una palabra compuesta por la anteposición <strong>de</strong> unsímbolo a otra palabra sobre el alfabeto 2 . En esta última regla, a aparece como un símbolo en el lado izquierdoy como una palabra en el lado <strong>de</strong>recho <strong>de</strong> la igualdad. El Ejemplo 24 muestra como es posible aprovecharlas <strong>de</strong>finiciones inductivas para <strong>de</strong>mostrar ciertas propieda<strong>de</strong>s <strong>de</strong> las palabras, utilizando el principio <strong>de</strong>inducción matemática. En particular, se prueba que el reverso <strong>de</strong> la concatenación <strong>de</strong> dos palabras es lomismo que la concatenación, en or<strong>de</strong>n inverso, <strong>de</strong> los reversos <strong>de</strong> las palabras originales.Ejemplo 24 Se muestra que para todo par <strong>de</strong> palabras x e y, sobre un alfabeto Σ cualquiera, se cumple lasiguiente relación:(x ◦ y) r = y r ◦ x r .2 Nótese el parecido <strong>de</strong> la <strong>de</strong>finición con la forma en que se podría implementar esta función utilizando el lenguaje <strong>de</strong>programación LISP: (<strong>de</strong>fun reverso (x)(cond ((null x) x)(t (append (reverso (cdr x))(list (car x))))))✷


2.3. LENGUAJES 29Sea y una palabra cualquiera sobre el alfabeto. La <strong>de</strong>mostración se hará por inducción en el largo <strong>de</strong> lapalabra x.Base (|x| = 0): La única palabra con longitud cero es la palabra vacía. Es <strong>de</strong>cir, en este caso x = ε y, porlo tanto, se cumple que:(x ◦ y) r = (ε ◦ y) r (porque x = ε)= y r (<strong>de</strong>finición <strong>de</strong> concatenación)= y r ◦ ε (elemento neutro)= y r ◦ ε r (<strong>de</strong>finición <strong>de</strong>l reverso)= y r ◦ x r (porque x = ε)como se <strong>de</strong>seaba mostrar.Inducción (|x| ≥ 0): La hipótesis <strong>de</strong> inducción asegura que si la palabra x tiene longitud n ≥ 0, entoncesse cumple que (x ◦ y) r = y r ◦ x r . Se <strong>de</strong>be <strong>de</strong>mostrar que esta relación también se cumple cuando lalongitud <strong>de</strong> x es n + 1. Sea x una palabra <strong>de</strong> longitud n + 1 ≥ 1, entonces x = au para algún símboloa ∈ Σ y alguna palabra u sobre Σ, en que |u| = n. Por lo tanto:(x ◦ y) r = ((au) ◦ y) r (porque x = au)= (a(u ◦ y)) r (<strong>de</strong>finición <strong>de</strong> concatenación)= (u ◦ y) r ◦ a (<strong>de</strong>finición <strong>de</strong>l reverso)= (y r ◦ u r ) ◦ a (hipótesis <strong>de</strong> inducción)= y r ◦ (u r ◦ a) (asociatividad)= y r ◦ ((au) r ) (<strong>de</strong>finición <strong>de</strong>l reverso)= y r ◦ x r (porque x = au)como se quería mostrar.Por el principio <strong>de</strong> inducción matemática, ya que se ha mostrado la base y la inducción, se pue<strong>de</strong> concluirque para todo par <strong>de</strong> palabras x e y, sobre un alfabeto Σ cualquiera, se cumple la relación (x ◦ y) r = y r ◦ x r .✷2.3 <strong>Lenguajes</strong>En esta sección se <strong>de</strong>finirá y estudiará el concepto <strong>de</strong> lenguaje, noción sobre la que girarán estos apuntes. Unlenguaje (formal) sobre un alfabeto, es un conjunto <strong>de</strong> palabras sobre ese alfabeto. Esta simple <strong>de</strong>finiciónpermite formalizar la i<strong>de</strong>a intuitiva <strong>de</strong> lenguaje, <strong>de</strong> forma que abarque los lenguajes naturales, <strong>de</strong> programacióny <strong>de</strong> otros tipos. En los lenguajes naturales los símbolos son fonemas, letras u otros símbolos, y laspalabras son las frases y sentencias que se pue<strong>de</strong>n expresar en ese idioma. En los lenguajes <strong>de</strong> programación,los símbolos son las palabras reservadas, caracteres y símbolos especiales <strong>de</strong>l lenguaje; las palabras son losprogramas escritos en dicho lenguaje.El conjunto vacío, ∅ y el conjunto cuyo único elemento es la palabra vacía, {ε}, tienen la característica <strong>de</strong>ser lenguajes sobre cualquier alfabeto. Es importante hacer notar que ellos son dos lenguajes absolutamentediferentes. El primero no tiene elementos, mientras que el segundo lenguaje tiene un único elemento: lapalabra nula.Ejemplo 25 El conjunto <strong>de</strong> palíndromes sobre el alfabeto romano es un lenguaje infinito. Los palíndromesson palabras que tienen la característica <strong>de</strong> ser iguales a su reverso. Algunos <strong>de</strong> los elementos <strong>de</strong> este lenguajeson: ABBA, C, PRZHZRP, RADAR, RECONOCER. La palabra nula, ε, también pertenece a este lenguaje.Es conveniente <strong>de</strong>stacar que cualquier palabra formada por símbolos <strong>de</strong>l alfabeto, y que se lee igual <strong>de</strong><strong>de</strong>recha a izquierda que <strong>de</strong> izquierda a <strong>de</strong>recha, pertenece a este lenguaje. No sólo aquéllas que tienen algúnsignificado, ya sea en Castellano o en cualquier otro idioma.


30 CHAPTER 2. LENGUAJES FORMALESUn lenguaje <strong>de</strong> importancia es aquél formado por todas las palabras que se pue<strong>de</strong>n construir con lossímbolos <strong>de</strong> un alfabeto Σ dado. A este lenguaje se le <strong>de</strong>nota por Σ ∗ . Hablar <strong>de</strong> una palabra sobre Σ o <strong>de</strong>una palabra en Σ ∗ será, entonces, enteramente equivalente. Es claro que cualquier lenguaje sobre un alfabetoΣ, es un subconjunto <strong>de</strong> Σ ∗ y que la clase <strong>de</strong> todos los lenguajes posibles sobre Σ, es el conjunto potencia2 Σ∗ .Ejemplo 26 Si el alfabeto es Σ = {a} —un alfabeto con un solo símbolo— el lenguaje <strong>de</strong> todas las palabrasque se pue<strong>de</strong>n construir sobre él es el lenguaje:Σ ∗ = {ε, a, aa, aaa, aaaa, . . .}Como se vio anteriormente, un símbolo se i<strong>de</strong>ntifica con la palabra compuesta sólo por ese símbolo;en consecuencia, cualquier alfabeto Σ es, a su vez, un lenguaje. Visto como tal, este lenguaje tiene lascaracterísticas <strong>de</strong> ser finito y <strong>de</strong> estar compuesto únicamente por palabras <strong>de</strong> longitud uno.Por otra parte, como los lenguajes son conjuntos, ellos pue<strong>de</strong>n ser combinados por las operaciones usualespara conjuntos, como son la unión, intersección y diferencia. En general, cuando el alfabeto Σ se subentien<strong>de</strong>,se acostumbra hablar <strong>de</strong>l complemento <strong>de</strong> A, A c , en lugar <strong>de</strong> la diferencia Σ ∗ − A. En los próximos dospuntos se <strong>de</strong>finen algunas otras operaciones que se pue<strong>de</strong>n realizar específicamente con lenguajes.2.3.1 Concatenación <strong>de</strong> <strong>Lenguajes</strong>La concatenación <strong>de</strong> lenguajes es el lenguaje resultante <strong>de</strong> concatenar las palabras <strong>de</strong> los lenguajes originales.Si L 1 y L 2 son lenguajes sobre un alfabeto Σ (es <strong>de</strong>cir, L 1 ⊆ Σ ∗ y L 2 ⊆ Σ ∗ ), su concatenación es el lenguajeL sobre Σ, <strong>de</strong>finido por:L = L 1 ◦ L 2 = L 1 L 2 = {x ◦ y/x ∈ L 1 e y ∈ L 2 }.Este lenguaje está compuesto por todas las palabras que se forman al concatenar una palabra <strong>de</strong> L 1 con unapalabra <strong>de</strong> L 2 , en ese or<strong>de</strong>n.Ejemplo 27 Sean L 1 y L 2 los siguientes lenguajes finitos sobre el alfabeto binario:entonces,yL 1 = {01, 1} L 2 = {101, 1010}L 1 ◦ L 2 = {01101, 011010, 1101, 11010}L 2 ◦ L 1 = {10101, 1011, 101001}Como en el caso <strong>de</strong> las palabras, la concatenación <strong>de</strong> lenguajes no es conmutativa. El Ejemplo 27 <strong>de</strong>jaesto <strong>de</strong> manifiesto. Otra observación interesante <strong>de</strong> hacer es que si L 1 y L 2 son lenguajes finitos con n y mpalabras respectivamente, entonces el lenguaje resultante al concatenarlos tiene a lo sumo n ∗ m elementospero, en general, pue<strong>de</strong> tener menos.Es posible <strong>de</strong>mostrar que la concatenación <strong>de</strong> lenguajes es una operación asociativa, igual que lo quesuce<strong>de</strong> con la concatenación <strong>de</strong> palabras. De hecho, la asociatividad <strong>de</strong> la concatenación <strong>de</strong> lenguajes es✷✷✷


2.3. LENGUAJES 31producto <strong>de</strong> la asociatividad <strong>de</strong> la concatenación <strong>de</strong> palabras. Es <strong>de</strong>cir, para todo lenguaje L 1 , L 2 y L 3 sobreun alfabeto Σ cualquiera,L 1 ◦ (L 2 ◦ L 3 ) = (L 1 ◦ L 2 ) ◦ L 3También se cumplen las siguientes propieda<strong>de</strong>s <strong>de</strong> la concatenación <strong>de</strong> lenguajes. Para todo lenguaje Lsobre un alfabeto Σ cualquiera,L ◦ ∅ = ∅ ◦ L = ∅L ◦ {ε} = {ε} ◦ L = LEn forma similar al caso <strong>de</strong> las palabras, la notación L i se utiliza para representar la concatenación, iveces, <strong>de</strong> un lenguaje L consigo mismo. Formalmente esta operación se pue<strong>de</strong> <strong>de</strong>finir para todo númeronatural i, a través <strong>de</strong> las siguientes reglas inductivas: Para todo lenguaje L:• L 0 = {ε}• Para todo número natural i ≥ 1 : L i = L ◦ L i−1La i<strong>de</strong>a intuitiva es que para todo número natural i, el lenguaje L i está formado por la concatenación <strong>de</strong>exactamente i palabras <strong>de</strong>l lenguaje L. Estas palabras pue<strong>de</strong>n ser distintas o no, no hay restricciones alrespecto. Es bueno hacer notar que se cumplen las siguientes propieda<strong>de</strong>s <strong>de</strong> esta operación.• Para todo lenguaje L : L 1 = L• ∅ 0 = {ε}• Para todo número natural n ≥ 1 : ∅ n = ∅Ejemplo 28 Si L es el lenguaje {a, b} sobre el alfabeto romano, se pue<strong>de</strong>n formar los siguientes lenguajesa partir <strong>de</strong> él:L 0 = {ε}L 1 = {a, b}L 2 = {aa, ab, ba, bb}L 3 = {aaa, aab, aba, abb, baa, bab, bba, bbb}2.3.2 ClausurasUna vez <strong>de</strong>finida la concatenación <strong>de</strong> lenguajes, es posible <strong>de</strong>finir una nueva función sobre los lenguajes,llamada clausura <strong>de</strong> Kleene, o simplemente clausura. La clausura <strong>de</strong> un lenguaje L se <strong>de</strong>fine como ellenguajeL ∗ = ⋃ L i , para todo i ≥ 0.También se <strong>de</strong>fine la clausura positiva <strong>de</strong> un lenguaje L, como el lenguaje:L + = ⋃ L i , para todo i ≥ 1.La clausura <strong>de</strong> un lenguaje L, L ∗ , <strong>de</strong>nota el lenguaje formado al concatenar cualquier número <strong>de</strong> palabras<strong>de</strong> L, incluyendo la posibilidad <strong>de</strong> cero. La clausura positiva, L + , es similar, pero en este caso no se aceptanconcatenaciones <strong>de</strong> cero palabras. El nombre clausura para estas funciones proviene <strong>de</strong>l hecho que la clausura,o la clausura positiva, <strong>de</strong> un lenguaje L, es un lenguaje que incluye a L y es cerrado bajo concatenación;es <strong>de</strong>cir, que al concatenar dos palabras cualesquiera <strong>de</strong> ellos, la palabra resultante también está en eselenguaje.✷


32 CHAPTER 2. LENGUAJES FORMALESEjemplo 29 Sea L el lenguaje {a, b} sobre el alfabeto romano. La clausura y clausura positiva <strong>de</strong> estelenguaje, son los lenguajes:L ∗ = {ε, a, b, aa, ab, ba, bb, aaa, aab, . . . }L + = {a, b, aa, ab, ba, bb, aaa, aab, aba, . . . }Esta <strong>de</strong>finición <strong>de</strong> las clausuras hace que las siguientes propieda<strong>de</strong>s se cumplan para lenguajes sobrecualquier alfabeto:• Para todo lenguaje L : L ⊆ L + ⊆ L ∗ .• ε ∈ L + si y sólo si ε ∈ L.• Para todo lenguaje L : ε ∈ L ∗ .En particular, para el lenguaje vacío y para aquél que sólo consta <strong>de</strong> la palabra nula se cumplen lassiguientes propieda<strong>de</strong>s:∅ ∗ = {ε} ∗ = {ε}Nótese que el uso <strong>de</strong> Σ ∗ para <strong>de</strong>notar el conjunto <strong>de</strong> todas las palabras sobre Σ es consistente con la notación<strong>de</strong> la clausura <strong>de</strong>l alfabeto Σ, visto como el lenguaje finito que es.Ejemplo 30 En este ejemplo se muestra como es posible usar las <strong>de</strong>finiciones ya vistas, para obtener algunasconclusiones sobre los lenguajes. En particular, consi<strong>de</strong>re el lenguajeL = {w ∈ {0, 1} ∗ /w tiene distinto número <strong>de</strong> ceros (0) que <strong>de</strong> unos (1) }.Se mostrará que L ∗ = {0, 1} ∗ .Primero, nótese que por la <strong>de</strong>finición <strong>de</strong> la clausura <strong>de</strong> Kleene, se tiene que para cualquier par <strong>de</strong> lenguajesL 1 y L 2 : si L 1 ⊆ L 2 , entonces L ∗ 1 ⊆ L ∗ 2.Ya que tanto la palabra 0 como la palabra 1 tienen diferente número <strong>de</strong> ceros que <strong>de</strong> unos, se sabe que{0, 1} ⊆ L y, por lo tanto, que {0, 1} ∗ ⊆ L ∗ .Pero por la <strong>de</strong>finición <strong>de</strong> L, también se sabe que L ∗ ⊆ {0, 1} ∗ . Y, por lo tanto, ya que cada uno essubconjunto <strong>de</strong>l otro, se concluye que L ∗ = {0, 1} ∗ .2.3.3 Representación <strong>de</strong> <strong>Lenguajes</strong>Un problema central en la teoría <strong>de</strong> la computación es la representación <strong>de</strong> lenguajes empleando especificacionesfinitas. Naturalmente, cualquier lenguaje finito es representable por la enumeración explícita <strong>de</strong> todasy cada una <strong>de</strong> las palabras en el lenguaje. El problema <strong>de</strong> la representación finita se hace interesante sólo enla medida que se consi<strong>de</strong>ran lenguajes infinitos. Pero, ¿qué es una especificación finita <strong>de</strong> un lenguaje? ¿quécaracterísticas <strong>de</strong>be cumplir para ser aceptable como tal? Lo primero que se pue<strong>de</strong> <strong>de</strong>cir es que <strong>de</strong>be, a suvez, ser una palabra, es <strong>de</strong>cir, una secuencia finita <strong>de</strong> símbolos tomados <strong>de</strong> algún alfabeto. En segundo lugar,interesa que sean tales que lenguajes diferentes tengan representaciones diferentes, <strong>de</strong> otra forma difícilmentese les podría llamar representación <strong>de</strong>l lenguaje.El problema es que estos dos requisitos ya implican que las posibles especificaciones finitas están seriamentelimitadas. El conjunto Σ∗ <strong>de</strong> palabras sobre un alfabeto Σ es infinito contable, por lo que el número<strong>de</strong> posibles representaciones <strong>de</strong> lenguajes es, a su vez, infinito contable. Pero, por otro lado, el conjunto<strong>de</strong> todos los posibles lenguajes sobre un alfabeto Σ —esto es, 2 Σ∗ — es incontable, puesto que 2 N y, por lotanto, el conjunto potencia <strong>de</strong> cualquier conjunto infinito contable, es incontable. Al tener sólo un número✷✷


2.4.AUTÓMATAS 33contable <strong>de</strong> representaciones y un número incontable <strong>de</strong> cosas por representar, no <strong>de</strong>be extrañar que no seaposible representar en forma finita a todos los lenguajes. En realidad, a lo más que se pue<strong>de</strong> aspirar es aencontrar una representación finita, <strong>de</strong> algún tipo, para al menos algunos <strong>de</strong> los lenguajes más interesantes.Éste es el primer resultado importante <strong>de</strong> la teoría <strong>de</strong> computación que se ha obtenido en estos apuntes:No importando cuán po<strong>de</strong>rosos puedan ser los métodos para <strong>de</strong>scribir lenguajes, sólo un número contable<strong>de</strong> lenguajes pue<strong>de</strong> ser representado usando especificaciones finitas. Como hay un número incontable <strong>de</strong>lenguajes, un número también incontable <strong>de</strong> ellos quedará irremediablemente fuera <strong>de</strong> cualquier esquema <strong>de</strong>representación finita. No es posible hablar <strong>de</strong> todos los lenguajes que existen, simplemente no hay suficientesnombres para referirse a cada uno <strong>de</strong> ellos.En el resto <strong>de</strong> estos apuntes se estudiarán diversas formas para <strong>de</strong>scribir y representar lenguajes, cadauna más po<strong>de</strong>rosa que la anterior, en el sentido <strong>de</strong> que es capaz <strong>de</strong> <strong>de</strong>scribir lenguajes in<strong>de</strong>scriptibles porla forma previa. Esta jerarquía <strong>de</strong> esquemas no contradice el hecho que todas ellas son inevitablementelimitadas en los lenguajes que pue<strong>de</strong>n representar. Al final <strong>de</strong> los apuntes, se verán formas <strong>de</strong> exhibirlenguajes particulares que no pue<strong>de</strong>n ser representados por ninguno <strong>de</strong> los métodos que se estudiarán. Sesabe que el mundo <strong>de</strong> los lenguajes está plagado por un vasto número <strong>de</strong> estos lenguajes, sin embargo pue<strong>de</strong>ser muy difícil encontrar uno en particular y <strong>de</strong>mostrarlo como tal. La técnica <strong>de</strong> diagonalización será muyútil para estos efectos.2.4 AutómatasUn autómata finito es un mo<strong>de</strong>lo matemático <strong>de</strong> un sistema con entrada y salida discretas. El sistemapue<strong>de</strong> estar en cualquiera <strong>de</strong> un conjunto finito <strong>de</strong> configuraciones internas o estados. El estado <strong>de</strong> unsistema resume la información <strong>de</strong> las entradas pasadas, pero sólo en lo que es necesario para <strong>de</strong>terminar elcomportamiento <strong>de</strong>l sistema en las entradas por venir.Ejemplos <strong>de</strong> sistemas <strong>de</strong> estado finito son el mecanismo <strong>de</strong> control <strong>de</strong> un ascensor, la unidad <strong>de</strong> control<strong>de</strong> un computador, ciertos editores <strong>de</strong> texto y los analizadores léxicos <strong>de</strong> los compiladores.Los analizadores léxicos procesan los símbolos que componen un programa <strong>de</strong> computador para ubicarlos que correspon<strong>de</strong>n a i<strong>de</strong>ntificadores, números, palabras reservadas, etc. En este proceso sólo es necesariorecordar una cantidad finita <strong>de</strong> información, como por ejemplo qué tan largo ha sido el prefijo <strong>de</strong> una palabrareservada que ya se ha visto.El computador mismo pue<strong>de</strong> ser visto como una máquina <strong>de</strong> estado finito. Teóricamente, el estado <strong>de</strong>la CPU, memoria y almacenamiento secundario es, en cada instante, uno <strong>de</strong> un conjunto muy gran<strong>de</strong>, perofinito, <strong>de</strong> estados posibles; provisto, por supuesto, que hay un número fijo <strong>de</strong> discos, cintas, etc., y que lamemoria no pue<strong>de</strong> agrandarse in<strong>de</strong>finidamente. Sin embargo, este mo<strong>de</strong>lo no resulta muy útil pues imponeun límite artificial en la capacidad <strong>de</strong> memoria y, por lo tanto, impi<strong>de</strong> notar la esencia <strong>de</strong> lo que es unacomputación.Antes <strong>de</strong> estudiar más formalmente los sistemas <strong>de</strong> estado finito, se presentará un ejemplo <strong>de</strong> ellos.Ejemplo 31 Un hombre, un lobo, una cabra y un repollo están en la orilla izquierda <strong>de</strong> un rio. Existe unbote con capacidad para transportar al hombre y sólo una <strong>de</strong> las otras tres cosas. El hombre quiere cruzara la otra orilla con todos y es capaz <strong>de</strong> acarrear a cualquiera <strong>de</strong> ellos en el bote. Sin embargo, si el hombre<strong>de</strong>ja al lobo y a la cabra juntos en una orilla, el lobo comerá a la cabra. Algo similar suce<strong>de</strong> si la cabra y elrepollo quedan en una orilla sin la presencia <strong>de</strong>l hombre. El problema es saber si es posible y cómo pue<strong>de</strong> elhombre pasar a todos a la otra orilla.El problema se mo<strong>de</strong>la observando que la información que interesa son los ocupantes en cada orilla,<strong>de</strong>spués <strong>de</strong> cada cruce <strong>de</strong>l hombre en bote. Hay 16 subconjuntos <strong>de</strong>l hombre (H), lobo (L), cabra (C) yrepollo (R). Un estado correspon<strong>de</strong> al subconjunto que está en la orilla izquierda (en la <strong>de</strong>recha está elcomplemento).Los nombres <strong>de</strong> los estados correspon<strong>de</strong>n entonces a pares como LR–HC, en que los símbolos a laizquierda <strong>de</strong>l guión forman el subconjunto que está en la orilla izquierda <strong>de</strong>l rio. Algunos <strong>de</strong> los estados,como CR–HL, son fatales y el sistema nunca <strong>de</strong>be llegar a ellos.


Chapter 3ACEPTACIÓN Y GENERACIÓNDE LENGUAJES REGULARESEn este capítulo se estudiarán los lenguajes regulares, sus dispositivos <strong>de</strong> aceptación y <strong>de</strong> generación.3.1 Autómatas Finitos DeterminísticosUn autómata finito (AF) consta <strong>de</strong> un conjunto finito <strong>de</strong> estados y un conjunto <strong>de</strong> transiciones <strong>de</strong> estado aestado, que ocurren en símbolos tomados <strong>de</strong> un alfabeto Σ. Por cada símbolo hay exactamente una transición<strong>de</strong>s<strong>de</strong> cada estado. Un estado, usualmente <strong>de</strong>nominado q 0 , es el estado inicial en el que el autómata comienza;algunos estados se <strong>de</strong>signan como estados finales o <strong>de</strong> aceptación.Un grafo dirigido, llamado diagrama <strong>de</strong> transición, es asociado con un AF como se indica a continuación.Los vértices <strong>de</strong>l grafo correspon<strong>de</strong>n a los estados <strong>de</strong>l AF. Si hay una transición <strong>de</strong>l estado q al estado p ensímbolo a, entonces hay un arco con etiqueta a, <strong>de</strong>s<strong>de</strong> el estado q al estado p en el diagrama <strong>de</strong> transición.El AF acepta un string x si y sólo si la secuencia <strong>de</strong> transiciones que correspon<strong>de</strong>n a los símbolos <strong>de</strong> x, llevan<strong>de</strong>s<strong>de</strong> el estado inicial a uno <strong>de</strong> los estados <strong>de</strong> aceptación.✛✘✎✓✏✲ q 0✲✎ ✚✙✒✑☞✻✍00✔✓✏❄q✲✗1✒✑✔✕1 1 0 1 1✗✔✖✛ ✓✏✕✖✛ ✓✏❄✕q 2 q 3✒✑✒✑✻✖ 0 ✕Figure 3.1: Autómata que acepta los strings binarios con número par <strong>de</strong> 0’s y número par <strong>de</strong> 1’sEjemplo 32 En la Figura 3.1 el estado inicial q 0 está indicado por la flecha. Hay sólo un estado final,también q 0 en este caso, indicado por el círculo doble. Este autómata acepta todos los strings binarios enque hay un número par <strong>de</strong> 0’s y un número par <strong>de</strong> 1’s.35✷


36 CHAPTER 3.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES REGULARESFormalmente, un autómata finito <strong>de</strong>terminístico es una quíntupla:(Q, Σ, δ, q 0 , F )en que Q es un conjunto finito <strong>de</strong> estados, Σ es un alfabeto <strong>de</strong> entrada, q 0 ∈ Q es el estado inicial, F ⊆ Q esel conjunto <strong>de</strong> estados finales y δ es la función <strong>de</strong> transición que va <strong>de</strong> Q × Σ a Q. Esto es, δ(q, a) ∈ Q paratodo q ∈ Q y a ∈ Σ.Como se aprecia en la Figura 3.2, un autómata finito se visualiza como un control finito, que está enalguno <strong>de</strong> los estados <strong>de</strong> Q, leyendo una secuencia <strong>de</strong> símbolos <strong>de</strong> Σ escritos sobre una cinta.1 0 0 1 1 1 0 0✻..ControlFinito.✓✏✒✑Figure 3.2: Representación <strong>de</strong> un autómata finitoEn una movida, el AF en estado q y viendo el símbolo a, entra al estado δ(q, a) y mueve su cabeza lectoraun símbolo hacia la <strong>de</strong>recha sobre la cinta. Si δ(q, a) es un estado <strong>de</strong> aceptación, el AF habría aceptado elprefijo <strong>de</strong>l string escrito en la cinta, a la izquierda <strong>de</strong>l símbolo sobre el cual recién llegó la cabeza lectora,sin incluirlo. Si la cabeza lectora se ha salido <strong>de</strong>l final <strong>de</strong> la cinta (por la <strong>de</strong>recha), entonces acepta elstring completo. Nótese que mientras se mueve sobre el string, el AF pue<strong>de</strong> aceptar (o no) muchos prefijosdiferentes.Para <strong>de</strong>scribir formalmente el comportamiento <strong>de</strong> un AF en un string, es necesario exten<strong>de</strong>r la función<strong>de</strong> transición δ, <strong>de</strong> forma tal que actúe sobre un string y un estado, en lugar <strong>de</strong> un estado y un símbolo. Es<strong>de</strong>cir, se quiere una función ˆδ : Q × Σ ∗ → Q. La intención es que ˆδ(q, w) sea el estado en que el AF estaríaleyendo w a partir <strong>de</strong>l estado q. Dicho <strong>de</strong> otra forma, ˆδ(q, w) es el estado p (único) tal que hay un camino<strong>de</strong> q a p en el diagrama <strong>de</strong> transición y en que las etiquetas <strong>de</strong> sus arcos forman w.Formalmente:• ˆδ(q, ε) = q• Para todo string w ∈ Σ ∗ y símbolo a ∈ Σ, δ(ˆδ(q, w), a)La primera parte <strong>de</strong> esta <strong>de</strong>finición asegura que el AF no pue<strong>de</strong> cambiar <strong>de</strong> estado sin leer símbolos. Lasegunda, indica cómo encontrar el estado en que quedará <strong>de</strong>spués <strong>de</strong> leer un string no vacío wa.Dado que ˆδ(q, a) = δ(ˆδ(q, ε), a) = δ(q, a), no hay diferencia entre δ y ˆδ para aquellos argumentos en queambas están <strong>de</strong>finidas. Por lo tanto, por conveniencia, se usará δ en lugar <strong>de</strong> ˆδ, siempre.En general, se tratará <strong>de</strong> usar los mismos símbolos para significar las mismas cosas a través <strong>de</strong> todo elmaterial para autómatas finitos. En particular se usarán los siguientes:• Q es un conjunto <strong>de</strong> estados. Los símbolos p y q, con o sin subíndice serán estados. El estado inicialserá q 0 .• Σ es un alfabeto <strong>de</strong> símbolos <strong>de</strong> entrada. Los símbolos a y b, con o sin subíndice, y los dígitos, seránsímbolos <strong>de</strong> entrada.• δ es la función <strong>de</strong> transición <strong>de</strong> un AF..


3.1.AUTÓMATAS FINITOS DETERMINÍSTICOS 37• F es el conjunto <strong>de</strong> estados finales <strong>de</strong> un AF.• w, x, y y z, con o sin subíndice, serán strings <strong>de</strong> símbolos <strong>de</strong> entrada.Se dice que un string x es aceptado por un autómata finito M = (Q, Σ, δ, q 0 , F ) si y sólo siδ(q 0 , x) ∈ FEl lenguaje aceptado por M, llamado L(M), es el conjunto{x/δ(q 0 , x) ∈ F }Un lenguaje es un conjunto regular o, simplemente, es regular si es el conjunto aceptado por algún AF.Debe notarse que al hablar <strong>de</strong>l conjunto aceptado por un autómata finito, se está refiriendo específicamenteal conjunto L(M) y no a cualquier conjunto <strong>de</strong> strings aceptados por M que, en general, será sólo unsubconjunto.Ejemplo 33 Consi<strong>de</strong>re el autómata finito <strong>de</strong>scrito por el diagrama <strong>de</strong> transición <strong>de</strong>l ejemplo anterior (véaseFigura 3.1). Su <strong>de</strong>scripción formal es M = (Q, Σ, δ, q 0 , F ), en queQ = {q 0 , q 1 , q 2 , q 3 }Σ = {0, 1}q 0 = q 0F = {q 0 }y δ es la función <strong>de</strong>scrita por la siguiente tabla <strong>de</strong> transición:Q \ Σ 0 1q 0 q 1 q 2q 1 q 0 q 3q 2 q 3 q 0q 3 q 2 q 1Suponga que el input a M es el string binario 110101, entoncesδ(q 0 , 11) = δ(δ(q 0 , 1), 1) = δ(q 2 , 1) = q 0es <strong>de</strong>cir, el prefijo 11 <strong>de</strong>l input pertenece a L(M), la ampolleta <strong>de</strong>l autómata se encien<strong>de</strong> al procesarlo; sinembargo interesa el string completo y así,δ(q 0 , 110) = δ(δ(q 0 , 11), 0) = δ(q 0 , 0) = q 1δ(q 0 , 1101) = δ(δ(q 0 , 110), 1) = δ(q 1 , 1) = q 3δ(q 0 , 11010) = δ(δ(q 0 , 1101), 0) = δ(q 3 , 0) = q 2δ(q 0 , 110101) = δ(δ(q 0 , 11010), 1) = δ(q 2 , 1) = q 0 ∈ Fes <strong>de</strong>cir, la secuencia <strong>de</strong> estados es:1 1 0 1 0 1q 0 q 2 q 0 q 1 q 3 q 2 q 0y el string 110101 ∈ L(M).Ejemplo 34 Un autómata finito que acepte todos los strings sobre Σ = {a, b}, que tengan un número par<strong>de</strong> b’s. (Ver Figura 3.3)Formalmente el autómata es M = (Q, Σ, δ, q 0 , F ), en que✷


38 CHAPTER 3.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES REGULARES✗ ✔✛✘a b✛✁✗✔ a✛✘✖✲ ✓✏✓✏❄✂✛ ✑P I✚✙✒✑ b ✒✑✻✖✕Figure 3.3: Autómata finito que acepta los strings con número par <strong>de</strong> b’sQ = {P, I}Σ = {a, b}q 0 = PF = {P }y la función δ:Q \ Σ a bP P II I PEl autómata pasa <strong>de</strong> P a I y <strong>de</strong> I a P al leer una b; los símbolos a son esencialmente ignorados alpermanecer en el mismo estado. Es <strong>de</strong>cir, M cuenta las b’s en módulo 2 y como P es el estado inicial y únicoestado final, M acepta los strings que tienen un número par <strong>de</strong> b’s.Ejemplo 35 Un autómata finito (ver Figura 3.4) que acepta el lenguajeL(M) = {w/w ∈ {a, b} ∗ y w no tiene tres b’s consecutivas }✗ ✔✗ ✔aa, b✲✤✜✝✗✔✆✤✜✗✔ ✤✜✗✔ ✲✝ ✗✔✆✲ b ✲ b ✲ b ✲0 1 2 3✣✢✖✕✣✢✖✕✣✢✖✕ ✖✕✻ ✚ a ✕✫a✪Figure 3.4: Autómata finito que acepta strings que no tienen tres b’s consecutivasformalmente, M = (Q, Σ, δ, q 0 , F ), en queQ = {0, 1, 2, 3}Σ = {a, b}q 0 = 0F = {0, 1, 2}y la función δ:Q \ Σ a b0 0 11 0 22 0 33 3 3✷


3.2. AUTÓMATAS FINITOS NO DETERMINÍSTICOS 39 ✷3.2 Autómatas Finitos No DeterminísticosEn esta sección se introduce el concepto <strong>de</strong> no-<strong>de</strong>terminismo en un autómata finito. Como se verá mása<strong>de</strong>lante, cualquier conjunto aceptado por un autómata finito no <strong>de</strong>terminístico es aceptado por un autómatafinito <strong>de</strong>terminístico. Sin embargo, la no-<strong>de</strong>terminación es un concepto útil para probar teoremas y simplificarla <strong>de</strong>scripción <strong>de</strong> los autómatas. Más aún, el concepto <strong>de</strong> in<strong>de</strong>terminación es central en la teoría <strong>de</strong> lenguajesy computación y es útil enten<strong>de</strong>rlo en un contexto simple como el <strong>de</strong> estos autómatas. Después se veránautómatas con versiones <strong>de</strong>terminísticas y no-<strong>de</strong>terminísticas que, se sabe, no son equivalentes o en que laequivalencia está todavía no resuelta.Consi<strong>de</strong>re una modificación <strong>de</strong>l mo<strong>de</strong>lo <strong>de</strong> autómatas finitos que permita cero, una o más transiciones<strong>de</strong>s<strong>de</strong> un estado en un mismo símbolo <strong>de</strong>l alfabeto. Este mo<strong>de</strong>lo es llamado un autómata finito no <strong>de</strong>terminístico(AFND). Un diagrama <strong>de</strong> transición para un AFND se muestra a continuación.✛ ✘✂✛✘★✥0✛✘1✛✌q✲1 q 2✛ ✘✚✙ ✚✙✞ ✛ ✏1✧✦1✍✛✘ ✛✁✟ ✟✟✟✟✟✟✟✟✯1✚ ✙✲ q 0✛ ✘✎✚✙✛☞ ✛✘ ★✥✛✘✂ 00✛✌✚ ✙0 q✲3 q 4✚✙ 0 ✞ ✛✏✧✦✚✙1✚ ✙Figure 3.5: Diagrama <strong>de</strong> transición para un AFNDEjemplo 36 Considérese el autómata <strong>de</strong> la Figura 3.5. En él hay dos arcos con etiqueta 0 que salen <strong>de</strong>s<strong>de</strong>q 0 , uno vuelve a q 0 y el otro va al estado q 3 .Un string <strong>de</strong> símbolos a 1 a 2 . . . a n es aceptada por un autómata finito no <strong>de</strong>terminístico si existe unasecuencia <strong>de</strong> transiciones, correspondientes al string, que lleve <strong>de</strong>s<strong>de</strong> el estado inicial a algún estado final.Por ejemplo, 01001 es aceptado por el AFND <strong>de</strong> la Figura 3.5, porque hay una secuencia <strong>de</strong> transiciones,a través <strong>de</strong> q 0 , q 0 , q 0 , q 3 , q 4 , q 4 , cuyas etiquetas son 01001, que van <strong>de</strong>l estado inicial q 0 al estado final q 4 .Nótese que, el que haya una secuencia (por ejemplo q 0 , q 0 , q 0 , q 0 , q 0 , q 1 ) que no conduce a un estado finalno importa; es <strong>de</strong>cir, el no <strong>de</strong>terminismo no molesta, basta que haya una secuencia para que el string seaaceptado. El AFND <strong>de</strong>l ejemplo acepta todos los strings binarios que tienen dos 1’s ó dos 0’s consecutivos.El autómata finito <strong>de</strong> la Sección 3.1, es un caso especial <strong>de</strong>l AFND, en que todos los estados tienen unatransición única en cada símbolo. Es <strong>de</strong>cir, en un AFD, por cada string w y estado q, hay exactamente uncamino con etiqueta w que comienza en q. Para saber si el AFD acepta w, es suficiente revisar ese camino.Para un AFND, en cambio, pue<strong>de</strong> haber muchos caminos posibles y todos <strong>de</strong>ben revisarse, en general, parasaber si al menos uno conduce a un estado final.✷


40 CHAPTER 3.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES REGULARESUn AFND también pue<strong>de</strong> ser visto como un control finito que lee una cinta. Sin embargo, en este caso, elcontrol finito pue<strong>de</strong> estar, a cada instante, en cualquiera <strong>de</strong> un grupo <strong>de</strong> estados. Cuando es posible escogerel próximo estado, se pue<strong>de</strong> imaginar que se producen copias <strong>de</strong>l autómata. Por cada próximo estado posible,hay una copia <strong>de</strong>l autómata cuyo control finito está en ese estado. La Figura 3.6 muestra este proceso parael AFND <strong>de</strong>l Ejemplo 36, cuando lee el string 01001.q ✲ q ✲ q ✲ q ✲ q ✲ q0 0 0 0 0 0❅ ❅ ❅ ❅ ❅❅❘ q ❅❘ q ❅❘ q ❅❘ q ❅❘ q3 1 3 3 1❅ ✛✘❅❘ q ✲ q4 4✚✙Figure 3.6: Secuencia <strong>de</strong> pasos al procesar el string 01001Formalmente, un autómata finito no <strong>de</strong>terminístico esuna quíntupla:(Q, Σ, δ, q 0 , F )en que Q, Σ, q 0 y F tienen el mismo significado que para el autómata finito <strong>de</strong>terminístico, pero δ es unafunción que va <strong>de</strong> Q × Σ a 2 Q , es <strong>de</strong>cir:δ : Q × Σ → 2 QLa i<strong>de</strong>a es que δ(q, a) es el conjunto <strong>de</strong> todos los estados a los que hay una transición <strong>de</strong>s<strong>de</strong> q con etiquetaa. Recuer<strong>de</strong> que 2 Q es el conjunto potencia <strong>de</strong> Q, el conjunto <strong>de</strong> todos los subconjuntos <strong>de</strong> Q.Ejemplo 37 La función <strong>de</strong> transición para el AFND <strong>de</strong> la Figura 3.5 está dada por:Q \ Σ 0 1q 0 {q 0 , q 3 } {q 0 , q 1 }q 1 ∅ {q 2 }q 2 {q 2 } {q 2 }q 3 {q 4 } ∅q 4 {q 4 } {q 4 }Nuevamente es posible exten<strong>de</strong>r la función <strong>de</strong> transición δ a la funciónˆδ : Q × Σ ∗ → 2 Qpara reflejar el comportamiento <strong>de</strong> un AFND en un string:• ˆδ(q, ε) = {q}• ˆδ(q, wa) = {p/ para algún estado r ∈ ˆδ(q, w), p ∈ δ(r, a)}La primera condición impi<strong>de</strong> cambios sin procesar símbolos. La segunda, indica que comenzando enestado q y leyendo el string w, seguido <strong>de</strong>l símbolo a, es posible estar en un estado p, si y sólo si r es uno <strong>de</strong>los estados en que se pue<strong>de</strong> estar luego <strong>de</strong> leer w, y <strong>de</strong>s<strong>de</strong> r es posible ir a p leyendo a.Nótese que ˆδ(q, a) = δ(q, a), para todo a ∈ Σ y q ∈ Q. Por lo tanto, nuevamente se usará δ en lugar <strong>de</strong> ˆδ.✷


3.2.AUTÓMATAS FINITOS NO DETERMINÍSTICOS 41También es útil exten<strong>de</strong>r δ a argumentos en 2 Q × Σ ∗ a través <strong>de</strong>δ(P, w) = ⋃δ(q, w)q∈P∀P ∈ Q, w ∈ Σ ∗ es <strong>de</strong>cir, es el conjunto <strong>de</strong> todos los estados a los que se pue<strong>de</strong> llegar, partiendo <strong>de</strong> algúnestado en P , al leer el string w.El lenguaje aceptado por un AFND, M = (Q, Σ, δ, q 0 , F ), es el conjunto:L(M) = {x/F ∩ δ(q 0 , x) ≠ ∅}Ejemplo 38 Para el AFND <strong>de</strong> la Figura 3.5 consi<strong>de</strong>re el string 01001.δ(q 0 , 0) = {q 0 , q 3 }δ(q 0 , 01) = δ(δ(q 0 , 0), 1) = δ({q 0 , q 3 }, 1)= δ(q 0 , 1) ∪ δ(q 3 , 1) = {q 0 , q 1 }similarmente,δ(q 0 , 010) = {q 0 , q 3 }δ(q 0 , 0100) = {q 0 , q 3 , q 4 }y, finalmente,δ(q 0 , 01001) = {q 0 , q 1 , q 4 }Nótese queF ∩ δ(q 0 , 01001) = {q 4 } ≠ ∅Ejemplo 39 Un autómata finito no <strong>de</strong>terminístico, M (ver Figura 3.7), que acepte el lenguaje:L(M) = {w/w ∈ {a, b} ∗ y w tiene tres b’s consecutivas }✷✗ ✔✗ ✔a, ba, b✓✏ ✓✏ ✓✏ ✛✘✲ ✂ ✛✆✂✓✏b ✛✆✲ b0 1 ✲ b2 ✲ 3✒✑ ✒✑ ✒✑ ✚✙✒✑Figure 3.7: Autómata finito que acepta strings con tres b’s consecutivasFormalmente, M = (Q, Σ, δ, q 0 , F ), en queQ = {0, 1, 2, 3}Σ = {a, b}q 0 = 0F = {3}


42 CHAPTER 3.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES REGULARESy la función <strong>de</strong> transición δ:Q \ Σ a b0 {0} {0, 1}1 ∅ {2}2 ∅ {3}3 {3} {3}Dos autómatas finitos M 1 y M 2 se dicen equivalentes si y sólo si ellos aceptan el mismo lenguaje, es <strong>de</strong>cir,si y sólo siL(M 1 ) = L(M 2 )no importa qué método usen para reconocer el lenguaje, son equivalentes si aceptan el mismo lenguaje.Ejemplo 40 El AFD <strong>de</strong> la Figura 3.8 es equivalente al AFND <strong>de</strong>l Ejemplo 39.✗ ✔✗ ✔aa, b✓✏ ✓✏ ✓✏✛✘✲ ✂ ✛✆✂✓✏b ✛✆✲ b ✲ b0 1 2 ✲ 3✒✑ ✒✑ ✒✑✻✚✚✙✒✑a✙a✫✪Figure 3.8: AFD que acepta strings con tres b’s consecutivas✷Como todo AFD es un AFND, es claro que la clase <strong>de</strong> lenguajes aceptados por los AFND incluye alos lenguajes regulares (aceptados por los AFD). Pero hay más, suce<strong>de</strong> que estos son los únicos lenguajesaceptados por los AFND. La prueba se basa en mostrar que los AFD pue<strong>de</strong>n simular a los AFND; ésto es,por cada AFND es posible construir un AFD equivalente.La forma <strong>de</strong> simular un AFND con un AFD es permitir que los estados <strong>de</strong>l AFD correspondan a conjuntos<strong>de</strong> estados <strong>de</strong>l AFND, <strong>de</strong> manera que el AFD pueda almacenar en su control finito todos aquellos estadosen que el AFND podría estar, habiendo leído el mismo prefijo <strong>de</strong>l input. La construcción formal se incluyeen la <strong>de</strong>mostración <strong>de</strong>l siguiente teorema:Teorema 1 Sea L un lenguaje aceptado por un autómata finito no <strong>de</strong>terminístico. Existe un autómata finito<strong>de</strong>terminístico que acepta L.Demostración : Sea M = (Q, Σ, δ, q 0 , F ) el AFND que acepta L. Defina un autómata finito <strong>de</strong>terminísticoM ′ = (Q ′ , Σ, δ ′ , q 0 ′ , F ′ ) como sigue: Los estados <strong>de</strong> M ′ son todos los subconjuntos <strong>de</strong>l conjunto <strong>de</strong> estados<strong>de</strong> M, es <strong>de</strong>cir, Q ′ = 2 Q . M ′ tendrá en sus estados la información <strong>de</strong> todos los estados en que M podríaestar. F ′ es el conjunto <strong>de</strong> todos los estados en Q ′ que contienen al menos un estado final <strong>de</strong> M. Un estadoen Q ′ se <strong>de</strong>notará por [q 1 , q 2 , . . . , q i ] en que {q 1 , q 2 , . . . , q i } ∈ Q. Nótese que [q 1 , q 2 , . . . , q i ] es un solo estado<strong>de</strong>l AFD M ′ , sólo que su nombre es compuesto. También se tiene que q 0 ′ = [q 0 ]. Y se <strong>de</strong>finesi y sólo siδ ′ ([q 1 , q 2 , . . . , q i ] , a) = [p 1 , p 2 , . . . , p j ]δ([q 1 , q 2 , . . . , q i ] , a) = {p 1 , p 2 , . . . , p j }.✷


3.2.AUTÓMATAS FINITOS NO DETERMINÍSTICOS 43Es <strong>de</strong>cir, δ ′ aplicado a un estado [q 1 , q 2 , . . . , q i ] <strong>de</strong> Q ′ , se calcula aplicando δ a cada estado <strong>de</strong> Q representadopor el estado [p 1 , p 2 , . . . , p j ] en Q ′ , el que es el valor <strong>de</strong> esta aplicación <strong>de</strong> la función.Es fácil mostrar, por inducción en la longitud <strong>de</strong>l string x, quesi y sólo siδ ′ (q 0 ′ , x) = [q 1 , q 2 , . . . , q i ]δ(q 0 , x) = {q 1 , q 2 , . . . , q i }Base (|x| = 0): Entonces x = ε y se tieneδ ′ (q 0 ′ , x) = δ ′ (q 0 ′ , ε) = q 0 ′ = [q 0 ]Inducción: Asuma que la hipótesis se cumple para strings <strong>de</strong> largo n y consi<strong>de</strong>re xa, un string <strong>de</strong> largon + 1, con |x| = n, x ∈ Σ ∗ y a ∈ Σ. Entonces:δ ′ (q 0 ′ , xa) = δ ′ (δ ′ (q 0 ′ , x), a)pero por la hipótesissi y sólo siδ ′ (q 0 ′ , x) = [p 1 , p 2 , . . . , p j ]δ(q 0 , x) = {p 1 , p 2 , . . . , p j }pero por la <strong>de</strong>finición <strong>de</strong> δ ′ ,si y sólo siδ ′ ([p 1 , p 2 , . . . , p j ] , a) = [r 1 , r 2 , . . . , r k ]δ([p 1 , p 2 , . . . , p j ] , a) = {r 1 , r 2 , . . . , r k }.Por lo tanto,si y sólo siδ ′ (q 0 ′ , xa) = [r 1 , r 2 , . . . , r k ]δ(q 0 , xa) = {r 1 , r 2 , . . . , r k }como se quería <strong>de</strong>mostrar. Sólo falta agregar que δ ′ (q 0 ′ , x) ∈ F ′ exactamente cuando δ(q 0 , x) contieneun estado <strong>de</strong> Q que está en F . Por lo tantoL(M) = L(M ′ )Ejemplo 41 Consi<strong>de</strong>re el AFND que reconoce los strings que tienen tres b’s consecutivas, visto en el ejemploanterior. Se construirá un AFD, a partir <strong>de</strong> él, usando el método implícito en el teorema 1. (Ver Figura 3.9)Es conveniente comenzar con [q 0 ] y agregar estados sólo a medida que aparecen como transiciones <strong>de</strong>s<strong>de</strong>otros ya incluidos, porque la mayoría <strong>de</strong> los estados (en general) no son accesibles <strong>de</strong>s<strong>de</strong> [q 0 ] y, por lo tanto,son inútiles.Nótese que el AFD anterior acepta el mismo lenguaje que el AFND <strong>de</strong>l cual se partió y también que otroAFD visto anteriormente para el mismo lenguaje. Todos ellos son equivalentes.✷✷


44 CHAPTER 3.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES REGULARES★✜✬ ✩ab✗ ✔ ✗ ✔ ✗ ✔ ✤✗✡✲ ✠✲✂ ✁✔✜b bb✲ [0] ✲[0,1] ✲ [0,1,2] ✲ [0,1,2,3]✖✻✻ ✡ ✕a✖✌ ✕ ✖ ✕ ✣✖✕✢ab✫✪✤✎ ✜✗ ✚✔✚✚✚✚❃ ✜ ✤✗❄ ❄ ✔✜b[0,1,3] ✛ [0,3] a✣✖✕✢✣✖✕✂✢✖ ✢ ✻✢aFigure 3.9: AFD que acepta strings con tres b’s consecutivas3.3 Autómatas Finitos con Transiciones en VacíoEn esta sección se exten<strong>de</strong>rá el mo<strong>de</strong>lo <strong>de</strong> los autómatas finitos no <strong>de</strong>terminísticos, para introducir una nuevaclase <strong>de</strong> in<strong>de</strong>terminación: se permitirá que el autómata tenga transiciones en el string vacío, es <strong>de</strong>cir, sinleer su input. Este mo<strong>de</strong>lo es llamado un Autómata Finito (no <strong>de</strong>terminístico) con transiciones en vacío(AFND-ε). El siguiente es un diagrama <strong>de</strong> transición para un AFND-ε que acepta el lenguaje consistenteen los strings con cualquier número (cero incluido) <strong>de</strong> 0’s, seguidos <strong>de</strong> cualquier número <strong>de</strong> 1’s, seguidos <strong>de</strong>cualquier número <strong>de</strong> 2’s.✛ ✘ ✛ ✘ ✛ ✘0 1✓✏ ✓✏✡✲ ✠ ✡✲ ✠✲✂✛✘2✓✏✁✲q ε ✲ ε0 q1 ✲ q2✒✑ ✒✑ ✚✙✒✑Figure 3.10: AFND-ε que acepta strings <strong>de</strong> la forma 0...01...12...2Como siempre, un AFND-ε acepta un string w, si y sólo si hay un camino con etiqueta w <strong>de</strong>s<strong>de</strong> el estadoinicial a alguno <strong>de</strong> los estados finales. Por supuesto que los arcos con etiqueta ε pue<strong>de</strong>n aparecer en esecamino, aún cuando las ε no se ven en el string w.Ejemplo 42 En el AFND-ε representado por el diagrama <strong>de</strong> transición <strong>de</strong> la Figura 3.10, hay un caminocon etiqueta 002, que va <strong>de</strong> q 0 a q 2 :q 0 q 0 q 0 q 1 q 2 q 2los arcos tienen etiquetas 0, 0, ε, ε, 2, respectivamente.autómata.Por lo tanto, el string 002 es aceptado por ese✷Formalmente, un autómata finito no <strong>de</strong>terminístico con transiciones en vacío es una quíntupla:(Q, Σ, δ, q 0 , F )con Q, Σ, q 0 y F como en el caso <strong>de</strong> los AFND y la función <strong>de</strong> transición δ va <strong>de</strong> Q × (Σ ∪ {ε}) a 2 Q , es <strong>de</strong>cir,δ : Q × (Σ ∪ {ε}) → 2 QLa i<strong>de</strong>a es que δ(q, a) contiene a todos los estados a los cuales hay una transición con etiqueta a <strong>de</strong>s<strong>de</strong> q, yasea que a es un símbolo <strong>de</strong>l alfabeto o ε.


3.3.AUTÓMATAS FINITOS CON TRANSICIONES EN VACÍO 45Ejemplo 43 La función <strong>de</strong> transición para el AFND-ε anterior está dada porQ \ Σ∪{ε} 0 1 2 εq 0 {q 0 } ∅ ∅ {q 1 }q 1 ∅ {q 1 } ∅ {q 2 }q 2 ∅ ∅ {q 2 } ∅Nuevamente es conveniente exten<strong>de</strong>r la función <strong>de</strong> transición a una nueva funciónˆδ : Q × Σ ∗ → 2 Q✷<strong>de</strong> tal forma que ˆδ(q, w) contenga todos los estados a los que se pue<strong>de</strong> llegar <strong>de</strong>s<strong>de</strong> q por caminos con etiquetaw; sin <strong>de</strong>scartar la posible inclusión entre éstos <strong>de</strong> arcos con etiqueta ε.Para <strong>de</strong>finir ˆδ, es importante calcular el conjunto <strong>de</strong> todos los estados alcanzables <strong>de</strong>s<strong>de</strong> algún estado q,sin consumir input, sólo por transiciones en vacío. Esto es equivalente a encontrar el conjunto <strong>de</strong> vérticesalcanzables <strong>de</strong>s<strong>de</strong> un vértice dado en un grafo dirigido; el vértice es el estado q y el grafo dirigido es eldiagrama <strong>de</strong> transición con todos y sólo los arcos que tienen etiqueta ε, hacia ellos <strong>de</strong>s<strong>de</strong> q se le <strong>de</strong>notarápor clausura-ε(q), la clausura vacía <strong>de</strong> q.Ejemplo 44 En el AFND-ε anterior, se tiene:clausura − ε(q 0 ) = {q 0 , q 1 , q 2 }clausura − ε(q 1 ) = {q 1 , q 2 }clausura − ε(q 2 ) = {q 2 }Es natural exten<strong>de</strong>r la clausura vacía a un conjunto <strong>de</strong> estados como sigue:clausura − ε(P ) = ⋃clausura − ε(q) ∀P ⊆ Qq∈P✷Ahora es posible <strong>de</strong>finir la función <strong>de</strong> transición extendida a strings, ˆδ:• ˆδ(q, ε) = clausura − ε(q)• Para todo w ∈ Σ ∗ , a ∈ Σ y q ∈ Qen que:ˆδ(q, wa) = clausura − ε(P ),P = {p/∃r ∈ ˆδ(q, w) y p ∈ δ(r, a)}Nuevamente es conveniente exten<strong>de</strong>r δ y ˆδ a conjuntos <strong>de</strong> estados, a través <strong>de</strong>:• δ(P, a) = ⋃ q∈Pδ(q, a) ∀P ⊆ Q y a ∈ Σ ∪ {ε}• ˆδ(P, w) = ⋃ ˆδ(q, q∈Pw) ∀P ⊆ Q y w ∈ Σ ∗Nótese que a diferencia <strong>de</strong> los casos anteriores, ˆδ(q, a) no es necesariamente igual a δ(q, a), ya que elprimero incluye los estados alcanzables <strong>de</strong>s<strong>de</strong> q por caminos con etiqueta a (incluyendo posiblemente arcoscon etiqueta ε), mientras que el segundo incluye sólo aquellos estados alcanzables <strong>de</strong>s<strong>de</strong> q por un arco conetiqueta a. Similarmente, ˆδ(q, ε) es distinto <strong>de</strong> δ(q, ε). Por lo tanto, si se está hablando <strong>de</strong> un AFND- ε esnecesario distinguir entre δ y ˆδ.El lenguaje aceptado por un AFND-ε, M = (Q, Σ, δ, q 0 , F ) es el conjuntoL(M) = {x/F ∩ ˆδ(q 0 , x) ≠ ∅}


46 CHAPTER 3.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES REGULARESEjemplo 45 Para el AFND-ε anterior consi<strong>de</strong>re el string 01.ˆδ(q 0 , ε) = clausura − ε(q 0 ) = {q 0 , q 1 , q 2 }ˆδ(q 0 , 0) = clausura − ε(δ(ˆδ(q 0 , ε), 0))= clausura − ε(δ({q 0 , q 1 , q 2 }, 0))= clausura − ε(δ({q 0 }, 0) ∪ δ({q 1 }, 0) ∪ δ({q 2 }, 0))= clausura − ε({q 0 } ∪ ∅ ∪ ∅)= clausura − ε({q 0 })= clausura − ε(q 0 )= {q 0 , q 1 , q 2 }luego,ˆδ(q 0 , 01) = clausura − ε(δ(ˆδ(q 0 , 0), 1))= clausura − ε(δ({q 0 , q 1 , q 2 }, 1))= clausura − ε(q 1 )= {q 1 , q 2 }es <strong>de</strong>cir, el AFND-ε acepta el string 01 ya queˆδ(q 0 , 01) ∩ F = {q 1 , q 2 } ∩ {q 2 } = {q 2 } ≠ ∅Como todo AFND es un AFND-ε, es claro que la clase <strong>de</strong> lenguajes aceptados por los AFND-ε incluyea los lenguajes aceptados por los AFND, los lenguajes regulares. Pero hay más, suce<strong>de</strong> que éstos son losúnicos lenguajes aceptados por los AFND-ε. La prueba se basa en mostrar que los AFND pue<strong>de</strong>n simularlos AFND-ε; esto es: por cada AFND-ε , es posible construir un AFND equivalente.Teorema 2 Sea L un lenguaje aceptado por un autómata finito no <strong>de</strong>terminístico con transiciones en vacío.Existe un autómata finito no <strong>de</strong>terminístico que acepta L.Demostración : Sea M = (Q, Σ, δ, q 0 , F ) el AFND-ε que acepta L. Se <strong>de</strong>fine un autómata finito no <strong>de</strong>terminísticoM ′ = (Q, Σ, δ ′ , q 0 , F ′ ) en que:{ F ∪F ′ {q0 } ssi clausura − ε(q=0 ) contiene un estado <strong>de</strong> F (ε ∈ L)F en otro casoy δ ′ (q, a) es ˆδ para todo q ∈ Q y a ∈ Σ.Nótese que M ′ no tiene transiciones en vacío y se pue<strong>de</strong> entonces usar δ ′ en lugar <strong>de</strong> ˆδ ′ .Se quiere probar, por inducción en |x|, que δ ′ (q 0 , x) = ˆδ(q 0 , ε) = clausura − ε(q 0 ). Sin embargo, estopue<strong>de</strong> no ser cierto para x = ε, ya que δ ′ (q 0 , ε) = {q 0 }, mientras que δ(q 0 , ε) = clausura − ε(q 0 ). Por lotanto la inducción empieza con |x| = 1.Base (|x| = 1): Entonces x es un símbolo a ∈ Σ y por la <strong>de</strong>finición <strong>de</strong> δ ′ ,δ ′ (q 0 , a) = ˆδ(q 0 , a)Inducción: Sea x = wa para un símbolo a ∈ Σ, entonces (con |w| ≥ 1).δ ′ (q 0 , wa) = δ ′ (δ ′ (q 0 , w), a)pero, por la hipótesis <strong>de</strong> inducciónδ ′ (q 0 , w) = ˆδ(q 0 , w)✷


3.4. TEOREMA DE MYHILL-NERODE. 47basta mostrar entonces queperoδ ′ (ˆδ(q 0 , w), a) = ˆδ(q 0 , wa)δ ′ (ˆδ(q 0 , w), a) = ⋃ q∈ˆδ(q 0,w) δ′ (q, a) = ⋃ q∈ˆδ(q 0,w) ˆδ(q, a)= ˆδ(ˆδ(q 0 , w), a)= ˆδ(q 0 , wa)como se quería. Para completar la prueba, se mostrará que δ ′ (q 0 , x) contiene un estado <strong>de</strong> F ′ si ysólo si ˆδ(q 0 , x) contiene un estado <strong>de</strong> F . Si x = ε ésto es cierto por la <strong>de</strong>finición <strong>de</strong> F ′ ; es <strong>de</strong>cir,δ ′ (q 0 , ε) = {q 0 } y q 0 ∈ F ′ cuando ˆδ(q 0 , ε) ∈ F . Si x ≠ ε entonces x = wa para algún a ∈ Σ. Si ˆδ(q 0 , x)contiene un estado <strong>de</strong> F , con toda seguridad δ ′ (q 0 , x) contiene el mismo estado en F ′ . Si δ ′ (q 0 , x)contiene un estado en F ′ que no sea q 0 , ˆδ(q 0 , x) lo contiene en F . Si δ ′ (q 0 , x) contiene a q 0 y q 0 ∉ F ,entonces como ˆδ(q 0 , x) es igual a la clausura − ε(δ(ˆδ(q 0 , w), a)), los estados en clausura − ε(q 0 ) y enF <strong>de</strong>ben estar en ˆδ(q 0 , x).Ejemplo 46 Consi<strong>de</strong>re el AFND-ε cuyo diagrama <strong>de</strong> transición se muestra en la Figura 3.10. Se construiráun AFND usando el método implícito en la <strong>de</strong>mostración <strong>de</strong>l teorema anterior, a partir <strong>de</strong> él.clausura − ε(q 0 ) = {q 0 , q 1 , q 2 }incluye a q 2 ∈ F , por lo tantoF ′ = F ∪ {q 0 } = {q 0 , q 2 }ˆδ(q, a) = δ ′ (q, a)Q \ Σ 0 1 2q 0 {q 0 , q 1 , q 2 } {q 1 , q 2 } {q 2 }q 1 ∅ {q 1 , q 2 } {q 2 }q 2 ∅ ∅ {q 2 }y el diagrama <strong>de</strong>l AFND resultante queda:✛ ✘ ✛ ✘ ✛ ✘✲✂✛✘0 1 2✓✏✁✓✏✡✲ ✠✲✂✛✘✓✏✁✲ q 0,1 ✲ 1,20 q 1✲ q 2✚✙✒✑ ✒✑ ✚✙✒✑✻✫ 0,1,2✪Figure 3.11: AFND obtenido, equivalente al AFND-ε✷3.4 Teorema <strong>de</strong> Myhill-Nero<strong>de</strong>.Con cualquier lenguaje L es posible asociar una relación <strong>de</strong> equivalencia R L <strong>de</strong>finida porXR L Y si y sólo si (XZ ∈ L ssi Y Z ∈ L) ∀Z ∈ Σ ∗En el peor caso, cada string está en una clase <strong>de</strong> equivalencia por sí solo, pero es posible que haya menosclases <strong>de</strong> equivalencia. En particular, el índice (número <strong>de</strong> clases <strong>de</strong> equivalencia) es siempre finito si L esun lenguaje regular.✷


48 CHAPTER 3.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES REGULARESEjemplo 47 Consi<strong>de</strong>re el conjunto L compuesto por strings <strong>de</strong> paréntesis correctamente balanceados, entonces) RL )(̸() R L ()(())( R L ()̸Ejemplo 48 Sea L el conjunto <strong>de</strong> strings binarios que tienen un número par <strong>de</strong> ceros y un número par <strong>de</strong>unos, entonces00 R L 010110 R L 10110 R L 11Existe también una relación <strong>de</strong> equivalencia natural asociada con un AFD. Sea M = (Q, Σ, δ, q 0 , F ) unAFD. La relación R M , se <strong>de</strong>fine porxR M y si y sólo si δ(q 0 , x) = δ(q 0 , y)Esta relación divi<strong>de</strong> al conjunto Σ ∗ en clases <strong>de</strong> equivalencia, una por cada estado que es alcanzable <strong>de</strong>s<strong>de</strong>q 0 . A<strong>de</strong>más se cumple quexR M y ⇒ xzR M yz∀z ∈ Σ ∗ya que δ(q 0 , xz) = δ(δ(q 0 , x), z) = δ(δ(q 0 , y), z) = δ(q 0 , yz).Ejemplo 49 Sea L el conjunto <strong>de</strong> strings binarios que tienen un número par <strong>de</strong> ceros y un número par <strong>de</strong>unos, que es aceptado por✷✷✛✘✎✓✏✲ PP✲✎ ✚✙✒✑☞✻✍1 1✗✖✛ ✓✏✕PI✒✑✻✖0000✔✓✏❄✲✗ IP✒✑✔✕1 1✔✖✛ ✓✏❄✕II✒✑✕Figure 3.12: AFD que acepta strings binarios con número par <strong>de</strong> ceros y unosLas clases <strong>de</strong> equivalencia para R M sonP P = {x/δ(q 0 , x)} = P PIP = {x/δ(q 0 , x)} = IPII = {x/δ(q 0 , x)} = IIP I = {x/δ(q 0 , x)} = P IUna relación <strong>de</strong> equivalencia R, tal que se cumplexRy ⇒ xzRyz∀zes llamada invariante por la <strong>de</strong>recha (con respecto a la concatenación). Así, todo autómata finito induceuna equivalencia invariante por la <strong>de</strong>recha, la relación R M <strong>de</strong>finida anteriormente, en el conjunto <strong>de</strong> susstrings <strong>de</strong> entrada.✷


3.4. TEOREMA DE MYHILL-NERODE. 49Teorema 3 Las siguientes tres aserciones son equivalentes:1. El conjunto L ⊆ Σ ∗ es aceptado por un AF.2. L es la unión <strong>de</strong> algunas <strong>de</strong> las clases <strong>de</strong> equivalencia <strong>de</strong> una relación <strong>de</strong> equivalencia invariante porla <strong>de</strong>recha, <strong>de</strong> índice finito.3. Sea R L una relación <strong>de</strong> equivalencia <strong>de</strong>finida por xR L y ssi para todo z ∈ Σ ∗ , xz ∈ L precisamentecuando yz ∈ L. Entonces R L tiene índice finito.Demostración :Se probará que 1 ⇒ 2, 2 ⇒ 3 y 3 ⇒ 1, <strong>de</strong>mostrando la equivalencia <strong>de</strong> las tres aserciones.(1 ⇒ 2) Asuma que L es aceptado por un AFD, M = (Q, Σ, δ, q 0 , F ). Sea R M la relación <strong>de</strong> equivalenciaxR M y si y sólo si δ(q 0 , x) = δ(q 0 , y). R M es invariante por la <strong>de</strong>recha ya que para todo z, si δ(q 0 , x) =δ(q 0 , y) entonces δ(q 0 , xz) = δ(q 0 , yz). El índice <strong>de</strong> R M es finito ya que es, a lo sumo, el número <strong>de</strong>estados en Q. A<strong>de</strong>más L es la unión <strong>de</strong> aquellas clases <strong>de</strong> equivalencia tales que incluyen un string wcon δ(q 0 , w) ∈ F , esto es, las clases que correspon<strong>de</strong>n a estados finales.(2 ⇒ 3) Se muestra que cualquier relación <strong>de</strong> equivalencia E, que satisface 2 es un refinamiento <strong>de</strong> R L ; es <strong>de</strong>cir,cada clase <strong>de</strong> equivalencia <strong>de</strong> E está enteramente contenida en alguna <strong>de</strong> las clases <strong>de</strong> equivalencias<strong>de</strong> R L . Por lo tanto el índice <strong>de</strong> R L no pue<strong>de</strong> ser mayor que el <strong>de</strong> E y, por lo tanto, es finito.Asuma que xEy; entonces, ya que E es invariante por la <strong>de</strong>recha, para cada z ∈ Σ ∗ , xzEyz y, porlo tanto, yz ∈ L si y sólo si xz ∈ L. Por lo tanto, xR L y y entonces la clase <strong>de</strong> equivalencia quecontiene a x en E, está contenida en la clase <strong>de</strong> equivalencia <strong>de</strong> x en R L . Se concluye que cada clase<strong>de</strong> equivalencia <strong>de</strong> E está contenida completamente por una <strong>de</strong> las clases <strong>de</strong> equivalencia <strong>de</strong> R L .(3 ⇒ 1) Primero se mostrará que R L es invariante por la <strong>de</strong>recha. Suponga que xR L y y sea w un string enΣ ∗ . Se <strong>de</strong>be probar que xwR L yw; esto es, para todo z ∈ Σ ∗ , xwz ∈ L precisamente cuando ywz ∈ L.Pero ya que xR L y, se sabe por la <strong>de</strong>finición <strong>de</strong> R L que para todo v, xv ∈ L, precisamente cuandoyv ∈ R L . En particular, sea v = wz para probar que R L es invariante por la <strong>de</strong>recha.Sea Q ′ el conjunto finito <strong>de</strong> clases <strong>de</strong> equivalencia <strong>de</strong> R L y sea [x] el elemento <strong>de</strong> Q ′ que contiene alstring x. Defina δ ′ ([x] , a) = [xa]. La <strong>de</strong>finición es consistente ya que R L es invariante por la <strong>de</strong>recha. Sise hubiese elegido y en lugar <strong>de</strong> x <strong>de</strong> la clase [x], se obtendría δ ′ ([x] , a) = [ya]. Pero xR L y, por lo tantoxz ∈ L precisamente cuando yz ∈ L. En particular, si z = az ′ , xaz ′ ∈ L precisamente cuando yaz ′ ∈ L,es <strong>de</strong>cir, xaR L ya y [xa] = [ya]. Sea q ′ 0 = [ε] y sea F ′ = {[x] /x ∈ L}. El AF M ′ = (Q ′ , Σ, δ ′ , q ′ 0, F ′ )acepta L ya que δ ′ (q ′ 0 , x) = [x] y por lo tanto x ∈ L(M ′ ) si y sólo si [x] está en F ′ .Ejemplo 50 Sea L el lenguaje 0 ∗ 10 ∗ . L es aceptado por el siguiente AFD, M.Consi<strong>de</strong>re la relación R M <strong>de</strong>finida por M. Como todos los estados son alcanzables <strong>de</strong>s<strong>de</strong> el estado inicial,R M tiene seis clases <strong>de</strong> equivalencia:C a = (00) ∗ C d = (00) ∗ 01C b = (00) ∗ 0 C e = 0 ∗ 100 ∗C c = (00) ∗ 1 C f = 0 ∗ 10 ∗ 1(0 + 1) ∗El lenguaje L es la unión <strong>de</strong> C c , C d y C e .La relación R L para el lenguaje L tiene tres clases <strong>de</strong> equivalencia; xR L y si y sólo si• x e y no tienen 1’s, ambos.• x e y tienen un solo 1, cada uno.• x e y tienen más <strong>de</strong> un 1, ambos.✷


3.5.MINIMIZACIÓN DE AUTÓMATAS FINITOS. 51✬✩C1Cc✡C❍ b✡❍ C❍ ✡ dC ✚a ✚ ❅❅❅❅❅✚ C✚e✚✚ Cf✫C2✪C3Figure 3.14: Relación entre clases <strong>de</strong> equivalencia R M y R L✛ ✘✛ ✘✛ ✘00 0, 1★✥ ✬✩✡✲ ✠✡✲ ✠★✥ ★✥✡✲ ✠1 1✲ [ε] ✲ [1]✲ [11]✧✦ ✫✪✧✦ ✧✦Figure 3.15: AFD con mínimo número <strong>de</strong> estados, para el lenguaje 0 ∗ 10 ∗el estado δ ′ (q ′ 0 , x) <strong>de</strong> M ′ . Esta i<strong>de</strong>ntificación será consistente, pues, por la prueba <strong>de</strong>l teorema anterior, siδ(q 0 , x) = δ(q 0 , y) = q, x e y están en la misma clase <strong>de</strong> equivalencia <strong>de</strong> R L y, por lo tanto, δ ′ (q ′ 0 , x) = δ′ (q ′ 0 , y).Hay un método simple para encontrar el AFD, M ′ , con el mínimo número <strong>de</strong> estados y equivalente a unAFD M = (Q, Σ, δ, q 0 , F ) dado. Sea ≡ la relación <strong>de</strong> equivalencia en los estados <strong>de</strong> M tal que p ≡ q si ysólo si para todo string x ∈ Σ ∗ , δ(p, x) ∈ F si y sólo si δ(q, x) ∈ F . Obviamente, hay un isomorfismo entrelas clases <strong>de</strong> equivalencia <strong>de</strong> ≡ que contienen un estado alcanzable <strong>de</strong>s<strong>de</strong> q 0 para algún string y los estados<strong>de</strong> M ′ . Si p ≡ q se dice que p es equivalente a q; se dice que p es distinguible <strong>de</strong> q si existe un string x talque δ(p, x) ∈ F y δ(q, x) ∉ F o viceversa.Ejemplo 51 Sea M el AFD siguiente:A continuación se muestra una tabla con una entrada por cada par <strong>de</strong> estados distintos. Se pone una ×en la tabla cuando se <strong>de</strong>scubre que un par <strong>de</strong> estados son distinguibles.Inicialmente se pone una × en todas las entradas <strong>de</strong> la tabla que correspon<strong>de</strong>n a un estado final y a unono final. En este caso se pone una × en (a, c), (b, c), (c, d), (c, e), (c, f), (c, g) y (c, h).A continuación, para cada par <strong>de</strong> estados p y q, que aún no se sabe si son distinguibles, se consi<strong>de</strong>ran lospares <strong>de</strong> estados r = δ(p, a) y s = δ(q, a), para cada símbolo a. Si r y s son distinguibles por algún stringx, entonces p y q son distinguibles por ax. Por lo tanto, si en la entrada (r, s) hay una ×, se pone una ×en (p, q). Si la entrada (r, s) no tiene una × aún, el par (p, q) se pone en una lista asociada a (r, s). En elfuturo, si (r, s) recibe una ×, cada par en su lista asociada también la recibe.✷


52 CHAPTER 3.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES REGULARES✬✩✎ 1 ☞0✛✘ ❄✛✘ ★✥✲✝ ✛✘ ✆✛✘0✲ a ✲ b1 ✲ ✛ 0c d✚✙ ✚✙ ✚✙ ✚✙❅ ❅ ✧✦ ❅■ 1 ❅❅❅❅❅❅❘ 1 0 ❅❅❅❅❅❅❘ ❅ ❅✎0☞ ❅0 ❅✛✘ ✛✘ ✲✝ ✛✘ ✆ ✒✠ 1❅✛✘11e ✲ f ✲ g ✛ 0h✚✙ ✚✙ ✚✙ ✚✙✻✻✫ 1✪✫0✪(a, b) : (δ(a, 1), δ(b, 1)) = (f, c) ⇒ (a, b) recibe ×(a, d) : (δ(a, 0), δ(d, 0)) = (b, c) ⇒ (a, d) recibe ×(a, e) : (δ(a, 0), δ(e, 0)) = (b, h) ⇒ (a, e) se pone en lista (b, h)(a, e) : (δ(a, 1), δ(e, 1)) = (f, f) ⇒ No ayuda(a, f) : (δ(a, 0), δ(f, 0)) = (b, c) ⇒ (a, f) recibe ×(a, g) : (δ(a, 0), δ(g, 0)) = (a, g) ⇒ (a, g) se pone en lista (b, g)(b, g) : (δ(b, 1), δ(g, 1)) = (c, e) ⇒ (b, g) y (a, g) reciben ×y así sucesivamente, se obtiene la tabla que aparece en la Figura 3.16.siguientes pares <strong>de</strong> estados son equivalentesDe ella, se concluye que losa ≡ e; b ≡ h; d ≡ fEl autómata finito con el mínimo número <strong>de</strong> estados se presenta en la Figura 3.17✷El algoritmo para marcar los pares <strong>de</strong> estados que son distinguibles es el siguiente:begin(1) FOR p en F y q en Q − F DO mark (p, q);(2) FOR cada par <strong>de</strong> estados distintos (p, q) en F × F o (Q − F ) × (Q − F ) DO(3) IF para algun a ∈ Σ (δ(p, a), δ(q, a)) esta marcado THEN BEGIN(4) mark (p, q)(5) Marque recursivamente todos los pares no marcados <strong>de</strong> la lista (p, q)y <strong>de</strong> las listas <strong>de</strong> elementos marcadosEND ELSE (* ningun (δ(p, a), δ(q, a)) esta marcado(6) FOR todo a ∈ Σ DO(7) Ponga (p, q) en la lista <strong>de</strong> (δ(p, a), δ(q, a)) a menos que δ(p, a) = δ(q, a)endLema 1 Sea M = (Q, Σ, δ, q 0 , F ) un AFD. Entonces p es distinguible <strong>de</strong> q si y sólo si la entrada (p, q) estámarcada <strong>de</strong>spués <strong>de</strong> aplicar el algoritmo anterior.Demostración : Asuma que p es distinguible <strong>de</strong> q y sea x el string más corto que los distingue. Se prueba,por inducción en la longitud <strong>de</strong> x que la entrada (p, q) es marcada por el algoritmo. Si x = ε, entonces


3.5.MINIMIZACIÓN DE AUTÓMATAS FINITOS. 53b❅❅c❅ ❅❅ ❅ d❅ ❅❅ ❅❅❅e❅❅❅❅❅❅f❅ ❅❅❅❅❅❅❅g❅❅❅ ❅❅❅❅ ❅❅ ❅❅❅h❅ ❅❅❅❅❅❅❅❅❅❅❅a b c d e f gFigure 3.16: Tabla auxiliar en la construcción <strong>de</strong>l AFD con mínimo número <strong>de</strong> estadosexactamente uno <strong>de</strong> p y q es final y es marcado en la línea (1). Suponga que la hipótesis es verda<strong>de</strong>ra para|x| < i con i ≥ 1 y sea |x| = i. Entonces x = ay y sean t = δ(p, a) y u = δ(q, a). Ahora y distingue t <strong>de</strong> uy |y| = i − 1, por inducción, el par (t, u) será marcado eventualmente. Si esto ocurre <strong>de</strong>spués que (p, q) hasido consi<strong>de</strong>rado, entonces ya sea (p, q) está marcado al consi<strong>de</strong>rar (t, u) o bien (p, q) está en la lista <strong>de</strong> (t, u)y es marcado en la línea (5). Si (p, q) se consi<strong>de</strong>ra <strong>de</strong>spués que (t, u), (p, q) es marcado al ser consi<strong>de</strong>rado.En cualquiera <strong>de</strong> los dos casos (p, q) es marcado. Una inducción similar en el número <strong>de</strong> pares marcadosmuestra que si (p, q) es marcado, p y q son distinguibles.El algoritmo mostrado es más eficiente que el algoritmo más obvio; empero, no es el más eficiente posible.Si Σ tiene k símbolos y Q tiene N estados, línea (1) toma ϑ(N 2 ) pasos. El loop <strong>de</strong> líneas (2) a (7) se ejecutaϑ(N 2 ) veces, a lo más una vez por cada par <strong>de</strong> estados. El tiempo en líneas (2) a (4), (6) y (7) es ϑ(kN 2 ).El tiempo en línea (5) es la suma <strong>de</strong> los largos <strong>de</strong> las listas. Pero cada par (r, s) se pone en, a lo más, k listasen línea (7). Por lo tanto, el tiempo ocupado en línea (5) es ϑ(kN 2 ). Es <strong>de</strong>cir, el tiempo total es ϑ(kN 2 ).Teorema 5 El AFD construido por el algoritmo anterior, con estados inaccesibles removidos, es el AFDcon mínimo número <strong>de</strong> estados para ese lenguaje.Demostración : Sean M = (Q, Σ, δ, q 0 , F ) el AFD al que se le aplica el algoritmo y M ′ = (Q ′ , Σ, δ ′ , [q 0 ] , F ′ )el AFD construido. Esto es,Q ′ = {[q] /q es accesible q 0 }F ′ = {[q] /q ∈ F }δ ′ ([q] , a) = [δ(q, a)]✷


54 CHAPTER 3.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES REGULARES✬ 0☞✬✩★✥✞ ✏ ❄[ c ]✝ ✑★✥1✘✿✫✪✧✦✘ ✘✘ ✘✘✘ 1✻[b, h]★✥ ❄ 0 ✘✿✧✦✘ ✘✘ ✘✘✘ ✲ [a, e] 0 00✧✦ ✐ 1 ★✥✲❄✍[ g ]✧✦✐ 1 ★✥[d, f]1✧✦✫✕ ✻Figure 3.17: AFD buscado, con mínimo número <strong>de</strong> estadosEs fácil ver que δ ′ está <strong>de</strong>finida en forma consistente, ya que si q ≡ p, entonces δ(q, a) ≡ δ(p, a). Esto es,si δ(q, a) se distingue <strong>de</strong> δ(p, a) por el string x, entonces ax distingue q <strong>de</strong> p. Es también fácil mostrar queδ ′ ([q 0 ] , w) = [δ(q 0 , w)] por inducción en |w|. Por lo tanto L(M) = L(M ′ ).Se <strong>de</strong>be ahora mostrar que M ′ no tiene más estados que el índice <strong>de</strong> R L , en que L = L(M). Supóngaseque tuviera más estados, entonces habría dos estados accesibles, q y p ∈ Q, tales que [q] ≠ [p]; pero tambiénhay x e y tales que δ(q 0 , x) = q y δ(q 0 , y) = p, con xR L y. Entonces <strong>de</strong>be ser p ≡ q porque si no, algúnw ∈ Σ ∗ distingue p <strong>de</strong> q. Pero entonces xwR L yw es falso pues si z = ε exactamente uno <strong>de</strong> xwz y ywzpertenece a L. Pero R L es invariante por la <strong>de</strong>recha, así que xwR L yw es verda<strong>de</strong>ro. Por lo tanto, q y p noexisten y M ′ no tiene más estados que el índice <strong>de</strong> R L . Es <strong>de</strong>cir, M ′ es el AFD mínimo para L.✷3.6 Traductores <strong>de</strong> Estado FinitoUna restricción <strong>de</strong> los autómatas finitos, tal como han sido <strong>de</strong>finidos en este capítulo, es que su salida <strong>de</strong>información está limitada a una señal binaria: acepta / no acepta. En esta sección se consi<strong>de</strong>rará mo<strong>de</strong>losen que la salida se escoge <strong>de</strong> algún otro alfabeto. Hay dos enfoques diferentes; la salida está asociada con elestado (llamado una Máquina <strong>de</strong> Moore) o con las transiciones (llamado una Máquina <strong>de</strong> Mealy).Una Máquina <strong>de</strong> Moore es una séxtupla (Q, Σ, ∆, δ, λ, q 0 ), en que Q, Σ δ y q 0 son como en los autómatasfinitos <strong>de</strong>terminísticos. ∆ es el alfabeto <strong>de</strong> salida y λ es una función <strong>de</strong> Q → ∆, indicando el output asociadoa cada estado.El output <strong>de</strong> estas máquinas en repuesta a un string <strong>de</strong> entrada a 1 a 2 . . . a N , N ≥ 0, es λ(q 0 )λ(q 1 ) . . . λ(q N ),en que q 1 q 2 . . . q N es la secuencia <strong>de</strong> estados tales que δ(q i−1 , a i ) = q i , para 1 ≤ i ≤ N. Nótese que todamáquina <strong>de</strong> Moore da output λ(q 0 ) en respuesta al string ε.Un AFD pue<strong>de</strong> ser visto como un caso especial <strong>de</strong> una máquina <strong>de</strong> Moore, en que el alfabeto <strong>de</strong> salida,∆, es {0, 1} y un estado q es <strong>de</strong> aceptación si y sólo si λ(q) = 1.Ejemplo 52 Suponga que se <strong>de</strong>sea <strong>de</strong>terminar el resto en módulo 3 <strong>de</strong> cada string binario, tratado comoun entero. Observe que si i, escrito en binario, es seguido por un 0, el string tiene valor 2i; si el binario i es


3.6. TRADUCTORES DE ESTADO FINITO 55★✥0 ✎ 1★✥☞1 ✗ 0★✥☞2❄❄✲ 0 1 2✲✎ ✧✦ ☞✻✍✧✦✌ ✻✍✲☛ ✧✦✌ ✟10✚ ✙✚ ✙0 1seguido por un 1, su valor es 2i + 1. A<strong>de</strong>más, si el resto <strong>de</strong> i/3 es p, el resto <strong>de</strong> 2i/3 es 2p mod 3. Si p = 0,1 ó 2, 2p mod 3 es 0, 2 ó 1, respectivamente.∆ = {0, 1, 2}λ(i) = iSi el string <strong>de</strong> entrada es 1010, el autómata entra a los estados 0–1–2–2–1 y produce el output 01221.Esto es, ε (que se ha supuesto, vale cero), tiene residuo 0, 1 tiene residuo 1, 2 <strong>de</strong>cimal (10 binario) tieneresiduo 2, 101 (5 en <strong>de</strong>cimal) tiene residuo 2 y, finalmente, 1010 (10 en <strong>de</strong>cimal) tiene residuo 1.Una máquina <strong>de</strong> Mealy es también una séxtupla (Q, Σ, ∆, δ, λ, q 0 ), en que todo es como en las máquinas<strong>de</strong> Moore, excepto que λ va <strong>de</strong> Q × Σ a ∆. Es <strong>de</strong>cir, λ(q, a) es el output asociado con la transición <strong>de</strong>s<strong>de</strong> elestado q en símbolo a.El output <strong>de</strong> estas máquinas en respuesta al string <strong>de</strong> entrada a 1 a 2 . . . a N es λ(q 0 , a 0 )λ(q 1 , a 1 ) . . . λ(q N , a N ),don<strong>de</strong> q 1 q 2 . . . q N es la secuencia <strong>de</strong> estados tales que δ(q i−1 , a i ) = q i (1 ≤ i ≤ N). Obsérvese que el string<strong>de</strong> salida tiene longitud N, y no N + 1 como en la máquina <strong>de</strong> Moore; y que si el string <strong>de</strong> entrada es ε, unamáquina <strong>de</strong> Mealy tiene salida ε.Ejemplo 53 Consi<strong>de</strong>re el lenguaje (0+1) ∗ (00+11) <strong>de</strong> todos los strings binarios cuyos últimos dos símbolosson iguales. En el próximo capítulo se verán técnicas que permiten <strong>de</strong>mostrar que 5 estados son necesariospara un AFD que lo acepte. Sin embargo se pue<strong>de</strong> <strong>de</strong>finir una máquina <strong>de</strong> Mealy con 3 estados, que usa susestados para recordar el último símbolo leído y que emite una S cuando el símbolo actual es igual al previo,en otro caso, emite una N. La secuencia <strong>de</strong> S’s y N’s emitida correspon<strong>de</strong> a la secuencia <strong>de</strong> estados <strong>de</strong>aceptación y no-aceptación en los que entraría un AFD. hay una diferencia, la máquina <strong>de</strong> Mealy no emiteantes <strong>de</strong> ver un input, mientras el AFD habría rechazado el string ε con q 0 ∉ F .Sea M una máquina <strong>de</strong> Mealy o <strong>de</strong> Moore y <strong>de</strong>finimos T M (w) como el output producido por M si elstring <strong>de</strong> entrada es w. Es claro que no pue<strong>de</strong> haber i<strong>de</strong>ntidad exacta entre las funciones T M y T M ′(w) siuna <strong>de</strong> M o M ′ es una máquina <strong>de</strong> Mealy (M) y la otra <strong>de</strong> Moore (M ′ ), ya que uno <strong>de</strong> los string <strong>de</strong> salidaserá más corto. Sin embargo, es posible <strong>de</strong>spreciar la respuesta <strong>de</strong> la máquina <strong>de</strong> Moore si la entrada es ε,y <strong>de</strong>cir que una máquina <strong>de</strong> Mealy, (M), y una máquina <strong>de</strong> Moore, (M ′ ), son equivalentes si para todoslos strings <strong>de</strong> entrada w, bT M (w) = T M ′(w), en que b es el output <strong>de</strong> M ′ en su estado inicial. Es posible,entonces, probar los siguientes teoremas que igualan ambos mo<strong>de</strong>los:Teorema 6 Si M 1 = (Q, Σ, ∆, δ, λ, q 0 ) es una máquina <strong>de</strong> Moore, hay una máquina <strong>de</strong> Mealy, M 2 , equivalentea M 1 .Demostración : Sea M 2 = (Q, Σ, ∆, δ, λ ′ , q 0 ) y <strong>de</strong>fínase la función λ ′ comoλ ′ (q, a) = λ(δ(q, a))para todo estado q ∈ Q y símbolo a ∈ Σ. Entonces M 1 y M 2 pasan por la misma secuencia <strong>de</strong> estados, enigules inputs y, en cada transición, M 2 emite el output que M 1 asocia con el estado al que entra.✷✷


56 CHAPTER 3.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES REGULARES✓0 / ✏S★✥✝✲ ✆✬❄00 / N ✗✧✦✛ ✔★✥✲ q1 / N0 / N0✧✦1 / N ✧✲ ★✥✦✫ ✁ ✻1✲✞ ✧✦ ☎✖✑1 / STeorema 7 Sea M 1 = (Q, Σ, ∆, δ, λ, q 0 ) una máquina <strong>de</strong> Mealy. Entonces existe una máquina <strong>de</strong> Moore,M 2 , equivalente a M 1 .Demostración : Sea M 2 = (Q×∆, Σ, ∆, δ ′ , λ ′ , [q 0 , b 0 ]) en que b 0 es un miembro arbitrario <strong>de</strong> ∆. Los estados<strong>de</strong> M 2 son pares [q, b] que consisten en un estado <strong>de</strong> M 1 y un símbolo <strong>de</strong> salida. Se <strong>de</strong>fineyδ ′ ([q, b] , a) = [δ(q, a), λ(q, a)]λ ′ ([q, b] , a) = bLa segunda componente <strong>de</strong> un estado [q, b] <strong>de</strong> M 2 es el output <strong>de</strong> M 1 en alguan transición a q. Sólo lasprimeras componentes <strong>de</strong> los estados <strong>de</strong> M 2 <strong>de</strong>terminan las movidas hechas por M 2 .Es simple probar, por inducción en N, que si M 1 entra a los estados q 1 q 2 . . . q N en el input a 1 a 2 . . . a N yemite el string b 1 b 2 . . . b N , entonces M 2 entra a estados [q 0 , b 0 ] , [q 1 , b 1 ] , . . . , [q N , b N ] y emite b 0 b 1 b 2 . . . b N .Ejemplo 54 Se construye una máquina <strong>de</strong> Moore equivalente a la <strong>de</strong> Mealy <strong>de</strong>l ejemplo anterior.Nótese que [q 0 , S], que pudo ser elegido como estado inicial, es inútil y pue<strong>de</strong> eliminarse.3.7 Expresiones RegularesLos lenguajes aceptados por los autómatas finitos son fácilmente <strong>de</strong>scritos por expresiones simples llamadasexpresiones regulares quienes les dan el nombre <strong>de</strong> conjuntos regulares a dichos lenguajes.Sea Σ un alfabeto; las expresiones regulares sobre Σ, y los conjuntos que ellas representan, se <strong>de</strong>finencomo sigue:• ∅ es una expresión regular y <strong>de</strong>nota el conjunto vacío.✷✷✷


3.7. EXPRESIONES REGULARES 57✬✩✛N✘ 1 ✛NN☛✘✛✟❄ ❄ ✘✲0 1[ q ✲0, N ][ 0, N ]✚ ✙ ✚✂ 0 [1, N]✁✻✙✚ ✙◗◗❦✑✸0 ◗0◗◗◗ 11✛✟ ✟✟✟✟✟✟✟✟✟✟✯◗1✏✘ ✏✏✏✏✏✏✏✏✏✏✏✏✏✏✏✏✏✏✶✑✑✑✑✑✑ ◗0✗✛ ❄ ✑ ◗✘ ✗☎ ✛❄ ❄◗❄ ✘[ q 0, S ] 0 [ 0, S ] 1 [ 1, S ]✚ ✙ ✖✚✌ ✙ ✖✆ ✚ ✙SSS• ε es una expresión regular y <strong>de</strong>nota el conjunto {ε}• Por cada a ∈ Σ, a es una expresión regular y <strong>de</strong>nota el conjunto {a}• Si r y s son expresiones regulares que <strong>de</strong>notan los lenguajes R y S, respectivamente, entonces:(r + s) es una expresión regular y <strong>de</strong>nota R ∪ S.(rs) es una expresión regular y <strong>de</strong>nota RS.(r ∗ ) es una expresión regular y <strong>de</strong>nota R ∗ .Al escribir expresiones regulares, se acostumbra omitir muchos <strong>de</strong> los paréntesis, asumiendo que ∗ tienela prece<strong>de</strong>ncia más alta, seguida por la concatenación y, finalmente, por +.((0(1 ∗ )) + 0) = 01 ∗ + 0También se acostumbra utilizar la siguiente abreviación:rr ∗ = r +Cuando es necesario distinguir entre una expresión regular, r, y el lenguaje <strong>de</strong>notado por r, se usa L(r)para el lenguaje.Ejemplo 55 Consi<strong>de</strong>re las siguientes expresiones regulares:00 representa {00}(0 + 1) ∗ representa todos los strings binarios(0 + 1) ∗ 00(0 + 1) ∗ representa todos los strings binarioscon al menos un par <strong>de</strong> 0 ′ s consecutivos(0 + 1) ∗ 011 representa todos los strings binarios que terminan en 011Ejemplo 56 (1 + 10) ∗ representa todos los strings binarios que comienzan con un 1 y no tienen dos cerosconsecutivos.Es fácil probar por inducción en i que (1 + 10) i no tiene strings con dos ceros consecutivos. Más aún,dado cualquier string que comienza con un 1 y que no tiene dos 0’s consecutivos, es posible dividirlo ensubstrings compuestos <strong>de</strong> un 1 seguido, posiblemente, <strong>de</strong> un cero, si los hay. Por ejemplo 10110111010 sedivi<strong>de</strong> como 10–1–10–1–1–10–10. Esta división prueba que todos estos strings están en (1 + 10) i , con i igualal número <strong>de</strong> 1’s.La expresión regular (0+ε)(1+10) ∗ representa a todos los strings binarios que no tienen ceros consecutivos.✷


58 CHAPTER 3. ACEPTACIÓN Y GENERACIÓN DE LENGUAJES REGULARES ✷Ejemplo 57 La expresión regular 0 ∗ 1 ∗ 2 ∗ representa cualquier número <strong>de</strong> ceros, seguidos <strong>de</strong> cualquier número<strong>de</strong> 1’s, seguidos <strong>de</strong> cualquier número <strong>de</strong> 2’s. Este es el lenguaje aceptado por el AFND-ε cuyo diagrama<strong>de</strong> transición aparece al comienzo <strong>de</strong> la sección anterior. Véase Figura 3.10La expresión regular 00 ∗ 11 ∗ 22 ∗ <strong>de</strong>nota aquellos strings en 0 ∗ 1 ∗ 2 ∗ con al menos uno <strong>de</strong> cada símbolo. Esposible abreviarlo como 0 + 1 + 2 + , en lugar <strong>de</strong> 00 ∗ 11 ∗ 22 ∗ .Se probará ahora, que los lenguajes aceptados por los autómatas finitos son, precisamente, los lenguajes<strong>de</strong>scritos por las expresiones regulares. Esta equivalencia es la razón por la que dichos lenguajes son llamadosconjuntos regulares. Para ello, es necesario probar dos teoremas. El primero mostrará que por cada expresiónregular es posible construir un AFND-ε que acepte el mismo lenguaje que ella <strong>de</strong>scribe. El segundo, quepor cada AFD es posible construir una expresión regular que <strong>de</strong>scriba el mismo lenguaje que él acepta.En conjunto con los dos teoremas <strong>de</strong>mostrados anteriormente, éstos mostrarán que los cuatro mecanismos<strong>de</strong> <strong>de</strong>finición <strong>de</strong> lenguajes mostrados en este capítulo, son esencialmente equivalentes, sirven para <strong>de</strong>finir lamisma clase <strong>de</strong> lenguajes: los conjuntos regulares. En la Figura 3.18 se muestran las construcciones vistaso por ver; un arco <strong>de</strong> A a B (A → B), indica que por cada <strong>de</strong>scriptor <strong>de</strong> tipo A es posible construir unoequivalente <strong>de</strong> tipo B:✷✬AFND✄❄✻✩❄AFD◗◗◗✪ ✫Expresión Regular ✑✲AFND-ε✑✸✑✛✲✲Se ha visto cómo construir uno equivalenteSe verá cómo construir uno equivalenteEs un caso particular <strong>de</strong> ...Figure 3.18: Equivalencias entre lenguajes aceptados por distintos mecanismosTeorema 8 Sea r una expresión regular. Existe un AFND-ε que acepta el lenguaje L(r).Demostración : Se muestra, por inducción en el número <strong>de</strong> operadores <strong>de</strong> la expresión regular r, que existeun AFND-ε, M, con un solo estado final, sin transiciones que salgan <strong>de</strong> él, tal que L(M) = L(r).Base (Cero operadores): La expresión regular <strong>de</strong>be ser ε, ∅ o a, para algún a ∈ Σ, los autómatas siguientessatisfacen las condiciones en estos casos:Inducción: Se asume que el teorema se cumple para expresiones regulares con N o menos operadores. Sear una expresión regular con N + 1 operadores; hay tres casos que <strong>de</strong>pen<strong>de</strong>n <strong>de</strong> la forma <strong>de</strong> r.


3.7. EXPRESIONES REGULARES 59✓✏ε✗✔ ✓✏ ✓✏ ✗✔ ✓✏ ✓✏ ✗✔ ✓✏✲ q ✲ q ✲ q q ✲ q a✲✒✑ 0✖✕ ✒✑ f ✒✑ 0 q✖✕ ✒✑ f ✒✑ 0✖✕ ✒✑ fr = εr = Φr = aFigure 3.19: Expresiones regulares y sus correspondientes autómatasCaso 1: r = (r 1 + r 2 ). Tanto r 1 como r 2 tienen N o menos operadores, por lo tanto, por la hipótesis<strong>de</strong> inducción, existen AFND-ε, M 1 = (Q 1 , Σ 1 , δ 1 , q 1 , {f 1 }) y M 2 = (Q 2 , Σ 2 , δ 2 , q 2 , {f 2 }) con L(r 1 ) =L(M 1 ) y L(r 2 ) = L(M 2 ). Ya que los estados pue<strong>de</strong>n renombrarse, se pue<strong>de</strong> asumir que Q 1 y Q 2 sondisjuntos. Sean q 0 y f 0 nuevos estados. Se construyeM = (Q 1 ∪ Q 2 ∪ {q 0 , f 0 }, Σ 1 ∪ Σ 2 , δ, q 0 , {f 0 })en que δ queda <strong>de</strong>finido por:• δ(q 0 , ε) = {q 1 , q 2 }• δ(q, a) = δ 1 (q, a)• δ(q, a) = δ 2 (q, a)• δ(f 1 , ε) = δ(f 2 , ε) = {f 0 }∀q ∈ Q 1 − {f 1 }, a ∈ Σ 1 ∪ {ε}∀q ∈ Q 2 − {f 2 }, a ∈ Σ 2 ∪ {ε}recuér<strong>de</strong>se que por la hipótesis <strong>de</strong> inducción no hay transiciones que salgan <strong>de</strong> f 1 o f 2 , por lo tantotodas las transiciones <strong>de</strong> M 1 y M 2 están en M. La construcción conduce al diagrama <strong>de</strong> transiciones<strong>de</strong> la Figura 3.20.✓✏ ✓✏✟✯q◗1 M✒✑ 1 f1✒✑ ◗◗◗◗◗◗εε✓✏✟✟✟✟✟✟✛✘✓✏✲ q0f0✒✑ ❍ ✚✙✒✑❍❍❍❍❍ εε ✟✯✓✏ ✓✏❍❥ q2 M f ✟ ✟✟✟✟✟✒✑ 22✒✑Figure 3.20: Diagrama <strong>de</strong> transición correspondiente a la operación + aplicada a expresiones regularesCualquier camino entre q 0 y f 0 <strong>de</strong>be comenzar yendo a q 1 o a q 2 en ε. Si se va a q 1 , <strong>de</strong>be seguir uncamino en M 1 <strong>de</strong> q 1 a f 1 y luego ir a f 0 en ε. Similarmente, los caminos que comienzan yendo a q 2pue<strong>de</strong>n seguir cualquier camino a f 2 en M 2 y luego ir a f 0 en M. Por lo tanto, hay un camino conetiqueta x en M <strong>de</strong> q 0 a f 0 , si y sólo si hay un camino con etiqueta x, <strong>de</strong> q 1 a f 1 en M 1 , o <strong>de</strong> q 2 a f 2en M 2 . Por lo tanto, L(M) = L(M 1 ) ∪ L(M 2 ), como se quería mostrar.Caso 2: r = (r 1 r 2 ). Sean M 1 y M 2 , como en el caso anterior. Se construyeM = (Q 1 ∪ Q 2 , Σ 1 ∪ Σ 2 , δ, q 1 , {f 2 })con δ <strong>de</strong>finido por:


60 CHAPTER 3.• δ(q, a) = δ 1 (q, a)• δ(f 1 , ε) = {q 2 }• δ(q, a) = δ 2 (q, a)ACEPTACIÓN Y GENERACIÓN DE LENGUAJES REGULARES∀q ∈ Q 1 − {f 1 }, a ∈ Σ 1 ∪ {ε}∀q ∈ Q 2 − {f 2 }, a ∈ Σ 2 ∪ {ε}el diagrama <strong>de</strong> transición para M es, entonces, el que se muestra en la Figura 3.21.✓✏ ✓✏✓✏ ✛✘✲ ✓✏q✒✑M ε1✲ q1 f 1 2✒✑✒✑M 2 f2✚✙✒✑Figure 3.21: Diagrama <strong>de</strong> transición correspondiente a la concatenación <strong>de</strong> expresiones regularesCada camino <strong>de</strong> q 1 a f 2 en M está etiquetado por algún string x <strong>de</strong> q 1 a f 1 (en M 1 ), seguido por unarco <strong>de</strong> f 1 a q 2 en ε, seguido por un camino etiquetado por un string y <strong>de</strong> q 2 a f 2 (en M 2 ). Por lotanto,L(M) = {xy/x ∈ L(M 1 ) e y ∈ L(M 2 )}es <strong>de</strong>cir, L(M) = L(M 1 )L(M 2 ), como se quería mostrar.Caso 3: r = (r ∗ 1 ). Sea M 1 como en los casos anteriores. Se construyeM = (Q 1 ∪ {q 0 , f 0 }, Σ 1 , δ, q 0 , {f 0 })en que δ queda <strong>de</strong>finido por:• δ(q 0 , ε) = {q 1 , f 0 }• δ(q, a) = δ 1 (q, a)• δ(f 1 , ε) = {q 1 , f 0 }∀q ∈ Q 1 − {f 1 }, a ∈ Σ 1 ∪ {ε}el diagrama <strong>de</strong> transición para M es, entonces, el que se muestra en la Figura 3.22.✬ ✩ε✛✘ ✛✘ ❄✛✘ ★✥✛✘✲ q ε ✲ q f ε01 M✲ f1 1 0✚✙ ✚✙ ✚✙ ✧✦✚✙✻✫ε✪Figure 3.22: Diagrama <strong>de</strong> transición correspondiente a la operación ∗ aplicada a expresiones regularesCada camino <strong>de</strong> q 0 a f 0 en M consiste, ya sea <strong>de</strong> un arco directo <strong>de</strong> q 0 a f 0 (en ε), seguido <strong>de</strong> algúnnúmero (posiblemente cero) <strong>de</strong> caminos <strong>de</strong> q 1 a f 1 con un arco <strong>de</strong> vuelta a q 1 en ε, cada uno conetiqueta que correspon<strong>de</strong> a un string en L(M 1 ), seguido <strong>de</strong> un camino <strong>de</strong> q 1 a f 1 en un string <strong>de</strong> L(M 1 )y, finalmente, <strong>de</strong> f 1 a f 0 en ε. Por lo tanto hay un camino <strong>de</strong> q 0 a f 0 con etiqueta x en M, si y sólosi x = x 1 x 2 . . . x k (k ≥ 0), tal que cada x i ∈ L(M 1 ). Es <strong>de</strong>cir, L(M) = L ∗ (M 1 ) = L(r ∗ ), como sequería mostrar.


3.7. EXPRESIONES REGULARES 61Ejemplo 58 Se construye un AFND-ε que acepta el lenguaje <strong>de</strong>scrito por la expresión regular 01 ∗ + 0. Porlas reglas <strong>de</strong> prece<strong>de</strong>ncia, ya se vio que la expresión regular es realmente:r = ((0(1 ∗ )) + 0)es <strong>de</strong>cir, es <strong>de</strong> la forma r 1 + r 2 , en que r 1 = 01 ∗ y r 2 = 0. El autómata para r 2 es simple:★✥ ✬✩★✥✲ q 0 ✲ q1 2✧✦ ✫✪✧✦La expresión regular r 1 pue<strong>de</strong> anotarse como r 3 r 4 , en que r 3 = 0 y r 4 = 1 ∗ . El autómata para r 3 estambién simple:★✥✲ q 03✧✦A su vez, r 4 es r ∗ 5 , en que r 5 = 1, cuyo autómata es✬✩★✥✲ q4✫✪✧✦★✥ ✬✩★✥✲ q 1 ✲ q5 6✧✦ ✫✪✧✦Para construir el autómata para r 4 , se usa el caso 3 <strong>de</strong>l teoerema anterior, obteniéndose:✬ ✩ε✛✘ ✛✘ ❄✛✘ ★✥✛✘✲ q ε✲ q 1 ✲ q ε✲ q 7 568✚✙ ✚✙ ✚✙ ✧✦✚✙✫ε✪✷Para r 1 = r 3 r 4 , se usa el caso 2:✗ ε ✔✓✏ ✓✏ ✓✏ ✓✏ ❄ ✓✏ ✛✘✓✏✲ q 0 ✲ ε ✲ ε ✲ 1 ✲ ε3 q4 q7 q5 q6 ✲ q8✒✑ ✒✑ ✒✑ ✒✑ ✒✑✚✙✒✑✻✫ ε✪


62 CHAPTER 3.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES REGULARESFinalmente, usando el caso 1, se construye el autómata para r = r 1 + r 2✗ε✔✓✏ ✓✏ ✓✏ ✓✏ ❄ ✓✏ ✓✏0 ✲ ε ✲ ε ✲ 1 ✲ εe q ✲✒✑ ✒✑ ✒✑ ✒✑ ✒✑ ✒✑✓✏ ✚ ✚✚✚❃3 q4 q7 q5 q6 q8❍ ❍❍❍❍❥ e ✛✘✻ ✓✏✲q✒✑ 9 ❳ ❳❳ ✫ ε✪ q✚✙✒✑✓✏✓✏✲ ✘ ✘✘ ✘ ✘✘✘✘ ✘ ✘✘✘ ✘✿ 10❳ ❳❳❳ e❳ e❳❳❳❳❳3 q 01 q2✒✑✒✑un autómata finito <strong>de</strong>terminístico con transiciones en vacío que acepta el lenguaje <strong>de</strong>scrito por la expresiónregular 01 ∗ + 0Ejemplo 59 Un AFND-ε equivalente a la expresión regular (ab + aab) ∗ .ε✩ε ✓✏ ❄ ✓✏ ✓✏ ✓✏ ✓✏✛✘✓✏ ✞ ❄ ε ✲ a✲ ε✲ b✲✄ ε ✓✏ ✟ ✓✏✲ ✒✑ ✒✑ ✒✑ ✒✑ ✒✑ ❄ ε✲✒✑ ✓✏ ε✚✙✒✑✒✲✒✑✓✏ ✓✏ ✓✏ ✓✏ ✓✏✦ ✻ ✻✛✝ ✒✑a ✁ ✲ε a✲ ε✲ b ε✲✒✑ ✻ ✒✑ ✒✑ ✒✑ ✒✑✫ε✪✷La <strong>de</strong>mostración <strong>de</strong>l teorema anterior contiene un algoritmo para convertir una expresión regular enun autómata finito (no <strong>de</strong>terminístico con transiciones en vacío), asumiendo que la expresión regular estétotalmente parentizada.Teorema 9 Sea L un lenguaje aceptado por un AFD. Hay una expresión regular que lo representa.Demostración : Sea L un lenguaje aceptado por un AFD M = ({q 1 , . . . , q n }, Σ, δ, q 1 , F ). Se construirá unaexpresión regular que <strong>de</strong>scribe L(M).Sea Rij k el conjunto <strong>de</strong> todos los strings x, tales queδ(q i , x) = q jy que si δ(q i , y) = q l , para cualquier y prefijo <strong>de</strong> x (que no sea x o ε), entonces l ≤ k.Esto es, R k ij es el conjunto <strong>de</strong> todos los strings que llevan al AFD <strong>de</strong> q i a q j , sin pasar por ningún estadocon número (sub-índice) mayor que k. Por pasar se entien<strong>de</strong> entrar y salir. Por lo tanto i, j o ambos pue<strong>de</strong>nser mayores que k.✷


3.7. EXPRESIONES REGULARES 63Ya que no hay estados con numeración mayor que N, Rij Nq i a q j .Es posible <strong>de</strong>finir Rij k <strong>de</strong> la siguiente manera formal:<strong>de</strong>nota todos los strings que llevan al AFD <strong>de</strong>R k ij = R k−1ikR 0 ij =(Rk−1 kk)∗ R k−1kj∪ R k−1ij (∀1 ≤ k ≤ N){ {a/δ(qi , a) = q j } si i ≠ j{a/δ(q i , a) = q j } ∪ {ε} si i = jInformalmente, la <strong>de</strong>finición anterior para R k ij significa que los strings que hacen que el AFD vaya <strong>de</strong> q ia q j , sin pasar por un estado mayor que q k , son <strong>de</strong> dos tipos:• están en R k−1ij , es <strong>de</strong>cir, no pasan ni siquiera por q k• están compuestos <strong>de</strong> un string en R k−1ik, que lleva a M <strong>de</strong> q 1 a q k por primera vez, seguido por cero omás strings en R k−1kk, que lleva a M <strong>de</strong> q k a q k sin pasar ni por q k , ni por un estado mayor, seguidofinalmente por un string en R k−1kj, que lleva a M <strong>de</strong> q k a q j .Se <strong>de</strong>be <strong>de</strong>mostrar que para cada i, j y k, existe una expresión regular rij k , que representa al lenguajeR ij . La prueba es por inducción en k.Base (k = 0): Rij 0 es un conjunto finito <strong>de</strong> strings, cada uno <strong>de</strong> los cuales es ε o un solo símbolo <strong>de</strong>l alfabeto.Por lo tanto, rij 0 pue<strong>de</strong> ser escrito como a 1 + a 2 + · · · + a p (o a 1 + a 2 + · · · + a p + ε si i = j), en que{a 1 , . . . , a p } es el conjunto <strong>de</strong> todos los símbolos a, tales que δ(q i , a) = q j . Si no los hay, entonces ∅ (oε si i = j) sirve como rij 0 .Inducción: La fórmula recursiva para Rij k envuelve sólo las operaciones : unión, concatenación y clausura.Por la hipótesis, para cada l y m existe una expresión regular r ′ , tal queL(r k−1lm) = Rk−1 lmPor lo tanto, para r k−1ijse pue<strong>de</strong> usar la expresión regular(r k−1lm)(rk−1 kk)∗ (r k−1kj) + r k−1ijlo que completa la prueba por inducción.Para terminar la <strong>de</strong>mostración <strong>de</strong>l teorema, basta con observar queL(M) = ∪ qj ∈F R N 1jdado que R N 1j <strong>de</strong>nota las etiquetas <strong>de</strong> los caminos <strong>de</strong> q 1, el estado inicial, a q j . Por lo tanto, L(M) se pue<strong>de</strong>representar por la expresión regularr N 1j 1+ r N 1j 2+ . . . + r N 1j pen que F = {q j1 , q j2 , . . . , q jp }✷


64 CHAPTER 3.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES REGULARESEjemplo 60 Se construirá una expresión regular que <strong>de</strong>scribe el lenguaje aceptado por el siguiente AFD✬★✥✲ q 01✧✦✻ 0✧1✬✩★✥✲ q 12✫✪✧✦0, 1✌ ✻✍✩✬✩★✥❄✲ q3✫✪✧✦✕Interesa r = r 3 12 + r3 13r 3 12 = r 2 12 + r2 13 (r2 33 )∗ r 2 32r 2 12 = r 1 12 + r 1 12(r 1 22) ∗ r 1 22r 1 12 = r 0 12 + r0 11 (r0 11 )∗ r 0 12= 0 + ε(ε) ∗ 0 = 0r 1 22 = r 0 22 + r 0 21(r 0 11) ∗ r 0 12 = ε + 0ε ∗ 0 = ε + 00r 2 12 = 0 + 0(ε + 00) ∗ (ε + 00) = 0 + 0(ε + 00) + = 0(00) ∗r 2 13 = r 1 13 + r1 13 (r1 22 )∗ r 1 23r 1 13 = r 0 13 + r 0 11(r 0 11) ∗ r 0 13 = 1 + ε(ε) ∗ 1 = 1r 1 23 = r 0 23 + r 0 21(r 0 11) ∗ r 0 13 = 1 + 0(ε) ∗ 1 = 1 + 01r13 2 = 1 + 0(ε + 00) ∗ (1 + 01) = 1 + 0(00) ∗ 1 = ε= 1 + 00 ∗ 1 = 0 ∗ 1r 2 33 = r 1 33 + r1 32 (r1 22 )∗ r 1 23r 1 33 = r 0 33 + r0 31 (r0 11 )∗ r 0 13 = ε + ∅(ε) ∗ 1 = εr 1 32 = r 0 32 + r0 31 (r0 11 )∗ r 0 12 = (0 + 1) + ∅(ε) ∗ 0 = 0 + 1r 2 33 = ε + (0 + 1)(ε + 00) ∗ (1 + 01) = ε + (0 + 1)0 ∗ 1r 2 32 = r 1 32 + r1 32 (r1 22 )∗ r 1 22 = (0 + 1) + (0 + 1)(ε + 00) ∗ (ε + 00)= 0 + 1 + (0 + 1)(00) ∗ = (0 + 1)(00) ∗luegor 3 12 = 0(00) ∗ + 0 ∗ 1(ε + (0 + 1)0 ∗ 1) ∗ (0 + 1)(00) ∗= 0(00) ∗ + 0 ∗ 1((0 + 1)0 ∗ 1) ∗ (0 + 1)(00) ∗similarmente,


3.8. APLICACIONES DE LOS LENGUAJES REGULARES 65r 3 13 = r 2 13 + r2 13 (r2 33 )∗ r 2 33= 0 ∗ 1 + 0 ∗ 1(ε + (0 + 1)0 ∗ 1) ∗ (ε + (0 + 1)0 ∗ 1)= 0 ∗ 1 + 0 ∗ 1(ε + (0 + 1)0 ∗ 1) += 0 ∗ 1 + (ε + (0 + 1)0 ∗ 1) ∗= 0 ∗ 1((0 + 1)0 ∗ 1) ∗Por lo tantor = r 3 12 + r3 13= 0(00) ∗ + 0 ∗ 1((0 + 1)0 ∗ 1) ∗ (0 + 1)(00) ∗ + 0 ∗ 1((0 + 1)0 ∗ 1) ∗ ✷3.8 Aplicaciones <strong>de</strong> los <strong>Lenguajes</strong> RegularesHay una cantidad <strong>de</strong> problemas <strong>de</strong> diseño <strong>de</strong> software que son simplificados por la conversión automática<strong>de</strong> la notación <strong>de</strong> expresiones regulares a una eficiente implementación en computador <strong>de</strong>l autómata finitocorrespondiente.Los tokens en un lenguaje <strong>de</strong> programación son, casi sin excepción, expresables como conjuntos regulares.Por ejemplo, los i<strong>de</strong>ntificadores <strong>de</strong> Pascal pue<strong>de</strong>n expresarse comoletra (letra + dígito) ∗en queyletra ≡ a + b + . . . + z + A + B + . . . + Zdígito ≡ 0 + 1 + 2 + . . . + 9y los i<strong>de</strong>ntificadores <strong>de</strong> FORTRAN, con un límite <strong>de</strong> seis símbolos y sólo mayúsculas, comoletra(ε + letra + dígito) 5en que, ahora,letra ≡ A + B + . . . + ZUna cantidad <strong>de</strong> generadores <strong>de</strong> analizadores léxicos toman como datos una secuencia <strong>de</strong> expresionesregulares, <strong>de</strong>scribiendo los tokens, y producen un único autómata finito que reconoce cualquiera <strong>de</strong> ellos.Usualmente, las expresiones regulares son convertidas a un AFND-ε y <strong>de</strong> ahí, directamente, a un AFD, sineliminar primero las transiciones en vacío. Cada estado final indica el token particular que se ha reconocido,así que el autómata pue<strong>de</strong>, en realidad, consi<strong>de</strong>rarse una máquina <strong>de</strong> Moore.La función <strong>de</strong> transición <strong>de</strong>l AFD se pue<strong>de</strong> almacenar <strong>de</strong> diversas maneras para que ocupe menos espacioque representada como un arreglo <strong>de</strong> dos dimensiones con la tabla <strong>de</strong> transición. El analizador léxicoproducido por el generador es un programa fijo que interpreta esas tablas codificadas, junto con la tablaparticular que representa al AFD que reconoce los tokens. (Ver Figura 3.23) Este analizador léxico, asígenerado, pue<strong>de</strong> ser usado como un módulo <strong>de</strong> un compilador.Algunos editores <strong>de</strong> texto y programas similares permiten la sustitución por un string dado, <strong>de</strong> cualquierstring representado por una expresión regular, también dada.


66 CHAPTER 3.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES REGULARESExpresionesRegulares❄Generador <strong>de</strong>Analizadores LexicosTexto✲❄TablaTokens✲Analizador LexicoFigure 3.23: Construcción <strong>de</strong> analizadores léxicosPor ejemplo, el editor <strong>de</strong> texto <strong>de</strong> UNIX permite un comando como:s/ ̸ b ̸ b ̸ b ∗ / ̸ b/que sustituye por un solo blanco el primer string con dos o más blancos que se encuentre en una línea.Si T ODO <strong>de</strong>nota la expresión a 1 + a 2 + . . . + a n en que los a i ’s son todos los carácteres <strong>de</strong>l computador,excepto el <strong>de</strong> cambio <strong>de</strong> línea (newline), es posible convertir una expresión regular r a un AFD que acepteT ODO ∗ r. La presencia <strong>de</strong> T ODO ∗ permite reconocer un miembro <strong>de</strong> L(r) que comience en cualquier parte<strong>de</strong> una línea. Sin embargo, la conversión <strong>de</strong> la expresión regular a un AFD toma, en la mayoría <strong>de</strong> los casos,mucho más tiempo que el que toma revisar una línea usando el AFD y, a<strong>de</strong>más, el AFD pue<strong>de</strong> tener unnúmero <strong>de</strong> estados que es exponencial en la longitud <strong>de</strong> la expresión regular.Lo que realmente suce<strong>de</strong> en el editor <strong>de</strong> texto <strong>de</strong> UNIX, es que la expresión regular T ODO ∗ r es convertidaen un AFND-ε, el que es simulado directamente. A medida que se revisa la línea, una lista <strong>de</strong> estados posibles(o actuales según se mire), es mantenida, la que inicialmente es la clausura − ε <strong>de</strong>l estado inicial. Si a esel próximo carácter en la línea, se crea una nueva lista <strong>de</strong> todos los estados con una transición en a <strong>de</strong>s<strong>de</strong>algunos <strong>de</strong> los estados <strong>de</strong> la lista antigua. La lista antigua se <strong>de</strong>scarta y se computa la clausura vacía <strong>de</strong> lanueva. Si no hay estados finales en la lista nueva, se repite el proceso con el próximo símbolo.


Chapter 4PROPIEDADES DE LOSLENGUAJES REGULARESEn este capítulo se estudiarán propieda<strong>de</strong>s <strong>de</strong> clausura y problemas <strong>de</strong> <strong>de</strong>cisión para los lenguajes regulares.Hay varias preguntas que se pue<strong>de</strong>n hacer respecto <strong>de</strong> los conjuntos regulares. Una pregunta es: dado unlenguaje L, especificado en alguna forma, ¿Es L regular? También es posible preguntarse si los lenguajes<strong>de</strong>scritos por expresiones regulares distintas son el mismo lenguaje4.1 Lema <strong>de</strong> Bombeo para Conjuntos RegularesEn esta sección se verá un resultado básico, llamado el Lema <strong>de</strong> Bombeo (o Pumping Lemma), que es uninstrumento muy po<strong>de</strong>roso para <strong>de</strong>mostrar que ciertos lenguajes no son regulares. También es útil para el<strong>de</strong>sarrollo <strong>de</strong> algoritmos que respondan preguntas tales como si un AF acepta un lenguaje finito o no.Si un lenguaje es regular, es aceptado por un AFD, M = (Q, Σ, δ, q 0 , F ) con algún número particular (yfinito) <strong>de</strong> estados, N. Considérese ahora un string <strong>de</strong> entrada con más <strong>de</strong> N símbolos (o N):a 1 a 2 . . . a M (M ≥ N)y para i = 1, 2, . . . , M seaδ(q 0 , a 1 a 2 . . . a i ) = q i (1 ≤ i ≤ M)No es posible que los N + 1 estados (q 0 , q 1 , . . . , q N ) sean todos diferentes ya que hay sólo N estadosdistintos. Por lo tanto hay dos enteros j y k (con 0 ≤ j < k ≤ N) tales que q j = q k . El camino con etiquetaa 1 a 2 . . . a M se ilustra en la siguiente figura:a j+1 ... a k✛✘a 1 ... a j ✛✘ak+1 ... a M✛✘qq0 q=q j kM✚✙ ✚✙ ✚✙Figure 4.1: Esquema explicativo <strong>de</strong>l Lema <strong>de</strong> BombeoDado que j < k, el string a j+1 . . . a k es <strong>de</strong> longitud 1 a lo menos y como k ≤ N, su longitud no es mayora N.67


68 CHAPTER 4. PROPIEDADES DE LOS LENGUAJES REGULARESSi q M ∈ F , esto es, a 1 a 2 . . . a M ∈ L(M), entonces a 1 a 2 . . . a j a k+1 . . . a M también pertenece a L(M) yaque hay un camino que va <strong>de</strong> q 0 a q M , pasando por q j pero no por el loop con etiqueta a j+1 . . . a k .Formalmenteδ(q 0 , a 1 . . . a j a k+1 . . . a M ) = δ(δ(q 0 , a 1 . . . a j ), a k+1 . . . a M )= δ(q j , a k+1 . . . a M )= δ(q k , a k+1 . . . a M )= q m ∈ FEn forma similar, es posible reconocer el loop más <strong>de</strong> una vez, <strong>de</strong> hecho, tantas veces como se <strong>de</strong>see. Es<strong>de</strong>cir:a 1 . . . a j (a j+1 . . . a k ) i a k+1 . . . a Mestá en L(M) para cualquier i ≥ 0. Lo que se ha <strong>de</strong>mostrado es que dado un string suficientementelargo, aceptado por un AF, se pue<strong>de</strong> encontrar un substring cerca <strong>de</strong>l comienzo <strong>de</strong>l string, el que pue<strong>de</strong> serbombeado, es <strong>de</strong>cir repetido, cuantas veces se <strong>de</strong>see y el string resultante también será aceptado por el AF.Lema 2 Sea L un conjunto regular. Entonces hay una constante N tal que si z ∈ L y |z| ≥ N, se pue<strong>de</strong>escribir z = uvw, <strong>de</strong> tal forma que |uv| ≤ N y |v| ≥ 1 y, a<strong>de</strong>más, para todo i ≥ 0 uv i w ∈ L. A<strong>de</strong>más, N noes mayor que el número <strong>de</strong> estados <strong>de</strong>l más pequeño AF que acepta L.Demostración : Ver la discusión anterior al enunciado <strong>de</strong>l lema. En ella z = a 1 a 2 . . . a M ; u = a 1 a 2 . . . a j ;v = a j+1 . . . a k y w = a k+1 . . . a M .Nótese que el lema <strong>de</strong> bombeo indica que si un lenguaje regular contiene un string suficientemente largo,z, entonces contiene un conjunto infinito <strong>de</strong> strings <strong>de</strong> la forma uv i w. El lema no establece que cada stringsuficientemente largo <strong>de</strong> un conjunto regular sea <strong>de</strong> la forma uv i w para algún valor <strong>de</strong> i. De hecho, (0 + 1) ∗contiene strings arbitrariamente largos en que ningún substring aparece tres veces consecutivas.El lema <strong>de</strong> bombeo es muy útil para probar que ciertos conjuntos no son lenguajes regulares. Lametodología usual es un “argumento adverso” <strong>de</strong>l siguiente tipo:• Seleccione el lenguaje L que se <strong>de</strong>sea probar no es regular.• El “adversario” elige N, la constante que se menciona en el lema <strong>de</strong> bombeo. Este pue<strong>de</strong> ser cualquiervalor entero finito, pero una vez elegido, el adversario no lo pue<strong>de</strong> cambiar.• Seleccione un string z ∈ L. La elección <strong>de</strong>l string pue<strong>de</strong> <strong>de</strong>pen<strong>de</strong>r <strong>de</strong>l valor <strong>de</strong> N.• El adversario divi<strong>de</strong> z en u, v y w, sujeto a que |uv| ≤ N y que |v| ≥ 1.• Se obtiene una contradicción con el lema <strong>de</strong> bombeo, mostrando que para cualquier u, v y w elegidospor el adversario, existe un entero i para el cual uv i w no pertenece a L. Se pue<strong>de</strong> entonces concluirque L no es regular. La selección <strong>de</strong> i pue<strong>de</strong> <strong>de</strong>pen<strong>de</strong>r <strong>de</strong> N, u, v y w.Es interesante notar que las selecciones propias correspon<strong>de</strong>n a los cuantificadores universales y lasselecciones <strong>de</strong>l adversario, a los cuantificadores existenciales en una presentación formal <strong>de</strong>l lema <strong>de</strong> bombeo:(Para todo lenguaje regular L)(Existe un entero positivo N)(Para todo string z ∈ L con |z| ≥ N)(Existen u, v y w con z = uvw, |uv| ≤ N, |v| ≥ 1)(Para todo i no negativo uv i w ∈ L)✷


4.2. PROPIEDADES DE CLAUSURA 69Ejemplo 61 L = {0 i2 /i ≥ 1} no es regular. Asuma que L es regular y sea N la constante <strong>de</strong>l lema <strong>de</strong>bombeo. Consi<strong>de</strong>re:z = 0 N 2 ∈ LPor el lema <strong>de</strong> bombeo z pue<strong>de</strong> ser reescrito como uvw, en que |uv| ≤ N, |v| ≥ 1 y uv i w <strong>de</strong>bierapertenecer a L, para todo i ≥ 0. En particular consi<strong>de</strong>re i = 2, entonces comoN 2 < |uv 2 w| ≤ N 2 + N < (N + 1) 2esto es, la longitud <strong>de</strong> uv 2 w está entre N 2 y (N + 1) 2 y, por lo tanto, no es un cuadrado perfecto; quiere<strong>de</strong>cir que uv 2 w no pertenece a L. Una contradicción. Se concluye entonces que L no es regular.Ejemplo 62 L = {a i b i /i ≥ 1} no es regular. Asuma que L es regular y sea N la constante <strong>de</strong>l lema <strong>de</strong>bombeo. Consi<strong>de</strong>re:z = a N b N ∈ LPor el lema <strong>de</strong> bombeo, z pue<strong>de</strong> ser reescrito como uvw, en que |uv| ≤ N y |v| ≥ 1, es <strong>de</strong>cir v es unstring <strong>de</strong> a’s <strong>de</strong> la forma✷v = a kcon 1 ≤ k ≤ NSegún el lema <strong>de</strong> bombeo, el stringz ′ = uv 2 w<strong>de</strong>biera pertenecer a L. Sin embargo,z ′ = a N+k b N (1 ≤ k ≤ N)y, por lo tanto, no tiene igual número <strong>de</strong> a’s que <strong>de</strong> b’s, es <strong>de</strong>cir, no pertenece a L. Una contradicción. Seconcluye que L no es un lenguaje regular.✷4.2 Propieda<strong>de</strong>s <strong>de</strong> ClausuraHay muchas operaciones entre lenguajes que conservan a los lenguajes regulares, en el sentido que la operaciónaplicada a lenguajes regulares produce un lenguaje regular.Por ejemplo, la unión <strong>de</strong> dos conjuntos regulares es un conjunto regular, ya que si r 1 y r 2 son expresionesregulares <strong>de</strong>scribiendo los lenguajes regulares L 1 y L 2 , entonces r 1 + r 2 <strong>de</strong>scribe L 1 ∪ L 2 , por lo tanto launión es también regular. Similarmente, la concatenación <strong>de</strong> conjuntos regulares y la clausura <strong>de</strong> Kleene <strong>de</strong>un lenguaje regular es regular.Si una clase <strong>de</strong> lenguajes es cerrada bajo una cierta operación, ese hecho es llamado una propiedad <strong>de</strong>clausura <strong>de</strong> esa clase <strong>de</strong> lenguajes. Se está particularmente interesado en propieda<strong>de</strong>s <strong>de</strong> clausura efectivas,en que dado <strong>de</strong>scriptores <strong>de</strong> los lenguajes en la clase, hay un algoritmo para construir una representación parael lenguaje que resulta <strong>de</strong> aplicar la operación a esos lenguajes. Por ejemplo, se acaba <strong>de</strong> dar un algoritmopara construir expresiones regulares para la unión <strong>de</strong> dos lenguajes <strong>de</strong>scritos por expresiones regulares, porlo tanto, la clase <strong>de</strong> conjuntos regulares es efectivamente cerrada bajo la unión.Debe observarse que las equivalencias entre autómatas finitos <strong>de</strong> distinto tipo y expresiones regulares,mostradas en el capítulo anterior, fueron equivalencias efectivas en el sentido que se dieron algoritmos parapasar <strong>de</strong> una representación a otra.


70 CHAPTER 4. PROPIEDADES DE LOS LENGUAJES REGULARESTeorema 10 Los conjuntos regulares son cerrados bajo unión, concatenación y clausura <strong>de</strong> Kleene.Demostración :Inmediata <strong>de</strong> la <strong>de</strong>finición <strong>de</strong> expresiones regulares.Teorema 11 La clase <strong>de</strong> los conjuntos regulares es cerrada bajo complementación. Esto es, si L es regulary L ⊆ Σ ∗ , entonces Σ ∗ − L es un conjunto regular.Demostración : Sea M = (Q, Σ 1 , δ, q 0 , F ) un AFD que acepta L ⊆ Σ ∗ . Se pue<strong>de</strong> asumir que Σ 1 = Σ porquesi hay símbolos en Σ 1 que no pertenecen a Σ es posible eliminar las transiciones <strong>de</strong> M en los símbolos que∉ Σ, el hecho que L ⊆ Σ ∗ asegura que no se está cambiando L(M). Si hay símbolos en Σ que no están enΣ 1 , ninguno <strong>de</strong> ellos pue<strong>de</strong> aparecer en strings <strong>de</strong> L, por lo tanto se pue<strong>de</strong> agregar un estado “sumi<strong>de</strong>ro” Sen M con δ(q, a) = S, para todo q ∈ Q y a ∈ Σ − Σ 1 y con δ(S, a) = S para todo a ∈ Σ.Para aceptar Σ ∗ − L basta complementar los estados finales <strong>de</strong> M, esto es, sea M ′ = (Q, Σ, δ, q 0 , Q − F ),entonces M ′ acepta un string w si y sólo si M no lo acepta, es <strong>de</strong>cir, si y sólo si w ∈ Σ ∗ − L. Nótese que esesencial en la construcción que M sea <strong>de</strong>terminístico.Teorema 12 La clase <strong>de</strong> los conjuntos regulares es cerrada bajo intersección.✷✷Demostración :De la teoría <strong>de</strong> conjuntos se sabe que la siguiente relación se cumple:L 1 ∩ L 2 = L 1 ∪ L 2por lo tanto, la clausura bajo intersección es inmediata <strong>de</strong>spués <strong>de</strong> las clausuras bajo unión y complementación.Vale la pena notar que existe una construcción directa para el AFD que acepta la intersección <strong>de</strong> doslenguajes regulares: Sean M 1 = (Q 1 , Σ, δ 1 , q 1 , F 1 ) y M 2 = (Q 2 , Σ, δ 2 , q 2 , F 2 ) dos AFD, se construyeM = (Q 1 × Q 2 , Σ, δ, [q 1 , q 2 ] , F 1 × F 2 )en que para todo p 1 ∈ Q 1 , p 2 ∈ Q 2 y a ∈ Σ, se tieneδ([p 1 , p 2 ] , a) = [δ 1 (p 1 , a), δ 2 (p 2 , a)]es fácil mostrar que L M = L(M 1 ) ∩ L(M 2 ).La clase <strong>de</strong> los lenguajes regulares tiene la propiedad <strong>de</strong> ser cerrada bajo sustitución en el siguiente sentido.Por cada símbolo a en el alfabeto <strong>de</strong> algún conjunto regular R, sea R a un conjunto regular. Suponga que sereemplaza cada string en R, a 1 a 2 . . . a N , por el conjunto <strong>de</strong> palabras <strong>de</strong> la forma w 1 w 2 . . . w N en que los w ison palabras <strong>de</strong> R ai . El resultado es también un lenguaje regular.Formalmente, una sustitución f es una función <strong>de</strong>s<strong>de</strong> un alfabeto Σ a 2 ∆∗ , para algún alfabeto ∆. Es<strong>de</strong>cir, f asocia un lenguaje con cada símbolo <strong>de</strong> Σ. La sustitución se extien<strong>de</strong> a strings <strong>de</strong> la siguiente forma:• f(ε) = ε• f(xa) = f(x)f(a)y se extien<strong>de</strong> a lenguajes por• f(L) = ∪ w∈L f(w)✷


4.2. PROPIEDADES DE CLAUSURA 71Ejemplo 63 Sea f(0) = a y f(1) = b ∗ , entonces f(010) = ab ∗ a. También, si L = 0 ∗ (0 + 1)1 ∗ entoncesf(L) = a ∗ (a + b ∗ )(b ∗ ) ∗= a ∗ b ∗ ✷Teorema 13 La clase <strong>de</strong> los conjuntos regulares es cerrada bajo sustitución por conjuntos regulares.Demostración : Sea R ⊆ Σ ∗ un lenguaje regular y por cada a ∈ Σ sea R a ⊆ ∆ ∗ un lenguaje regular.Sea f : Σ −→ 2 ∆∗ una sustitución <strong>de</strong>finida por f(a) = R a , para todo a ∈ Σ.Seleccione expresiones regulares <strong>de</strong>notando R y cada R a , reemplace cada ocurrencia <strong>de</strong> un símbolo a enla expresión regular para R por la expresión regular para R a . Claramente, el resultado es otra expresiónregular.Para probar que dicha expresión <strong>de</strong>scribe f(R), basta observar que la sustitución <strong>de</strong> una unión, concatenacióno clausura, es la unión, concatenación o clausura <strong>de</strong> la sustitución. Es <strong>de</strong>cir, por ejemplo,f(L 1 ∪ L 2 ) = f(L 1 ) ∪ f(L 2 ). Una simple inducción en el número <strong>de</strong> operadores <strong>de</strong> la expresión regularcompleta la <strong>de</strong>mostración.Un tipo <strong>de</strong> sustitución especial es el homomorfismo. Un homomorfismo h es una sustitución tal que paracada símbolo a ∈ Σ, h(a) contiene sólo un string. Generalmente se consi<strong>de</strong>ra que h(a) es el string mismomás que el conjunto que sólo lo contiene a él.Es también útil <strong>de</strong>finir la imagen homomórfica inversa <strong>de</strong> un lenguaje L comoh −1 (L) = {x/h(x) ∈ L}y también para un string wh −1 (w) = {x/h(x) = w}Ejemplo 64 Sea h(0) = aa y h(1) = aba.Entonces h(010) = aaabaaa. Si L 1 = (01) ∗ entonces h(L 1 ) = (aaaba) ∗ .Sea L 2 = (ab + ba) ∗ a, entonces h −1 (L 2 ) = {1}. Obsérvese que un string en L 2 que comienza con una bno pue<strong>de</strong> ser h(x) para ningún x ∈ {0, 1} ∗ ya que h(0) y h(1) comienzan con a. Por lo tanto si h −1 (w) noes vacío y w ∈ L 2 , entonces w comienza con a. Ahora, w = a en cuyo caso h −1 (w) = ∅; o w es abw ′ paraalgún w ′ en (ab + ba) ∗ a. Se concluye que cada palabra en h −1 (w) comienza con un 1 y, ya que h(1) = aba,w ′ <strong>de</strong>be comenzar con a. Si w ′ = a se tiene w = aba y h −1 (w) = {1}. Si w ′ ≠ a entonces w ′ = abw ′′ y porlo tanto w = ababw ′′ . Pero ningún string x en {0, 1} ∗ tiene h(x) comenzando con abab. Es <strong>de</strong>cir, el únicostring en L 2 que tiene una imagen inversa bajo h es aba y, por lo tanto, h −1 (L 2 ) = {1}.Obsérvese que h(h −1 (L 2 )) = {aba} ≠ L 2 . Es fácil probar que h(h −1 (L)) ⊆ L y L ⊆ h −1 (h(L)) para todolenguaje L.Teorema 14 La clase <strong>de</strong> los conjuntos regulares es cerrada bajo homomorfismos y el inverso <strong>de</strong> un homomorfismo.Demostración : La clausura bajo homomorfismos es inmediata <strong>de</strong> la clausura bajo sustitución por conjuntosregulares, ya que todo homomorfismo es una sustitución por un conjunto regular en que cada h(a) tiene unsolo elemento.Para probar la clausura bajo el inverso <strong>de</strong> un homomorfismo, sea M = (Q, Σ, δ, q 0 , F ) un AFD que acepteL y sea h un homomorfismo <strong>de</strong> ∆ → Σ ∗ . Se construye un AFD, M ′ , que acepte h −1 (L) leyendo un símboloa ∈ ∆ y simulando M en h(a). Formalmente, sea M ′ = (Q, Σ, δ ′ , q 0 , F ) y se <strong>de</strong>fine δ ′ (q, a), para todo q ∈ Qy a ∈ ∆, como δ(q, h(a)). Nótese que h(a) pue<strong>de</strong> ser un string largo o ε, pero δ está <strong>de</strong>finida sobre todos losstrings por extensión. Es fácil mostrar, por inducción en |x|, que δ ′ (q 0 , x) = δ(q 0 , h(x)); es <strong>de</strong>cir, M ′ aceptax si y sólo si M acepta h(x). Esto es, L(M ′ ) = h −1 (L(M)).✷✷


72 CHAPTER 4. PROPIEDADES DE LOS LENGUAJES REGULARESEjemplo 65 Como se vio en un ejemplo anterior, {a N b N /N ≥ 1} no es un lenguaje regular. Intuitivamente,{0 N 10 N /N ≥ 1} no es regular por las mismas razones. Si se tuviera un AF, M, que aceptara {0 N 10 N /N ≥ 1},se podría aceptar {a N b N /N ≥ 1} simulando M en 0 por cada a, al ver la primera b, simular M en 10 y luegosimular M en 0 por cada b. Sin embargo, es necesario probar que {0 N 10 N /N ≥ 1} no es regular. Esto sepue<strong>de</strong> hacer aplicando el lema <strong>de</strong> bombeo, pero es más simple utilizar operaciones que conservan regularidadpara convertir {0 N 10 N /N ≥ 1} en {a N b N /N ≥ 1}. Por lo tanto {0 N 10 N /N ≥ 1} no pue<strong>de</strong> ser regular.Sean h 1 y h 2 los homomorfismosh 1 (0) = 0 h 2 (0) = ah 1 (1) = 10 h 2 (1) = bh 1 (2) = 0 h 2 (2) = bEntoncesporqueh 2 (h −11 ({0N 10 N /N ≥ 1}) ∩ 0 ∗ 12 ∗ ) = {a N b N /N ≥ 1}h −11 ({0N 10 N /N ≥ 1}) = (0 + 2) ∗ 1(0 + 2) ∗en que el número <strong>de</strong> símbolos <strong>de</strong>spués <strong>de</strong>l 1 es uno menor que los anteriores al 1.Por lo tantoh −11 ({0N 10 N /N ≥ 1}) ∩ 0 ∗ 12 ∗ = {0 N 12 N−1 /N ≥ 1}Si {0 N 10 N /N ≥ 1} fuera regular, dado que el homomorfismo inverso <strong>de</strong> homomorfismos e interseccióncon un conjunto regular preservan la propiedad <strong>de</strong> ser regular, se concluiría que {a N b N /N ≥ 1} es regular,lo que es una contradicción. Por lo tanto {0 N 10 N /N ≥ 1} no pue<strong>de</strong> ser regular.✷✷4.3 Algoritmos <strong>de</strong> DecisiónEl tipo <strong>de</strong> pregunta que nos preocupa incluye: ¿es un lenguaje regular dado vacío, finito o infinito?, ¿esun conjunto regular igual a otro?, etc. Para estos propósitos se supondrá que los lenguajes regulares están<strong>de</strong>scritos por autómatas finitos.Teorema 15 El conjunto <strong>de</strong> strings aceptado por un autómata finito M con N estados es• No vacío, si y sólo si M acepta un string <strong>de</strong> largo inferior a N.• Infinito, si y sólo si M acepta un string <strong>de</strong> largo l, con N ≤ l < 2N.Por lo tanto existe un algoritmo para <strong>de</strong>terminar si un autómata finito acepta cero, un número finito oun número infinito <strong>de</strong> sentencias.Demostración : Suponga que M acepta un conjunto no vacío. Sea w un string tan corto como cualquierotro aceptado. Por el lema <strong>de</strong> bombeo, |w| < N, porque si fuera |w| ≥ N, entonces w = uvy y uy sería aúnmás corto y estaría en el lenguaje. Una contradicción con el hecho que w es el string más corto. La otradirección es obvia.Si w ∈ L(M) y N ≤ |w| < 2N, por el lema <strong>de</strong> bombeo L(M) es infinito. Esto es, w = w 1 w 2 w 3 y paratodo i ≥ 0, w 1 w2 i w 3 ∈ L. Por el otro lado, si L(M) es infinito, entonces existe w en L(M) con |w| ≥ N;si |w| < 2N no hay problemas. Si ninguna palabra tiene longitud entre (N) y (2N − 1), sea w <strong>de</strong> largoal menos 2N, pero tan corta como cualquiera <strong>de</strong> longitud mayor o igual a 2N. Por el lema <strong>de</strong> bombeo, se


4.3. ALGORITMOS DE DECISIÓN 73pue<strong>de</strong> escribir w = w 1 w 2 w 3 con 1 ≤ |w 2 | ≤ N y w 1 w 3 ∈ L(M). Por lo tanto, ya sea w no fue el más cortostring <strong>de</strong> largo 2N o más, o |w 1 w 3 | está entre N y 2N − 1, una contradicción en cualquier caso.El algoritmo para <strong>de</strong>cidir si L(M) es vacío es: “Vea si algún string <strong>de</strong> longitud hasta N está en L(M)”.Es claro que este método tiene garantizado terminar. Para <strong>de</strong>cidir si L(M) es infinito: “Vea si algún string<strong>de</strong> largo entre N y 2N − 1 está en L(M)”. Nuevamente, hay un procedimiento que está garantizado <strong>de</strong>terminar.Debe notarse que los algoritmos sugeridos por este teorema son tremendamente ineficientes. Sin embargo,se pue<strong>de</strong> verificar si un AFD acepta el conjunto vacío al eliminar <strong>de</strong> su diagrama <strong>de</strong> transición todos losestados no alcanzables <strong>de</strong>s<strong>de</strong> el estado inicial. Si aún queda uno o más estados finales, el lenguaje es no vacío.Luego, sin cambiar el lenguaje aceptado, es posible eliminar todos los estados que no son finales y <strong>de</strong>s<strong>de</strong> loscuales no se pue<strong>de</strong> llegar a un estado final. El AFD acepta un lenguaje infinito si y sólo si el diagrama queresulta tiene un ciclo. El mismo método se pue<strong>de</strong> usar para un AFND, pero hay que verificar que haya unciclo con etiqueta distinta <strong>de</strong> ε.Ahora se mostrará que hay un algoritmo para <strong>de</strong>terminar si dos AF aceptan el mismo lenguaje.Teorema 16 Existe un algoritmo para <strong>de</strong>terminar si dos autómatas finitos aceptan el mismo lenguaje (es<strong>de</strong>cir, son equivalentes).Demostración : Sean M 1 y M 2 dos AF que aceptan los lenguajes L 1 y L 2 respectivamente. Por los teoremasanteriores, (L 1 ∩ L 2 ) ∪ (L 1 ∩ L 2 ) es aceptado por un AF, M 3 . Es fácil ver que M 3 acepta un string si y sólosi L 1 ≠ L 2 . Por lo tanto, por el teorema anterior, existe un algoritmo que <strong>de</strong>termina si L 1 = L 2 .✷✷


74 CHAPTER 4. PROPIEDADES DE LOS LENGUAJES REGULARES


Chapter 5ACEPTACIÓN Y GENERACIÓNDE LENGUAJES LIBRES DECONTEXTOLos lenguajes libres <strong>de</strong> contexto, como los conjuntos regulares, tienen gran importancia práctica, especialmentepara <strong>de</strong>finir lenguajes <strong>de</strong> programación, para formalizar la i<strong>de</strong>a <strong>de</strong> “parsing”, simplificar la traducción<strong>de</strong> lenguajes <strong>de</strong> programación, etc.En este capítulo estudiaremos los lenguajes libres <strong>de</strong> contexto, concentrándonos fundamentalmente ensus mecanismos <strong>de</strong> aceptación y generación.Las primeras dos secciones abordan los mecanismos <strong>de</strong> aceptación. Tal como las expresiones regularestienen un autómata equivalente, el autómata finito, las gramáticas libres <strong>de</strong> contexto, también tienen unamáquina como contraparte: el autómata apilador (pushdown). La equivalencia es, en este caso, un pocomenos satisfactoria, ya que el autómata apilador es un dispositivo no <strong>de</strong>terminístico en que la versión<strong>de</strong>terminística sólo acepta un subconjunto <strong>de</strong> los lenguajes libres <strong>de</strong> contexto. Por fortuna, este subconjuntoincluye la sintaxis <strong>de</strong> la mayoría <strong>de</strong> los lenguajes <strong>de</strong> programación.En las restantes secciones se estudian las gramáticas libres <strong>de</strong> contexto, como mecanismos <strong>de</strong> generación<strong>de</strong> lenguajes libres <strong>de</strong> contexto.5.1 Autómatas ApiladoresEl autómata apilador es básicamente un autómata finito con control no sólo sobre la cinta con el input, sinotambién sobre un stack con capacidad infinita.Estos dispositivos pue<strong>de</strong>n utilizarse para reconocer lenguajes no regulares. El conjunto L = {wcw r /w ∈{0, 1} ∗ } es un lenguaje libre <strong>de</strong> contexto generado por la gramáticaS → 0S0|1S1|cNo es difícil probar que L no pue<strong>de</strong> ser regular, es <strong>de</strong>cir no pue<strong>de</strong> ser aceptado por ningún autómatafinito. Para aceptar L se hará uso <strong>de</strong> un control finito con dos estados, q 1 y q 2 , y <strong>de</strong> un stack en que sepondrán bolitas (símbolos) azules, ver<strong>de</strong>s y rojas. El dispositivo tendrá las siguientes reglas <strong>de</strong> operación:1. La máquina comienza con una bolita roja puesta en el stack y con el control finito en estado q 1 .2. Si el input tiene un símbolo 0 y el autómata está en estado q 1 , se pone una bolita azul en el stack. Siel símbolo <strong>de</strong> entrada es un 1 y está en estado q 1 , se pone una bolita ver<strong>de</strong>. En ambos casos el controlpermanece en estado q 1 .75


76 CHAPTER 5.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES LIBRES DE CONTEXTO3. Si el símbolo <strong>de</strong> entrada es una c y el control está en estado q 1 , el control cambia a estado q 2 sinmodificar el stack.4. Si el símbolo <strong>de</strong> entrada es un 0 y el dispositivo está en estado q 2 con una bolita azul (que representa un0) en el tope <strong>de</strong>l stack, la bolita es removida <strong>de</strong>l stack. Si el símbolo <strong>de</strong> entrada es un 1 y el dispositivoestá en estado q 2 con una bolita ver<strong>de</strong> (que representa un 1) en el tope <strong>de</strong>l stack, la bolita también esremovida <strong>de</strong>l stack. En ambos casos el control permanece en estado q 2 .5. Si el dispositivo está en estado q 2 y hay una bolita roja en el tope <strong>de</strong>l stack, la bolita es removida sinesperar input.6. Para todos los casos no <strong>de</strong>scritos anteriormente, el autómata no pue<strong>de</strong> moverse.Las reglas <strong>de</strong> operación prece<strong>de</strong>ntes están resumidas en la siguiente tabla:Color <strong>de</strong> la Bolita Estado <strong>de</strong>l Símbolo <strong>de</strong> Entradaen el Tope <strong>de</strong>l Stack Control Finito 0 1 cAzul q 1 Poner bolita Azul Poner bolita Ver<strong>de</strong>Permanece en q 1 Permanece en q 1 Cambiar a q 2q 2 Remover bolitaPermanece en q 2Ver<strong>de</strong> q 1 Poner bolita Azul Poner bolita Ver<strong>de</strong>Permanece en q 1 Permanece en q 1 Cambiar a q 2q 2Remover bolita Ver<strong>de</strong>Permanece en q 2Roja q 1 Poner bolita Azul Poner bolita Ver<strong>de</strong>Permanece en q 1 Permanece en q 1 Cambiar a q 2Sin esperar input remover bolita <strong>de</strong>l Stackq 2Se dice que el dispositivo así <strong>de</strong>scrito acepta un string si al procesar el último símbolo <strong>de</strong>l string, el stack<strong>de</strong> bolitas se vacía. Nótese que una vez vacío el stack, no más movidas son posibles.Esencialmente el dispositivo anterior funciona <strong>de</strong> la siguiente forma. En estado q 1 el dispositivo construyeuna imagen <strong>de</strong> su input, poniendo una bolita azul por cada 0 y una ver<strong>de</strong> por cada 1 en el string <strong>de</strong> entrada.Cuando el input es una c el autómata entra a estado q 2 . A continuación, el input es comparado con el stackal remover una bolita azul por cada 0 y una ver<strong>de</strong> por cada 1. Si la bolita es <strong>de</strong> color equivocado respecto<strong>de</strong>l símbolo <strong>de</strong> entrada, el autómata se <strong>de</strong>tiene sin procesar más input. Si todas las bolitas correpon<strong>de</strong>n,la bolita roja que está en el fondo <strong>de</strong>l stack aparece, y es inmediatamente removida. El stack se vacía y elstring es aceptado. Todas las bolitas serán removidas sólo si el string que sigue a la c es el reverso <strong>de</strong>l prefijoanterior a la c.5.2 DefinicionesEn esta sección se formalizará el concepto <strong>de</strong> autómata apilador (AA o PDA por su nombre en inglés). LosAA tendrán una cinta <strong>de</strong> entrada, un control finito y un stack. El stack es un string <strong>de</strong> símbolos tomados<strong>de</strong> algún alfabeto. El símbolo <strong>de</strong> más a la izquierda es el que se consi<strong>de</strong>ra al tope <strong>de</strong>l stack. El dispositivoserá no <strong>de</strong>terminístico, teniendo algún número finito <strong>de</strong> alternativas en cada situación. Las movidas serán<strong>de</strong> dos tipos. El primer tipo utiliza símbolos <strong>de</strong> entrada; <strong>de</strong>pendiendo <strong>de</strong>l símbolo <strong>de</strong> entrada, <strong>de</strong>l símbolo enel tope <strong>de</strong>l stack y el estado <strong>de</strong>l control finito, un número <strong>de</strong> alternativas es posible; cada alternativa consta<strong>de</strong> un próximo estado para el control finito y un (posiblemente vacío) string <strong>de</strong> símbolos para reemplazarel símbolo al tope <strong>de</strong>l stack. Después <strong>de</strong> seleccionar una alternativa, la cabeza lectora avanza al próximosímblo <strong>de</strong>l string <strong>de</strong> entrada.


5.2. DEFINICIONES 77El segundo tipo <strong>de</strong> movida, llamado movida vacía (movida- ε), es similar a la anterior, con la excepción<strong>de</strong> que no se usa el símbolo <strong>de</strong> entrada y la cabeza lectora no se avanza. Este segundo tipo <strong>de</strong> movidaspermite al AA manipular el stack sin consumir símbolos <strong>de</strong> entrada.Finalmente se <strong>de</strong>be <strong>de</strong>finir el lenguaje que acepta un AA. Hay dos formas naturales <strong>de</strong> hacerlo. Laprimera, que ya se ha sugerido, es <strong>de</strong>finir el lenguaje aceptado como el conjunto <strong>de</strong> todos los inputs parael cual alguna secuencia <strong>de</strong> movidas hace que el autómata vacíe su stack. Este es el lenguaje aceptado porstack vacío.La segunda forma <strong>de</strong> <strong>de</strong>finir el lenguaje aceptado es similar a la forma en que un AF acepta strings. Estoes, se <strong>de</strong>signa a algunos estados como estados finales y se <strong>de</strong>fine el lenguaje aceptado como el conjunto <strong>de</strong>todos los strings <strong>de</strong> entrada para los cuales alguna secuencia <strong>de</strong> movidas hace que el AA entre a un estadofinal.Como se verá, las dos <strong>de</strong>finiciones <strong>de</strong> aceptación son equivalentes en el sentido que si un conjunto esaceptado por stack vacío por algún AA, entonces es aceptado por estado final por algún otro AA, y viceversa.Aceptación por estado final es la noción más común, pero es más fácil probar el teorema básico para losautómatas apiladores usando aceptación por stack vacío. Ese teorema dice que un lenguaje es aceptado porun AA si y sólo si es un lenguaje libre <strong>de</strong> contexto.Formalmente, un autómata apilador M es una séxtupla (Q, Σ, Γ, δ, q 0 , Z 0 , F ) en queQ es un conjunto finito <strong>de</strong> estadosΣ es el alfabeto <strong>de</strong> entradaΓ es el alfabeto <strong>de</strong>l stackq 0 es el estado inicial (q 0 ∈ Q)Z 0es un símbolo especial <strong>de</strong>l stack (Z 0 ∈ Γ), llamado símbolo inicialF ⊆ Q es el conjunto <strong>de</strong> estados finalesδ es una función <strong>de</strong> Q × (Σ ∪ ε) × Γ a 2 Q×Γ∗ (subconjuntos finitos <strong>de</strong> Q × Γ ∗ )Por convención se usarán letras minúsculas <strong>de</strong>l comienzo <strong>de</strong>l alfabeto para los símbolos <strong>de</strong> entrada y <strong>de</strong>lfinal <strong>de</strong>l alfabeto para strings <strong>de</strong> símbolos <strong>de</strong> entrada. Letras mayúsculas serán símbolos <strong>de</strong>l stack y letrasgriegas indican strings <strong>de</strong> símbolos <strong>de</strong>l stack.La interpretación <strong>de</strong>δ(q, a, Z) = {(p 1 , γ 1 ), (p 2 , γ 2 ), . . . , (p M , γ M )}en que q y p i , (1 ≤ i ≤ M) son estados en Q, a ∈ Σ, Z ∈ Γ y γ i ∈ Γ ∗ , (1 ≤ i ≤ M), es que el autómataapilador en estado q, viendo el símbolo <strong>de</strong> entrada a y teniendo a Z en el tope <strong>de</strong>l stack pue<strong>de</strong>, para cualquieri, entrar a estado p i , reemplazar el símbolo Z por el string γ i en el stack y avanzar un lugar la cabeza <strong>de</strong>lectura. Se adopta la convención que el símbolo más a la izquierda en γ i será el que queda al tope <strong>de</strong>l stack.Nótese que no es posible elegir un estado p i y un string γ j , para j ≠ i, en una sola movida.La interpretación <strong>de</strong>δ(q, ε, Z) = {(p 1 , γ 1 ), (p 2 , γ 2 ), . . . , (p M , γ M )}es que el autómata en estado q, in<strong>de</strong>pendientemente <strong>de</strong>l símbolo <strong>de</strong> entrada y teniendo Z al tope <strong>de</strong>l stack,pue<strong>de</strong> entrar al estado p i y reemplazar Z por γ i , para cualquier i, 1 ≤ i ≤ M. En este caso, la cabeza lectorano es movida.Ejemplo 66 Descripción formal <strong>de</strong>l autómata apilador que acepta {wcw r /w ∈ {0, 1} ∗ } por stack vacío.M = ({q 1 , q 2 }, {0, 1, c}, {A, V, R}, δ, q 1 , R, ∅)


78 CHAPTER 5.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES LIBRES DE CONTEXTOcon la función δ <strong>de</strong>finida como sigue:δ(q 1 , 0, R) = {(q 1 , AR)} δ(q 1 , 1, R) = {(q 1 , V R)}δ(q 1 , 0, A) = {(q 1 , AA)} δ(q 1 , 1, A) = {(q 1 , V A)}δ(q 1 , 0, V ) = {(q 1 , AV )} δ(q 1 , 1, V ) = {(q 1 , V V )}δ(q 1 , c, R) = {(q 2 , R)}δ(q 1 , c, A) = {(q 2 , A)}δ(q 1 , c, V ) = {(q 2 , V )}δ(q 2 , 0, A) = {(q 2 , ε)} δ(q 2 , 1, V ) = {(q 2 , ε)}δ(q 2 , ε, R) = {(q 2 , ε)}Nótese que para cada movida en que el autómata escribe un símbolo en el tope <strong>de</strong>l stack, δ tiene un valor(q, γ) en que |γ| = 2. Por ejemplo δ(q 1 , 0, R) = {(q 1 , AR)}. Si γ fuera <strong>de</strong> longitud 1, el AA simplementereemplazaría el símbolo al tope <strong>de</strong>l stack por un nuevo símbolo, sin incrementar el tamaño <strong>de</strong>l stack. Estohace que si γ es ε, el resultado es un pop <strong>de</strong>l stack.Nótese también que la regla δ(q 2 , ε, R) = {(q 2 , ε)} significa que el AA en estado q 2 con R al tope <strong>de</strong>lstack pue<strong>de</strong> borrar esa R in<strong>de</strong>pendientemente <strong>de</strong>l símbolo <strong>de</strong> entrada. En este caso, la cabeza lectora no seavanza, y en realidad no es necesario que hubiese input adicional.Para <strong>de</strong>scribir formalmente la configuración en que se encuentra un AA en un instante dado, se <strong>de</strong>fineuna <strong>de</strong>scripción instantánea (DI). La DI <strong>de</strong>be, por supuesto, registrar el estado y el contenido <strong>de</strong>l stack; sinembargo es útil que a<strong>de</strong>más incluya el input aún no procesado. Por lo tanto una DI se <strong>de</strong>fine como una triple(q, w, γ) en que q es un estado, w un string <strong>de</strong> símbolos <strong>de</strong> entrada y γ un string <strong>de</strong> símbolos el stack.Si M = (Q, Σ, Γ, δ, q 0 , Z 0 , F ) es un AA, se dice que (q, aw, Zα) ⊢ M (p, w, βα) si δ(q, a, Z) contiene (p, β).Nótese que a pue<strong>de</strong> ser tanto ε como algún símbolo <strong>de</strong> entrada, en esta <strong>de</strong>finición. Por ejemplo, en el AA<strong>de</strong>l ejemplo anterior el hecho <strong>de</strong> que (q 1 , AV ) esté en δ(q 1 , 0, V ) asegura que(q 1 , 011, V V R) ⊢ (q 1 , 11, AV V R)Se usa ⊢ M∗para la clausura reflexiva y transitiva <strong>de</strong>⊢M . Esto es, I ⊢ M∗I para toda DI I, y si I⊢M∗J yJ ⊢ M∗K entonces I⊢M∗K. Se escribirá I⊢MiK si la <strong>de</strong>scripción instantánea I se pue<strong>de</strong> convertir a K <strong>de</strong>spués<strong>de</strong> exactamente i movidas.Para un AA, M = (Q, Σ, Γ, δ, q 0 , Z 0 , F ), se <strong>de</strong>fine L(M), el lenguaje aceptado por estado final a{w/(q 0 , w, Z 0 ) ⊢ M∗(p, ε, γ) con p ∈ F y γ ∈ Γ ∗ }y se <strong>de</strong>fine N(M), el lenguaje aceptado por stack vacío a{w/(q 0 , w, Z 0 ) ⊢ M∗(p, ε, ε) con p ∈ Q}Si la aceptación es por stack vacío, el conjunto <strong>de</strong> estados finales es irrelevante y normalmente, en esoscasos, se <strong>de</strong>fine como el conjunto vacío.Ejemplo 67 El siguiente autómata apilador acepta el lenguaje {ww r /w ∈ {0, 1} ∗ }, por stack vacío.M = ({q 1 , q 2 }, {0, 1}, {R, A, V }, δ, q 1 , R, ∅)δ(q 1 , 0, R) = {(q 1 , AR)}δ(q 1 , 1, R) = {(q 1 , V R)}δ(q 1 , 0, A) = {(q 1 , AA), (q 2 , ε)}δ(q 1 , 0, V ) = {(q 1 , AV )}δ(q 1 , 1, A) = {(q 1 , V A)}δ(q 1 , 1, V ) = {(q 1 , V V ), (q 2 , ε)}δ(q 2 , 0, A) = {(q 2 , ε)}δ(q 2 , 1, V ) = {(q 2 , ε)}δ(q 1 , ε, R) = {(q 2 , ε)}δ(q 2 , ε, R) = {(q 2 , ε)}✷


5.2. DEFINICIONES 79En la tercera y sexta reglas, M tiene una elección <strong>de</strong> entre dos movidas. M pue<strong>de</strong> <strong>de</strong>cidir que haencontrado la mitad <strong>de</strong>l string y elegir la segunda alternativa: ir al estado q 2 y tratar <strong>de</strong> que el resto <strong>de</strong> lossímbolos <strong>de</strong> entrada coincidan con los <strong>de</strong>l stack. Si M adivina correctamente y el string <strong>de</strong> entrada era <strong>de</strong> laforma ww r , entonces los símbolos van a coincidir, M va a vaciar su stack y por lo tanto aceptará el string.Igual que en los AF, un AA no <strong>de</strong>terminístico M acepta un string si hay una secuencia <strong>de</strong> elecciones que lohacen vaciar su stack. M siempre adivina (escoge) bien, porque una elección equivocada no causa el rechazo<strong>de</strong> un string. Un string se rechaza sólo si no hay elección correcta posible. La Figura 5.1 muestra las DIaccesibles cuando M procesa el string 001100.Inicial : (q 1,001100,R)❄(q 1,01100,AR)❄(q 1,1100,AAR)❄(q 1,100,VAAR)❄(q 1,00,VVAAR)❄(q 1,0,AVVAAR)❄(q , 001100,R)✏✮ ✏✏✏1❄(q 1,ε,AAVVAAR)(q 2,ε,VVAAR)✲❙❙❙❙✇❙❙❙❙✇(q 2,001100,ε)(q 2,1100,R)❄(q 2,1100,ε)(q 2,00,AAR)❄(q 2,0,AR)❄(q 2,ε,R)✲ (q 2,ε,ε)❄AceptaFigure 5.1: Descripciones instantáneas al procesar el string 001100El autómata apilador <strong>de</strong>l primer ejemplo es <strong>de</strong>terminístico en el sentido que a lo más una sola movida esposible dada una DI. Formalmente, se dice que AA M = (Q, Σ, Γ, δ, q 0 , Z 0 , F ) es <strong>de</strong>terminístico ssi1. Para cada q ∈ Q y Z ∈ Γ, cuando δ(q, ε, Z) no es vacío, entonces δ(q, a, Z) es vacío para todo a ∈ Σ.2. Para ningún q ∈ Q, Z ∈ Γ y a ∈ Σ ∪ {ε}, δ(q, a, Z) contiene más <strong>de</strong> un elemento.La condición (1) previene la posibilidad <strong>de</strong> elegir entre una movida in<strong>de</strong>pendiente <strong>de</strong>l símbolo <strong>de</strong> entrada(movida- ε) y una movida que envuelva un símbolo. La condición (2) previene una elección en la movidapara cualquier (q, a, Z) o para (q, ε, Z).Contrario al caso <strong>de</strong> los autómatas finitos, un autómata apilador se supone no <strong>de</strong>terminístico. Para losAF, los mo<strong>de</strong>los <strong>de</strong>terminístico y no <strong>de</strong>terminístico eran equivalentes respecto <strong>de</strong> los lenguajes aceptados.Esto no es cierto para los AA. De hecho, ww r es aceptado por un AA no <strong>de</strong>terminístico, pero no existe unAA <strong>de</strong>terminístico que lo acepte.✷


80 CHAPTER 5.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES LIBRES DE CONTEXTO5.3 Gramáticas Libres <strong>de</strong> ContextoUna gramática libre <strong>de</strong> contexto es un conjunto finito <strong>de</strong> variables (también llamadas no-terminales o categoríassintácticas) cada una <strong>de</strong> las cuales representa un lenguaje. Estos lenguajes <strong>de</strong>scritos por las variablesse <strong>de</strong>finen recursivamente en términos <strong>de</strong> otros y <strong>de</strong> símbolos llamados terminales. Las reglas que relacionanlas variables son llamadas producciones. Una producción típica dirá que el lenguaje asociado a una variableestá formado por strings generados al concatenar strings <strong>de</strong> los lenguajes <strong>de</strong> algunas otras variables y algunosterminales.La motivación original para las gramáticas libres <strong>de</strong> contexto fue la <strong>de</strong>scripción <strong>de</strong> lenguajes naturales.Por ejemplo, es posible escribir reglas como:< sentencia > → < sujeto > < predicado >< sujeto > → < sujeto > < adjetivo >< sujeto > → < artículo > < sustantivo >< adjetivo > → < roja >< sustantivo > → < casa >< artículo > → < la >en que las categorías sintácticas están escritas entre paréntesis en ángulo (< >), y los terminales sin ellos.Por ejemplo, < sujeto > es una categoría sintáctica y casa es un terminal.El significado <strong>de</strong> la regla< sentencia >→< sujeto > < predicado >es que una manera <strong>de</strong> formar una sentencia (un string en el lenguaje <strong>de</strong> la categoría sintáctica < sentencia >)es tomar un sujeto y seguirlo <strong>de</strong> un predicado. El significado <strong>de</strong> la regla< sustantivo >→< casa >es que el string que consta <strong>de</strong>l símbolo terminal casa, está en el lenguaje <strong>de</strong> la categoría < sustantivo >.Nótese que casa es un solo símbolo terminal en este caso, no un string <strong>de</strong> 4 símbolos.Las gramáticas libres <strong>de</strong> contexto no se consi<strong>de</strong>ran, en general, apropiadas para la <strong>de</strong>scripción <strong>de</strong> lenguajesregulares naturales como el Castellano. Por ejemplo, si se extien<strong>de</strong>n las producciones anteriores a todo elCastellano, es posible <strong>de</strong>rivar “frío” como un sujeto y “es caliente” como un predicado. Por lo tanto “frío escaliente” sería una sentencia, lo que no tiene sentido. Aún así, las gramáticas libres <strong>de</strong> contexto juegan unrol importante en lingüística computacional.Mientras los lingüistas estudiaban gramáticas libres <strong>de</strong> contexto, los cientistas <strong>de</strong> computación comenzarona <strong>de</strong>scribir los lenguajes <strong>de</strong> programación con una notación llamada “Backus-Naur Form (BNF)”;que en realidad correspon<strong>de</strong> a la notación para gramáticas libres <strong>de</strong> contexto con algunos cambios menoresy algunas abreviaciones en la <strong>de</strong>scripción. Este uso <strong>de</strong> las gramáticas libres <strong>de</strong> contexto ha simplificadoenormemente la <strong>de</strong>finición <strong>de</strong> los lenguajes <strong>de</strong> programación y la construcción <strong>de</strong> compiladores. La razón <strong>de</strong>este éxito es <strong>de</strong>bida, en parte, a la forma natural en que la mayoría <strong>de</strong> las construcciones <strong>de</strong> los lenguajes<strong>de</strong> programación se pue<strong>de</strong>n <strong>de</strong>scribir usando gramáticas. Por ejemplo, consi<strong>de</strong>re el siguiente conjunto <strong>de</strong>producciones.< expresion > → < expresion > + < expresion >< expresion > → < expresion > ∗ < expresion >< expresion > → (< expresion >)< expresion > → idque <strong>de</strong>fine las expresiones aritméticas con operadores + y ∗, y operandos representados por el símboloid. En ellas, < expresión > es la única variable y los terminales son los símbolos +, ∗, (, ) e id.Las dos primeras producciones indican que una expresión pue<strong>de</strong> estar compuesta por dos expresionesconectadas por un signo <strong>de</strong> suma o multiplicación. La tercera indica que una expresión encerrada porparéntesis es también una expresión. La última indica que un operando es también una expresión.Utilizando repetidamente las producciones, se pue<strong>de</strong>n obtener expresiones cada vez más complicadas.Por ejemplo,


5.4.CONFIGURACIÓN DE LAS GRAMÁTICAS LIBRES DE CONTEXTO 81< expresion > ⇒ < expresion > ∗ < expresion >⇒ (< expresion >)∗ < expresion >⇒ (< expresion >) ∗ id⇒ (< expresion > + < expresion >) ∗ id⇒ (< expresion > + < id >) ∗ id⇒ (< id > + < id >) ∗ idEl símbolo ⇒ <strong>de</strong>nota <strong>de</strong>rivación, esto es, el reemplazo <strong>de</strong> una variable por el lado <strong>de</strong>recho <strong>de</strong> una producciónpara esa variable. Así, la primera línea se obtiene por la segunda producción; la segunda línease obtiene al reemplazar la primera < expresión > <strong>de</strong> la línea anterior por el lado <strong>de</strong>recho <strong>de</strong> la terceraproducción. Utilizando la cuarta, primera, cuarta y cuarta producción se obtienen las <strong>de</strong>más líneas. Laúltima línea, ( + )∗id, contiene sólo terminales y es por lo tanto un string en el lenguaje <strong>de</strong>< expresión >.5.4 Configuración <strong>de</strong> las Gramáticas Libres <strong>de</strong> ContextoEn esta sección se formalizará la noción intuitiva <strong>de</strong> gramática, presentada en la sección anterior.Una gramática libre <strong>de</strong> contexto (CFG, por sus siglas en inglés: Context Free Grammar) o simplementegramática, es una cuádrupla,G = (V, T, P, S)en que V y T son conjuntos finitos <strong>de</strong> variables y terminales respectivamente. Se asume que V y T sonconjuntos disjuntos. P es un conjunto finito <strong>de</strong> producciones; cada producción es <strong>de</strong> la forma A → α en queA ∈ V y α es un string <strong>de</strong> símbolos sobre (V ∪ T ). Por último, S ∈ V es una variable especial llamada elsímbolo inicial (start symbol).Ejemplo 68 Si se usa E, en lugar <strong>de</strong> < expresión >, para la variable <strong>de</strong> la gramática anterior, es posibleexpresarla formalmente como({E}, {+, ∗, (, ), id}, P, E)en que P consta <strong>de</strong> las siguientes producciones,< E > → < E > + < E >< E > → < E > ∗ < E >< E > → (< E >)< E > → idEn la especificación <strong>de</strong> gramáticas se usarán las siguientes convenciones:• Las letras mayúsculas, A, B, C, D, E y S representan variables; S será el símbolo inicial• Las letras minúsculas a, b, c, d y e, los dígitos, símbolos y algunos strings como id, serán terminales• Las letras mayúsculas X, Y y Z representarán símbolos que pue<strong>de</strong>n ser terminales o variables• Las letras minúsculas u, v, w, x, y y z representan strings <strong>de</strong> terminales• Las letras griegas α, β y γ <strong>de</strong>notan strings <strong>de</strong> variables y terminalesUsando las convenciones anteriores, es posible <strong>de</strong>ducir cuáles son las variables, terminales y símboloinicial <strong>de</strong> una gramática con sólo examinar las producciones. Por lo tanto, normalmente una gramática se✷


82 CHAPTER 5.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES LIBRES DE CONTEXTOpresentará simplemente listando sus producciones. Si A → α 1 , A → α 2 , . . .,A → α N , son producciones parala variable A <strong>de</strong> alguna gramática, es posible expresarlas usando la notaciónA → α 1 | α 2 | . . . | α Nen que | es leído “o”. La gramática completa <strong>de</strong>l ejemplo anterior pue<strong>de</strong> escribirse comoE → E + E | E ∗ E | (E) | idAhora se <strong>de</strong>finirá formalmente el lenguaje generado por una gramática G = (V, T, P, S). Para ello esnecesario <strong>de</strong>sarrollar una notación que represente las <strong>de</strong>rivaciones.Primero, se <strong>de</strong>finen dos relaciones: ⇒ G y ∗ ⇒ G , entre strings en (V ∪ T ) ∗ . Si A → B es una producción enP y α y γ son strings cualesquiera en (V ∪ T ) ∗ , entoncesαAγ ⇒ GαβγSe dice que la producción A → β se le aplica al string αAγ para obtener αβγ, o que αAγ <strong>de</strong>rivadirectamente αβγ en la gramática G. Dos strings están relacionados por ⇒ G exactamente cuando el segundose obtiene <strong>de</strong>l primero por una aplicación <strong>de</strong> alguna producción.Suponga que α 1 , α 2 , . . . , α M son strings en (V ∪ T ) ∗ , con M ≥ 1, y queα 1⇒G α 2 , α 2⇒G α 3 , . . . , α M−1⇒G α M∗ ∗Entonces se dice que α 1⇒ G α M o que α 1 <strong>de</strong>riva α M en la gramática G. Esto es, ⇒ G es la clausurareflexiva y transitiva <strong>de</strong> ⇒ G. También, α⇒ ∗ G β si β proviene <strong>de</strong> α por la alicación <strong>de</strong> cero o más producciones<strong>de</strong> P . Nótese que α⇒ ∗ G α, para todo string α. Usualmente, si es claro cuál es la gramática G, se usa ⇒ enlugar <strong>de</strong> ⇒ G, y ⇒ ∗ en lugar <strong>de</strong> ⇒ ∗ G . También, si α <strong>de</strong>riva β en exactamente i pasos, se dice que α⇒β.iEl lenguaje generado por G, <strong>de</strong>notado por L(G), es el conjunto{w/w ∈ T ∗ y S ∗ ⇒ G w}esto es, un string está en L(G) si y sólo si• el string consiste sólo <strong>de</strong> terminales• el string es <strong>de</strong>rivable <strong>de</strong>s<strong>de</strong> SUn lenguaje se llamará lenguaje libre <strong>de</strong> contexto si es L(G) para alguna gramática libre <strong>de</strong> contexto G.Un string <strong>de</strong> terminales y variables, α, es llamado una forma sentencial si S ∗ ⇒ G α. Dos gramáticas se dicenequivalentes si L(G 1 ) = L(G 2 ).Ejemplo 69 Consi<strong>de</strong>re la gramática G = (V, T, P, S), con V = {S}, T = {a, b} y P dado porS → aSbS → abS es la única variable; a y b son terminales. Usando la primera producción N − 1 veces, seguidas <strong>de</strong> unaaplicación <strong>de</strong> la segunda producción, se obtiene:S ⇒ aSb ⇒ aaSbb ⇒ . . . ⇒ a N−1 Sb N−1 ⇒ a N b NA<strong>de</strong>más, sólo strings <strong>de</strong> la forma a N b N (N ≥ 1) están en L(G). Cada vez que S → aSb es usada, semantiene el número <strong>de</strong> S’s. Después <strong>de</strong> usar la producción S → ab, el número <strong>de</strong> S’s <strong>de</strong> la forma sentencialdisminuye en uno. Por lo tanto, ya que se empieza con S y ya que ambas producciones son para S, elúnico or<strong>de</strong>n en que ellas pue<strong>de</strong>n ser usadas es empleando S → aSb algún número <strong>de</strong> veces seguidas por unaaplicación <strong>de</strong> S → ab. Por lo tanto,L(G) = {a N b N /N ≥ 1}Este lenguaje es el ejemplo <strong>de</strong> un lenguaje libre <strong>de</strong> contexto que no es un lenguaje regular.


5.5. ÁRBOLES DE DERIVACIÓN 83 ✷Ejemplo 70 Consi<strong>de</strong>re la gramática G = (V, T, P, S), con V = {S, A, B}, T = {a, b} y P dado por lassiguientes produccionesS → aB A → bAAS → bA B → bA → a B → bSA → aS B → aBBEl lenguaje L(G) es el conjunto <strong>de</strong> todos los strings en T ∗ que tienen el mismo número (≥ 1) <strong>de</strong> a’s yb’s. Se probará, por inducción en la longitud <strong>de</strong>l string que• S ∗ ⇒w si y sólo si w tiene tantas a’s como b’s• A ∗ ⇒w si y sólo si w tiene una a más que b’s• B ∗ ⇒w si y sólo si w tiene una b más que a’sLa hipótesis es obviamente cierta si |w| = 1, ya que A ⇒ a y B ⇒ b y ningún string <strong>de</strong> largo 1 <strong>de</strong>terminales es <strong>de</strong>rivable <strong>de</strong> S. También, ya que todas las producciones, excepto A → a y B → b incrementanel largo <strong>de</strong> un string, ningún string <strong>de</strong> longitud 1, excepto a y b, son <strong>de</strong>rivables <strong>de</strong> A y B, ni ninguno es<strong>de</strong>rivable <strong>de</strong> S.Suponga ahora que la hipótesis inductiva es verda<strong>de</strong>ra para todo w <strong>de</strong> largo k − 1 ó menos. Se mostraráque se cumple para |w| = k. Si S ∗ ⇒w entonces la <strong>de</strong>rivación <strong>de</strong>be comenzar con S → a o S → bA. En elprimer caso, w = aw 1 con |w 1 | = k − 1 y B ⇒ w 1 . Por la hipótesis inductiva, el número <strong>de</strong> b’s en w 1 es 1más que el número <strong>de</strong> a’s; por lo tanto, w tiene igual número <strong>de</strong> b’s que <strong>de</strong> a’s. Un argumento similar esválido si la <strong>de</strong>rivación comienza con S → bA. Para la prueba en la otra dirección, esto es, si |w| = k y wtiene tantas a’s como b’s, entonces S ⇒ w, consi<strong>de</strong>re que el primer símbolo <strong>de</strong> w es una a o una b. Supongaque w = aw 1 ; pero |w 1 | = k − 1 y tiene una b más que a’s. Por la hipótesis inductiva entonces B ⇒ w 1 .Luego S ⇒ aB ∗ ⇒aw 1 = w. Un argumento similar es válido si el primer símbolo <strong>de</strong> w es una b.Debe ahora probarse las aserciones para A y B, pero se hacen en forma similar a la <strong>de</strong> S.Otra gramática posible para este mismo lenguaje esS → abS → baS → aSbS → bSaS → SS5.5 Árboles <strong>de</strong> DerivaciónEs muy útil representar las <strong>de</strong>rivaciones como árboles. Estos árboles, llamados árboles <strong>de</strong> <strong>de</strong>rivación (o<strong>de</strong> parse) imponen una estructura en los strings <strong>de</strong> un lenguaje que es muy útil en aplicaciones como lacompilación <strong>de</strong> lenguajes <strong>de</strong> programación.Los vértices o nodos <strong>de</strong> un árbol <strong>de</strong> <strong>de</strong>rivación tienen etiquetas que son terminales, variables o el stringnulo ε. Si un nodo interior n tiene etiqueta A y los hijos <strong>de</strong> n tienen etiquetas X 1 , X 2 , . . . , X k (<strong>de</strong> izquierdaa <strong>de</strong>recha), entonces A → X 1 X 2 . . . X k <strong>de</strong>be ser una producción.La Figura 5.2 muestra el árbol para la <strong>de</strong>rivación <strong>de</strong> (id + id) ∗ id mostrada anteriormente.Nótese que si se leen las hojas <strong>de</strong> izquierda a <strong>de</strong>recha, se obtiene el string (id + id) ∗ id.Más formalmente, sea G = (V, T, P, S) una gramática libre <strong>de</strong> contexto. Un árbol es un árbol <strong>de</strong> <strong>de</strong>rivaciónsi• Cada vértice tiene una etiqueta que es un símbolo en V ∪ T ∪ ε✷


84 CHAPTER 5.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES LIBRES DE CONTEXTO✏✏✏ ✏✏✏ ∗ ✏✏✏ ✏✏✏( )id ✏✏✏ ✏✏✏ + ididFigure 5.2: Árbol <strong>de</strong> <strong>de</strong>rivación <strong>de</strong> (id + id) ∗ id• La etiqueta <strong>de</strong> la raíz es S• Si a es un nodo interior y tiene etiqueta A, <strong>de</strong>be cumplirse que A ∈ V• Si n tiene etiqueta A y sus hijos <strong>de</strong> izquierda a <strong>de</strong>recha son n 1 , n 2 , . . . , n k con etiquetas X 1 , X 2 , . . . ,X k respectivamente, entoncesA → X 1 X 2 . . . X k<strong>de</strong>be ser una producción en P• Si un vértice n tiene etiqueta ε, entonces n es una hoja y es el único hijo <strong>de</strong> su padreEjemplo 71 Consi<strong>de</strong>re la gramática G = ({S, A}, {a, b}, P, S) en que P está compuesto porS → aAS|aA → SbA|SS|bay el árbol <strong>de</strong> la Figura 5.3.Los vértices interiores son 1, 3, 4, 5 y 7. El vértice 1 tiene etiqueta S y sus hijos, <strong>de</strong> izquierda a <strong>de</strong>recha,tienen etiquetas a, A y S. Nótese que S → aAS es una producción en P . Igualmente, el nodo 3 tiene etiquetaA y las etiquetas <strong>de</strong> sus hijos son S, b y A (<strong>de</strong> izquierda a <strong>de</strong>recha). A → SbA también es una producción.Los vértices 4 y 5 tienen etiqueta S, sus únicos hijos tienen etiqueta a y S → a es una producción. Porúltimo, el vértice 7 tiene etiqueta A y sus hijos, <strong>de</strong> izquierda a <strong>de</strong>recha, tienen etiquetas b y a. A → batambién es una producción. Por lo tanto, este árbol es un árbol <strong>de</strong> <strong>de</strong>rivación para G.Es posible exten<strong>de</strong>r el or<strong>de</strong>n <strong>de</strong> los hijos <strong>de</strong> un nodo a un or<strong>de</strong>namiento <strong>de</strong> izquierda a <strong>de</strong>recha <strong>de</strong> todaslas hojas. De hecho, dos vértices cualesquiera, ninguno <strong>de</strong> los cuales es un ancestro <strong>de</strong>l otro, uno está a laizquierda <strong>de</strong>l otro. Dados dos vértices v 1 y v 2 , se siguen los caminos <strong>de</strong> cada uno <strong>de</strong> ellos hacia la raíz, hastaque se encuentran en un vértice w. Sean X 1 y X 2 los hijos <strong>de</strong> w en los caminos <strong>de</strong>s<strong>de</strong> v 1 y v 2 , respectivamente.Si v 1 no es ancestro <strong>de</strong> v 2 , o viceversa, X 1 ≠ X 2 . Si X 1 está a la izquierda <strong>de</strong> X 2 como hijos <strong>de</strong> w, entoncesv 1 está a la izquierda <strong>de</strong> v 1 . Por ejemplo, en el árbol anterior, si v 1 = 9 y v 2 = 11, entonces w = 3, X 1 = 5,X 2 = 7; y como 5 está a la izquierda <strong>de</strong> 7, se <strong>de</strong>duce que 9 está a la izquierda <strong>de</strong> 11.✷


5.5. ÁRBOLES DE DERIVACIÓN 85S ✤✜1✣✢✏✛✘❳ ❳ ❳a❳❳❳✏✏❳ ❳❳❳❳ ❳❳2✛✘✚✙ ✛✘ AS43✚✙✚✙ S ✛✘ ✏✏✏ ✏✏✏✛✘ A✛✘ a57✚✙ b✛✘✚✙✂ ❇ 86✂ ❇❇❇❇❇❇ ✚✙✚✙ ✂✂a ✤✜b ✂✛✘✂✛✘ a9✣✢ 1011✚✙ ✚✙Figure 5.3: Árbol correspondiente a la gramática GSe verá que un árbol <strong>de</strong> <strong>de</strong>rivación es una <strong>de</strong>scripción natural <strong>de</strong> la <strong>de</strong>rivación <strong>de</strong> una forma sentencial <strong>de</strong>la gramática G. Si se leen las etiquetas <strong>de</strong> las hojas <strong>de</strong> izquierda a <strong>de</strong>recha, se obtiene una forma sentencial.Este string es llamado el rédito (yield) <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>rivación.Se necesita también el concepto <strong>de</strong> subárbol. Un subárbol <strong>de</strong> un árbol <strong>de</strong> <strong>de</strong>rivación es un cierto vértice,todos sus <strong>de</strong>scendientes, los arcos que los conectan y sus etiquetas. Se ve igual que un árbol <strong>de</strong> <strong>de</strong>rivaciónexcepto que la etiqueta <strong>de</strong> su raíz pue<strong>de</strong> no ser el símbolo inicial <strong>de</strong> la gramática. Si la variable A es laetiqueta <strong>de</strong> la raíz, se dice que ese subárbol es un árbol-A. Por lo tanto, árbol-S es un sinónimo para árbol<strong>de</strong> <strong>de</strong>rivación si S es el símbolo inicial.Ejemplo 72 Consi<strong>de</strong>re la gramática y el árbol <strong>de</strong> <strong>de</strong>rivación <strong>de</strong>l ejemplo anterior que se reproduce a continuación:✟✟✟✟ a✑✑✑✑SS❳ ❳ ❳ ❳❳❳❳SA◗ ◗◗◗bA ❅ ❅❅a b aFigure 5.4: Árbol correspondiente a la gramática Ga


86 CHAPTER 5.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES LIBRES DE CONTEXTOEl rédito <strong>de</strong> ese árbol es: aabbaa. Nótese que en este caso todas las hojas tienen etiquetas que sonterminales; pero esto no es necesario, podría haber hojas con etiqueta ε o con una variable.Nótese que S⇒ ∗ G aabbaa por la <strong>de</strong>rivación siguiente:S ⇒ aAS ⇒ aSbAS ⇒ aabAS ⇒ aabbaS ⇒ aabbaaLa Figura 5.5 es un subárbol <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>rivación anterior; correspon<strong>de</strong> al vértice 3 el árbol original ysus <strong>de</strong>scendientes.✚✚✚SA❩ ❩❩❩b Aab❅❅❅aFigure 5.5: Vértice 3 <strong>de</strong>l subárbol originalEl rédito <strong>de</strong> este subárbol es abba. La etiqueta <strong>de</strong> su raíz es a y A ∗ ⇒ G abba a través <strong>de</strong> la siguiente<strong>de</strong>rivación:A ⇒ SbA ⇒ abA ⇒ abbaTeorema 17 Sea G = (V, T, P, S) una gramática libre <strong>de</strong> contexto. Entonces S ∗ ⇒ G α si y sólo si hay unárbol <strong>de</strong> <strong>de</strong>rivación para G cuyo rédito sea α.Demostración : Se probará algo un poco más general, que para cualquier A ∈ V , A⇒α ∗ si y sólo si existeun árbol-A cuyo rédito sea α.Suponga primero que α es el rédito <strong>de</strong> un árbol-A. Se prueba, por inducción en el número <strong>de</strong> vérticesinteriores en el árbol, que A⇒α. ∗ Si hay un solo nodo interior, el árbol <strong>de</strong>be lucir como el <strong>de</strong> la Figura 5.6.A✟ ❍✟✟✟ ✂ ❍❍❍❍✂✂X 1 X 2 ... X NFigure 5.6: Árbol <strong>de</strong> <strong>de</strong>rivación con un solo nodo interiorEn ese caso, X 1 , X 2 , . . . , X n <strong>de</strong>be ser α y A → α <strong>de</strong>be ser una producción <strong>de</strong> P , por la <strong>de</strong>finición <strong>de</strong> unárbol <strong>de</strong> <strong>de</strong>rivación. Luego, A ⇒ α.Supóngase ahora que el resultado es válido para árboles con hasta k − 1 nodos interiores. Sea α el rédito<strong>de</strong> un árbol-A con k nodos interiores, para algún k > 1. Consi<strong>de</strong>re los hijos <strong>de</strong> la raíz; no pue<strong>de</strong>n sertodos hojas ya que k > 1. Sean las etiquetas <strong>de</strong> los hijos X 1 , X 2 , . . . , X n , <strong>de</strong>s<strong>de</strong> la izquierda. EntoncesA → X 1 X 2 . . . X n es una producción en P . Note que en la discusión siguiente n ≥ 1.Si el i-ésimo hijo no es una hoja, es la raíz <strong>de</strong> un subárbol y X i ∈ V . El subárbol <strong>de</strong>be ser un árbol-X iy tendrá algún rédito α i . Si el vértice i es una hoja, sea α i = X i . Es fácil ver que si j < i, el vértice j y sus✷


5.5. ÁRBOLES DE DERIVACIÓN 87<strong>de</strong>scendientes están a la izquierda <strong>de</strong>l vértice j y <strong>de</strong> todos sus <strong>de</strong>scendientes. Por lo tanto, α = α 1 α 2 . . . α n .Un subárbol <strong>de</strong>be tener menos vértices interiores que el árbol original, a menos que sean el mismo árbol.Por la hipótesis <strong>de</strong> inducción, para cada vértice i que no es una hoja X i∗⇒αi . Si X i = α i , entonces X i∗⇒αi ,trivialmente. Poniendo todas estas <strong>de</strong>rivaciones parciales juntas,A ⇒ X 1 X 2 . . . X n∗⇒α1 X 2 . . . X n∗⇒α1 α 2 . . . X n∗⇒ . . .∗⇒α1 α 2 . . . α n = αPor lo tanto A ∗ ⇒ G α. Nótese que la anterior es sólo una <strong>de</strong> las posiblemente muchas <strong>de</strong>rivaciones que sepue<strong>de</strong>n obtener.Suponga ahora que A ∗ ⇒α. Se <strong>de</strong>be mostrar que existe un árbol-A con rédito α. Si A ⇒ α, entoncesA → α está en P y hay un árbol con rédito α que tiene la forma <strong>de</strong> la Figura 5.7.✟✟✟✟ XA✂✂✂❍ ❍❍❍❍1 X2 ... XN( con α = X1X 2... X N)Figure 5.7: Árbol-A con rédito αSupóngase ahora que para cualquier variable A, si A ∗ ⇒α en menos <strong>de</strong> k pasos, hay un árbol-A con réditoα. Suponga que A ∗ ⇒α por una <strong>de</strong>rivación <strong>de</strong> k pasos. Sea A ⇒ X 1 X 2 . . . X n el primero <strong>de</strong> estos pasos;cualquier símbolo <strong>de</strong> α <strong>de</strong>be ser uno <strong>de</strong> X 1 , X 2 , . . . , X n o ser <strong>de</strong>rivado <strong>de</strong> uno <strong>de</strong> ellos. También, la parte <strong>de</strong>α <strong>de</strong>rivada <strong>de</strong> X i <strong>de</strong>be estar a la izquierda <strong>de</strong> los símbolos <strong>de</strong>rivados <strong>de</strong> X j , si i < j. Por lo tanto es posibleescribir α como α 1 α 2 . . . α n , en que para cada i entre 1 y n,• α i = X i si X i es un terminal, y• X i∗⇒αi si X i es una variableSi X i es una variable, la <strong>de</strong>rivación <strong>de</strong> α i <strong>de</strong>s<strong>de</strong> ella <strong>de</strong>be tomar menos <strong>de</strong> k pasos. Por lo tanto, por lahipótesis <strong>de</strong> inducción, por cada X i que es una variable, hay un árbol-X i con rédito α i , que se <strong>de</strong>nominaráT i . Se construye un árbol-A con n hojas, con etiquetas X 1 , X 2 , . . . , X n . Cada vértice con etiqueta X i ∉ Tse reemplaza por el árbol T i . Si X i es un terminal no se reemplaza el nodo.A❛✁ ❧ ❛❛❛❛❛❛❛❛❛✁ ❧❧❧❧❧✁✘✘ ✘✘ ✘ ✘✘✘ ✘ ✘✘✘ ✘ ✘✘ ✦✦ ✦✦✦✦✦✦✦✁❛X 1 X2X 3XN-1X N✂❇✂❇✂❇✂✂❇✂( terminal ) ❇❇✂✂( terminal )❇❇✂❇✂❇✂❇✂✂T 2❇ ✂T3❇✂TN❇❇Figure 5.8: Construcción <strong>de</strong>l árbol-AEl rédito <strong>de</strong>l árbol así construido es α, como se quería.✷


88 CHAPTER 5.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES LIBRES DE CONTEXTOSi en cada paso <strong>de</strong> una <strong>de</strong>rivación se usa una producción para reemplazar la variable <strong>de</strong> más a la izquierdaen la forma sentencial, se dice que esa es una <strong>de</strong>rivación por la izquierda. Similarmente, si es la variable <strong>de</strong>más a la <strong>de</strong>recha, se dice que es una <strong>de</strong>rivación por la <strong>de</strong>recha.Si w ∈ L(G) para alguna gramática libre <strong>de</strong> contexto G, entonces w tiene al menos un árbol <strong>de</strong> <strong>de</strong>rivación;y correspondiente a un árbol <strong>de</strong> <strong>de</strong>rivación en particular, w tiene una única <strong>de</strong>rivación por la izquierda yuna única <strong>de</strong>rivación por la <strong>de</strong>recha. Por supuesto que w pue<strong>de</strong> tener varias <strong>de</strong>rivaciones por la izquierda yvarias <strong>de</strong>rivaciones por la <strong>de</strong>recha ya que pue<strong>de</strong> haber más <strong>de</strong> un árbol <strong>de</strong> <strong>de</strong>rivación para w. Sin embargo,es fácil mostrar que por cada árbol <strong>de</strong> <strong>de</strong>rivación hay sólo una <strong>de</strong>rivación por la izquierda y, también, unaúnica <strong>de</strong>rivación por la <strong>de</strong>recha.Ejemplo 73 La <strong>de</strong>rivación por la izquierda que correspon<strong>de</strong> al árbol <strong>de</strong>l ejemplo anterior esS ⇒ aAS ⇒ aSbAS ⇒ aabAS ⇒ aabbaS ⇒ aabbaay la <strong>de</strong>rivación por la <strong>de</strong>recha esS ⇒ aAS ⇒ aAa ⇒ aSbAa ⇒ aSbbaa ⇒ aabbaaUna gramática G tal que algún string tiene dos árboles <strong>de</strong> <strong>de</strong>rivación se dice que es ambigua. Una<strong>de</strong>finición equivalente es que algún string tenga más <strong>de</strong> una <strong>de</strong>rivación por la izquierda o más <strong>de</strong> una por la<strong>de</strong>recha. Un lenguaje libre <strong>de</strong> contexto para el cual toda gramática es ambigua, se dice que es un lenguajeinherentemente ambiguo. Más a<strong>de</strong>lante se verá que existen lenguajes inherentemente ambiguos.5.6 Simplificación <strong>de</strong> GramáticasHay varias maneras en que se pue<strong>de</strong> restringir el formato <strong>de</strong> las producciones, sin reducir el po<strong>de</strong>r generador<strong>de</strong> las gramáticas libres <strong>de</strong> contexto. Si L es un lenguaje libre <strong>de</strong> contexto no vacío, entonces pue<strong>de</strong> sergenerado por una gramática libre <strong>de</strong> contexto, G, con las siguientes propieda<strong>de</strong>s:• Cada variable y cada terminal <strong>de</strong> G aparece en la <strong>de</strong>rivación <strong>de</strong> algún string <strong>de</strong> L• No hay producciones <strong>de</strong> la forma A → B, en que A y B son variablesMás aún, si ε ∉ L, no es necesario que haya producciones <strong>de</strong> la forma A → ε.Primero se verá cómo eliminar símbolos inútiles <strong>de</strong> una gramática. Sea G = (V, T, P, S) una gramática.Un símbolo X es útil si existe una <strong>de</strong>rivaciónS ∗ ⇒αXβ ∗ ⇒wpara algún α, β y w, con w ∈ T ∗ . Si un símbolo no es útil, se dice que es inútil. Hay dos aspectos queconsi<strong>de</strong>rar en esto <strong>de</strong> la utilidad. Primero, algún string <strong>de</strong> terminales <strong>de</strong>be ser <strong>de</strong>rivable <strong>de</strong> X y, segundo,X <strong>de</strong>be ser parte <strong>de</strong> un string <strong>de</strong>rivable <strong>de</strong> S. Pero no sólo eso, sino que a<strong>de</strong>más X <strong>de</strong>be ocurrir en algunaforma sentencial <strong>de</strong> la que es posible <strong>de</strong>rivar un string <strong>de</strong>l lenguaje.Lema 3 Dada una gramática libre <strong>de</strong> contexto G = (V, T, P, S), con L(G) ≠ ∅, es posible encontrar efectivamenteuna gramática libre <strong>de</strong> contexto, G ′ = (V ′ , T, P ′ , S), tal que para todo A ∈ V ′ hay un w ∈ T ∗ parael cual A ∗ ⇒w.Demostración : Cada variable A con producciones A → w en P , pertenece a V ′ . Si A → X 1 X 2 . . . X n esuna producción en que cada X i es un terminal o una variable que ya está en V ′ , entonces es posible <strong>de</strong>rivarun string <strong>de</strong> terminales <strong>de</strong>s<strong>de</strong> A por una <strong>de</strong>rivación que comienza con A ⇒ X 1 X 2 . . . X n y, por lo tanto,A ∈ V ′ . El conjunto V ′ se pue<strong>de</strong> calcular con el siguiente algoritmo:✷


5.6.SIMPLIFICACIÓN DE GRAMÁTICAS 89(1) OLDV := ∅;(2) NEWV := {A/A → w ∈ P con w ∈ T ∗ };(3) while OLDV ≠ NEWV do begin(4) OLDV := NEWV;(5) NEWV := OLDV ∪{A/A → w ∈ P con α ∈ (T ∪ OLDV ) ∗ }end(6) V-PRIMA := NEWVEl algoritmo anterior encuentra todas las variables A que pertenecen a V ′ . Si A es puesto en NEWVen línea (2) ó (5) es porque <strong>de</strong>riva un string <strong>de</strong> terminales. Para <strong>de</strong>mostrar que NEWV tendrá todas esasvariables, se <strong>de</strong>be probar que si A <strong>de</strong>riva un string <strong>de</strong> terminales, w, entonces A será eventualmente puestoen NEWV. La prueba es por inducción en el largo <strong>de</strong> la <strong>de</strong>rivación A ∗ ⇒w. Nótese que P ′ es el conjunto <strong>de</strong>todas las producciones cuyos símbolos están en V ′ ∪ T .Base: Si el largo <strong>de</strong> la <strong>de</strong>rivación es 1, entonces A → w es una producción y A es puesto en NEWV en lalínea (2).∗Inducción: Sea A → X 1 X 2 . . . X n⇒w una <strong>de</strong>rivación con k pasos. Entonces se pue<strong>de</strong> escribir w =∗w 1 w 2 . . . w n , en que X i⇒wi , 1 ≤ i ≤ n, por una <strong>de</strong>rivación <strong>de</strong> menos <strong>de</strong> k pasos. Por la hipótesis<strong>de</strong> inducción los X i que sean variables son eventualmente puestos en NEWV. La condición <strong>de</strong> la sentenciawhile en la línea (3), justo <strong>de</strong>spués que el último <strong>de</strong> los X i se agrega a NEWV es falsa, ya que eseX i no está en OLDV. Por lo tanto hay una iteración adicional (al menos), en la que A será agregadaa NEWV en la línea (5). Sea V ′ el conjunto calculado en línea (6) y sea P ′ el conjunto <strong>de</strong> todaslas producciones cuyos símbolos están en V ′ ∪ T . Con toda seguridad G ′ = (V ′ , T, P ′ , S) satisface lapropiedad <strong>de</strong> que si A ∈ V ′ , entonces A⇒w, ∗ para algún w ∈ T ∗ . También, como cada <strong>de</strong>rivación en G ′es una <strong>de</strong>rivación <strong>de</strong> G, se sabe que L(G ′ ) ⊆ L(G). Si hubiera algún w ∈ L(G) y no en L(G ′ ), entoncescualquier <strong>de</strong>rivación <strong>de</strong> w ∈ G <strong>de</strong>be incluir una variable en V ′ − V o una producción en P − P ′ (queimplica que se usa una variable en V − V ′ ). Pero entonces existe una variable en V − V ′ que <strong>de</strong>rivaun string <strong>de</strong> terminales, una contradicción.Lema 4 Dada una gramática libre <strong>de</strong> contexto G = (V, T, P, S), es posible encontrar efectivamente unagramática libre <strong>de</strong> contexto equivalente, G ′ = (V ′ , T ′ , P ′ , S), tal que por cada X en V ′ ∪ T ′ existen α y β en(V ′ ∪ T ′ ) ∗ tales que S ∗ ⇒ G ′αXβ.Demostración : El conjunto V ′ ∪ T ′ <strong>de</strong> símbolos que aparecen en las formas sentenciales <strong>de</strong>rivables <strong>de</strong> G sepue<strong>de</strong> construir por un algoritmo iterativo. Ponga S en V ′ . Si A está en V ′ y A → α 1 |α 2 . . . α n , entoncesagregue a V ′ todas las variables que aparezcan en α 1 , α 2 , . . . o α n , y a T ′ todos los terminales en α 1 ,α 2 , . . . , α n . P ′ es el conjunto <strong>de</strong> producciones en P que sólo tienen símbolos <strong>de</strong> V ′ ∪ T ′ .Aplicando primero el lema anterior, y a continuación este último, es posible convertir una gramática enuna equivalente sin símbolos inútiles. Es interesante notar que si se utilizan en el or<strong>de</strong>n contrario es posibleque aún que<strong>de</strong>n símbolos inútiles.Teorema 18 Todo lenguaje libre <strong>de</strong> contexto no vacío es generado por una gramática libre <strong>de</strong> contexto queno tiene símbolos inútiles.Demostración : Sea L = L(G) un lenguaje libre <strong>de</strong> contexto no vacío. Sea G 1 el resultado <strong>de</strong> usar el primerlema en G, y sea G 2 el resultado <strong>de</strong> aplicar la construcción <strong>de</strong>l segundo lema a G 1 . Suponga que G 2 tieneun símbolo inútil X. Por el último lema, hay una <strong>de</strong>rivación S⇒ ∗ G 2 αXβ. Ya que todos los símbolos <strong>de</strong> G 2son símbolos <strong>de</strong> G 1 , <strong>de</strong>l primer lema se sabe que S⇒ ∗ G 1 αXβ⇒ ∗ G 1 w para algún string <strong>de</strong> terminales w. Porlo tanto, ningún símbolo en la <strong>de</strong>rivación αXβ⇒ ∗ G 1 w es eliminado por el segundo lema. Por lo tanto, X<strong>de</strong>riva un string <strong>de</strong> terminales en G 2 y no es inútil como se suponía.✷✷


90 CHAPTER 5. ACEPTACIÓN Y GENERACIÓN DE LENGUAJES LIBRES DE CONTEXTO ✷Ejemplo 74 Consi<strong>de</strong>re la gramáticaS → AB|aA → aPor el primer lema, se nota que ningún string <strong>de</strong> terminales es <strong>de</strong>rivable <strong>de</strong> B. Por lo tanto se elimina By la producción S → AB, con lo que quedaS → aA → aAplicándole el segundo lema, sólo S y a aparecen en formas sentenciales. Por lo tanto, ({S}, {a},{S → a}, S) es una gramática equivalente sin símbolos inútiles.Si se hubiera aplicado primero el segundo lema a la gramática original, se hubiera <strong>de</strong>ducido que todos lossímbolos aparecen en formas sentenciales. Aplicando luego el primer lema, se hubiese obtenido la segundagramática, que aún tiene un símbolo inútil, A.Se verá ahora cómo eliminar producciones <strong>de</strong> la forma A → ε, llamadas producciones vacías (ε-productions).Es claro que si ε ∈ L(G), no es posible eliminar todas las producciones vacías <strong>de</strong> G, pero siε ∉ L(G), esto es posible. El método consiste en <strong>de</strong>terminar, para cada variable A, si es posible que A⇒ε,∗en cuyo caso se dice que A es anulable. Es posible reemplazar cada producción B → X 1 X 2 . . . X n por todaslas producciones que se forman al eliminar algún subconjunto <strong>de</strong> aquellos X i ’s que son anulables, pero sinincluir B → ε, aún cuando todos los X i sean anulables.Teorema 19 Si L = L(G) para alguna gramática libre <strong>de</strong> contexto G = (V, T, P, S), entonces L−ε es L(G ′ )para alguna gramática libre <strong>de</strong> contexto, G ′ , sin símbolos inútiles ni producciones vacías.Demostración : Es posible <strong>de</strong>terminar los símbolos anulables <strong>de</strong> G con el siguiente algoritmo. Si A → εes una producción, entonces A es anulable. Si B → α es una producción y todos los símbolos <strong>de</strong> α sonanulables, entonces B es anulable. Este proceso se repite hasta que ningún otro símbolo anulable pueda serencontrado.El conjunto <strong>de</strong> producciones P ′ se construye como sigue. Si A → X 1 X 2 . . . X n está en P , agregue a P ′todas las producciones A → α 1 α 2 . . . α n , don<strong>de</strong>• si X i no es anulable, entonces α i = X i• si X i es anulable, entonces α i es X i o ε• no todos los α i ’s son εSea G ′′ = (V, T, P, S). Se mostrará que para todo A ∈ V y w ∈ T ∗ , A⇒ ∗ G ′′w ssi w ∉ ε y A⇒ ∗ G w.Sea A⇒ i G w y w ∉ ε. Se prueba, por inducción en i, que A⇒ ∗ G ′w. La base, i = 1, es trivial, pues A → w<strong>de</strong>be ser una producción en P . Dado que w ∉ ε, también es una producción en P ′ . Para la inducción, seai > 1. Entonces A ⇒ i−1∗GX 1 X 2 . . . X n ⇒ G w. Sea w = w 1 w 2 . . . w n , tal que para cada j, X j⇒wj en menos <strong>de</strong> i∗pasos. Si w j ≠ ε y X j es una variable, entonces por la hipótesis <strong>de</strong> inducción se tiene X j⇒ G ′′w j . Si w j = εentonces X j es anulable. Por lo tanto, A → β 1 β 2 . . . β n es una producción en P ′ , con β j = X j si w j ≠ ε yβ j = ε si w j = ε. Como w ≠ ε no todos los β j son ε. Por lo tanto se tiene una <strong>de</strong>rivaciónA ⇒ β 1 β 2 . . . β n∗⇒w1 β 2 . . . β n∗⇒w1 w 2 . . . β n∗⇒ . . .∗⇒w1 w 2 . . . w n = wen G ′′ . Es <strong>de</strong>cir, A ∗ ⇒ G ′′w.Suponga ahora que A i ⇒ G ′′w. Con toda seguridad w ≠ ε ya que G ′′ no tiene producciones vacías. Semuestra por inducción en i que A ∗ ⇒ G w. Para la base, i = 1, observe que A → w está en P ′ . Debe haber una✷


5.7. FORMAS NORMALES 91producción A → α en P tal que al eliminar algunos símbolos anulables <strong>de</strong>s<strong>de</strong> α, se obtiene w. Por lo tantohay una <strong>de</strong>rivación A⇒ ∗ G α⇒ ∗ G w en que α⇒w ∗ envuelve el <strong>de</strong>rivar ε <strong>de</strong> los símbolos anulables en α necesarios<strong>de</strong> eliminar para obtener w. Para la inducción, sea i > 1. Entonces AG ⇒ ′′X i−11X 2 . . . X n ⇒ G ′′w. Debe haberalguna producción A → β en P , tal que X 1 X 2 . . . X n se logre al eliminar algunos símbolos anulables <strong>de</strong> β.Por lo tanto, A⇒ ∗ ∗G X 1 X 2 . . . X n . Sea w = w 1 w 2 . . . w n , tal que para todo j, X j⇒ G ′′w j en menos <strong>de</strong> i pasos.∗Por la hipótesis <strong>de</strong> inducción, X j⇒ G w j si X j es una variable. Si X j es un terminal, entonces w j = X j y∗X j⇒ G w j se cumple trivialmente. Por lo tanto A⇒ ∗ G w.El último paso es aplicar el teorema anterior a G ′′ para obtener G ′ sin símbolos inútiles. Ya que lasconstrucciones <strong>de</strong> los lemas no introducen producciones nuevas, G ′ no tiene símbolos inútiles ni produccionesvacías. A<strong>de</strong>más, S⇒ ∗ G ′w si y sólo si w ≠ ε y S⇒ ∗ G w. Esto es, L(G ′ ) = L(G) = L(G) − {ε}.De aquí en a<strong>de</strong>lante se asumirá que las gramáticas no tienen símbolos inútiles. Ahora se prestará atencióna las producciones <strong>de</strong> la forma A → B cuyo lado <strong>de</strong>recho consiste sólo <strong>de</strong> una variable. Estas produccionesson llamadas producciones unitarias (unit productions). Todas las otras producciones, incluyendo aquellas<strong>de</strong> la forma A → a, o producciones vacías, son llamadas producciones no unitarias (non unit).Teorema 20 Todo lenguaje libre <strong>de</strong> contexto no vacío y sin ε es <strong>de</strong>finido por una gramática sin símbolosinútiles, producciones vacías y producciones unitarias.Demostración : Sea L un lenguaje libre <strong>de</strong> contexto sin ε y L = L(G) para alguna gramática G = (V, T, P, S).Por el teorema anterior se pue<strong>de</strong> asumir que G no tiene producciones vacías. Se construye un nuevo conjunto<strong>de</strong> producciones P ′ , incluyendo primero todas las producciones no unitarias <strong>de</strong> P . Luego, si A⇒ ∗ G B, conA, B ∈ V , se agrega a P ′ todas las producciones <strong>de</strong> la forma A → α, en que B → α es una producción nounitaria en P .Observe que es fácil saber si A⇒ ∗ G B, ya que G no tiene producciones vacías y siA ⇒ GB 1⇒G B 2⇒G . . . ⇒ GB M⇒G By alguna variable aparece dos veces en la secuencia, se pue<strong>de</strong> encontrar una secuencia más corta <strong>de</strong> produccionesunitarias que resulten en A ∗ ⇒ G B. Por lo tanto es suficiente consi<strong>de</strong>rar sólo aquellas secuencias <strong>de</strong>producciones unitarias que no repiten variables <strong>de</strong> G.Suponga ahora que w ∈ L(G) y consi<strong>de</strong>re una <strong>de</strong>rivación por la izquierda para w en G.S ⇒ α 0⇒G α 1⇒G . . . ⇒ Gα N = wSi, para 0 ≤ i < N, α i⇒G α i+1 por una producción no unitaria, entonces α i⇒G ′α i+1 . O bien si α i⇒G α i+1 poruna producción unitaria, pero α i−1⇒G ′α i por una no unitaria, o i = 0, y a<strong>de</strong>más α i+1⇒G α i+2⇒G . . . ⇒ Gα j , todaspor producciones unitarias con α j⇒G α j+1 por una no unitaria; entonces α i+1 α i+2 . . . α j todos tienen el mismolargo y ya que la <strong>de</strong>rivación es por la izquierda, el símbolo reemplazado en cada una <strong>de</strong> ellas está en la mismaposición. Pero entonces α i⇒G ′α j+1 por una <strong>de</strong> las producciones en P ′ − P . Por lo tanto, L(G ′ ) = L(G).Para terminar la <strong>de</strong>mostración, basta notar que G ′ no tiene producciones unitarias ni vacías. Si se usan loslemas anteriores para eliminar los símbolos inútiles no se agregan producciones, por lo tanto se obtiene unagramática como la pedida.5.7 Formas NormalesEn esta sección se verán dos formas normales para gramáticas libres <strong>de</strong> contexto. Se verá que para todagramática libre <strong>de</strong> contexto existe una gramática equivalente con restricciones en la forma <strong>de</strong> sus producciones.✷✷


92 CHAPTER 5.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES LIBRES DE CONTEXTOTeorema 21 (Forma Normal <strong>de</strong> Chomsky) Todo lenguaje libre <strong>de</strong> contexto sin ε es generado por unagramática en que todas las producciones son <strong>de</strong> la forma A → BC o A → a, en que A, B y C son variablesy a es un terminal.Demostración : Sea G una gramática libre <strong>de</strong> contexto que genera un lenguaje que no contiene ε. Porel teorema anterior es posible encontrar una gramática equivalente, G 1 = (V, T, P, S), tal que P no tieneproducciones unitarias ni vacías. Por lo tanto, si una producción tiene un único símbolo a la <strong>de</strong>recha, esesímbolo es un terminal, y por lo tanto la producción está en una forma aceptable.Consi<strong>de</strong>re una producción en P , <strong>de</strong> la forma A → X 1 X 2 . . . X N , con N ≥ 2. Si X i es un terminal a,se introduce una nueva variable C a y una producción C a → a que está en una <strong>de</strong> las formas permitidas.Luego se reemplaza X i por C a en la producción original. Sea V ′ el nuevo conjunto <strong>de</strong> variables y P ′ el nuevoconjunto <strong>de</strong> producciones. Consi<strong>de</strong>re la gramática G 2 = (V ′ , T, P ′ , S), que no está aún en la forma normal<strong>de</strong> Chomsky. Si αG ⇒ 1β, entonces α⇒ ∗ G2 β. Por lo tanto L(G 1 ) ⊆ L(G 2 ). Se muestra, por inducción en elnúmero <strong>de</strong> pasos <strong>de</strong> la <strong>de</strong>rivación, que si A⇒ ∗ G2 w, para A ∈ V y w en T ∗ , entonces AG ⇒ 1w. El resultado estrivial para <strong>de</strong>rivaciones <strong>de</strong> un paso. Supóngase que se cumple para <strong>de</strong>rivaciones <strong>de</strong> k pasos. Sea A⇒ ∗ G2 wuna <strong>de</strong>rivación <strong>de</strong> k + 1 pasos. El primer paso <strong>de</strong>be ser <strong>de</strong> la forma A → B 1 B 2 . . . B N , con N ≥ 2. Se pue<strong>de</strong>∗escribir w = w 1 w 2 . . . w N , en que B i⇒ G2 w i , con 1 ≤ i ≤ M.Si B i es C ai , para algún terminal a i , entonces w i <strong>de</strong>be ser a i . Por la construcción <strong>de</strong> P ′ , hay unaproducción A → X 1 X 2 . . . X m <strong>de</strong> P , con X i = B i si B i está en V y con X i = a i si B i está en V ′ − V .∗Para los B i ∈ V , se sabe que la <strong>de</strong>rivación B i⇒ G1 w i toma no más <strong>de</strong> k pasos, luego, por la hipótesis <strong>de</strong>∗inducción, X i⇒ G1 w i . Por lo tanto A⇒ ∗ G1 w.Se ha probado el resultado intermedio <strong>de</strong> que cualquier lenguaje libre <strong>de</strong> contexto pue<strong>de</strong> ser generadopor una gramática en que cada producción tiene la forma A → a o la forma A → B 1 B 2 . . . B M , (M ≥ 2), enque A, B 1 , B 2 , . . . , B M son variables y a es un terminal.Consi<strong>de</strong>re una gramática <strong>de</strong> ese tipo, G 2 = (V ′ , T, P ′ , S). Se modifica G 2 agregando algunos símbolos adicionalesa V ′ y reemplazando algunas producciones <strong>de</strong> P ′ . Por cada producción <strong>de</strong> la forma A → B 1 B 2 . . . B Men P ′ , con M ≥ 3, se crean nuevas variables D 1 , D 2 , . . . , D M−2 y se reemplaza A → B 1 B 2 . . . B M por elconjuntoA → B 1 D 1 ,D 1 → B 2 D 2 , . . . ,D M−2 → B M−1 B MSea V ′′ el nuevo conjunto <strong>de</strong> variables y P ′′ el nuevo conjunto <strong>de</strong> producciones. Sea G 3 = (V ′′ , T, P ′′ , S).La gramática G 3 está en la forma normal <strong>de</strong> Chomsky. Es claro que si A ∗ ⇒ G2 β, entonces A ∗ ⇒ G3 β y entoncesL(G 2 ) ⊆ L(G 3 ). Pero también se cumple que L(G 3 ) ⊆ L(G 2 ), como pue<strong>de</strong> <strong>de</strong>mostrarse en esencialmente lamisma forma en que se mostró que L(G 2 ) ⊆ L(G 1 ).Ejemplo 75 Consi<strong>de</strong>re la gramática ({S, A, B}, {a, b}, P, S) con las produccionesS → bA|aBA → bAA|aS|aB → aBB|bS|bLas únicas producciones que ya están en la forma correcta son: A → a y B → b. Luego, primero setransforma a la gramáticaS → C b A|C a BA → C b AA|C a S|aB → C a BB|C b S|bC a → aC b → bEn la segunda etapa se reemplaza por la gramática✷


5.7. FORMAS NORMALES 93S → C b A|C a BS → C b D 1 |C a S|aB → C a D 2 |C b S|bC a → aC b → bD 1 → AAD 2 → BBque está en la forma normal <strong>de</strong> Chomsky.Ahora se verá otra forma normal que utiliza producciones cuyo lado <strong>de</strong>recho comienza con un terminalseguido, posiblemente, por variables. Primero se presentan dos lemas que dicen que es posible modificar lasproducciones <strong>de</strong> una gramática en ciertas formas, sin alterar el lenguaje que genera.Lema 5 Se <strong>de</strong>fine una producción-A como una producción que tiene la variable A en su lado izquierdo.Sea G = (V, T, P, S) una gramática libre <strong>de</strong> contexto. Sea A → α 1 Bα 2 una producción en P y sean B →β 1 |β 2 | . . . |β N todas las producciones-B <strong>de</strong> P . Sea G 1 = (V, T, P 1 , S), obtenida al eliminar la producciónA → α 1 Bα 2 <strong>de</strong> P y agregando las producciones A → α 1 β 1 α 2 |α 1 β 2 α 2 | . . . |α 1 β N α 2 . Entonces L(G) = L(G 1 ).Demostración : Es claro que L(G 1 ) ⊆ L(G), ya que si A → α 1 β i α 2 es usada en alguna <strong>de</strong>rivación en G 1 ,entonces A ⇒ Gα 1 Bα 2⇒G α 1 β i α 2 pue<strong>de</strong> usarse en G. Para ver que L(G) ⊆ L(G 1 ) basta notar que A → α 1 Bα 2 esla única producción <strong>de</strong> G que no está en G 1 . Sin embargo, si A → α 1 Bα 2 es usada en alguna <strong>de</strong>rivación enG, la variable B <strong>de</strong>be ser reescrita posteriormente usando alguna <strong>de</strong> las producciones B → β i , ya que ellasson todas las producciones-B en P . Estos dos pasos pue<strong>de</strong>n entonces reemplazarse por el paso A ⇒ G 1α 1 β i α 2 .Lema 6 Sea G = (V, T, P, S) una gramática libre <strong>de</strong> contexto. Sean A → Aα 1 |Aα 2 | . . . |Aα N el conjunto<strong>de</strong> producciones-A en que A es el símbolo <strong>de</strong> más a la izquierda en el lado <strong>de</strong>recho <strong>de</strong> la producción. SeanA → β1|β2| . . . |βN las restantes producciones-A <strong>de</strong> P . Sea G 1 = (V ′ , T, P 1 , S) la gramática formadaal agregar la variable B a V (V ′ = V ∪ B) y al reemplazar todas las producciones-A por las siguientesproduccionesA → β i B → α iA → β i B (1 ≤ i ≤ m) B → α i B (1 ≤ i ≤ N)Entonces L(G 1 ) = L(G).Demostración : En una <strong>de</strong>rivación por la izquierda, una secuencia <strong>de</strong> producciones <strong>de</strong> la forma A → Aα i<strong>de</strong>be eventualmente terminar con una <strong>de</strong> la forma A → β j . La secuencia <strong>de</strong> pasos en G,A ⇒ Aα i1 ⇒ Aα i2 α i1 ⇒ . . . ⇒ Aα il α il−1 . . . α i1 ⇒ β j α ip α ip−1 . . . α i1pue<strong>de</strong> reemplazarse por la secuencia en G 1A ⇒ β j B ⇒ β j α ip B ⇒ βjα ip α ip−1 B ⇒ . . . ⇒β j α ip α ip−1 . . . α i2 ⇒ β j α ip α ip−1 . . . α i1✷✷✷La transformación inversa también pue<strong>de</strong> hacerse. Por lo tanto, L(G) = L(G 1 ). La Figura 5.9 ilustra estatransformación usando árboles <strong>de</strong> <strong>de</strong>rivación. Se ve que una ca<strong>de</strong>na <strong>de</strong> A’s extendiéndose hacia la izquierdaen G se reemplaza por una <strong>de</strong> B’s que se extien<strong>de</strong> hacia la <strong>de</strong>recha en G 1 .Teorema 22 (Forma Normal <strong>de</strong> Greibach) Todo lenguaje libre <strong>de</strong> contexto L, sin ε, pue<strong>de</strong> ser generadopor una gramática libre <strong>de</strong> contexto en que cada producción es <strong>de</strong> la forma A → aα, en que A es una variable,a es un terminal y α es un string (posiblemente vacío) <strong>de</strong> variables.


94 CHAPTER 5.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES LIBRES DE CONTEXTO✁✁✁A✂ ❇✂ ❇✂ ❇✂ ❇✂ ❇β j✁✁.✂✂✂✂✂.A...❇❇❇❇❇α ip✔A✂✂✂✂✂✔✔✔❇❇❇❇❇α i2A✂✂✂✂✂❇❇❇❇❇α i1A✂ ❇❚✂ ❇ ❚❚❚❚✂ ❇✂ ❇✂ ❇β j B✂✂✂✂✂❇❇❇❇❇α ip.....B✂✂✂✂✂α i2❇❇❇❇❇❆❆❆❆❆❆B✂ ❇✂ ❇✂ ❇✂ ❇✂ ❇α i1Figure 5.9: Transformación haciendo uso <strong>de</strong> árboles <strong>de</strong> <strong>de</strong>rivaciónDemostración : Sea G = (V, T, P, S) una gramática libre <strong>de</strong> contexto en la forma normal <strong>de</strong> Chomsky,que genera L. Suponga que V = {A 1 , A 2 , . . . , A M }. El primer paso en la construcción es modificar lasproducciones, <strong>de</strong> manera que si A i → A j γ es una producción, entonces j > i. Comenzando <strong>de</strong> A 1 yprocediendo hacia A M se asume que las producciones han sido modificadas <strong>de</strong> forma que, para 1 ≤ i < k,A i → A j γ es una producción sólo si j > i. Luego se modifican las producciones-A k .Si A k → A j γ es una producción, con j < k, se genera un nuevo conjunto <strong>de</strong> producciones sustituyendopor A j el lado <strong>de</strong>recho <strong>de</strong> cada producción-A j , <strong>de</strong> acuerdo al primero <strong>de</strong> los lemas previos. Repitiendo elproceso k − 1 veces a lo más, se obtienen producciones <strong>de</strong> la forma A k → A l γ, con l ≥ k. Las produccionescon l = k son entonces reemplazadas <strong>de</strong> acuerdo al segundo <strong>de</strong> esos lemas, introduciendo una nueva variableB k . El algoritmo es el que sigue


5.7. FORMAS NORMALES 95(1) for k := 1 to M do begin(2) for j := 1 to k − 1 do(3) for cada produccion <strong>de</strong> la forma A k → A j α do begin(4) for todas las producciones A j → β do(5) agregue la produccion A k → βα;(6) elimine A k → A j αend(7) for cada produccion <strong>de</strong> la forma A k → A k α do begin(8) agregue producciones <strong>de</strong> la forma B k → α y B k → αB k ;(9) elimine A k → A k αend(10) for cada produccion <strong>de</strong> la forma A k → βen que β no empieza con A k do(11) agregue la produccion A k → βB kendRepitiendo el proceso para cada variable original, se tienen sólo producciones <strong>de</strong> las formasA i → A j γ j > iA i → aγ a ∈ TB i → γ γ ∈ (V ∪ {B 1 , B 2 , . . . , B i−1 }) ∗Note que el símbolo <strong>de</strong> más a la izquierda en el lado <strong>de</strong>recho <strong>de</strong> alguna producción para A M <strong>de</strong>be ser unterminal, ya que A M es la variable con número mayor. El símbolo <strong>de</strong> más a la izquierda en el lado <strong>de</strong>recho <strong>de</strong>una producción para A M−1 <strong>de</strong>be ser A M o un símbolo terminal. Cuando sea A M , se pue<strong>de</strong> generar nuevasproducciones al reemplazar A M por el lado <strong>de</strong>recho <strong>de</strong> las producciones para A M , <strong>de</strong> acuerdo al primero<strong>de</strong> los lemas. Estas producciones <strong>de</strong>ben tener lados <strong>de</strong>rechos que comiencen con un símbolo terminal. Seproce<strong>de</strong> entonces con las producciones para A M−2 , . . . , A 2 , A 1 , hasta que el lado <strong>de</strong>recho <strong>de</strong> cada producción,para algún A i , comienza con un símbolo terminal.Por último, se examinan las producciones para las variables nuevas B 1 B 2 . . . B M . Ya que se comenzó conuna gramática en la forma normal <strong>de</strong> Chomsky es fácil probar, por inducción en el número <strong>de</strong> aplicaciones<strong>de</strong> los lemas, que el lado <strong>de</strong>recho <strong>de</strong> cada producción-A i , 1 ≤ i ≤ M, comienza con un terminal o A j A k , paraalgún j y k. Por lo tanto α en línea (7) <strong>de</strong>l algoritmo anterior nunca es vacío o comienza con algún B j , es<strong>de</strong>cir las producciones-B i no pue<strong>de</strong>n comenzar con otro B j . Por lo tanto todas las producciones-B i tienenlados <strong>de</strong>rechos que comienzan con terminales o A i ’s; otra aplicación <strong>de</strong>l primer lema para cada producciónB i completa la construcción.Ejemplo 76 Se convertirá a la forma normal <strong>de</strong> Greibach la gramática G = ({A 1 , A 2 , A 3 }, {a, b}, P, A 1 ), enque P consiste <strong>de</strong>:A 1 → A 2 A 3A 2 → A 3 A 1 |bA 3 → A 1 A 2 |aPaso 1: ya que el lado <strong>de</strong>recho <strong>de</strong> las producciones para A 1 y A 2 comienzan con terminales o variables <strong>de</strong>número más alto, se comienza con la producción A 3 → A 1 A 2 . En lugar <strong>de</strong> A 1 se usa A 2 A 3 , ya queA 1 → A 2 A 3 es la única producción para A 1 . El resultado esA 1 → A 2 A 3A 2 → A 3 A 1 |bA 3 → A 2 A 3 A 2 |aComo el lado <strong>de</strong>recho <strong>de</strong> la producción A 3 → A 2 A 3 A 2 empieza con una variable <strong>de</strong> menor número, sesustituye A 2 (su primera ocurrencia) tanto por A 3 A 1 como por b. El resultado es✷


96 CHAPTER 5.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES LIBRES DE CONTEXTOA 1 → A 2 A 3A 2 → A 3 A 1 |bA 3 → A 3 A 1 A 3 A 2 |bA 3 A 2 |aSe aplica ahora el segundo lema a las producciones-A 3 , con B 3 , una nueva variable. El resultado esA 1 → A 2 A 3A 2 → A 3 A 1 |bA 3 → bA 3 A 2 B 3 |aB 3 |bA 3 A 2 |aB 3 → A 1 A 3 A 2 |A 1 A 3 A 2 B 3Paso 2: Ahora, todas las producciones-A 3 tienen un lado <strong>de</strong>recho que comienza con un terminal. Ellos seusan para reemplazar A 3 en A 2 → A 3 A 1 y entonces las producciones para A 2 se usan para reemplazarA 2 en la producción A 1 → A 2 A 3 . El resultado esA 3 → bA 3 A 2 B 3 |aB 3 |bA 3 A 2 |aA 2 → bA 3 A 2 B 3 A 1 |aB 3 A 1 |bA 3 A 2 A 1 |aA 1 |bA 1 → bA 3 A 2 B 3 A 1 A 3 |aB 3 A 1 A 3 |bA 3 A 2 A 1 A 3 |aA 1 A 3 |bA 3B 3 → A 1 A 3 A 2 |A 1 A 3 A 2 B 3Paso 3: Las dos producciones-B 3 se convierten a la forma a<strong>de</strong>cuada, resultando 10 producciones. Se reemplazael lado <strong>de</strong>recho <strong>de</strong> las 5 producciones-A 1 por la ocurrencia <strong>de</strong> A 1 como primer símbolo <strong>de</strong>l lado<strong>de</strong>recho <strong>de</strong> las producciones-B 3 . El resultado esA 3 → bA 3 A 2 B 3 |aB 3 |bA 3 A 2 |aA 2 → bA 3 A 2 B 3 A 1 |aB 3 A 1 |bA 3 A 2 A 1 |aA 1 |bA 1 → bA 3 A 2 B 3 A 1 A 3 |aB 3 A 1 A 3 |bA 3 A 2 A 1 A 3 |aA 1 A 3 |bA 3B 3 → bA 3 A 2 B 3 A 1 A 3 A 3 A 2 |aB 3 A 1 A 3 A 3 A 2 |bA 3 A 2 A 1 A 3 A 3 A 2 |aA 1 A 3 A 3 A 2 |bA 3 A 3 A 2|bA 3 A 2 B 3 A 1 A 3 A 3 A 2 B 3 |aB 3 A 1 A 3 A 3 A 2 B 3 |bA 3 A 2 A 1 A 3 A 3 A 2 B 3 |aA 1 A 3 A 3 A 2 B 3|bA 3 A 3 A 2 B 3una gramática en la forma normal <strong>de</strong> Greibach, que es equivalente a la original.5.8 Equivalencia entre LLC y Autómatas ApiladoresEn esta sección se probará el resultado fundamental que la clase <strong>de</strong> lenguajes regulares aceptados por losautómatas apiladores es precisamente la clase <strong>de</strong> los lenguajes libres <strong>de</strong> contexto.Primero se verá que los lenguajes aceptados por un AA por estado final son exactamente los lenguajesaceptados por un AA por stack vacío. Luego se muestra que los lenguajes aceptados por stack vacío sonexactamente los lenguajes libres <strong>de</strong> contexto.Teorema 23 Si L es L(M 2 ) para algún AA M 2 , entonces L en N(M 1 ) para algún AA, M 1 .Demostración : En resumen, se quiere que M 1 simule a M 2 , con la opción para M 1 <strong>de</strong> vaciar su stack cadavez que M 2 entre a un estado final. Se usa un estado q e <strong>de</strong> M 1 para vaciar el stack y se usa un marcador<strong>de</strong>l fondo <strong>de</strong>l stack X 0 <strong>de</strong> M 1 , para que M 1 no acepte un string en forma acci<strong>de</strong>ntal si M 2 vacía su stack enun estado no final. Sea M 2 = (Q, Σ, Γ, δ, q 0 , Z 0 , F ) un AA tal que L = L(M 2 ). SeaM 1 = (Q ∪ {q e , q ′ 0}, Σ, Γ ∪ {X 0 }, δ ′ , q ′ 0, X 0 , ∅)con δ ′ <strong>de</strong>finida por1. δ ′ (q ′ 0 , ε, X 0) = {(q 0 , Z 0 X 0 )}2. δ ′ (q, a, Z) incluye los elementos <strong>de</strong> δ(q, a, Z), ∀q ∈ Q, a ∈ Σ ∪ {ε}, Z ∈ Γ✷


5.8. EQUIVALENCIA ENTRE LLC Y AUTÓMATAS APILADORES 973. ∀q ∈ F y Z ∈ Γ ∪ {X 0 }, δ ′ (q, ε, Z) contiene (q e , ε)4. ∀Z ∈ Γ ∪ {X 0 }, δ ′ (q e , ε, Z) contiene (q e , ε)La regla (1) hace que M 1 entre la <strong>de</strong>scripción instantánea inicial <strong>de</strong> M 2 , excepto que M 1 tendrá su propiomarcador, X 0 , al fondo <strong>de</strong>l stack. La regla (2) le permite a M 1 simular las movidas <strong>de</strong> M 2 . Si M 2 entraalguna vez a un estado final, las reglas (3) y (4) le permiten a M 1 la elección <strong>de</strong> entrar al estado q e y vaciarsu stack (por lo tanto, aceptando el input) o <strong>de</strong> continuar simulando a M 2 . Se <strong>de</strong>be notar que M 2 podríavaciar su stack para algún string X que no está en L(M 2 ). Por esta razón M 1 tiene una marca propia alfondo <strong>de</strong>l stack. Si no M 1 , simulando a M 2 , podría vaciar su stack y aceptar X cuando no <strong>de</strong>biera.Sea X ∈ L(M 2 ). Entonces (q 0 , X, Z 0 ) ⊢ M 2∗(q, ε, γ) para algún q ∈ F . Consi<strong>de</strong>re M1 con el string X. Porregla (1)(q ′ 0, X, X 0 ) ⊢ M 1(q 0 , X, Z 0 X 0 )por regla (2), todas las movidas <strong>de</strong> M 2 son legales en M 1 , por lo tanto(q 0 , X, Z 0 ) ⊢ M 1∗(q, ε, γ)Si un AA pue<strong>de</strong> hacer una secuencia <strong>de</strong> movidas <strong>de</strong>s<strong>de</strong> una <strong>de</strong>scripción instantánea dada, también pue<strong>de</strong>hacer la misma secuencia <strong>de</strong> movidas <strong>de</strong>s<strong>de</strong> cualquier DI obtenida <strong>de</strong> la primera insertando un string <strong>de</strong>símbolos <strong>de</strong>l stack bajo el contenido original. Por lo tanto(q ′ 0, X, X 0 ) ⊢ M 1(q 0 , X, Z 0 X 0 ) ⊢ (q, ε, γX 0 )Por las reglas (3) y (4), porque q ∈ F ,(q, ε, γX 0 ) ⊢ M 1∗(qe , ε, ε)Por lo tanto,(q ′ 0, X, X 0 ) ⊢ M 1∗(qe , ε, ε)y así, M 1 acepta X por stack vacío, es <strong>de</strong>cir, X ∈ N(M 1 ).En el otro sentido, si M 1 acepta X por stack vacío, es fácil mostrar que la secuencia <strong>de</strong> movidas <strong>de</strong>be seruna movida por regla (1), luego una secuencia por regla (2) en que M 1 simula la aceptación <strong>de</strong> X por M 2 ,seguido <strong>de</strong>l vaciamiento <strong>de</strong>l stack <strong>de</strong> M 1 usando reglas (3) y (4). Por lo tanto X <strong>de</strong>be estar en L(M 2 ).Teorema 24 Si L es N(M 1 ) para algún AA M 1 , entonces L es L(M 2 ) para algún AA, M 2 .Demostración : Ahora se quiere que M 2 simule a M 1 y pueda <strong>de</strong>tectar cuando M 1 vacía su stack. Lamáquina M 2 entra a un estado final cuando y sólo cuando esto suce<strong>de</strong>. Sea M 1 = (Q, Σ, Γ, δ, q 0 , Z 0 , ∅) unAA tal que L = N(M 1 ). SeaM 2 = (Q ∪ {q ′ 0 , q f }, Σ, Γ ∪ {X 0 }, δ ′ , q ′ 0 , X 0, {q f })en que δ ′ se <strong>de</strong>fine como sigue1. δ ′ (q ′ 0 , ε, X 0) = {(q 0 , Z 0 X 0 )}2. ∀q ∈ Q, a ∈ Σ ∪ {ε} y Z ∈ Γ: δ ′ (q, a, Z) = δ(q, a, Z)3. ∀q ∈ Q, δ ′ (q, ε, X 0 ) contiene (q f , ε)✷


98 CHAPTER 5.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES LIBRES DE CONTEXTOLa regla (1) hace que M 2 entre la DI inicial <strong>de</strong> M 1 , excepto que M 2 tendrá su propio marcador X 0 , bajolos símbolos que M 1 tendría en su stack. La regla (2) permite que M 2 simule M 1 . Si alguna vez M 1 vaciarasu stack completamente, entonces M 2 , al simular a M 1 , vaciará su stack excepto por el símbolo X 0 puestoal fondo. La regla (3) hace entonces que M 2 , al aparecer X 0 , entre a su estado final, aceptando el string. Laprueba <strong>de</strong> que L(M 2 ) = N(M 1 ) es similar a la <strong>de</strong>l teorema anterior.Teorema 25 Si L es un lenguaje libre <strong>de</strong> contexto, existe un AA, M, tal que L = N(M).Demostración : Se asume que ε ∉ L(G). La construcción es muy similar cuando ε ∈ L(G). Sea G =(V, T, P, S) una gramática libre <strong>de</strong> contexto en la forma normal <strong>de</strong> Greibach que genere L. SeaM = ({q}, T, V, δ, q, S, ∅)en que δ(q, a, A) contiene (q, γ) si y sólo si A → aγ es una producción en P .El AA, M, simula <strong>de</strong>rivaciones por la izquierda en G. Como G está en la forma normal <strong>de</strong> Greibach,cada forma sentencial en una <strong>de</strong>rivación por la izquierda consiste <strong>de</strong> un string <strong>de</strong> terminales X, seguido <strong>de</strong>un string <strong>de</strong> variables α. M almacena el sufijo α <strong>de</strong> la forma sentencial en su stack <strong>de</strong>spués <strong>de</strong> procesar elprefijo X.Formalmente, se muestra queS ∗ ⇒Xαsi y sólo si(q, X, S) ⊢ M∗(q, ε, α)por una <strong>de</strong>rivación por la izquierdaPrimero, suponga que (q, X, S) ⊢ Mi(q, ε, α); se muestra, por inducción en i, que S∗⇒Xα. La base, i = 0,es trivial ya que X = ε y α = S. Para la inducción se asume que i ≥ 1 y sea X = Y a. Considérese elpenúltimo paso:(q, Y a, S) i−1⊢ (q, a, β) ⊢ (q, ε, α)si se remueve a <strong>de</strong>s<strong>de</strong> el final <strong>de</strong>l string <strong>de</strong> entrada en las primeras i DI’s <strong>de</strong> la secuencia, se <strong>de</strong>scubre que(q, Y, S) i−1⊢ (q, ε, β)ya que a no pue<strong>de</strong> afectar las movidas <strong>de</strong> M hasta que es realmente eliminado <strong>de</strong>l input. Por la hipótesis<strong>de</strong> inducción, S ∗ ⇒Y β. La movida (q, a, β) ⊢ (q, ε, α) implica que β = Aγ para algún A ∈ V , A → aη es unaproducción <strong>de</strong> G y α = ηγ. Por lo tantoS ∗ ⇒Y β ⇒ Y aηγ = XαAhora supóngase que S i ⇒Xα por una <strong>de</strong>rivación por la izquierda. Se muestra, por inducción en I, que(q, X, S) ∗ ⊢(q, ε, α). La base, i = 0, es trivial nuevamente. Sea i ≥ 1 y suponga queS i−1⇒Y Aγ ⇒ Y aηγen que X = Y a y α = ηγ. Por la hipótesis <strong>de</strong> inducción(q, Y, S) ∗ ⊢(q, ε, Aγ)y por lo tanto (q, Y a, S) ∗ ⊢(q, a, Aγ). Ahora, como A → aη es una producción, se <strong>de</strong>duce que δ(q, a, A)contiene (q, η). Por lo tanto(q, X, S) ∗ ⊢(q, a, Aγ) ⊢ (q, ε, α)Esto concluye la <strong>de</strong>mostración <strong>de</strong>l teorema. Basta notar que si α = ε, S ∗ ⇒X si y sólo si (q, X, S) ∗ ⊢(q, ε, ε).Esto es, X ∈ L(G) ssi X ∈ N(M).✷


5.8. EQUIVALENCIA ENTRE LLC Y AUTÓMATAS APILADORES 99 ✷Teorema 26 Si L es N(M) para algún AA, M, entonces L es un lenguaje libre <strong>de</strong> contexto.Demostración : Sea M el AA Q, Σ, Γ, δ, q 0 , Z 0 , ∅). Sea G = (V, Σ, P, S) una gramática libre <strong>de</strong> contexto enque V es un conjunto <strong>de</strong> objetos <strong>de</strong> la forma [q, A, p], en que q y p ∈ Q y A ∈ Γ, a<strong>de</strong>más <strong>de</strong> un nuevo símboloS. P es el conjunto <strong>de</strong> producciones1. S → [q 0 , Z 0 , q] ∀q ∈ Q2. [q, A, q M+1 ] → a [q 1 , B 1 , q 2 ] [q 2 , B 2 , q 3 ] . . . [q M , B M , q M+1 ] para cada q, q 1 , q 2 , . . . , q M+1 ∈ Q, cada a ∈Σ ∪ {ε} y A, B 1 , B 2 , . . . , B M en Γ tales que δ(q, a, A) contiene (q 1 , B 1 B 2 . . . B M ). Si M = 0, la producciónes [q, A, q 1 ] → a.Las variables y producciones <strong>de</strong> G se han <strong>de</strong>finido <strong>de</strong> forma que una <strong>de</strong>rivación por la izquierda <strong>de</strong> Xen G es una simulación <strong>de</strong>l AA, M, en input X. En particular las variables que aparecen en cualquier paso<strong>de</strong> una <strong>de</strong>rivación por la izquierda en G, correspon<strong>de</strong>n a los símbolos en el stack <strong>de</strong> M al momento en queM ha visto tanto <strong>de</strong>l input como lo generado por la gramática. Puesto <strong>de</strong> otra forma, la intención es que[q, A, p] <strong>de</strong>rive X si y sólo si X hace que M elimine una A <strong>de</strong> su stack usando una secuencia <strong>de</strong> movidas quecomienzan en el estado q y terminan en el estado p.Para mostrar que L(G) = N(M), se prueba por inducción en el número <strong>de</strong> pasos en una <strong>de</strong>rivación <strong>de</strong> Go número <strong>de</strong> movidas <strong>de</strong> M, que[q, A, p] ⇒ G∗X ssi (q, X, A)⊢M∗(p, ε, ε)Primero se muestra por inducción en i, que si (q, X, A) ⊢(p, i ∗ε, ε) entonces [q, A, p] ⇒ X. Si i = 1 entoncesδ(q, X, A) <strong>de</strong>be contener (p, ε). Aquí X es ε o un símbolo simple. Por lo tanto [q, A, p] → X es una producción<strong>de</strong> G. Si i > 1, sea X = aY y(q, aY, A) ⊢ (q 1 , Y, B 1 B 2 . . . B N ) i−1⊢ (p, ε, ε)el string Y pue<strong>de</strong> escribirse Y = Y 1 Y 2 . . . Y N en que Y j tiene el efecto <strong>de</strong> hacer pop <strong>de</strong> B j <strong>de</strong>s<strong>de</strong> el stack(posiblemente <strong>de</strong>spués <strong>de</strong> muchas movidas). Esto es, sea Y 1 el prefijo <strong>de</strong> Y al fin <strong>de</strong>l cual el stack por primeravez llega a tener N − 1 símbolos. Sea Y 2 el substring <strong>de</strong> Y que sigue a Y 1 , tal que al final <strong>de</strong> Y 2 por primeravez el stack tiene N − 2 símbolos, y así sucesivamente.Nótese que B 1 no es necesariamente el n-ésimo símbolo en el stack durante el tiempo en que Y 1 está siendoleido por M; B 1 pue<strong>de</strong> ser cambiado si está al tope <strong>de</strong>l stack y ser reemplazado por uno o más símbolos.Sin embargo, ninguno <strong>de</strong> B 2 , B 3 , . . . , B N están nunca al tope mientras Y 1 está siendo leido, por lo tanto nopue<strong>de</strong>n ser cambiados ni influenciar las movidas. En general B j permanece sin cambios en el stack mientrasY 1 , . . . , Y j−1 es leido.Existen estados q 2 , q 3 , . . . , q N+1 = p tales que(q j , Y j , B j ) ∗ ⊢(q j+1 , ε, ε)en menos <strong>de</strong> i movidas <strong>de</strong> M (q j es el estado al que se entra cuando por primera vez el stack tiene n − j + 1símbolos). Por la hipótesis <strong>de</strong> inducción[q j , B j , q j+1 ] ∗ ⇒Y j (1 ≤ j ≤ N)De la primera movida: (q, aY, A) ⊢ (q 1 , Y, B 1 B 2 . . . B N ) se sabe que[q, A, p] ⇒ a [q 1 , B 1 , q 2 ] [q 2 , B 2 , q 3 ] . . . [q N , B N , q N+1 ]y por lo tanto[q, A, p] ∗ ⇒aY 1 Y 2 . . . Y N = aY = X


100 CHAPTER 5.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES LIBRES DE CONTEXTOiSupóngase ahora que [q, A, p] ⇒ X, se muestra, por inducción en i, que (q, X, A) ⊢(p, ∗ ε, ε). La base, i = 1,es inmediata ya que [q, A, p] → X <strong>de</strong>be ser una producción <strong>de</strong> G y por lo tanto δ(q, X, A) <strong>de</strong>be contener(p, ε). Nótese que X es ε o está en Σ.Para la inducción suponga[q, A, p] ⇒ a [q 1 , B 1 , q 2 ] . . . [q N , B N , q N+1 ] i−1⇒ Xen que q N+1 = p. Se pue<strong>de</strong> escribir X = aX 1 X 2 . . . X N en que [q j , B j , q j+1 ] ∗ ⇒X j , (1 ≤ j ≤ N), y con cada<strong>de</strong>rivación en menos <strong>de</strong> i-pasos. Por la hipótesis <strong>de</strong> inducción(q j , X j , B j ) ∗ ⊢(q j+1 , ε, ε) (1 ≤ j ≤ n)Si se inserta B j+1 . . . B N al fondo <strong>de</strong>l stack en la secuencia anterior <strong>de</strong> DI’s, se ve que(q, X, A) ⊢ (q 1 , X 1 X 2 . . . X N , B 1 B 2 . . . B N )es una movida <strong>de</strong> M y, por lo tanto, usando la anterior para j = 1, 2, . . . , N, se tiene que(q, X, A) ∗ ⊢(p, ε, ε)La <strong>de</strong>mostración concluye con la observación <strong>de</strong> que si q = q 0 y A = Z 0 , se ha probado que[q 0 , Z 0 , p] ∗ ⇒X ssi (q 0 , X, Z 0 ) ∗ ⊢(p, ε, ε)Esta observación, junto con la primera regla para construir G, dicen queS ∗ ⇒X ssi (q 0 , X, Z 0 ) ∗ ⊢(p, ε, ε)para algún estado p. Es <strong>de</strong>cir, X ∈ L(G) ssi X ∈ N(M)Ejemplo 77 Sea M = ({q 0 , q 1 }, {0, 1}, {X, Z 0 }, δ, q 0 , Z 0 , ∅) con δ dada porδ(q 0 , 0, Z 0 ) = {(q 0 , XZ 0 )}δ(q 0 , 0, X) = {(q 0 , XX)}δ(q 0 , 1, X) = {(q 1 , ε)}δ(q 1 , 1, X) = {(q 1 , ε)}δ(q 1 , ε, X) = {(q 1 , ε)}δ(q 1 , ε, Z 0 ) = {(q 1 , ε)}Para construir una gramática libre <strong>de</strong> contexto, G = (V, T, P, S), que genere N(M), seaV = {S, [q 0 , X, q 0 ] , [q 0 , X, q 1 ] , [q 1 , X, q 0 ] , [q 1 , X, q 1 ] ,[q 0 , Z 0 , q 0 ] , [q 0 , Z 0 , q 1 ] , [q 1 , Z 0 , q 0 ] , [q 1 , Z 0 , q 1 ]}y Γ = {0, 1}.Para construir el conjunto <strong>de</strong> producciones con facilidad, es útil darse cuenta que algunas variables pue<strong>de</strong>nno aparecer en <strong>de</strong>rivaciones que comienzan con S. Se pue<strong>de</strong> ahorrar algo <strong>de</strong> esfuerzo si se comienza con lasproducciones-S y se agregan aquellas para variables que aparecen en el lado <strong>de</strong>recho <strong>de</strong> alguna ya incluidaen P .Las producciones para S sonS → [q 0 , Z 0 , q 0 ]S → [q 0 , Z 0 , q 1 ]✷


5.9.AMBIGÜEDAD INHERENTE 101se agregan producciones para [q 0 , Z 0 , q 0 ]:[q 0 , Z 0 , q 0 ] → 0 [q 0 , X, q 0 ] [q 0 , Z 0 , q 0 ][q 0 , Z 0 , q 0 ] → 0 [q 0 , X, q 1 ] [q 1 , Z 0 , q 0 ]requeridas por δ(q 0 , 0, Z 0 ) = {(q 0 , XZ 0 )} son[q 0 , Z 0 , q 1 ] → 0 [q 0 , X, q 0 ] [q 0 , Z 0 , q 1 ][q 0 , Z 0 , q 1 ] → 0 [q 0 , X, q 1 ] [q 1 , Z 0 , q 1 ]también requeridas por δ(q 0 , 0, Z 0 ) = {(q 0 , XZ 0 )}.Las producciones para las variables y las movidas relevantes <strong>de</strong> M, son:[q 0 , X, q 0 ] → 0 [q 0 , X, q 0 ] [q 0 , X, q 0 ]→ 0 [q 0 , X, q 1 ] [q 1 , X, q 0 ][q 0 , X, q 1 ] → 0 [q 0 , X, q 0 ] [q 0 , X, q 1 ]porque→ 0 [q 0 , X, q 1 ] [q 1 , X, q 1 ]δ(q 0 , 0, X) = {(q 0 , XX)}[q 0 , X, q 1 ] → 1 porque δ(q 0 , 1, X) = {(q 1 , ε)}[q 1 , Z 0 , q 1 ] → ε porque δ(q 1 , ε, Z 0 ) = {(q 1 , ε)}[q 1 , X, q 1 ] → ε porque δ(q 1 , ε, X) = {(q 1 , ε)}[q 1 , X, q 1 ] → 1 porque δ(q 1 , 1, X) = {(q 1 , ε)}Debe notarse que no hay producciones para las restantes variables ( [q 1 , X, q 0 ] y [q 1 , Z 0 , q 0 ] ). Como todaslas producciones para [q 0 , X, q 0 ] y [q 0 , Z 0 , q 0 ] tienen [q 1 , X, q 0 ] o [q 1 , Z 0 , q 0 ] a la <strong>de</strong>recha, ningún string <strong>de</strong>terminales pue<strong>de</strong> <strong>de</strong>rivarse <strong>de</strong> ellas. Eliminando las producciones en que aparecen esas variables, se llega aS → [q 0 , Z 0 , q 1 ][(q 1 , Z 0 , q 1 ] → ε[q 0 , Z 0 , q 1 ] → 0 [q 0 , X, q 1 ] [q 1 , Z 0 , q 1 ] [(q 1 , X, q 1 ] → ε[q 0 , X, q 1 ] → 0 [q 0 , X, q 1 ] [q 1 , X, q 1 ] [(q 1 , X, q 1 ] → 1[q 0 , X, q 1 ] → 1En resumen <strong>de</strong> esta sección, se pue<strong>de</strong> concluir que las siguientes tres aserciones son equivalentes:• L es un lenguaje libre <strong>de</strong> contexto.• L es N(M 1 ) para algún AA, M 1 .• L es L(M 2 ) para algún AA, M 2 .5.9 Ambigüedad InherenteEs muy fácil exhibir gramáticas libres <strong>de</strong> contexto que son ambiguas. Por ejemplo,S → A|BA → aB → aen que el único string <strong>de</strong>l lenguaje (a) tiene dos árboles <strong>de</strong> <strong>de</strong>rivación.Lo que no es tan simple es encontrar un lenguaje libre <strong>de</strong> contexto para el cual toda gramática seaambigua. En esta sección se muestra que en realidad hay lenguajes libres <strong>de</strong> contexto que son inherentementeambiguos. Se mostrará que el lenguajeL = {a N b N c M d M /N ≥ 1, M ≥ 1} ∪ {a N b M c M d N /N ≥ 1, M ≥ 1}es inherentemente ambiguo, probando que el conjunto infinito <strong>de</strong> strings <strong>de</strong> la forma a N b N c N d N (N ≥ 1),<strong>de</strong>ben tener dos <strong>de</strong>rivaciones por la izquierda distintas.✷


102 CHAPTER 5.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES LIBRES DE CONTEXTOLema 7 Sean (N i , M i ), 1 ≤ i ≤ r, pares <strong>de</strong> conjuntos <strong>de</strong> enteros (los conjuntos pue<strong>de</strong>n ser finitos oinfinitos). Seay seaS i = {(n, m)/n ∈ N i y m ∈ M i }S = S 1 ∪ S 2 ∪ . . . ∪ S rSi cada par <strong>de</strong> enteros (n, m) está en S, para todo n y m, con n ≠ m; entonces (n, n) está en S paratodos, excepto un conjunto finito <strong>de</strong> n.Demostración : Asuma que para todo n y m, con n ≠ m, cada par (n, m) ∈ S, y que hay un número infinito<strong>de</strong> n tales que (n, m) ∉ S. Sea δ el conjunto <strong>de</strong> todos los n tales que (n, n) no está en S. Se contruye unasecuencia <strong>de</strong> conjuntos δ r , δ r−1 , . . . , δ 1 , tales queδ ⊇ δ r ⊇ δ r−1 . . . ⊇ δ 1Cada δ i será infinito y para cada n, m en δ i , (n, m) no está enS i ∪ S i+1 ∪ . . . ∪ S rPara n ∈ δ, o n no está en N r o n no está en M r ; sino, (n, m) estaría en S r y por lo tanto en S. Hay,por lo tanto, un subconjunto infinito <strong>de</strong> δ, llamado δ r , tal que para todo n ∈ δ r , n ∉ N r , o para todo n ∈ δ r ,n ∈ M r . También, para n y m ∈ δ r , (n, m) no está en S r .Asuma que δ r , δ r−1 , . . . , δ i−1 ha sido construido para i ≤ r − 1; δ i se construye como sigue. Por cadan ∈ δ i+1 , n no está en N i o n no está en M i ; si no (n, n) habría estado en S i y por lo tanto en S, unacontradicción ya que δ i+1 ⊆ δ. Por lo tanto, ya sea un subconjunto infinito <strong>de</strong> δ i+1 no está en N i o unsubconjunto infinito <strong>de</strong> δ i+1 no está en M i . En cualquier caso, sea δ i ese conjunto infinito. Ahora, para todon y m en δ i , (n, m) no está en S i y por lo tanto, no está en S i ∪ S i+1 ∪ . . . ∪ S r .Ya que δ 1 tiene un número infinito <strong>de</strong> elementos, existen n y m en δ 1 , con n ≠ m. Ahora, (n, m) no estáen S 1 ∪ S 2 ∪ . . . ∪ S r = S, contradiciendo la hipótesis <strong>de</strong> que todo (n, m), con n ≠ m está en S. Por lo tanto,(n, m) está en S para todos excepto un conjunto finito <strong>de</strong> n.Lema 8 Sea G una gramática libre <strong>de</strong> contexto no ambigua. Entonces se pue<strong>de</strong> construir efectivamenteuna gramática libre <strong>de</strong> contexto no ambigua, G ′ , equivalente a G, tal que G ′ no tiene símbolos inútiles, niproducciones unitarias, ni producciones vacías y en que para toda variable A, excepto posiblemente el símboloinicial <strong>de</strong> G ′ , se tiene una <strong>de</strong>rivación A⇒ ∗ G ′X 1 AX 2 , en que X 1 y X 2 no son ambos ε.Demostración : Las construcciones para remover símbolos inútiles no convierten una gramática no ambiguaen una ambigua, ya que el conjunto <strong>de</strong> árboles <strong>de</strong> <strong>de</strong>rivación no cambia. La construcción para removerproducciones unitarias no pue<strong>de</strong> introducir ambigueda<strong>de</strong>s, ya que si se incluye la producción A → α, hay unúnico B, tal que A⇒B ∗ y B → α es una producción, si no la gramática original era ambigua. Similarmentela construcción para remover producciones vacías, tampoco introduce ambigueda<strong>de</strong>s.Se asume por lo tanto, que G no tiene símbolos inútiles ni producciones unitarias ni producciones vacías.Suponga que para ningún X 1 , X 2 , ambos no ε, A⇒X ∗ 1 AX 2 . Reemplace cada ocurrencia <strong>de</strong> A en el lado<strong>de</strong>recho <strong>de</strong> cada producción por todos los lados <strong>de</strong>rechos <strong>de</strong> las producciones-A. Como no hay produccionesunitarias ni producciones vacías ni símbolos inútiles, no pue<strong>de</strong> haber una producción A → α 1 Aα 2 , si no hayuna <strong>de</strong>rivación A⇒X ∗ 1 AX 2 con X 1 y X 2 no ambos ε. El cambio <strong>de</strong>scrito no altera el lenguaje generado,como se mostró en un lema anterior. Cada nueva producción viene <strong>de</strong> una única secuencia <strong>de</strong> produccionesantiguas, si no G era ambigua. Por lo tanto la gramática resultante no era ambigua. A es ahora inútil ypue<strong>de</strong> eliminarse. Después <strong>de</strong> remover la variables que violan la condición <strong>de</strong>l lema <strong>de</strong> la manera <strong>de</strong>scrita,la nueva gramática es equivalente a la original, es aún no ambigua y satisface el lema.✷


5.9. AMBIGÜEDAD INHERENTE 103 ✷Teorema 27 El lenguaje libre <strong>de</strong> contextoL = {a N b N c M d M /N ≥ 1 y M ≥ 1} ∪ {a N b M c M d N /N ≥ 1 y M ≥ 1}es inherentemente ambiguo.Demostración : Asuma que hay una gramática no ambigua que genera L. Por el lema anterior, se pue<strong>de</strong>construir una gramática no ambigua G = (V, T, P, S), que genera L, que no tiene símbolos inútiles y en quepor cada A ∈ V − {S}, A⇒X ∗ 1 AX 2 para algunos X 1 , X 2 ∈ T ∗ , en que no son ambos ε.Se hace notar que la gramática G <strong>de</strong>be tener las siguientes propieda<strong>de</strong>s:1. Si A ∗ ⇒X 1 AX 2 , entonces X 1 y X 2 consisten <strong>de</strong> un sólo tipo <strong>de</strong> símbolos (a, b, c o d); si noS ∗ ⇒w 1 Aw 3∗⇒w1 X 1 X 1 AX 2 X 2 w 3∗⇒w1 X 1 X 1 w 2 X 2 X 2 w 3para algunos w 1 , w 2 y w 3 . El último string <strong>de</strong> terminales no pertenecería a L.2. Si A ∗ ⇒X 1 AX 2 , entonces X 1 y X 2 tienen símbolos diferentes, si no en una <strong>de</strong>rivación que usa A, seaumentaría el número <strong>de</strong> uno <strong>de</strong> los símbolos en una sentencia sin incrementar el número <strong>de</strong> ningúnotro símbolo, generando sentencias que no están en L.3. Si A ∗ ⇒X 1 AX 2 , entonces |X 1 | y |X 2 |. Si no se podría formar strings que tienen más <strong>de</strong> un símbolo que<strong>de</strong> ningún otro.4. Si A ∗ ⇒X 1 AX 2 y A ∗ ⇒X 3 AX 4 , entonces X 1 y X 3 consisten <strong>de</strong> los mismos símbolos. También X 2 y X 4 .Si no, la propiedad (1) sería violada.5. Si A ∗ ⇒X 1 AX 2 , entonces a.- X 1 consiste sólo <strong>de</strong> a’s y X 2 sólo <strong>de</strong> b’s o <strong>de</strong> d’s b.- X 1 consiste sólo <strong>de</strong> b’sy X 2 sólo <strong>de</strong> c’s c.- X 1 consiste sólo <strong>de</strong> c’s y X 2 sólo <strong>de</strong> d’sEn cualquiera <strong>de</strong> los otros casos es fácil <strong>de</strong>rivar un string que no pertenece a L. Por lo tanto, lasvariables que no sean S pue<strong>de</strong>n agruparse en 4 clases, C ab , C ad , C bc y C cd . C ab es el conjunto <strong>de</strong> todaslas A ∈ V , tales que A ∗ ⇒X 1 AX 2 , con X 1 ∈ a ∗ y X 2 ∈ b ∗ . C ad , C bc y C cd se <strong>de</strong>finen en forma análoga.6. Una <strong>de</strong>rivación que contiene un símbolo en C ab o C cd no pue<strong>de</strong> contener un símbolo en C ad o C bc yviceversa. Si no, sería posible incrementar el número <strong>de</strong> tres <strong>de</strong> los tipos <strong>de</strong> símbolos <strong>de</strong> una sentenciaen L, sin importar el cuarto. En ese caso habría un string en L para el cual un símbolo apareceríamenos veces que todos los otros.Nótese que si una <strong>de</strong>rivación contiene una variable en C ab o C cd , entonces el string terminal generado<strong>de</strong>be estar en {a N b N c M d M /N ≥ 1 y M ≥ 1}. Porque supóngase que una variable A ∈ C ab aparece enuna <strong>de</strong>rivación <strong>de</strong> un string X que no está en ese conjunto. Entonces X <strong>de</strong>be ser <strong>de</strong> la forma a N b M c M d N ,con M ≠ N. Ya que A ∈ C ab , es posible generar una sentencia a N+p b M+p c M d N , con M ≠ N para algúnp > 0, la que no pertenece a L. Un argumento similar se cumple si A ∈ C cd . Un razonamiento análogoimplica que si una <strong>de</strong>rivación contiene una variable en C ad o C bc , entonces la sentencia generada <strong>de</strong>be estaren {a N b M c M d N /N ≥ 1 y M ≥ 1}.Se divi<strong>de</strong> G en dos gramáticas,yG 1 = ({S} ∪ C ab ∪ C cd , T , P 1 , S)G 2 = ({S} ∪ C ad ∪ C bc , T , P 2 , S)


104 CHAPTER 5.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES LIBRES DE CONTEXTOen que P 1 contiene todas las producciones <strong>de</strong> P con una variable <strong>de</strong> C ad o C bc ya sea en su lado izquierdo o<strong>de</strong>recho, y P 2 todas aquéllas con una variable <strong>de</strong> C ad o C bc ya sea en su lado izquierdo o <strong>de</strong>recho. A<strong>de</strong>másP 1 contiene todas las producciones en P , <strong>de</strong> la forma S → a N b N c M d M , N ≠ M; y P 2 todas aquéllas <strong>de</strong> laforma S → a N b M c M d N , N ≠ M. Producciones <strong>de</strong> la forma S → a N b N c N d N no están ni en P 1 ni en P 2 . Yaque G genera{a N b N c M d M /N ≥ 1 y M ≥ 1} ∪ {a N b M c M d N /N ≥ 1 y M ≥ 1},G 1 <strong>de</strong>be generar todas las sentencias en{a N b N c M d M /N ≥ 1, M ≥ 1 y N ≠ M}más, posiblemente, algunos strings en a N b N c N d N /N ≥ 1, y G 2 <strong>de</strong>be generar todos los strings en{a N b M c M d N /N ≥ 1, M ≥ 1 y N ≠ M}más, posiblemente, algunos strings en {a N b N c N d N /N ≥ 1}. Se muestra que esto no pue<strong>de</strong> ser así a menosque G 1 y G 2 generen ambas todos, excepto un conjunto finito <strong>de</strong> strings en {a N b N c N d N /N ≥ 1}. Por lotanto todos, excepto un número finito <strong>de</strong> strings en {a N b N c N d N /N ≥ 1} son generados por G 1 y G 2 y tienenentonces dos <strong>de</strong>rivaciones diferentes en G. Esto contradice la hipótesis <strong>de</strong> que G no era ambigua, como sequería.Para ver que G 1 y G 2 generan todos, excepto un número finito, <strong>de</strong> strings en {a N b N c N d N /N ≥ 1}, senumera las producciones <strong>de</strong> P 1 <strong>de</strong> la forma S → α, <strong>de</strong> 1 a r. Para 1 ≤ i ≤ r, si S → α es la i-ésimaproducción, sea N i el conjunto <strong>de</strong> todos los N tales queS ⇒ G 1α ∗ ⇒ G1 a N b N c M d Mpara algún M, y sea M i el conjunto <strong>de</strong> todos los M tales queS ⇒ G 1α ∗ ⇒ G1 a N b N c M d Mpara algún N. Es fácil probar que para cualquier N ∈ N i y M ∈ M iS ⇒ G 1α ∗ ⇒ G1 a N b N c M d M(Recuer<strong>de</strong> que las variables <strong>de</strong> α están en C ab o C cd ). De don<strong>de</strong> se concluye, por el lema inicial, que G 1 <strong>de</strong>begenerar todas, excepto un número finito, las sentencias en {a N b N c N d N /N ≥ 1}. Un argumento similar esaplicable a G 2 . (Ver en el libro).✷


Chapter 6PROPIEDADES DE LOSLENGUAJES LIBRES DECONTEXTOEste capítulo es, respecto <strong>de</strong> los lenguajes libres <strong>de</strong> contexto, lo que el capítulo 4 es respecto <strong>de</strong> los lenguajesregulares. En primer lugar se verá un lema <strong>de</strong> bombeo para probar que ciertos lenguajes no son libres <strong>de</strong>contexto. Luego se consi<strong>de</strong>rarán algunas propieda<strong>de</strong>s <strong>de</strong> clausura y, finalmente, se verán algunos algoritmospara respon<strong>de</strong>r ciertas preguntas sobre lenguajes libres <strong>de</strong> contexto.6.1 Lema <strong>de</strong> Bombeo para <strong>Lenguajes</strong> Libres <strong>de</strong> ContextoEl lema <strong>de</strong> bombeo para conjuntos regulares establece que todo string suficientemente largo <strong>de</strong> un conjuntoregular contiene un substring corto que se pue<strong>de</strong> bombear. Es <strong>de</strong>cir, al insertar tantas copias <strong>de</strong>l substringcomo se <strong>de</strong>see, se obtiene siempre un string en el conjunto regular. El lema <strong>de</strong> bombeo para lenguajes libres<strong>de</strong> contexto establece que hay siempre dos substrings cortos que pue<strong>de</strong>n ser repetidos, el mismo número <strong>de</strong>veces ambos, tanto como se <strong>de</strong>see.Lema 9 Sea L un lenguaje libre <strong>de</strong> contexto. Entonces, hay una constante N, que sólo <strong>de</strong>pen<strong>de</strong> <strong>de</strong> L, talque si Z ∈ L y |Z| ≥ N, entonces es posible escribir Z = uvwxy tal que1. |vx| ≥ 12. |vwx| ≤ N3. ∀i ≥ 0, uv i wx i y ∈ LDemostración : Sea G una gramática libre <strong>de</strong> contexto en la forma normal <strong>de</strong> Chomsky que genera L − {ε}.Obsérvese que si Z ∈ L(G) y Z es largo, entonces cualquier árbol <strong>de</strong> <strong>de</strong>rivación para Z <strong>de</strong>be contener uncamino largo. Más precisamente, se muestra por inducción en i, que si el árbol <strong>de</strong> <strong>de</strong>rivación <strong>de</strong> un stringgenerado por una gramática en la forma normal <strong>de</strong> Chomsky no tiene caminos <strong>de</strong> largo mayor que i, entoncesla palabra (string) es <strong>de</strong> longitud no mayor que 2 i−1 . La base, i = 1, es trivial ya que el árbol <strong>de</strong>be tener laforma <strong>de</strong> la Figura 6.1.Para la inducción, sea i > 1. Sea el árbol <strong>de</strong> <strong>de</strong>rivación <strong>de</strong> la forma <strong>de</strong> la Figura 6.2Si no hay caminos <strong>de</strong> largo mayor que i − 1 en los árboles T 1 y T 2 , entonces ellos generan strings <strong>de</strong> a losumo 2 i−2 símbolos y, por lo tanto, el árbol completo genera strings <strong>de</strong> no más <strong>de</strong> 2 i−1 símbolos.Sean k las variables <strong>de</strong> G y sea N = 2 k . Si Z ∈ L(G) y |Z| ≥ N, como |Z| > 2 k−1 , cualquier árbol <strong>de</strong><strong>de</strong>rivación para Z <strong>de</strong>be tener un camino <strong>de</strong> largo k + 1 al menos. Pero un camino <strong>de</strong> ese largo tiene al menos105


106 CHAPTER 6. PROPIEDADES DE LOS LENGUAJES LIBRES DE CONTEXTOSFigure 6.1: Árbol <strong>de</strong> <strong>de</strong>rivación para i = 1☞☞☞☞☞☞❇T✟✟✟ ✟AaS◗ ◗◗☞❇❇❇☞❇☞❇☞❇☞1 T 2❇☞B❇❇❇❇Figure 6.2: Árbol <strong>de</strong> <strong>de</strong>rivación para i ≥ 1k + 2 vértices, todos los cuales, excepto el último, son variables. Debe haber alguna variable que aparece dosveces en ese camino.En realidad se pue<strong>de</strong> precisar más. Alguna variable <strong>de</strong>be aparecer dos veces cerca <strong>de</strong>l fin <strong>de</strong>l camino. Enparticular, sea P un camino tan largo como el que más en el árbol. Debe haber dos vértices v 1 y v 2 en esecamino, que satisfacen las siguientes condiciones,1. Los vértices v 1 y v 2 tienen la misma etiqueta, A.2. El vértice v 1 está más cerca <strong>de</strong> la raíz que v 2 .3. El camino entre v 1 y la hoja es <strong>de</strong> largo k + 1 a lo más.Para ver que v 1 y v 2 existen, basta proce<strong>de</strong>r hacia arriba por el camino P <strong>de</strong>s<strong>de</strong> la hoja; <strong>de</strong> los primerosk +2 vértices, sólo la hoja tiene un terminal como etiqueta. Los <strong>de</strong>más k +1 no pue<strong>de</strong>n tener todos etiquetasdistintas.El subárbol T 1 , con raíz v 1 , representa la <strong>de</strong>rivación <strong>de</strong> un substring <strong>de</strong> largo 2 k a lo sumo. Esto es ciertopues P fue el camino más largo <strong>de</strong> todo el árbol. Sea Z 1 el rédito <strong>de</strong>l árbol T 1 . Si T 2 es el subárbol con raízen v 2 y Z 2 es su rédito, entonces se pue<strong>de</strong> escribir Z 1 como Z 3 Z 2 Z 4 . A<strong>de</strong>más Z 3 y Z 4 no pue<strong>de</strong>n ser ambosε ya que la primera producción usada en la <strong>de</strong>rivación <strong>de</strong> Z 1 es <strong>de</strong> la forma A → BC y el subárbol T 2 <strong>de</strong>beestar completamente <strong>de</strong>ntro <strong>de</strong>l árbol generado <strong>de</strong> B, o completamente <strong>de</strong>ntro <strong>de</strong>l generado <strong>de</strong> C.Se sabe queA ∗ ⇒Z 3 AZ 4 y A ∗ ⇒, con |Z 3 Z 2 Z 4 | ≤ 2 k = NPor lo tanto A⇒Z ∗ 3 iAZi 4 , ⇒Z ∗ 3 iZ 2Z4 i para todo i ≥ 0. Claramente, el string Z pue<strong>de</strong> ser escrito comouZ 3 Z 2 Z 4 y para algunos u e y. Si Z 3 = v, Z 2 = w y Z 4 = x, el lema queda <strong>de</strong>mostrado.Este lema <strong>de</strong> bombeo pue<strong>de</strong> utilizarse para probar que un número <strong>de</strong> lenguajes no son libres <strong>de</strong> contexto,utilizando un argumento con adversario similar al usado con el lema <strong>de</strong> bombeo para lenguajes regulares.✷


6.1. LEMA DE BOMBEO PARA LENGUAJES LIBRES DE CONTEXTO 107S❩ ❩❩❩❩❩❩❩❩❩❩❩❩❩❩❩❩❩❩❩Av 12BCA v✓ ✓✓✓✓✓✓✓✓✓✓✓✓✓✓Z 3 Z 2 Z 4Z1Figure 6.3: Derivación <strong>de</strong> un substringEjemplo 78 Consi<strong>de</strong>re el lenguaje L 1 = {a i b i c i /i ≥ 1}. Asuma que L es libre <strong>de</strong> contexto y sea N laconstante <strong>de</strong>l lema <strong>de</strong> bombeo. Consi<strong>de</strong>re el string Z = a N b N c N . Por el lema, se pue<strong>de</strong> escribir Z = uvwxy,con |vx| ≥ 1 y |vwx| ≤ N. Como |vwx| ≤ N, no es posible que vx contenga a’s y c’s ya que hay N + 1posiciones entre la última a y la primera c. Si v y x sólo contienen a’s, entonces uwy (uv i wx i y, con i = 0)tiene N b’s y N c’s, pero menos <strong>de</strong> N a’s, ya que |vx| ≥ 1. Por lo tanto no es <strong>de</strong> la forma a j b j c j , es <strong>de</strong>cir, nopertenece a L 1 , contradiciendo el lema <strong>de</strong> bombeo. Los casos en que v y x sólo tienen b’s o c’s son similares.Si vx tiene a’s y b’s, entonces uwy tiene más c’s que a’s o b’s y, por lo tanto, no está en L 1 , contradiciendoel lema <strong>de</strong> bombeo. Si vx contiene b’s y c’s, suce<strong>de</strong> algo similar.En todos los casos posibles, se contradice el lema <strong>de</strong> bombeo, por lo tanto se concluye que L 1 no es unlenguaje libre <strong>de</strong> contexto.Ejemplo 79 Sea L 2 = {a i b j c i d j /i ≥ 1 y j ≥ 1}. Suponga que L 2 es un lenguaje libre <strong>de</strong> contexto y seaN la constante <strong>de</strong>l lema <strong>de</strong> bombeo. Consi<strong>de</strong>re el string Z = a N b N c N d N . Por el lema, se pue<strong>de</strong> escribirZ = uvwxy, con |vx| ≥ 1 y |vwx| ≤ N. Como |vwx| ≤ N, vx pue<strong>de</strong> tener a lo más dos símbolos diferentes,los que <strong>de</strong>ben ser consecutivos (ab, bc, cd).Si vx sólo tiene a’s, entonces uwy tiene menos a’s que c’s y no está en L 2 , contradiciendo el lema <strong>de</strong>bombeo. El mismo resultado se obtiene si vx contiene sólo b’s, sólo c’s o sólo d’s.Si vx tiene a’s y b’s, entonces uwy tiene menos a’s que c’s. Una contradicción similar con el lema <strong>de</strong>bombeo ocurre si vx tiene b’s y c’s o c’s y d’s.Ya que en todos los casos posibles se contradice el lema <strong>de</strong> bombeo, se concluye que L 2 no es un lenguajelibre <strong>de</strong> contexto.Hay algunos lenguajes que no son libres <strong>de</strong> contexto, para los cuales el lema <strong>de</strong> bombeo no es suficiente.Por ejemploL 3 = {a i b j c k d l /i = 0 ó j = k = l}✷✷


108 CHAPTER 6. PROPIEDADES DE LOS LENGUAJES LIBRES DE CONTEXTOno es libre <strong>de</strong> contexto. Sin embargo, si se escoge Z = b j c k d l y se escribe Z = uvwxy, es siempre posibleescoger u, v, w, x e y, tales que uv M wx M y ∈ L 3 , ∀M. Por ejemplo, se escoge vwx <strong>de</strong> manera que sólo tengab’s. Si se escoge Z = a i b j c j d j , entonces v y x podrían tener sólo a’s, en cuyo caso uv M wx M y ∈ L 3 , ∀M.Se requiere una versión más po<strong>de</strong>rosa <strong>de</strong>l lema <strong>de</strong> bombeo que permita enfocar un número <strong>de</strong> posicionesen el string y luego bombearlas. Una extensión similar es simple para lenguajes regulares ya que en cualquiersecuencia <strong>de</strong> N + 1 estados en un AFD <strong>de</strong> N estados, <strong>de</strong>be contener alguno dos veces; y el substring en elmedio pue<strong>de</strong> ser bombeado. El resultado para lenguajes libres <strong>de</strong> contexto es más difícil <strong>de</strong> obtener pero sepue<strong>de</strong> mostrar. Se establece y prueba una versión simple <strong>de</strong> lo que se conoce como el lema <strong>de</strong> Og<strong>de</strong>n.Lema 10 (Lema <strong>de</strong> Og<strong>de</strong>n) Sea L un lenguaje libre <strong>de</strong> contexto. Entonces hay una contante N (que pue<strong>de</strong>ser la misma que para el lema <strong>de</strong> bombeo), tal que si Z ∈ L y se marcan N o más posiciones (símbolos)cualesquiera <strong>de</strong> Z como “distinguidas”, entonces se pue<strong>de</strong> escribir Z = uvwxy, tal que1. vx tiene al menos una posición distinguida2. vwx tiene a lo más N posiciones distinguidas3. ∀i ≥ 0; uv i wx i y ∈ LDemostración : Sea G una gramática en la forma normal <strong>de</strong> Chomsky que genera L − {ε}. Sean k lasvariables <strong>de</strong> G y sea N = 2 k+1 . Se <strong>de</strong>be construir un camino P en el árbol, similar al <strong>de</strong> la prueba <strong>de</strong>llema <strong>de</strong> bombeo. Sin embargo, ya que estamos interesados sólo en las posiciones distinguidas, no interesarántodos los vértices , peor sólo los “puntos <strong>de</strong> quiebre” (branch points), que son vértices en que ambos hijostienen <strong>de</strong>scendientes distinguidos.P se construye como sigue. La raíz pertenece a P . Si r es el último vértice incluido en P , se sigue comose indica a continuación. Si r tiene un hijo con <strong>de</strong>scendientes distinguidos, ese hijo se agrega a P . Si r esuna hoja, se termina el proceso. Si ambos hijos <strong>de</strong> r tienen <strong>de</strong>scendientes distinguidos, r es un punto <strong>de</strong>quiebre y se agrega el hijo con el mayor número <strong>de</strong> <strong>de</strong>scendientes distinguidos a P (en caso <strong>de</strong> empate, seescoge arbitrariamente).Por lo tanto, cada punto <strong>de</strong> quiebre en P tiene al menos la mitad <strong>de</strong> <strong>de</strong>scendientes distinguidos que elpunto <strong>de</strong> quiebre anterior. Ya que hay al menos N posiciones distinguidas en Z, y todas son <strong>de</strong>scendientes<strong>de</strong> la raíz, hay al menos k + 1 puntos <strong>de</strong> quiebre en P . Por lo tanto, entre los últimos k + 1 puntos <strong>de</strong> quiebre<strong>de</strong>be haber dos con igual etiqueta. Se escoge v 1 y v 2 como dichos puntos <strong>de</strong> quiebre y la <strong>de</strong>mostracióncontinúa exactamente como en el lema <strong>de</strong> bombeo.Ejemplo 80 Sea L 4 = {a i b j c k /i ≠ j, j ≠ k, i ≠ k}. Asuma que L 4 es un lenguaje libre <strong>de</strong> contexto ysea N la constante <strong>de</strong>l lema <strong>de</strong> Og<strong>de</strong>n y consi<strong>de</strong>re el string Z = a N b N+N! c N+2N! . Sean las posiciones <strong>de</strong>las a’s distinguidas y sea Z = uvwxy, satisfaciendo las condiciones <strong>de</strong>l lema <strong>de</strong> Og<strong>de</strong>n. Si v o x contienensímbolos diferentes, entonces uv 2 wx 2 y ∉ L 4 ya que tendrá símbolos no en el or<strong>de</strong>n correcto. Al menos uno<strong>de</strong> v y x <strong>de</strong>be tener a’s, ya que sólo las a’s han sido distinguidas. Por lo tanto si x está en b ∗ o c ∗ , v <strong>de</strong>beestar en a + . Si x ∈ a + , entonces v ∈ a ∗ . Consi<strong>de</strong>re el caso en que x ∈ b ∗ , los <strong>de</strong>más son similares; entoncesv ∈ a + . Sea p = |v|. Entonces 1 ≤ p ≤ N y, por lo tanto, p divi<strong>de</strong> N!, sea q tal que pq = n!. Entoncesz ′ = uv 2q+1 wx 2q+1 y <strong>de</strong>biera estar en L 4 . Pero v 2q+1 = a 2pq+p = a 2N!+p . Como uwy tiene exactamente(n − p) a’s, Z ′ tiene (2N! + N) a’s; sin embargo como v y x no tienen c’s, Z ′ también tiene (2N! + N) c’s y,por lo tanto, no está en L 4 . Una contradicción con el lema <strong>de</strong> Og<strong>de</strong>n. Una contradicción similar ocurre si xestá en a + o c ∗ . Por lo tanto L 4 no es un lenguaje libre <strong>de</strong> contexto.Debe notarse que el lema <strong>de</strong> bombeo es un caso especial <strong>de</strong>l lema <strong>de</strong> Og<strong>de</strong>n en que todas las posicionesson distinguidas.✷✷


6.2. PROPIEDADES DE CLAUSURA 1096.2 Propieda<strong>de</strong>s <strong>de</strong> ClausuraEn esta sección se consi<strong>de</strong>ran algunas operaciones que preservan los lenguajes libres <strong>de</strong> contexto. Lasoperaciones son útiles no sólo para construir o probar que ciertos lenguajes son libres <strong>de</strong> contexto, sino quepara probar que algunos no lo son. Un lenguaje L pue<strong>de</strong> probarse no libre <strong>de</strong> contexto construyendo, apartir <strong>de</strong> L, un lenguaje no libre <strong>de</strong> contexto, usando sólo operaciones que preserven los lenguajes libres <strong>de</strong>contexto.Teorema 28 Los lenguajes libres <strong>de</strong> contexto son cerrados bajo unión, concatenación y clausura <strong>de</strong> Kleene.Demostración :Sean L 1 y L 2 lenguajes libres <strong>de</strong> contexto generados por las gramáticasG 1 = (V 1 , T 1 , P 1 , S 1 )yG 2 = (V 2 , T 2 , P 2 , S 2 )respectivamente. Se asume que V 1 y V 2 son disjuntos y que S 3 , S 4 y S 5 no están en V 1 ∪ V 2 .Para L 1 ∪ L 2 se construye la gramática G 3 = (V 1 ∪ V 2 ∪ {S 3 }, T 1 ∪ T 2 , P 3 , S 3 ) en que P 3 es P 1 ∪ P 2 más⇒ ⇒ ∗las producciones S 3G3 S 1G1 w es también posible en G3 ya que P 1 ⊆ P 3 . En forma similar, todo string enL 2 tiene una <strong>de</strong>rivación en G 3 que comienza con S 3 ⇒ S 2 . Por lo tanto, L 1 ∪ L 2 ⊆ L(G 3 ). Ahora, sea⇒ ⇒ ∗ ⇒ ⇒ ∗w ∈ L(G 3 ). Entonces la <strong>de</strong>rivación S 3G3 S 1G3 w o con S3G3 S 2G3 w. En el primer caso, como V1 y V 2 son⇒ ∗disjuntos, sólo símbolos <strong>de</strong> G 1 aparecen en S 1G3 w. Como las únicas producciones <strong>de</strong> P3 que usan sólo⇒ ∗símbolos <strong>de</strong> G 1 son las <strong>de</strong> P 1 , se concluye que sólo producciones <strong>de</strong> P 1 son usadas en la <strong>de</strong>rivación S 1G3 w.⇒ ∗ ⇒Por lo tanto, S 1G1 w y, luego, w ∈ L1 . Análogamente, si la <strong>de</strong>rivación comienza S 3G3 S 2 , se concluye quew ∈ L 2 . De aquí, L 3 ⊆ L 1 ∪ L 2 . Por lo tanto, L ( G 3 ) = L 1 ∪ L 2 , como se <strong>de</strong>seaba.Para la concatenación, sea G 4 = (V 1 ∪ V 2 ∪ {S 4 }, T 1 ∪ T 2 , P 4 , S 4 ), en que P 4 es P 1 ∪ P 2 más la producciónS 4 → S 1 S 2 . La prueba <strong>de</strong> que L(G 4 ) = L 1 L 2 es similar a la anterior.Para la clausura <strong>de</strong> Kleene, sea G 4 = (V 1 ∪ {S 5 }, T 1 , P 5 , S 5 ), don<strong>de</strong> P 5 es P 1 más la producción S 5 →S 1 S 5 |ε. La prueba <strong>de</strong> que L(G 5 ) = L ∗ 1 es también similar a las anteriores.✷Teorema 29 Los lenguajes libres <strong>de</strong> contexto son cerrados bajo sustitución por lenguajes libres <strong>de</strong> contexto.Demostración : Sea L un lenguaje libre <strong>de</strong> contexto, L ⊆ Σ ∗ , y por cada a ∈ Σ sea L a = L(G a ). Asuma quelas variables <strong>de</strong> G y <strong>de</strong> G a son disjuntas. Construya una gramática G ′ <strong>de</strong> la siguiente forma. Las variables<strong>de</strong> G ′ son las <strong>de</strong> G y <strong>de</strong> las G a ’s. El símbolo inicial <strong>de</strong> G ′ es el símbolo inicial <strong>de</strong> G. Las producciones <strong>de</strong> G ′son todas las producciones <strong>de</strong> las G a ’s junto a las producciones formadas tomando una producción A → α<strong>de</strong> G y sustituyendo S a , el símbolo inicial <strong>de</strong> G a , por cada aparición <strong>de</strong> todo a ∈ Σ en el lado <strong>de</strong>recho α.Ejemplo 81 Sea L el conjunto <strong>de</strong> palabras con igual número <strong>de</strong> a’s y b’s y sean L a = {0 N 1 N /N ≥ 1} yL b = {ww r /w ∈ (0 + 2) ∗ }.Para G se pue<strong>de</strong> escogerPara G a se tomaS → aSbS|bSaS|εS a → 0S a 1|01✷


110 CHAPTER 6. PROPIEDADES DE LOS LENGUAJES LIBRES DE CONTEXTOPara G b se tomaS b → 0S b 0|2S b 2|εPara la sustitución f(a) = L a y f b = L b ; entonces f(L) es generado por la siguiente gramáticaS → S a SS b S|S b SS a S|εS a → 0S a 1|01S b → 0S b 0|2S b 2|εDebiera observarse que, ya sea que a, b, ab y a ∗ son lenguajes libres <strong>de</strong> contexto, la clausura <strong>de</strong> loslenguajes libres <strong>de</strong> contexto bajo sustitución por LLC, implica clausura bajo unión, concatenación y clausura<strong>de</strong> Kleene. La unión <strong>de</strong> L a y L b es simplemente la sustitución <strong>de</strong> L a y L b en {a, b}; similarmente, L a L b y L ∗ ason las sustituciones en {ab} y a ∗ , respectivamente. Es <strong>de</strong>cir, el primer teorema pue<strong>de</strong> ser presentado comoun corolario <strong>de</strong> este último.Ya que un homomorfismo es un caso especial <strong>de</strong> una sustitución, se establece el siguiente corolario:Corolario 1 Los lenguajes libres <strong>de</strong> contexto son cerrados bajo homomorfismos.Teorema 30 Los lenguajes libres <strong>de</strong> contexto son cerrados bajo el inverso <strong>de</strong> un homomorfismo.Demostración : Sea h : Σ → ∆ ∗ un homomorfismo y sea L un lenguaje libre <strong>de</strong> contexto. Sea L = L(M)en que M es el AA (Q, ∆, Γ, δ, q 0 , Z 0 , F ). Se construye un AA, M ′ , que acepta h −1 (L) como sigue. Dado uninput a, M ′ genera h(a) y simula a M en h(a). Si M fuera un AF, todo lo que podría hacer en h(a) seríacambiar estados y M ′ podría simularlo en una sola movida. Pero como M es un AA, pue<strong>de</strong> hacer pop <strong>de</strong>muchos símbolos o (por ser no <strong>de</strong>terminístico) hacer movidas que ponen un número arbitrario <strong>de</strong> símbolosen el stack. Es <strong>de</strong>cir, M ′ no pue<strong>de</strong>, necesariamente, simular las movidas <strong>de</strong> M en h(a) con una (o cualquiernúmero finito) <strong>de</strong> sus propias movidas.Se da, entonces, a M ′ un buffer en que pue<strong>de</strong> almacenar h(a). M ′ pue<strong>de</strong> entonces simular cualquiermovida <strong>de</strong> M que <strong>de</strong>see, consumiendo un símbolo <strong>de</strong> h(a) a la vez, como si fuera el input <strong>de</strong> M. Como elbuffer es parte <strong>de</strong>l control finito <strong>de</strong> M ′ , no se le pue<strong>de</strong> permitir crecer en forma arbitraria. Para asegurarésto, se permite que M ′ lea un símbolo <strong>de</strong>l input sólo cuando el buffer está vacío. Es <strong>de</strong>cir, el buffer siemprecontiene un sufijo <strong>de</strong> h(a) para algún a. M ′ acepta su input w si el buffer está vacío y M está en un estadofinal. Esto es, M ha aceptado h(w). Es <strong>de</strong>cir,L(M ′ ) = {w/h(w) ∈ L} = h −1 (L(M))Sea M ′ = (Q ′ , Σ, Γ, δ ′ , [q 0 , ε] , Z 0 , F × {ε}) en que Q ′ consta <strong>de</strong> los pares [q, x] tales que q ∈ Q y x es unsufijo (no necesariamente propio) <strong>de</strong> h(a) para algún a ∈ Σ. La función δ ′ se <strong>de</strong>fine como sigue:1. δ ′ ([q, x] , ε, Y ) contiene todos los ([p, x] , γ) tales que δ(q, ε, Y ) contiene (p, γ). Simula las movidas-ε <strong>de</strong>M in<strong>de</strong>pendientemente <strong>de</strong>l contenido <strong>de</strong>l buffer.2. δ ′ ([q, ax] , ε, Y ) contiene todos los ([p, x] , γ) tales que δ(q, a, Y ) contiene (p, γ). Simula a M en inputa ∈ ∆, removiendo a <strong>de</strong>l primer lugar <strong>de</strong>l buffer.3. δ ′ ([q, ε] , a, Y ) contiene ([q, h(a)] , Y ) ∀a ∈ Σ e Y ∈ Γ. Pone h(a) en el buffer leyendo a ∈ Σ <strong>de</strong>s<strong>de</strong>el input <strong>de</strong> M ′ ; el estado y stack <strong>de</strong> M no cambian.Para mostrar que L(M ′ ) = h −1 (L(M)) obsérvese primero que , por una aplicación <strong>de</strong> la regla (3) seguidapor aplicaciones <strong>de</strong> las reglas (1) y (2), si (q, h(a), α) ⊢ M∗(p, ε, β), entonces([q, ε] , a, α) ⊢ M ′([q, h(a)] , ε, α) ⊢ M ′ ∗([p, ε] , ε, β)✷


6.2. PROPIEDADES DE CLAUSURA 111Input a M ′✻hControl<strong>de</strong> M ′❄Buffer✻Control<strong>de</strong> M✛❄Stack<strong>de</strong>M y M ′Figure 6.4: Construcción <strong>de</strong> un AA que acepte h −1 (L)Por lo tanto si M acepta h(w), esto es,(q 0 , h(w), Z 0 ) ⊢ M∗(p, ε, β)para p ∈ F y β ∈ Γ ∗ , se concluye que([q 0 , ε] , w, Z 0 ) ⊢ M ′ ∗([p, ε] , ε, β)es <strong>de</strong>cir, M ′ acepta w. Por lo tanto L(M ′ ) ⊇ h −1 (L(M)).Al revés, suponga que M ′ acepta w = a 1 a 2 . . . a N . Como regla (3) sólo pue<strong>de</strong> aplicarse con el buffer(segundo componente <strong>de</strong> Q ′ ) vacío, la secuencia <strong>de</strong> movidas <strong>de</strong> M ′ que conducen a aceptar w, pue<strong>de</strong> escribirsecomo:([q 0 , ε] , a 1 a 2 . . . a N , Z 0 )⊢∗M ′([p 1 , ε] , a 1 a 2 . . . a N , α 1 )⊢M ′ ([p 1, h(a 1 )] , a 2 . . . a N , α 1 )⊢∗M ′([p 2 , ε] , a 2 . . . a N , α 2 )⊢M ′ ([p 2, h(a 2 )] , a 3 . . . a N , α 2 ).⊢∗M ′([p N−1 , ε] , a N , α N )⊢M ′ ([p N−1, h(a N )] , ε, α N )⊢∗M ′([p N , ε] , ε, α N+1 )En que p N ∈ F . Las transiciones <strong>de</strong> estados [p i , ε] a [p i , h(a i )] son por regla (3); las <strong>de</strong>más, por reglas(1) y (2). Por lo tanto (q 0 , ε, Z 0 ) ⊢ M∗(p1 , ε, α 1 ) y, para todo i,(p i , h(a i ), α i ) ⊢ M∗(pi+1 , ε, α i+1 )lo que indica que(q 0 , h(a 1 a 2 . . . a N ), Z 0 ) ⊢ M∗(pN , ε, α N+1 )es <strong>de</strong>cir, h(a 1 a 2 . . . a N ) ∈ L(M). Luego, L(M ′ ) ⊆ h −1 (L(M)) y por lo tanto se concluye que L(M ′ ) =h −1 (L(M)).


112 CHAPTER 6. PROPIEDADES DE LOS LENGUAJES LIBRES DE CONTEXTOHay varias propieda<strong>de</strong>s <strong>de</strong> clausura <strong>de</strong> los lenguajes regulares que los lenguajes libres <strong>de</strong> contexto noposeen. Notable es el caso <strong>de</strong> la intersección y <strong>de</strong> la complementación.Teorema 31 Los lenguajes libres <strong>de</strong> contexto no son cerrados bajo intersección.Demostración : Ya se mostró que L 1 = {a i b i c i /i ≥ 1} no es un lenguaje libre <strong>de</strong> contexto. Se muestra quelos siguientes lenguajes sí son libres <strong>de</strong> contexto.L 2 = {a i b i c j /i ≥ 1 y j ≥ 1}L 3 = {a i b j c j /i ≥ 1 y j ≥ 1}Por ejemplo, las siguientes gramáticas los generanS 2 → AB S 3 → CDA → aAb|ab C → aC|aB → cB|c D → bDc|bcSin embargo L 1 = L 2 ∩ L 3 y entonces, si fueran cerrados bajo intersección, L 1 <strong>de</strong>biera ser libre <strong>de</strong>contexto. Se concluye que los lenguajes libres <strong>de</strong> contexto no son cerrados bajo intersección.Corolario 2 Los lenguajes libres <strong>de</strong> contexto no son cerrados bajo complementación.Demostración : Ya que son cerrados bajo unión, si fueran cerrados bajo complementación serían, por la ley<strong>de</strong> De Morgan, (L 1 ∩ L 2 = L 1 ∪ L 2 ), cerrados bajo intersección.Teorema 32 Si L es un lenguaje libre <strong>de</strong> contexto y R es un conjunto regular, entonces L ∩ R es libre <strong>de</strong>contexto.Demostración : Sea L = L(M) para un AA, M = (Q M , Σ, Γ, δ M , q 0 , Z 0 , F M ) y sea R = L(A) para un AFD,A = (Q A , Σ, δ A , p 0 , F A ). Se construye un AA M ′ para L ∩ R ejecutando M y A en paralelo. M ′ simulamovidas <strong>de</strong> M en input ε sin cambiar el estado <strong>de</strong> A. Cuando M hace una movida en símbolo a, M ′ simulaesa movida y también simula los cambios <strong>de</strong> estado <strong>de</strong> A en input a. M ′ acepta si y sólo si tanto A comoM aceptan. Formalmente seaM ′ = (Q A × Q M , Σ, Γ, δ, [p 0 , q 0 ] , Z 0 , F A × F M )con δ <strong>de</strong>finida por δ([p, q] , a, X) ⊇ {([p ′ , q ′ ] , γ)} ssi δ A (p, a) = p ′ y δ M (q, a, X) ⊇ {(q ′ , γ)}. Si a = ε, entoncesp ′ = p.Graficamente, la máquina se comporta como sigueUna simple inducción en i muestra quesi y sólo si([p 0 , q 0 ] , w, Z 0 ) ⊢ M ′ i([p, q] , ε, γ)(q 0 , w, Z 0 ) ⊢ Mi(q, ε, γ) y δ(p0 , w) = pLa base, i = 0, es trivial pues p = p 0 y q = q 0 , γ = Z 0 y w = ε. Para la inducción, asuma que es verdadpara i − 1, y sea([p 0 , q 0 ] , xa, Z 0 ) M ⊢ i−1 ′ ([p ′ , q ′ ] , a, β) M ⊢ ′([p, q] , ε, γ)✷✷✷


6.3. ALGORITMOS DE DECISIÓN 113Input a A, M y M ′✻Control<strong>de</strong> M ′Control<strong>de</strong> AControl<strong>de</strong> M✛❄Stack<strong>de</strong>M y M ′Figure 6.5: Construcción <strong>de</strong> un AA para L ∩ Ren que w = xa; con a ∈ Σ ∪ {ε}. Por la hipótesis <strong>de</strong> inducciónδ A (p 0 , x) = p ′ y (q 0 , x, Z 0 ) ⊢ Mi−1(q ′ , ε, β)Por la <strong>de</strong>finición <strong>de</strong> δ, el hecho <strong>de</strong> que ([p ′ , q ′ ] , a, β) ⊢ M ′([p, q] , ε, γ) indica que δ A(p ′ , a) = p y (q ′ , a, β) ⊢ M (q, ε, γ).Por lo tanto δ A (p 0 , w) = p, y(q 0 , w, Z 0 ) ⊢ Mi(q, ε, γ)El converso, que (q 0 , w, Z 0 ) M ⊢ i(q, ε, γ) y δA (p 0 , w) = p implica ([p 0 , q 0 ] , w, Z 0 ) M⊢ i([p, q] , ε, γ) es similar.✷Ejemplo 82 Sea L = {ww/w ∈ {a, b} ∗ }. Esto es, L consiste <strong>de</strong> todas las palabras cuyas primeras ysegundas mita<strong>de</strong>s son las mismas. Si L fuera libre <strong>de</strong> contexto, entonces L 1 = L ∩ a + b + a + b + <strong>de</strong>biera serlo,ya que son cerrados bajo intersección con un lenguaje regular. Pero L 1 es claramente {a i b j a i b j /i ≥ 1, j ≥ 1}casi idéntico a uno que ya se probó no era libre <strong>de</strong> contexto.Sea h el homomorfismo h(a) = h(c) = a y h(b) = h(d) = b. Entonces h −1 (L 1 ) contiene strings <strong>de</strong> laforma x 1 x 2 x 3 x 4 en que x 1 y x 3 tienen igual largo y pertenecen a (a + c) + y x 2 y x 4 tienen igual largo yestán en (b + d) + . Por lo tanto h −1 (L 1 ) ∩ a ∗ b ∗ c ∗ d ∗ es igual a {a i b j c i d j /i ≥ 1, j ≥ 1}. Como este último noes libre <strong>de</strong> contexto, L tampoco lo es.6.3 Algoritmos <strong>de</strong> DecisiónHay varias preguntas sobre los lenguajes libres <strong>de</strong> contexto que se pue<strong>de</strong> respon<strong>de</strong>r. Ellas incluyen <strong>de</strong>terminarsi un lenguaje dado es vacío, finito o infinito y si un string está en un lenguaje. Sin embargo, hay otraspreguntas acerca <strong>de</strong> los lenguajes libres <strong>de</strong> contexto para los cuales no existe algoritmo que las responda.Entre éstas está el saber si dos gramáticas son equivalentes, si un lenguaje es cofinito, si el complemento <strong>de</strong>un lenguaje libre <strong>de</strong> contexto es también libre <strong>de</strong> contexto y si una cierta gramática es o no ambigua. Enesta sección se verán algoritmos para algunas <strong>de</strong> las preguntas que tienen algoritmos.Como en el caso <strong>de</strong> los lenguajes regulares, hay varias representaciones posibles para los lenguajes libres<strong>de</strong> contexto, es <strong>de</strong>cir, gramáticas libres <strong>de</strong> contexto y autómatas apiladores que aceptan por stack vacío o✷


114 CHAPTER 6. PROPIEDADES DE LOS LENGUAJES LIBRES DE CONTEXTOpor estado final. Como las construcciones <strong>de</strong>l capítulo 5 son todas efectivas, un algoritmo que usa una representaciónse pue<strong>de</strong> hacer funcionar para cualquiera <strong>de</strong> las otras. En esta sección se usará la representaciónpor gramáticas libres <strong>de</strong> contexto.Teorema 33 Existen algoritmos para <strong>de</strong>terminar si un lenguaje libre <strong>de</strong> contexto es1. vacío,2. finito, o3. infinito.Demostración : Ya se ha dado un algoritmo para probar si un lenguaje libre <strong>de</strong> contexto es vacío. Para unagramática G = (V, T, P, S), el test <strong>de</strong>l primer lema para remover símbolos inútiles <strong>de</strong>termina si una variablegenera algún string <strong>de</strong> terminales. Obviamente L(G) es no vacío si y sólo si el símbolo inicial, S, generaalgún string <strong>de</strong> terminales.Para saber si L(G) es finito, utilice el algoritmo <strong>de</strong>l teorema correspondiente para construir una gramáticaG ′ = (V ′ , T, P ′ , S) en la forma normal <strong>de</strong> Chomsky, que genera L(G) − {ε}. L(G ′ ) es finito si y sólo si L(G)es finito. Un test simple para la finitud <strong>de</strong> una gramática en forma normal <strong>de</strong> Chomsky sin símbolos inútiles,es construir un grafo dirigido con un vértice por variable y un arco <strong>de</strong> A a B, si hay una producción <strong>de</strong> laforma A → BC o A → CB para algún C. El lenguaje generado es finito si y sólo si este grafo no tiene ciclos.(Ver texto).Otra pregunta que se pue<strong>de</strong> respon<strong>de</strong>r es: dada una gramática libre <strong>de</strong> contexto, G = (V, T, P, S) y unstring x en T ∗ , ¿está x ∈ L(G)? Aquí se presentará un algoritmo simple <strong>de</strong> or<strong>de</strong>n ϑ(|x| 3 ) conocido como elalgoritmo <strong>de</strong> Cocke-Younger-Kasami o CYK. Dado x <strong>de</strong> longitud N ≥ 1 y una gramática G, que se asumeestá en la forma normal <strong>de</strong> Chomsky, se <strong>de</strong>termina para cada i, para cada j y para cada variable A, siA ∗ ⇒X ij , en que X ij es el substring <strong>de</strong> x que tiene largo j y comienza en la posición i.El proceso es por inducción en j. Para j = 1, A ∗ ⇒X ij si y sólo si A → X ij es una producción, ya queX ij tiene largo 1. Para valores mayores <strong>de</strong> j, si j > 1, entonces A ∗ ⇒X ij si y sólo si hay alguna producciónA → BC y algún k, 1 ≤ k ≤ j, tal que B <strong>de</strong>riva los primeros k símbolos <strong>de</strong> X ij y C <strong>de</strong>riva los últimosj − k símbolos <strong>de</strong> X ij . Esto es, B ∗ ⇒X ij y C ⇒ X i+k,j+k . Ya que tanto k como j − k son menores que j,en el proceso ya se sabe si estas dos últimas <strong>de</strong>rivaciones son posibles. Por lo tanto, se pue<strong>de</strong> <strong>de</strong>terminar siA ∗ ⇒X ij . Cuando j = N, se pue<strong>de</strong> <strong>de</strong>terminar si S ∗ ⇒X 1N = x. Es <strong>de</strong>cir, se pue<strong>de</strong> saber si x ∈ L(G).Para <strong>de</strong>finir el algoritmo <strong>de</strong> CYK en forma precisa, sea V ij el conjunto <strong>de</strong> variables A, tales que A ∗ ⇒X ij .Se pue<strong>de</strong> asumir que 1 ≤ i ≤ N − j + 1 ya que no hay string más largo <strong>de</strong> N − i + 1 que comienza en posicióni.(1) FOR i := 1 TO N DO(2) V i1 := {A/A → a ∈ P y a es el i-esimo simbolo <strong>de</strong> x }(3) FOR j := 2 TO N DO(4) FOR i := 1 TO N − j + 1 DO BEGIN(5) V ij := ∅;(6) FOR k := 1 TO J − 1 DO(7) V ij := V ij ∪ {A/A → BC ∈ P , B ∈ V ik y C ∈ V i+k,j−k }ENDEl loop <strong>de</strong> líneas (1) y (2) inicializan para j = 1. Como la gramática es fija, línea (2) toma tiempoconstante. Por lo tanto el ciclo toma ϑ(N) pasos.Los loops anidados <strong>de</strong> líneas (3) y (4) hacen que las líneas (5) a (7) se ejecuten a lo más N 2 veces.La línea (5) toma tiempo constante cada vez, es <strong>de</strong>cir, en total se ejecuta ϑ(N 2 ) veces. El loop <strong>de</strong> lalínea (6) hace que la línea (7) se ejecute ϑ(N 3 )veces. Es <strong>de</strong>cir el algoritmo es ϑ(N 3 ).✷


6.3. ALGORITMOS DE DECISIÓN 115Ejemplo 83 Consi<strong>de</strong>re la gramática libre <strong>de</strong> contexto que se indica a continuación:S → AB|BCA → BA|aB → CC|bC → AB|ay el string baaba.V ijjb a a b ai ✲1 2 3 4 51 B A, C A, C B A, C2 S, A B S, C S, A3 ∅ B B❄4∅ S, A, C5 S, A, CPara calcular V 24 :V 21 = {A, C} V 33 = {B} ⇒ S, CV 22 = {B} V 42 = {S, A} ⇒ AV 23 = {B} V 51 = {A, C} ⇒ A, Ses <strong>de</strong>cir, V 24 = {S, A, C}.Ya que S ∈ V 15 , se concluye que el string baaba ∈ L(G).✷


116 CHAPTER 6. PROPIEDADES DE LOS LENGUAJES LIBRES DE CONTEXTO


Chapter 7ACEPTACIÓN Y GENERACIÓNDE LENGUAJES ENUMERABLESRECURSIVAMENTE YLENGUAJES RECURSIVOSEn este capítulo se estudiarán las máquinas <strong>de</strong> Turing, un mo<strong>de</strong>lo matemático simple <strong>de</strong> lo que es uncomputador. A pesar <strong>de</strong> su simpleza, esta máquina mo<strong>de</strong>la la capacidad <strong>de</strong> computación <strong>de</strong> un computador<strong>de</strong> propósito general. Las máquinas <strong>de</strong> Turing son estudiadas tanto por la clase <strong>de</strong> lenguajes que <strong>de</strong>finen(llamados enumerables recursivamente), como también por la clase <strong>de</strong> funciones enteras que pue<strong>de</strong>n computar(llamadas funciones recursivas parciales). Un número <strong>de</strong> otros mo<strong>de</strong>los <strong>de</strong> computación se presentan y semuestra que ellos son equivalentes a la máquina <strong>de</strong> Turing en su po<strong>de</strong>r <strong>de</strong> computación.7.1 AlgoritmosLa noción intuitiva <strong>de</strong> algoritmo o procedimiento efectivo ha aparecido varias veces. Por ejemplo, se vioun procedimiento efectivo para <strong>de</strong>terminar si el conjunto aceptado por un AF es vacío, finito o infinito.Inocentemente, se podría pensar que para cualquier clase <strong>de</strong> lenguajes con <strong>de</strong>scripciones finitas, habría unprocedimiento efectivo que respondiera tales preguntas. Sin embargo, no es así. Por ejemplo, no hay unalgoritmo que indique si el complemento <strong>de</strong> un lenguaje libre <strong>de</strong> contexto es vacío; aún cuando sí se pue<strong>de</strong>saber si el lenguaje en sí es vacío. Esta discusión no se refiere a un procedimiento que responda la preguntapara un lenguaje específico, sino que a un único procedimiento que responda correctamente la pregunta,cualquiera fuera el lenguaje.Es obvio que si se tratara <strong>de</strong> respon<strong>de</strong>r si un lenguaje libre <strong>de</strong> contexto específico tiene un complementovacío, entonces existe el algoritmo. Basta tener uno que responda siempre SI y otro que siempre respondaNO ; uno <strong>de</strong> ellos es el algoritmo <strong>de</strong>seado en este caso. Por supuesto que pue<strong>de</strong> no ser obvio cuál es elalgoritmo que respon<strong>de</strong> correctamente.A comienzos <strong>de</strong> siglo, el matemático David Hilbert se embarca en la búsqueda <strong>de</strong> un algoritmo para<strong>de</strong>terminar la veracidad o falsedad <strong>de</strong> cualquier proposición matemática. En particular, él buscaba unprocedimento para <strong>de</strong>terminar si una fórmula arbitraria <strong>de</strong>l cálculo <strong>de</strong> predicados <strong>de</strong> primer or<strong>de</strong>n, aplicadaa enteros, es verda<strong>de</strong>ra. Como el cálculo <strong>de</strong> predicados <strong>de</strong> primer or<strong>de</strong>n es suficientemente po<strong>de</strong>roso paraexpresar la sentencia <strong>de</strong> que el lenguaje generado por una gramática libre <strong>de</strong> contexto es igual a Σ ∗ , si Hilberthubiese tenido éxito, el problema <strong>de</strong> <strong>de</strong>cidir si el complemento <strong>de</strong> un lenguaje libre <strong>de</strong> contexto es vacío, sehabría resuelto. Sin embargo, en 1931, Kurt Gö<strong>de</strong>l publicó su famoso teorema <strong>de</strong> incompletitud, que probó117


118ACEPTACIÓN Y GENERACIÓN DE L. ENUMERABLES RECURSIVAMENTE Y RECURSIVOSque dicho procedimiento efectivo no pue<strong>de</strong> existir. Para ello, Gö<strong>de</strong>l construyó una fórmula en cálculo <strong>de</strong>predicados aplicados a enteros, cuya misma <strong>de</strong>finición establecía que no podía ser probada ni refutada enese sistema lógico. La formalización <strong>de</strong> este argumento y la subsecuente clarificación y formalización <strong>de</strong>lconcepto intuitivo <strong>de</strong> lo que es un procedimiento efectivo es uno <strong>de</strong> los mayores logros <strong>de</strong> este siglo.Una vez formalizada la noción <strong>de</strong> procedimiento efectivo, fue posible <strong>de</strong>mostrar que no hay uno paracomputar muchas funciones específicas. En realidad, la existencia <strong>de</strong> estas funciones es fácil <strong>de</strong> ver usandoun argumento <strong>de</strong> conteo. Hay, simplemente, <strong>de</strong>masiadas funciones, un número incontable y sólo hay unnúmero contable <strong>de</strong> procedimientos. Por lo tanto, la existencia <strong>de</strong> tales funciones no <strong>de</strong>biera sorpren<strong>de</strong>r. Loque sí es sorpren<strong>de</strong>nte es que algunos problemas y funciones <strong>de</strong> importancia en matemáticas, ciencias <strong>de</strong> lacomputación y otras disciplinas sean no computables.Hoy en día, la máquina <strong>de</strong> Turing es la formalización aceptada <strong>de</strong> lo que es un procedimiento efectivo.Obviamente, no es posible <strong>de</strong>mostrar que este mo<strong>de</strong>lo es equivalente a la noción intuitiva <strong>de</strong> lo que es uncomputador, pero hay fuertes argumentos para esta equivalencia, que se conoce como la hipótesis <strong>de</strong> Church.En particular, la máquina <strong>de</strong> Turing es equivalente, en po<strong>de</strong>r <strong>de</strong> computación, a los computadores digitalescomo se los conoce hoy, y también a las nociones matemáticas más generales <strong>de</strong> lo que es computación.7.2 Mo<strong>de</strong>lo <strong>de</strong> la Máquina <strong>de</strong> TuringUn mo<strong>de</strong>lo para un procedimiento efectivo <strong>de</strong>biera proveer ciertas características. En primer lugar, cadaprocedimiento <strong>de</strong>be consistir <strong>de</strong> pasos discretos , cada uno <strong>de</strong> los cuales se pue<strong>de</strong> efectuar mecánicamente.Un mo<strong>de</strong>lo como ése fue <strong>de</strong>finido por Alan Turing en 1936. Aquí se presenta una variante <strong>de</strong> él.El mo<strong>de</strong>lo básico tiene un control finito, una cinta dividida en celdas y una cabeza sobre la cinta querecorre una celda <strong>de</strong> la cinta a la vez. La cinta es finita por la izquierda, pero infinita por la <strong>de</strong>recha. Cadacelda contiene exactamente uno, <strong>de</strong> entre un número finito <strong>de</strong> símbolos posibles. Inicialmente, las n celdas<strong>de</strong> más a la izquierda <strong>de</strong> la cinta (para algún n ≥ 0) contienen el string <strong>de</strong> entrada, que es un string <strong>de</strong>símbolos tomados <strong>de</strong> un subconjunto <strong>de</strong> los símbolos <strong>de</strong> la cinta, llamados los símbolos <strong>de</strong> entrada. Lasceldas restantes (infinitas), contienen el símbolo blanco, un símbolo especial <strong>de</strong> la cinta, que no es un símbolo<strong>de</strong> entrada.a a aa1 2 iNB B✻CONTROLFINITOFigure 7.1: Mo<strong>de</strong>lo básico <strong>de</strong> una Máquina <strong>de</strong> TuringEn una movida, la máquina <strong>de</strong> Turing, <strong>de</strong>pendiendo <strong>de</strong>l símbolo en la cinta que está bajo la cabeza y <strong>de</strong>lestado en el control finito, efectúa los siguientes cambios:


7.2. MODELO DE LA MÁQUINA DE TURING 1191. Cambia <strong>de</strong> estado.2. Escribe un símbolo en la celda <strong>de</strong> la cinta que está bajo la cabeza, reemplazando lo que allí había.3. Mueve la cabeza a la izquierda o la <strong>de</strong>recha, exactamente una celda.en queFormalmente, una máquina <strong>de</strong> Turing (MT) se <strong>de</strong>nota por la séxtuplaM = (Q, Σ, Γ, δ, q 0 , B, F )Q es un conjunto finito <strong>de</strong> estados.Γ es el conjunto finito <strong>de</strong> símbolos <strong>de</strong> la cinta posibles.B ∈ Γ es el símbolo blanco.Σ ⊂ Γ, que no incluye B, es el conjunto <strong>de</strong> símbolos <strong>de</strong> entrada.q 0 ∈ Q es el estado inicial.F ⊆ Q es el conjunto <strong>de</strong> estados finales (o <strong>de</strong> aceptación).δ es la función que <strong>de</strong>termina las movidas.δ : Q × Γ −→ Q × Γ × {I, D}y pue<strong>de</strong> estar in<strong>de</strong>finida para algunos argumentos.Una <strong>de</strong>scripción instantánea (DI) <strong>de</strong> una máquina <strong>de</strong> Turing, M, se <strong>de</strong>nota por α 1 qα 2 . En ella, q es elestado en que se encuentra M y α 1 α 2 ∈ Γ ∗ es el contenido <strong>de</strong> la cinta hasta el símbolo no blanco <strong>de</strong> mása la <strong>de</strong>recha o el símbolo a la izquierda <strong>de</strong> la cabeza, el que esté más a la <strong>de</strong>recha. Nótese que B pue<strong>de</strong> estaren α 1 alpha 2 . Para evitar confusión se supone que Γ y Q sn disjuntos. Finalmente, se asume que la cabezaestá sobre el símbolo <strong>de</strong> más a la izquierda <strong>de</strong> α 2 , o si α 2 = ε, la cabeza está sobre un blanco.Una movida <strong>de</strong> M se <strong>de</strong>fine como sigue. Sea X 1 X 2 . . . X i−1 qX i . . . X n una DI y suponga que δ(q, X i ) =(p, Y, I), don<strong>de</strong> si i − 1 = u, entonces X i = B. Si i = 1 entonces no hay una próxima DI, ya que la cabezano pue<strong>de</strong> caerse hacia la izquierda <strong>de</strong> la cinta. Si i > 1, entonces se escribe.X 1 X 2 . . . X i−1 qX i . . . X n⊢M X1 X 2 . . . X i−2 pX i−1 Y X i+1 . . . X nsin embargo, si cualquier sufijo <strong>de</strong> X i−1 Y X i+1 . . . X n es completamente blanco, ese sufijo es eliminado.Alternativamente, si δ(q, X i ) = (p, Y, D), entoncesX 1 X 2 . . . X i−1 qX i . . . X n⊢M X1 X 2 . . . X i−1 Y pX i+1 . . . X nen el caso i − 1 = n, el string X i . . . X n es vacío y la DI nueva ha alargado el string en la cinta.Si dos DI están relacionadas por ⊢ M, se dice que la segunda resulta <strong>de</strong> la primera por una movida. Siuna DI resulta <strong>de</strong> otra <strong>de</strong>spués <strong>de</strong> un número finito <strong>de</strong> movidas (incluidas cero movidas), ellas están en larelación ∗ ⊢ M, la clausura refleja y transitiva <strong>de</strong> ⊢ M.El lenguaje aceptado por M, L(M), es el conjunto <strong>de</strong> strings en Σ ∗ , que hacen que M entre en un estadofinal, cuando se pone a la izquierda <strong>de</strong> la cinta, con M en q 0 y la cabeza en la celda <strong>de</strong> más a la izquierda.Formalmente, el lenguaje aceptado por M = (Q, Σ, Γ, δ, q 0 , B, F ) es el conjunto:L(M) = {w ∈ Σ ∗ /q 0 w ∗ ⊢ α 1 pα 2 con p ∈ F y α 1 α 2 ∈ Γ ∗ }Dada una máquina <strong>de</strong> Turing que reconoce L, se pue<strong>de</strong> asumir, sin pérdida <strong>de</strong> generalidad, que la MT se<strong>de</strong>tiene, es <strong>de</strong>cir, no tiene una próxima movida al aceptar un string. Sin embargo, para strings que no estánen L, es posible que nunca se <strong>de</strong>tenga.


120ACEPTACIÓN Y GENERACIÓN DE L. ENUMERABLES RECURSIVAMENTE Y RECURSIVOSEjemplo 84 Una máquina <strong>de</strong> Turing, M, que acepta el lenguaje L = {0 N 1 N /N ≥ 1}. Inicialmente, la cinta<strong>de</strong> M contiene 0 N 1 N seguido <strong>de</strong> un número infinito <strong>de</strong> blancos. En forma repetida, M reemplaza el 0 <strong>de</strong>más a la izquierda por X y se mueve hacia la <strong>de</strong>recha hasta el 1 <strong>de</strong> más a la izquierda y lo reemplaza por Y ,luego se mueve hacia la izquierda hasta la X <strong>de</strong> más a la <strong>de</strong>recha y luego se mueve una celda a la <strong>de</strong>recha,hasta el 0 <strong>de</strong> más a la izquierda y repite el ciclo. Si al buscar un 1, M encuentra un blanco, entonces M se<strong>de</strong>tiene sin aceptar. Si <strong>de</strong>spués <strong>de</strong> cambiar un 1 por Y , M no encuentra más ceros, entonces revisa que nohayan más 1’s, en cuyo caso acepta.Sea Q = {q 0 , q 1 , q 2 , q 3 , q 4 }, Σ = {0, 1}, Γ = {0, 1, X, Y, B} y F = {q 4 }. Informalmente cada estadorepresenta una o un grupo <strong>de</strong> sentencias <strong>de</strong> un programa. Al estado q 0 se entra inicialmente y también antes<strong>de</strong> cada reemplazo <strong>de</strong>l 0 <strong>de</strong> más a la izquierda por una X. El estado q 1 es usado para buscar un 1 hacia la<strong>de</strong>recha, saltándose 0’s e Y ’s. Si encuentra un 1, M lo cambia por Y y entra en q 2 . En este estado buscauna X hacia la izquierda y entra q 0 luego <strong>de</strong> encontrarlo, moviéndose una celda a la <strong>de</strong>recha al cambiar <strong>de</strong>estado. Si mientras M busca hacia la <strong>de</strong>recha en estado q 1 , encuentra una B o X antes <strong>de</strong> un 1, entonces elstring es rechazado; hay <strong>de</strong>masiados ceros o el string no pertenece a 0 ∗ 1 ∗ .El estado q 0 juega también otro papel. Si, <strong>de</strong>spués que el estado q 2 encuentra la X <strong>de</strong> más a la <strong>de</strong>recha,entonces se han acabado los ceros. De q 0 , sobre Y , se entra q 3 para recorrer las Y ’s y revisar que no quedan1’s. Si las Y ’s son seguidas <strong>de</strong> B, se entra q 4 aceptando; si no, el string es rechazado. La función <strong>de</strong> transiciónse muestra a continuación:ESTADOSIMBOLO0 1 X Y Bq 0 (q 1 , X, D) (q 3 , Y, D)q 1 (q 1 , 0, D) (q 2 , Y, I) (q 1 , Y, D)q 2 (q 2 , 0, I) (q 0 , X, D) (q 2 , Y, I)q 3 (q 3 , Y, D) (q 4 , B, D)q 44Si el input es 0011 se producen las siguientes movidas:q 0 0011 ⊢ Xq 1 011 ⊢ X0q 1 11 ⊢ Xq 2 0Y 1 ⊢ q 2 X0Y 1 ⊢Xq 0 0Y 1 ⊢ XXq 1 Y 1 ⊢ XXY q 1 1 ⊢ XXq 2 Y Y ⊢ Xq 2 XY Y ⊢XXq 0 Y Y ⊢ XXY q 3 Y ⊢ XXY Y q 3 ⊢ XXY Y Bq✷7.3 Técnicas para la construcción <strong>de</strong> Máquinas <strong>de</strong> TuringEl diseño <strong>de</strong> máquinas <strong>de</strong> Turing <strong>de</strong>scribiendo el conjunto completo <strong>de</strong> estados y movidas es bastante engorroso.Para <strong>de</strong>scribir máquinas complejas, se necesitan herramientas conceptualmente <strong>de</strong> más alto nivel. Enesta sección se discutirán algunas <strong>de</strong> ellas.7.3.1 Almacenamiento en el Control FinitoEl control finito pue<strong>de</strong> usarse para almacenar una cantidad finita <strong>de</strong> información. Para hacerlo, el estado esconsi<strong>de</strong>rado un par <strong>de</strong> elementos, uno ejerciendo el control y el otro almacenando un símbolo. Debe notarseque este es un arreglo conceptual, no se ha modificado lo que es una MT. En general se pue<strong>de</strong> permitir quelos estados tengan k componentes, <strong>de</strong> los cuales todos menos uno, almacenan información.Ejemplo 85 Consi<strong>de</strong>re una MT, M, que mire el primer símbolo <strong>de</strong> su input, lo almacene en su control finitoy revise que dicho símbolo no aparezca en otra parte <strong>de</strong>l input. Nótese que M acepta un lenguaje regular:M = (Q, {0, 1}, {0, 1, B}, δ, [q 0 , B] , B, F )


7.3. TÉCNICAS PARA LA CONSTRUCCIÓN DE MÁQUINAS DE TURING 121en que Q es {q 0 , q 1 } × {0, 1, B}. El conjunto F es {[q 1 , B]}. La intención es que la primera componente <strong>de</strong>lestado controle la acción, mientras que la segunda recuerda un símbolo. La función δ se <strong>de</strong>fine como:δ([q 0 , B] , 0) = ([q 1 , 0] , 0, D) δ([q 0 , B] , 1) = ([q 1 , 1] , 1, D)δ([q 1 , 0] , 1) = ([q 1 , 0] , 1, D) δ([q 1 , 1] , 0) = ([q 1 , 1] , 0, D)δ([q 1 , 0] , B) = ([q 1 , B] , B, I) δ([q 1 , 1] , B) = ([q 1 , B] , B, I)✷7.3.2 Pistas MúltiplesEs también posible suponer que la cinta <strong>de</strong> la máquina <strong>de</strong> Turing está dividida en un número finito, k, <strong>de</strong>pistas. Por ejemplo, para k = 3̸ C 1 0 1 1B 1 0 0 1 0 1 B B B✻11 $ B BB B B B 1 0 1 B B BPista 1Pista 2Pista 3CONTROLFINITOFigure 7.2: Máquina <strong>de</strong> Turing con pistas múltiplesLos símbolos en la cinta se consi<strong>de</strong>ran k-tuplas, con una componente por cada pista.Ejemplo 86 La cinta <strong>de</strong> la figura 7.2 pertenece a una MT que toma un input binario mayor que 2, escritoen la primera pista y <strong>de</strong>termina si es un número primo. El input esta enmarcado por los símbolos C y $.Por lo tanto los símbolos <strong>de</strong> entrada son las tuplas [C, B, B], [0, B, B], [1, B, B] y [$, B, B]. Estos símbolos sepue<strong>de</strong>n i<strong>de</strong>ntificar con C, 0, 1 y $ respectivamente al verlos como símbolos <strong>de</strong> entrada. El blanco, se i<strong>de</strong>ntificacon [B, B, B]. Para saber si el input es un número primo, la MT primero escribe el número 2 (en binario)en la segunda pista y copia la primera pista en la tercera. Luego, la segunda pista es sustraída tantas vecescomo sea posible <strong>de</strong> la tercera, dividiendo la tercera pista por la segunda y <strong>de</strong>jando en ella el resto.Si el resto es cero, el número en la primera pista, el input, no es primo. Si el resto no es cero, se incrementaen 1 el número <strong>de</strong> la segunda pista. Si ella iguala a la primera, el número era primo, porque no pue<strong>de</strong> serdividido por ningún número entre 1 y sí mismo. Si el número <strong>de</strong> la segunda pista es menor que el <strong>de</strong> laprimera, toda la operación se repite para el nuevo número en la segunda pista.En la figura 7.2 la MT está chequeando si 47 es un primo, lo está dividiendo por 5, el que ya ha sidosustraido dos veces, por lo que el número 37 está en la tercera pista.✷7.3.3 Marcar SímbolosPoner marcas en algunos símbolos es una forma útil <strong>de</strong> visualizar cómo una MT reconoce lenguajes <strong>de</strong>finidospor strings repetidos, tales como{ww/w ∈ Σ ∗ }, {wcy/w e y ∈ Σ ∗ y w ≠ y}, {ww r /w ∈ Σ ∗ }


122ACEPTACIÓN Y GENERACIÓN DE L. ENUMERABLES RECURSIVAMENTE Y RECURSIVOSY también es útil cuando <strong>de</strong>ben compararse longitu<strong>de</strong>s <strong>de</strong> algunos substrings, tales como en los lenguajes{a i b i /i ≥ 1}, {a i b j c k /i ≠ j o j ≠ k}Para ello se usa una segunda pista en la cinta, la que sólo contiene un blanco o un √ (visto). El símbolo√ aparece bajo uno <strong>de</strong> la primera pista, que ya ha sido consi<strong>de</strong>rado por la MT en una <strong>de</strong> las comparaciones.7.3.4 Correr SímbolosUna máquina <strong>de</strong> Turing pue<strong>de</strong> hacer espacio en su cinta al mover todos los símbolos no blancos un númerofinito <strong>de</strong> celdas hacia la <strong>de</strong>recha. Para ello, la cabeza se mueve hacia la <strong>de</strong>recha almacenando repetidamentelos símbolos leídos en celdas <strong>de</strong> más a la izquierda. La MT pue<strong>de</strong> entonces volver a las celdas vaciadas yescribir los símbolos que <strong>de</strong>see. Si hay espacio disponible, también es posible empujar grupos <strong>de</strong> símboloshacia la izquierda <strong>de</strong> manera similar.7.3.5 SubrutinasTal como suce<strong>de</strong> con programas, un diseño modular o “top-down” se facilita al usar subrutinas que <strong>de</strong>finenprocesos elementales. Una máquina <strong>de</strong> Turing pue<strong>de</strong> simular cualquier tipo <strong>de</strong> subrutinas encontradas enlenguajes <strong>de</strong> programación, incluso procedimientos recursivos y cualquiera <strong>de</strong> los métodos conocidos parapasar parámetros. Aquí sólo se <strong>de</strong>scribirá el uso <strong>de</strong> subrutinas sin parámetros y no recursivas, pero aún éstasson bastante po<strong>de</strong>rosas.La i<strong>de</strong>a general es escribir una parte <strong>de</strong> una MT que sirva como subrutina; ella tendrá un estado inicial yuno <strong>de</strong> regreso que momentáneamente no tendrá movidas y que se usará para efectuar el regreso a la rutinaque la llamó. Para <strong>de</strong>signar una MT que “llama” a la subrutina, un conjunto nuevo <strong>de</strong> estados para lasubrutina se llama y se especifica una movida para el estado <strong>de</strong> regreso. La llamada se efectúa entrando alestado inicial <strong>de</strong> la subrutina y el regreso, por la movida <strong>de</strong>finida para el estado <strong>de</strong> regreso.7.4 <strong>Lenguajes</strong> y Funciones ComputablesUn lenguaje aceptado por una máquina <strong>de</strong> Turing se llama enumerable recursivamente (recursively enumerableo r.e., en inglés). El término enumerable <strong>de</strong>riva <strong>de</strong>l hecho que son precisamente estos lenguajescuyos strings pue<strong>de</strong>n ser enumerados (listados) por una máquina <strong>de</strong> Turing. Recursivamente, es un términomatemático previo a la existencia <strong>de</strong> los computadores y su significado es similar a lo que se llama recursiónen ciencia <strong>de</strong> la computación. La clase <strong>de</strong> los lenguajes enumerables recursivamente es muy amplia e incluyecon propiedad a la clase <strong>de</strong> los lenguajes libres <strong>de</strong> contexto.La clase <strong>de</strong> los lenguajes enumerables recursivamente incluye algunos lenguajes para los que no se pue<strong>de</strong><strong>de</strong>terminar pertenencia en forma mecánica. Si L(M) es uno <strong>de</strong> esos lenguajes, entonces cualquier máquina<strong>de</strong> Turing que reconozca L(M) <strong>de</strong>be no <strong>de</strong>tenerse en algunos strings que no pertenecen al lenguaje. Siw ∈ L(M), M se <strong>de</strong>tendrá eventualmente en input w. Sin embargo, mientras M esté ejecutando en algúninput, no es posible saber si parará y aceptará si se la <strong>de</strong>ja ejecutar lo suficiente, o si M no se <strong>de</strong>tendránunca y correrá para siempre.Es conveniente singularizar un subconjunto <strong>de</strong> los conjuntos enumerables recursivamente, llamados losconjuntos recursivos, que son aquellos lenguajes aceptados por al menos una máquina <strong>de</strong> Turing que se<strong>de</strong>tiene en todos sus inputs, ya sea aceptando o no. Posteriormente se verá que los conjuntos recursivosson una subclase propia <strong>de</strong> los conjuntos enumerables recursivamente. Nótese también que por el algoritmoCYK, todo lenguaje libre <strong>de</strong> contexto es un conjunto recursivo.A<strong>de</strong>más <strong>de</strong> ser un dispositivo <strong>de</strong> aceptación, la máquina <strong>de</strong> Turing pue<strong>de</strong> verse como un computador <strong>de</strong>funciones <strong>de</strong> enteros a enteros. La forma tradicional es representar los enteros en unario; es <strong>de</strong>cir, i ≥ 0 serepresenta por el string 0 i . Si una función tiene k argumentos, i 1 , i 2 , . . . , i k , entonces estos enteros se poneninicialmente en la cinta separados por 1’s, como: 0 i1 10 i2 1 . . . 10 i k.


7.4. LENGUAJES Y FUNCIONES COMPUTABLES 123Si la máquina <strong>de</strong> Turing se <strong>de</strong>tiene, aceptando o no, con una cinta que consiste <strong>de</strong> 0 M (para algún M),entonces se dice que f(i 1 , i 2 , . . . , i k ) = M, en que f es la función <strong>de</strong> k argumentos que computa esa máquina<strong>de</strong> Turing. Nótese que una única MT pue<strong>de</strong> computar una función <strong>de</strong> un argumento, una diferente <strong>de</strong> dosargumentos, etcétera. También <strong>de</strong>be notarse que si una MT, M, computa una función <strong>de</strong> k argumentos, noes necesario que f tenga un valor para todas las diferentes k-tuplas <strong>de</strong> enteros que sean posibles argumentos.Si f(i 1 , i 2 , . . . , i k ) está <strong>de</strong>finida para toda tupla (i 1 , i 2 , . . . , i k ), entonces se dice que es una función recursivatotal. Una función f(i 1 , i 2 , . . . , i k ) computada por una máquina <strong>de</strong> Turing es llamada una funciónrecursiva parcial. En cierto sentido, las funciones recursivas parciales son análogas a los lenguajes enumerablesrecursivamente, ya que son computadas por MT que pue<strong>de</strong>n o no <strong>de</strong>tenerse en ciertos inputs. Lasfunciones recursivas totales correspon<strong>de</strong>n a los lenguajes recursivos, ya que son computadas por máquinasque siempre se <strong>de</strong>tienen. Todas las funciones aritméticas comunes en enteros, tales como multiplicación, n!y 2 N , son funciones recursivas totales.Ejemplo 87 La sustracción propia, m o −n, se <strong>de</strong>fine <strong>de</strong> la siguiente forma: m o −n = m − n si m ≥ n0 si m < nLa siguiente máquina <strong>de</strong> Turing, inicialmente con el string 0 m 10 n en su cinta, se <strong>de</strong>tiene con el string0 m o −n en ella.M = ({q 0 , q 1 , . . . , q 6 }, {0, 1}, {0, 1, B}, δ, q 0 , B, {q 6 })M reemplaza repetidamente el primer 0 por blanco y luego busca hacia la <strong>de</strong>recha un 1 seguido <strong>de</strong> un 0,y cambia el 0 por un 1. Luego, M se mueve a la izquierda hasta que encuentra un blanco y entonces repiteel ciclo. La repetición termina si:(i) Buscando un 0 hacia la <strong>de</strong>recha, se encuentra un blanco. En ese caso, los n 0’s <strong>de</strong> 0 m 10 n han sidocambiados a 1’s y n + 1 <strong>de</strong> los m 0’s a B. M reemplaza entonces los n + 1 1’s por un 0 y n blancos,<strong>de</strong>jando m − n 0’s en la cinta.(ii) Al comenzar el ciclo, M no encuentra un 0 que cambiar por un blanco, ya que los primeros m 0’s hansido cambiados. Entonces n ≥ m y, por lo tanto, m . − n = 0. En ese caso, M reemplaza todos los 1’sy 0’s que que<strong>de</strong>n por blancos.La función <strong>de</strong> transición δ se <strong>de</strong>scribe a continuación:1. δ(q 0 , 0) = (q 1 , B, D).Comienza el ciclo reemplazando el cero inicial por un blanco.2. δ(q 1 , 0) = (q 1 , 0, D).δ(q 1 , 1) = (q 2 , 1, D).Se mueve hacia la <strong>de</strong>recha buscando el primer 1.3. δ(q 2 , 1) = (q 2 , 1, D).δ(q 2 , 0) = (q 3 , 1, I).Busca sobre los primeros 1’s hasta encontrar un 0; lo cambia a un 1.4. δ(q 3 , 1) = (q 3 , 1, I).δ(q 3 , 0) = (q 3 , 0, I).δ(q 3 , B) = (q 0 , B, D).Se mueve a la izquierda hasta un blanco y entra q 0 para repetir ciclo.


124ACEPTACIÓN Y GENERACIÓN DE L. ENUMERABLES RECURSIVAMENTE Y RECURSIVOS5. δ(q 2 , B) = (q 4 , B, I).δ(q 4 , 1) = (q 4 , B, I).δ(q 4 , 0) = (q 4 , 0, I).δ(q 4 , B) = (q 6 , 0, D).Si en estado q 2 se encuentra un B antes <strong>de</strong> un 0, se está en el caso (i) <strong>de</strong>scrito más arriba. Se entraestado q 4 y se mueve a la izquierda cambiando los 1’s a B’s, hasta encontrar una B, la que se cambiaa 0, se entra en estado q 6 y M para.6. δ(q 0 , 1) = (q 5 , B, D).δ(q 5 , 0) = (q 5 , B, D).δ(q 5 , 1) = (q 5 , B, D).δ(q 5 , B) = (q 6 , B, D).Si en estado q 0 se encuentra un 1 en vez <strong>de</strong> un 0, el primer bloque <strong>de</strong> 0’s se ha acabado y se está en elcaso (ii) <strong>de</strong>scrito anteriormente. M entra q 5 para borrar con blancos el resto <strong>de</strong> la cinta y luego entraq 6 y se <strong>de</strong>tiene.Notar que si m, n o ambos son 0’s, la función se comporta perfectamente bien.7.5 Extensiones al Mo<strong>de</strong>loUna <strong>de</strong> las razones para aceptar que la máquina <strong>de</strong> Turing es un mo<strong>de</strong>lo general <strong>de</strong> computabilidad, es queel mo<strong>de</strong>lo que ya se ha visto es equivalente a muchas versiones modificadas que, <strong>de</strong> antemano, apareceríanincrementando la capacidad <strong>de</strong> computación. En esta sección se dan pruebas informales <strong>de</strong> estos teoremas<strong>de</strong> equivalencia.7.5.1 Cinta Infinita en Ambas DireccionesUna máquina <strong>de</strong> Turing con cinta infinita en ambas direcciones se <strong>de</strong>nota como M = (Q, Σ, Γ, δ, q 0 , B, F ),como en el mo<strong>de</strong>lo original. Sin embargo, como su nombre lo indica, su cinta es infinita no sólo hacia la<strong>de</strong>recha, sino que también hacia la izquierda. Las DI se <strong>de</strong>notan en igual forma que antes, asumiendo quehay una infinidad <strong>de</strong> blancos, tanto a la izquierda como a la <strong>de</strong>recha <strong>de</strong>l trozo actualmente no blanco.La relación M ⊢ entre DI que <strong>de</strong>fine las movidas, es como en el mo<strong>de</strong>lo original, con la excepción quesi δ(q, X) = (p, Y, I), entonces qXα M ⊢ pBY α (en el mo<strong>de</strong>lo original no hay movida posible), y que siδ(q, X) = (p, B, D), entonces qXa ⊢ M pα (en el original, el símbolo B aparecería a la izquierda <strong>de</strong> p).La DI inicial es q 0 w. La relación ∗ ⊢ M, como antes, relaciona dos DI, si la <strong>de</strong> la <strong>de</strong>recha se pue<strong>de</strong> obtener<strong>de</strong> la <strong>de</strong> la izquierda en algún número (posiblemente cero) <strong>de</strong> movidas <strong>de</strong> la máquina.Teorema 34 L es reconocido por una máquina <strong>de</strong> Turing con cinta infinita en ambas direcciones si y sólosi es reconocido por una MT con cinta infinita en sólo una dirección.Demostración : La prueba <strong>de</strong> que una MT con cinta infinita en dos direcciones pue<strong>de</strong> simular una MT concinta infinita sólo hacia la <strong>de</strong>recha es fácil. Aquélla marca la celda a la izquierda <strong>de</strong> la posición inicial <strong>de</strong> sucabeza y luego simula a la otra. Si durante la simulación aparece la celda marcada, la máquina se <strong>de</strong>tienesin aceptar.En la otra dirección, sea M 2 = (Q 2 , Σ 2 , Γ 2 , δ 2 , q 2 , B, F 2 ) una MT con cinta infinita en dos direcciones. Seconstruye una máquina <strong>de</strong> Turing M 1 , que simula M 2 y tiene cinta infinita sólo hacia la <strong>de</strong>recha. M 1 tendrá✷


7.5. EXTENSIONES AL MODELO 125A A A A A A A A A A A-5 -4 -3 -2 -1 0 1 2 3 4 5A A A A A A0 1 2 3 4 5̸ C A A A A A-1 -2 -3 -4 -5...Figure 7.3: Reconocimiento <strong>de</strong>l lenguaje aceptado por M 2 usando una MT con cinta infinita en una dirección2 pistas, una representando las celdas <strong>de</strong> M 2 que están <strong>de</strong>s<strong>de</strong> la celda inicial (inclusive) hacia la <strong>de</strong>recha; laotra pista representa (invertida) a las celdas que están a la izquierda <strong>de</strong> la celda inicial <strong>de</strong> M 2 .La primera celda <strong>de</strong> M 1 tiene el símbolo ̸ C en su pista inferior, para indicar que es el <strong>de</strong> más a laizquierda. El control finito <strong>de</strong> M 1 “recuerda” si M 2 estaría sobre un símbolo que aparece en la pista superioro inferior <strong>de</strong> M 1 .Debiera ser bastante obvio que M 1 pue<strong>de</strong> simular a M 2 , en el sentido que si M 2 está a la <strong>de</strong>recha <strong>de</strong> suposición inicial, M 1 trabaja con la pista superior; mientras que si M 2 está a la izquierda, M 1 trabaja con lapista inferior, moviéndose en dirección opuesta a M 2 . Los símbolos <strong>de</strong> entrada a M 1 son símbolos con blancoen la pista inferior y un símbolo <strong>de</strong> entrada <strong>de</strong> M 2 en la pista superior; los que pue<strong>de</strong>n i<strong>de</strong>ntificarse con los<strong>de</strong> M 2 . B se i<strong>de</strong>ntifica con [B, B].La construcción formal es la siguiente, M 1 = (Q 1 , Σ 1 , Γ 1 , δ 1 , q 1 , B, F 1 ). Los estados en Q 1 son objetos <strong>de</strong>la forma [q, S] o [q, I], en que q ∈ Q 2 ∪ {q 1 }. La segunda componente indica si M 1 está trabajando en lapista superior (S) o inferior (I). Γ 1 = Γ 2 × (Γ 1 ∪ {̸ C}). Σ 1 = Σ 2 × {B}. F 1 = {[q, S], [q, I]/q ∈ F 2 }. Lafunción δ 1 se <strong>de</strong>fine como sigue1. ∀a ∈ Σ 2 ∪ {B}δ 1 (q 1 , [a, B]) = ([q, S], [X, ̸ C], D) si δ 2 (q 2 , a) = (q, X, D).2. ∀a ∈ Σ 2 ∪ {B}δ 1 (q 1 , [a, B]) = ([q, I], [X, ̸ C], D) si δ 2 (q 2 , a) = (q, X, I).3. ∀[X, Y ] ∈ Γ 1 con Y ≠̸ C y A = I o D.δ 1 ([q, S], [X, Y ]) = ([p, S], [Z, Y ], A) si δ 2 (q, X) = (p, Z, A).4. ∀[X, Y ] ∈ Γ 1 con Y ≠̸ C y A = I o D.5.δ 1 ([q, I], [X, Y ]) = ([p, I], [X, Z], A) si δ 2 (q, Y ) = (p, Z, A).Con A representando la dirección contraria a la que representa A.δ 1 ([q, S], [X, ̸ C])En queC = S si A = DC = I si A = I.= δ 1 ([q, I], [X, ̸ C])= ([p, C], [Y, ̸ C], D) si δ 2 (q, X) = (p, Y, A)✷


126ACEPTACIÓN Y GENERACIÓN DE L. ENUMERABLES RECURSIVAMENTE Y RECURSIVOS7.5.2 Máquinas <strong>de</strong> Turing con Varias CintasUna máquina <strong>de</strong> Turing con varias cintas consta <strong>de</strong> un control finito con k cabezas y k cintas infinitas enambas direcciones. Por ejemplo, para k = 3:CONTROLFINITO. . .. . .❙❈ ❈❈❈❈❈❈❈❈❈❈❈❈❲ ❙❙❙✇✠. . .. . .. . .. . .Figure 7.4: Máquina <strong>de</strong> Turing con varias cintasEn cada movida, <strong>de</strong>pendiendo <strong>de</strong>l estado en que se encuentre el control finito y <strong>de</strong>l símbolo bajo cadauna <strong>de</strong> las cabezas, la máquina pue<strong>de</strong>:1. Cambiar <strong>de</strong> estado.2. Escribir un nuevo símbolo en cada celda bajo las cabezas.3. Mover cada cabeza, in<strong>de</strong>pendientemente, una celda a la izquierda, a la <strong>de</strong>recha o mantenerla inmóvil.Inicialmente el input está en la primera cinta y las <strong>de</strong>más están en blanco.Teorema 35 Si un lenguaje L es aceptado por una MT con varias cintas, es aceptado por una MT con unasola cinta.Demostración : Sea L acpetado por M 1 , una MT con k cintas. Se consruye M 2 , una máquina con una cintadividida en 2k pistas; 2 pistas por cada cinta correspondiente <strong>de</strong> M 1 . Una pista contiene el símbolo don<strong>de</strong>está la cabeza correspondiente <strong>de</strong> M 1 . El control finito <strong>de</strong> M 2 almacena el estado <strong>de</strong> M 1 y un contador <strong>de</strong>lnúmero <strong>de</strong> cabezas <strong>de</strong> M 1 que están a la <strong>de</strong>recha <strong>de</strong> M 2 .Cada movida <strong>de</strong> M 1 es simulada por un recorrido <strong>de</strong> izquierda a <strong>de</strong>recha y luego <strong>de</strong> <strong>de</strong>recha a izquierdapor la cabeza <strong>de</strong> M 2 . Inicialmente, la cabeza <strong>de</strong> M 2 está en la celda <strong>de</strong> más a la izquierda que contiene unamarca <strong>de</strong> cabeza. La cabeza <strong>de</strong> M 2 se mueve hacia la <strong>de</strong>recha visitando cada celda con marcas y recordandoel símbolo leído por la cabeza correspondiente <strong>de</strong> M 1 . Cuando M 2 cruza una marca, <strong>de</strong>be actualizar elcontador <strong>de</strong> marcas a su <strong>de</strong>recha. Cuando no quedan más, M 2 ha visto los símbolos leídos por cada cabeza<strong>de</strong> M 1 , con lo que M 2 tiene la información necesaria para <strong>de</strong>terminar la movida <strong>de</strong> M 1 . Ahora M 2 hace unapasada hacia la izquierda, hasta que llega a la marca <strong>de</strong> más a la izquierda. El contador le permite saberhasta dón<strong>de</strong> llegar. A medida que M 2 pasa cada marca, cambia el símbolo correspondiente a esa cinta <strong>de</strong>M 1 , mueve la marca una celda a la izquierda o la <strong>de</strong>recha (o no la mueve) para simular la movida <strong>de</strong> M 1 enesa cinta. Por último, M 2 cambia el estado <strong>de</strong> M 1 que almacena en su control para finalizar la movida <strong>de</strong>M 1 . Si ese estado <strong>de</strong> M 1 es final, M 2 acepta.


7.5. EXTENSIONES AL MODELO 127Nótese que al simular la MT con cinta infinita en ambas direcciones por una MT con cinta infinita sólohacia la <strong>de</strong>recha, la simulación fue movida por movida. En la que se acaba <strong>de</strong> presentar, cada movida <strong>de</strong> M 1requiere <strong>de</strong> varias <strong>de</strong> M 2 para ser simulada. De hecho, para simular N movidas <strong>de</strong> M 1 , se requieren O(N 2 )movidas <strong>de</strong> M 2 .7.5.3 Movidas No DeterminísticasUna máquina <strong>de</strong> Turing no <strong>de</strong>terminística es un dispositivo con un control finito y una cinta infinita sólohacia la <strong>de</strong>recha. Dado un estado y símbolo bajo la cabeza, la máquina tiene un número finito <strong>de</strong> movidasposibles. Cada opción consiste <strong>de</strong> un nuevo estado, un símbolo para escribir y una dirección <strong>de</strong> movimiento<strong>de</strong> la cabeza. La máquina acepta un input si hay una secuencia <strong>de</strong> movidas que la lleve a un estado final.Como en el caso <strong>de</strong> los autómatas finitos, el agregar no <strong>de</strong>terminismo a la máquina <strong>de</strong> Turing no permiteaceptar nuevos lenguajes. De hecho, la combinación <strong>de</strong> no <strong>de</strong>terminismo con las otras extensiones <strong>de</strong> estasección, no le aña<strong>de</strong>n po<strong>de</strong>r adicional.Teorema 36 Si L es aceptado por una MT no <strong>de</strong>terminística M 1 , entonces L es aceptado por una MT<strong>de</strong>terminística M 2 .Demostración : Para cada estado y símbolo <strong>de</strong> la cinta <strong>de</strong> M 1 hay un número finito <strong>de</strong> opciones para lapróxima movida. Sea r el número máximo <strong>de</strong> opciones para todos los pares estado-símbolo.Luego, cualquier secuencia finita <strong>de</strong> elecciones pue<strong>de</strong> representarse por una secuencia <strong>de</strong> los dígitos 1 ar. Es posible que no todas dichas secuencias representen elecciones <strong>de</strong> movidas, ya que pue<strong>de</strong> haber menos<strong>de</strong> r opciones en algunas situaciones.M 2 tendrá tres cintas. La primera contendrá el input; en la segunda M 2 generará secuencias <strong>de</strong> dígitos<strong>de</strong> 1 a r en forma sistemática. Específicamente, las secuencias serán generadas con las más cortas primero.Secuencias <strong>de</strong>l mismo largo son generadas en or<strong>de</strong>n numérico.Por cada secuencia generada en la segunda cinta, M 2 copia el input a la tercera cinta y simula a M 1sobre la cinta 3; usando la secuencia <strong>de</strong>finida en la cinta 2 para dictar las movidas <strong>de</strong> M 1 . Si M 1 entra aun estado <strong>de</strong> aceptación, M 2 también acepta. Si existe una secuencia <strong>de</strong> opciones que lleve a M 1 a aceptar,ella será eventualmente generada en la cinta 2. Cuando sea simulada, M 2 aceptará. Si no hay secuencia <strong>de</strong>elecciones que haga que M 1 acepte, M 2 no aceptará.7.5.4 Máquinas MultidimensionalesConsidérese otra modificación a las máquinas <strong>de</strong> Turing que tampoco les da po<strong>de</strong>r adicional. Este dispositivotiene un control finito, pero la cinta consiste <strong>de</strong> un arreglo k-dimensional <strong>de</strong> celdas infinitas en las 2kdirecciones, para algún k fijo. Dependiendo <strong>de</strong>l estado y símbolo, la máquina cambia <strong>de</strong> estado, escribe unsímbolo y mueve la cabeza en alguna <strong>de</strong> las 2k direcciones. Inicialmente, el input está a lo largo <strong>de</strong> un eje yla cabeza en su primer símbolo a la izquierda.En cualquier instante, sólo un número finito <strong>de</strong> filas en cualquier dimensión contiene símbolos no-blancos y<strong>de</strong> ellas cada una tiene sólo un número finito <strong>de</strong> estos símbolos. Se probará que una máquina uni-dimensionalpue<strong>de</strong> simular una MT <strong>de</strong> 2 dimensiones. La generalización se <strong>de</strong>ja como ejercicio.Teorema 37 Si L es aceptado por una máquina <strong>de</strong> Turing <strong>de</strong> dos dimensiones, M 2 , entonces L es aceptadopor una MT <strong>de</strong> una dimensión, M 1 .Demostración : M 1 representa la cinta <strong>de</strong> M 2 <strong>de</strong> la siguiente manera (ver Figura 7.5)M 1 : ∗ ∗ BBBA 1 BBB ∗ BBa 2 a 3 a 4 a 5 B ∗ a 6 a 7 a 8 a 9 a 10 B ∗ . . . ∗ ∗✷✷


128ACEPTACIÓN Y GENERACIÓN DE L. ENUMERABLES RECURSIVAMENTE Y RECURSIVOSM : B B B A B B B21BBa a a a2 3 4 5Ba a a a B a6 7 8 9 10BBa a a B a a11 12 13 14 15BBa a16 17BBBFigure 7.5: Representación <strong>de</strong> M 2 usando M 1M 1 también tendrá una segunda cinta, ambas infinitas por ambos lados. Si M 2 hace una movida queno la saca <strong>de</strong>l rectángulo ya representado en la cinta <strong>de</strong> M 1 , si la movida es horizontal, M 1 simplementemueve el marcador <strong>de</strong> la cabeza un lugar; si es vertical, M 1 usa su segunda cinta para contar el número<strong>de</strong> celdas entre la posición <strong>de</strong> la cabeza y el * a su izquierda. Luego M 1 se mueve al * a la <strong>de</strong>recha, si lamovida es hacia abajo, o al * <strong>de</strong> la izquierda si la movida es hacia arriba, y pone la cabeza en la posicióncorrespondiente <strong>de</strong>l nuevo bloque (región entre *’s), usando el contador <strong>de</strong> la segunda cinta.Considérese ahora la situación cuando la cabeza <strong>de</strong> M 2 se mueve fuera <strong>de</strong>l rectángulo representado porM 1 . Si la movida es vertical, se agrega un nuevo bloque <strong>de</strong> blancos a la izquierda o <strong>de</strong>recha, usando lasegunda cinta para contar el largo actual <strong>de</strong> los bloques. Si la movida es horizontal, M 1 usa la técnica <strong>de</strong>correr símbolos para agregar un blanco en el extremo izquierdo o <strong>de</strong>recho <strong>de</strong> cada bloque. Como ** marcael final <strong>de</strong> la región usada para los bloques, M 1 sabe cuándo ha crecido todos los bloques. Luego <strong>de</strong> hacer elespacio necesario, M 1 simula la movida <strong>de</strong> M 2 como ya se ha <strong>de</strong>scrito.7.5.5 Máquinas <strong>de</strong> Varias CabezasUna MT <strong>de</strong> k-cabezas tiene un número fijo, k, <strong>de</strong> cabezas numeradas <strong>de</strong> 1 a k. Una movida <strong>de</strong>pen<strong>de</strong> <strong>de</strong>lestado y <strong>de</strong>l símbolo leído por cada cabeza. En una movida, las cabezas se pue<strong>de</strong>n mover in<strong>de</strong>pendientementehacia la izquierda, <strong>de</strong>recha o permanecer estacionaria.Teorema 38 Si L es aceptado por una MT <strong>de</strong> k cabezas, M 1 , es aceptado por una MT <strong>de</strong> una cabeza, M 2 .Demostración : La prueba es similar a la hecha para el caso <strong>de</strong> máquinas <strong>de</strong> varias cintas. M 2 tiene K + 1pistas en su cinta; la última tiene el contenido <strong>de</strong> la cinta <strong>de</strong> M 1 . La i-ésima pista (1 ≤ i ≤ k) tiene unamarca indicando la posición <strong>de</strong> la i-ésima cabeza.7.5.6 Máquinas Off-LineUna MT off-line es una MT <strong>de</strong> varias cintas, cuya cinta con el string <strong>de</strong> entrada es sólo leíble (read-only).Usualmente se encierra el string <strong>de</strong> entrada entre los símbolos ̸ C (a la izquierda) y $ (a la <strong>de</strong>recha). Lamáquina no pue<strong>de</strong> mover la cabeza fuera <strong>de</strong> la región entre ̸ C y $. Debería ser claro que éste es sólo un caso✷✷


7.6. HIPÓTESIS DE CHURCH 129especial <strong>de</strong> una máquina con varias cintas y, por lo tanto, no es más po<strong>de</strong>rosa que ninguno <strong>de</strong> los mo<strong>de</strong>losvistos. Al revés, una MT off-line pue<strong>de</strong> simular cualquier MT, M, usando una cinta más que M. Lo primeroque hará es copiar su input en esta cinta extra y simular a M como si ella fuera el input <strong>de</strong> M.7.6 Hipótesis <strong>de</strong> ChurchLa suposición <strong>de</strong> que la noción intuitiva <strong>de</strong> “función computable” pue<strong>de</strong> i<strong>de</strong>ntificarse con la clase <strong>de</strong> funcionesrecursivas parciales, es conocida como la Hipótesis <strong>de</strong> Church o la Tesis <strong>de</strong> Church-Turing.Aún cuando no se pue<strong>de</strong> esperar tener una “prueba” <strong>de</strong> la hipótesis <strong>de</strong> Church, al menos mientras lanoción informal <strong>de</strong> “computable” permanezca como noción informal, es sin embargo posible dar evi<strong>de</strong>ncia<strong>de</strong> porqué es una suposición rezonable.Si nuestra noción intuitiva <strong>de</strong> “computable” no posee límite en el número <strong>de</strong> pasos o la cantidad <strong>de</strong>almacenamiento necesaria, parece que las funciones recursivas parciales son (intuitivamente) computables.Aún cuando alguien podría argüir que una función no es “computable”, a menos que se pueda limitar lacomputación <strong>de</strong> antemano, o al menos saber si ella terminará o no.Lo que es más discutible es si la clase <strong>de</strong> funciones recursivas parciales incluye a todas las funcionescomputables. Los lógicos-matemáticos han presentado muchos otros formalismos, como el cálculo-λ, sistemas<strong>de</strong> Post y funciones recursivas generales. Para todos ellos se ha <strong>de</strong>mostrado que <strong>de</strong>finen la misma clase <strong>de</strong>funciones, es <strong>de</strong>cir las funciones recursivas parciales. A<strong>de</strong>más, mo<strong>de</strong>los abstractos <strong>de</strong> los computadores comola RAM (Random Access Machine) dan también lugar a las funciones recursivas parciales.La RAM consiste <strong>de</strong> un número infinito <strong>de</strong> palabras <strong>de</strong> memoria, numeradas <strong>de</strong>s<strong>de</strong> 0, cada una <strong>de</strong> lascuales pue<strong>de</strong> almacenar un número entero; y un número finito <strong>de</strong> registros aritméticos, también capaces<strong>de</strong> almacenar un entero. Los enteros pue<strong>de</strong>n ser <strong>de</strong>codificados como instrucciones en la forma usual <strong>de</strong> loscomputadores. No se <strong>de</strong>finirá la RAM más formalmente, pero <strong>de</strong>biera ser claro que si se escoge un conjuntoa<strong>de</strong>cuado <strong>de</strong> instrucciones, la RAM pue<strong>de</strong> simular cualquier computador existente.Teorema 39 Una máquina <strong>de</strong> Turing pue<strong>de</strong> simular una RAM, provisto que las instrucciones <strong>de</strong> la RAMpuedan ser simuladas por una MT.Demostración : Se usa una MT, M, <strong>de</strong> varias cintas para hacer la simulación. Una cinta <strong>de</strong> M tiene laspalabras <strong>de</strong> memoria <strong>de</strong> la RAM, a las que se les ha dado valores. La cinta se ve como#0 ∗ v 0 #1 ∗ v 1 #10 ∗ v 2 # . . . #i ∗ v i # . . .en que v i es el contenido, en binario, <strong>de</strong> la i- ésima palabra. En todo momento, habrá algún número finito <strong>de</strong>palabras <strong>de</strong> la RAM que han sido usadas y M sólo necesita mantener los valores hasta la palabra <strong>de</strong> númeromayor que se haya usado.La RAM tiene un número finito <strong>de</strong> registros aritméticos. M usa una cinta para almacenar el contenido<strong>de</strong> cada registro; otra cinta contiene el “contador <strong>de</strong> posición”, que contiene el número <strong>de</strong> la palabra <strong>de</strong>memoria <strong>de</strong> don<strong>de</strong> se <strong>de</strong>be tomar la próxima instrucción y una cinta “memory address register” en que sepue<strong>de</strong> poner el número <strong>de</strong> una palabra <strong>de</strong> memoria.Supóngase que los primeros 10 bits <strong>de</strong> una instrucción <strong>de</strong>notan una <strong>de</strong> las operaciones estándar en loscomputadores, como load, store, add, etc., y que los bits restantes <strong>de</strong>notan la dirección <strong>de</strong>l operando. Sibien no se discutirá los <strong>de</strong>talles <strong>de</strong> implementación para todas las instrucciones estándar, un ejemplo <strong>de</strong>bieraponer las cosas claras. Supóngase que la cinta con el contador <strong>de</strong> posición tiene el número i en binario. Mbusca en su primera cinta <strong>de</strong>s<strong>de</strong> la izquierda, buscando #i∗. Si se encuentra un blanco antes <strong>de</strong> encontrar#i∗, no hay instrucción en la palabra i y, por lo tanto, la RAM y M se <strong>de</strong>tienen. Si #i∗ es encontrado, losbits que siguen a *, hasta el siguiente # (v i ) se examinan. Suponga que los primeros 10 bits están codificadospara add al registro 2 y los bits restantes son un cierto número j en binario. M agrega 1 a i en el contador<strong>de</strong> posición y copia j en la “memory address register”. Luego M busca #j∗ en la primera cinta, comenzando<strong>de</strong>s<strong>de</strong> la izquierda (#0∗ marca el final por la izquierda). Si #j∗ no se encuentra, se supone que j tiene 0 y


130ACEPTACIÓN Y GENERACIÓN DE L. ENUMERABLES RECURSIVAMENTE Y RECURSIVOSse sigue con la próxima instrucción <strong>de</strong> la RAM. Si #j ∗ v j # es encontrado, v j es sumado al registro 2, queestá en su propia cinta, y se continúa con la próxima instrucción.Obsérvese que aún cuando la simulación <strong>de</strong> la RAM hizo uso <strong>de</strong> una MT con varias cintas, por teorema35, una MT con una cinta sería mucho más compleja.7.7 Máquinas <strong>de</strong> Turing como GeneradoresSe ha visto a las máquinas <strong>de</strong> Turing como reconocedoras <strong>de</strong> lenguajes y como computadoras <strong>de</strong> funcionesen los enteros no negativos. Hay una tercera visión útil <strong>de</strong> las MT, como dispositivos generadores. Consi<strong>de</strong>reuna MT, M, que usa una cinta como cinta <strong>de</strong> output, en la cual un símbolo, una vez escrito, no pue<strong>de</strong> sercambiado y cuya cabeza (escritora en este caso) nunca se mueve a la izquierda. Suponga también que en lacinta <strong>de</strong> output M escribe strings sobre algún alfabeto Σ, separados por un símbolo especial #. Se pue<strong>de</strong><strong>de</strong>finir G(M), el lenguaje generado por M, como el conjunto <strong>de</strong> w ∈ Σ ∗ , tal que w es eventualmente escritoentre un par <strong>de</strong> #’s en la cinta <strong>de</strong> output <strong>de</strong> M.Nótese que a menos que M no pare, G(M) es finito. Tampoco se requiere que las palabras sean generadasen algún or<strong>de</strong>n en particular, o que cualquier palabra sea generada una sola vez. Si L es G(M) para algunaMT, M, entonces L es un conjunto enumerable recursivamente y viceversa. Los conjuntos recursivos tambiéntienen una caracterización en términos <strong>de</strong> generadores; ellos son exactamente los lenguajes cuyas palabraspue<strong>de</strong>n ser generadas en or<strong>de</strong>n creciente <strong>de</strong> tamaño.Lema 11 Si L es G(M 1 ) para alguna MT, M 1 , entonces L es un conjunto enumerable recursivamente.Demostración : Se construye una MT, M 2 , con una cinta más que M 1 . M 2 simula a M 1 usando todo exceptola cinta <strong>de</strong> entrada <strong>de</strong> M 2 . Cada vez que M 1 imprime un # en su cinta <strong>de</strong> output, M 2 compara su input conel string recién generado. Si son el mismo, M 2 acepta; si no, sigue simulando a M 1 . Obviamente M 2 aceptaun string X, si y sólo si X ∈ G(M 1 ). Por lo tanto, L(M 2 ) = G(M 1 ) = L es enumerable recursivamente.El converso <strong>de</strong> este lema es algo más difícil. Suponga que M 1 reconoce a L ⊆ Σ ∗ . Nuestro primer (ypoco exitoso) intento para diseñar un generador para L pue<strong>de</strong> ser generar palabras en Σ ∗ , en algún or<strong>de</strong>n,w 1 , w 2 , . . ., hacer correr a M 1 en w 1 y si M 1 acepta, generar w 1 en la cinta <strong>de</strong> output. Luego hacer correr aM 1 en w 2 , generándolo si M 1 acepta, etc. Este método funciona si M 1 está garantizado <strong>de</strong> parar en todoslos inputs. Sin embargo, como se verá en el próximo capítulo, hay lenguajes enumerables recursivamenteque no son recursivos. En esos casos, aparece la posibilidad que M 1 nunca se <strong>de</strong>tenga en algún w i . LuegoM 2 nunca consi<strong>de</strong>rará w i+1 , w i+2 , . . . y no pue<strong>de</strong> generarlas aún cuando M 1 las aceptase.Debe, por lo tanto, evitarse la simulación in<strong>de</strong>finida <strong>de</strong> M 1 en alguna palabra. Para ello se fija un or<strong>de</strong>n enque enumerar strings en Σ ∗ . Luego se <strong>de</strong>sarrolla un método para generar todos los pares <strong>de</strong> enteros positivos(i, j). La simulación proce<strong>de</strong> generando un par (i, j) y simulando a M 1 en la i-ésima palabra durante j pasos.Se fija un or<strong>de</strong>n canónico para Σ ∗ como sigue. Se listan los strings en or<strong>de</strong>n <strong>de</strong> tamaño, con palabras<strong>de</strong>l mismo largo en “or<strong>de</strong>n numérico”. Esto es, sea Σ = {a 0 , a 1 , . . . , a k−1 }, e imagine que a i es el dígito i enbase k. Es <strong>de</strong>cir, las palabras <strong>de</strong> largo N son los números 0 a k N − 1, escritos en base k. El diseño <strong>de</strong> unamáquina <strong>de</strong> Turing que genere palabras en or<strong>de</strong>n canónico no es difícil y se <strong>de</strong>ja como ejercicio.Ejemplo 88 Si Σ = {0, 1}, el or<strong>de</strong>n canónico es ε, 0, 1, 00, 01, 10, 11, 000, 001, . . .Nótese que el or<strong>de</strong>n aparentemente más simple en que usualmente se generan las representaciones áscortas <strong>de</strong> los números en base k, 0, 1, 2, . . . , no sirve pues nunca se generan strings como a 0 a 0 a 1 , que tienenceros a<strong>de</strong>lante.✷✷✷


7.7. MÁQUINAS DE TURING COMO GENERADORES 131Considérese ahora la generación <strong>de</strong> pares (i, j) en tal forma que cada par sea generado <strong>de</strong>spués <strong>de</strong> unacantidad finita <strong>de</strong> tiempo. La tarea no es tan simple como parece, el método ingenuo <strong>de</strong> generar: (1,1),(1,2), (1,3), . . . , nunca genera pares en que i ≥ 1. En lugar <strong>de</strong> esto, los pares se <strong>de</strong>ben generar en or<strong>de</strong>n <strong>de</strong>su suma, i + j, y entre los <strong>de</strong> igual suma, en or<strong>de</strong>n creciente <strong>de</strong> i. Esto es, se genera (1,1), (1,2), (2,1), (1,3),(2,2), (3,1), (1,4), . . . . El par (i, j) es el {[(i + j − 1)(i + j − 2)]/2 + i}-ésimo par generado. Este or<strong>de</strong>n tienela propiedad <strong>de</strong>seada <strong>de</strong> que hay un tiempo finito en el cual cualquier par en particular es generado.Una MT que genera pares (i, j) en este or<strong>de</strong>n en binario, es fácil <strong>de</strong> diseñar y se <strong>de</strong>ja al lector dicha labor.Tal MT será llamada el generador <strong>de</strong> pares. Inci<strong>de</strong>ntalmente, el or<strong>de</strong>n usado por el generador <strong>de</strong> pares<strong>de</strong>muestra que los pares <strong>de</strong> enteros pue<strong>de</strong>n ponerse en correspon<strong>de</strong>ncia 1 a 1 con los enteros, un resultadoaparentemente paradójico <strong>de</strong>scubierto por Georg Kantor cuando él mostró que los racionales (que en realidadson la razón entre dos enteros), eran equinumerosos con los enteros.Teorema 40 Un lenguaje es enumerable recursivamente si y sólo si es G(M 2 ) para alguna MT, M 2 .Demostración : Con el lema anterior ya probado, sólo se necesita probar cómo un lenguaje enumerablerecursivamente L = L(M 1 ) pue<strong>de</strong> ser generado por una MT, M 2 . M 2 simula al generador <strong>de</strong> pares. Cuandoel par (i, j) es generado, M 2 produce la i-ésima palabra w i , en or<strong>de</strong>n canónico y simula j pasos <strong>de</strong> M 1 enw i . Si M 1 acepta en el paso j, contando la DII como paso 1, entonces M 2 genera w i .Es claro que M 2 genera sólo strings en L. Si w ∈ L, sea w la i-ésima palabra en el or<strong>de</strong>n canónico parael alfabeto <strong>de</strong> L y suponga que M 1 acepta w en j movidas. Como toma sólo un tiempo finito para que M 2genere cualquier string en or<strong>de</strong>n canónico o simular un número <strong>de</strong>terminado <strong>de</strong> movidas <strong>de</strong> M 1 , es claroque M 2 eventualmente producirá el par (i, j). En ese momento, w será generado por M 2 . Por lo tanto,L = G(M 2 ).Corolario 3 Si L es un conjunto enumerable recursivamente, entonces hay un generador para L que enumeracada string en L exactamente una vez.Demostración : La MT, M 2 , <strong>de</strong>scrita en la <strong>de</strong>mostración <strong>de</strong>l teorema 40 tiene dicha propiedad ya que generaw i sólo cuando consi<strong>de</strong>ra el par (i, j), en que j es exactamente el número <strong>de</strong> pasos que M 1 toma para aceptarw i .Se mostrará ahora, que los conjuntos recursivos son precisamente aquellos conjuntos cuyos strings pue<strong>de</strong>nser generados en or<strong>de</strong>n canónico.Lema 12 Si L es recursivo, entonces hay un generador para L que imprime los strings <strong>de</strong> L en or<strong>de</strong>ncanónico y no imprime otras palabras.Demostración : Sea L = L(M 1 ⊆ Σ ∗ , en que M 1 se <strong>de</strong>tiene en todos sus inputs. Se construye M 2 paragenerar L, como sigue. M 2 genera (en una cinta <strong>de</strong> borrador) las palabras en Σ ∗ <strong>de</strong> a una a la vez y enor<strong>de</strong>n canónico. Después <strong>de</strong> generar algún string w, M 2 simula M 1 en w. Si M 1 acepta w, M 2 genera w.Como M 1 para siempre, se sabe que M 2 terminará <strong>de</strong> procesar cada string <strong>de</strong>spués <strong>de</strong> un tiempo finito y,por lo tanto, consi<strong>de</strong>rará eventualmente cada string en Σ ∗ . Obviamente, M 2 genera L en or<strong>de</strong>n canónico.El converso <strong>de</strong> este lema, que si L pue<strong>de</strong> ser generado en or<strong>de</strong>n canónico, entonces L es recursivo, estambién verda<strong>de</strong>ro. Sin embargo, hay un <strong>de</strong>talle que <strong>de</strong>biera quedar claro. En el lema anterior fue posibleconstruir M 2 a partir <strong>de</strong> M 1 . Sin embargo, dada una MT, M, que genera L en or<strong>de</strong>n canónico, se sabe queexiste una máquina <strong>de</strong> Turing que siempre para y que reconoce L, pero no hay algoritmo para construirla.Supóngase que M 1 genera L en or<strong>de</strong>n canónico. Lo natural es construir M 2 , tal que en input w simuleM 1 hasta que M 1 genere w o una palabra posterior a w en el or<strong>de</strong>n canónico. En el primer caso M 2 acepta✷✷✷


132ACEPTACIÓN Y GENERACIÓN DE L. ENUMERABLES RECURSIVAMENTE Y RECURSIVOSw, en el segundo, M 2 se <strong>de</strong>tiene sin aceptar w. Sin embargo, si L es finito, M 1 pue<strong>de</strong> no <strong>de</strong>tenerse <strong>de</strong>spués<strong>de</strong> generar el último string en L, con lo que M 1 podría no generar w ni ningún string posterior. En estasituación M 2 no pararía. Esto suce<strong>de</strong> sólo cuando L es finito, aún cuando se sabe que todo conjunto finito esaceptado por una MT que siempre se <strong>de</strong>tiene. Infortunadamente, no se pue<strong>de</strong> <strong>de</strong>terminar si una MT generaun conjunto finito o, si es finito, cuál conjunto es. Por lo tanto, se sabe que una MT que siempre para yacepta L, el lenguaje que genera M 1 , siempre existe; pero no hay algoritmo para construirla.Teorema 41 L es recursivo si y sólo si L es generado en or<strong>de</strong>n canónico.Demostración : El lema 12 establece una dirección. Si L es infinito, la MT M 2 , <strong>de</strong>scrita más arriba, es unaMT que siempre se <strong>de</strong>tiene y acepta L. Si L es finito, hay un autómata finito que acepta L y, por lo tanto,hay una MT que siempre se <strong>de</strong>tiene y que acepta L. En general, no es posible exhibir una MT particularque acepte L, sólo se establece que ella <strong>de</strong>be existir.✷


Chapter 8PROPIEDADES DE LOSLENGUAJES ENUMERABLESRECURSIVAMENTE YRECURSIVOS8.1 Algunas Propieda<strong>de</strong>sUn número <strong>de</strong> teoremas se <strong>de</strong>muestran reduciendo un problema a otro. Estas reducciones envuelven el uso <strong>de</strong>varias MT para formar una máquina compuesta. El estado <strong>de</strong> una MT compuesta tiene una componente porcada máquina individual. Similarmente, la máquina compuesta tiene cintas separadas para cada máquina.Los <strong>de</strong>talles son tediosos y aportan poco, por lo que las construcciones se <strong>de</strong>scribirán en forma más bieninformal.Dado un algoritmo (MT que siempre se <strong>de</strong>tiene), se pue<strong>de</strong> permitir que la máquina compuesta hagauna acción si el algoritmo acepta y otra si no acepta. Esto no se pue<strong>de</strong> hacer si en lugar <strong>de</strong> un algoritmose tuviera una MT arbitraria, ya que si la MT no acepta pue<strong>de</strong> no <strong>de</strong>tenerse y, por lo tanto, la máquinacompuesta nunca iniciaría su siguiente tarea.Teorema 42 El complemento <strong>de</strong> un lenguaje recursivo es recursivo.Demostración : Sea L un lenguaje recursivo y M una MT que siempre se <strong>de</strong>tiene y que acepta L. Seconstruye M ′ , a partir <strong>de</strong> M, <strong>de</strong> tal forma que si M entra a un estado final en input w, entonces M ′ se<strong>de</strong>tiene sin aceptar. Si M se <strong>de</strong>tiene sin aceptar, M ′ entra a un estado final. Ya que siempre suce<strong>de</strong> uno<strong>de</strong> estos dos eventos, M ′ es un algoritmo. Claramente L(M ′ ) es el complemento <strong>de</strong> L y, por lo tanto, elcomplemento <strong>de</strong> L es un lenguaje recursivo. La Figura 8.1 ilustra la construcción <strong>de</strong> M ′ .Teorema 43 La unión <strong>de</strong> dos lenguajes recursivos es recursivo. La unión <strong>de</strong> dos lenguajes enumerablesrecursivamente es enumerable recursivamente.Demostración : Sean L 1 y L 2 lenguajes recursivos aceptados por los algoritmos M 1 y M 2 . Se construyeM, que primero simula M 1 . Si M 1 acepta, M acepta. Si M 1 rechaza, M simula M 2 y acepta si y sólo si M 2acepta. Ya que tanto M 1 como M 2 son algoritmos, M se <strong>de</strong>tendrá. Claramente M acepta L 1 ∪ L 2 . (VerFigura 8.2).133✷


134 PROPIEDADES DE L. ENUMERABLES L. RECURSIVAMENTE Y RECURSIVOSw✲M✲✲SI✟✯◗ ◗◗◗◗◗NO✟ ✟✟✟✟SINOFigure 8.1: Construcción <strong>de</strong> M ′ , complemento <strong>de</strong> Mw✲M 1SINO✲M 2✻✲✏✶SI✏ ✏✏✏✏ ✲NOSINOFigure 8.2: Construcción <strong>de</strong> M, equivalente a la unión <strong>de</strong> dos MT, para el caso <strong>de</strong> lenguajes recursivosPara los lenguajes enumerables recursivamente, la construcción anterior no funciona, ya que M 1 pue<strong>de</strong>no <strong>de</strong>tenerse nunca. En su lugar, M pue<strong>de</strong> simular simultáneamente a M 1 y M 2 en cintas separadas. Sicualquiera acepta, entonces M también acepta. (Ver Figura 8.3).w✲✲✲M 1M 2✲✲SI ✲✒ SISIFigure 8.3: Construcción <strong>de</strong> M, equivalente a la unión <strong>de</strong> dos MT, para el caso <strong>de</strong> lenguajes enumerablesrecursivamenteTeorema 44 Si un lenguaje L y su complemento L son ambos enumerables recursivamente, entonces L yL son recursivos.Demostración : Sean L y L aceptados por M 1 y M 2 respectivamente. Se construye M que simula simultáneamentea M 1 y M 2 . M acepta si M 1 acepta w y rechaza si M 2 acepta w. Ya que w está en L oestá en L, exactamente una <strong>de</strong> M 1 o M 2 lo aceptarán. Por lo tanto, M siempre dirá SI o NO, pero nuncaambas respuestas. Nótese que no hay un límite a priori en cuanto al tiempo que pasará hasta que M 1 o M 2acepten, pero es claro que una <strong>de</strong> ellas lo hará. Como M es un algoritmo que acepta L, se concluye que Les recursivo. (Ver Figura 8.4).✷


8.2. MÁQUINA DE TURING UNIVERSAL 135w✲✲M 1✲SI✲SI✲M 2✲SI✲NOFigure 8.4: Construcción <strong>de</strong> M, que simula simultáneamente a dos MT, M 1 y M 2El primero y último <strong>de</strong> estos teoremas tienen una consecuencia muy importante. Sean L y L un par <strong>de</strong>lenguajes complementarios. Entonces una sola <strong>de</strong> las siguientes aserciones se cumple:1. L y L son recursivos2. Ni L ni L son enumerables recursivamente3. Uno entre L y L es enumerable recursivamente, pero no recursivo; el otro no es enumerable recursivamente.Una técnica importante para mostrar que un problema no es <strong>de</strong>cidible es mostrar, por diagonalización,que el complemento <strong>de</strong>l lenguaje para ese problema no es enumerable recursivamente. Por lo tanto, los casos(2) ó (3) anteriores no son aplicables. Esta técnica será esencial para probar el primer problema no-<strong>de</strong>cidible.Después, varias formas <strong>de</strong> reducciones pue<strong>de</strong>n emplearse para mostrar que otros problemas no son <strong>de</strong>cidibles.8.2 Máquina <strong>de</strong> Turing UniversalAhora se usará la técnica <strong>de</strong> diagonalización para mostrar que un cierto problema no es <strong>de</strong>cidible. El problemaes: “¿Acepta una MT, M, un string <strong>de</strong> entrada, w?” En este caso, tanto M como w son parámetros <strong>de</strong>lproblema.Al formalizar el problema como un lenguaje, se restringirá w a ser sobre el alfabeto {0, 1} y a que Mtenga alfabeto <strong>de</strong> la cinta {0, 1, B}. Como el problema restringido es no-<strong>de</strong>cidible, con toda seguridad elproblema más general también lo es. Se escoge esta versión restringida para simplificar la codificación <strong>de</strong>instancias como strings.Para comenzar, se codifican las máquinas <strong>de</strong> Turing con alfabetos restringidos como strings sobre elalfabeto {0, 1}. SeaM = (Q, {0, 1}, {0, 1, B}, δ, q 1 , B, {q 2 })una máquina <strong>de</strong> Turing restringida como se <strong>de</strong>sea. A<strong>de</strong>más supóngase que Q = {q 1 , q 2 , . . . , q N } es el conjunto<strong>de</strong> estados, y que q 2 es el único estado final. Un teorema anterior asegura que si L ⊆ {0, 1} ∗ es aceptadopor una MT, entonces es aceptado por una con alfabeto {0, 1, B}. También, no hay necesidad <strong>de</strong> más <strong>de</strong> unestado final, ya que una vez que acepta pue<strong>de</strong> parar.Es conveniente llamar los símbolos 0, 1 y B como X 1 , X 2 y X 3 ; también las direcciones I y D seránllamadas D 1 y D 2 , respectivamente. Entonces una movida cualquiera δ(q i , X j ) = (q k , X l , D m ) se codificapor el string binario0 i 10 j 10 k 10 l 10 m✷


136 PROPIEDADES DE L. ENUMERABLES RECURSIVAMENTE Y RECURSIVOSUn código binario para una máquina <strong>de</strong> Turing M, es111 codigo 1 11 codigo 2 11 . . . 11 codigo r 111en que cada código i es un string que codifica una movida <strong>de</strong> M y en que cada movida está codificada enalguno <strong>de</strong> los código i . No es necesario que las movidas aparezcan en algún or<strong>de</strong>n en particular, por lo quecada MT tiene en realidad muchos códigos. Cualquiera <strong>de</strong> esos códigos se <strong>de</strong>notará por < M >.Cada string binario representa el código <strong>de</strong> a lo más una MT; muchos strings binarios no representanMT. El par MT,w se representa por el código <strong>de</strong> M seguido por w, y se <strong>de</strong>nota como < M, w >.Ejemplo 89 Sea M = ({q 1 , q 2 , q 3 }, {0, 1}, {0, 1, B}, δ, q 1 , B, {q 2 }), con movidasδ(q 1 , 1) = (q 3 , 0, D)δ(q 3 , 0) = (q 1 , 1, D)δ(q 3 , 1) = (q 2 , 0, D)δ(q 3 , B) = (q 3 , 1, I)Entonces el string <strong>de</strong>notado por < M, 1011 > es111010010001010011000101010010011000100100101001100010001000100101111011Note que muchos otros strings son también códigos para el par < M, 1011 > y que cualquiera <strong>de</strong> ellos esrepresentado por la notación < M, 1011 >.Suponga que se tiene una lista <strong>de</strong> {0, 1} ∗ en or<strong>de</strong>n canónico, don<strong>de</strong> w i es la i-ésima palabra y M j es laMT cuyo código es el entero j escrito en binario.Imagine una tabla infinita que indique para todo i y j si w i ∈ L(M j ). La Figura 8.5 sugiere cómo seríaesa tabla; en ella, un 0 significa que w i ∉ L(M j ) y un 1 que w i ∈ L(M j ). En realidad, como todas las MT<strong>de</strong> “numeración baja” aceptan el conjunto vacío, la porción mostrada <strong>de</strong> la tabla sólo <strong>de</strong>bería tener ceros.✷j✲11 2 3 4 ...0 ❅ 1 1 0 ...❅❅❅❅❅❅❅❅❅❅❅❅❅2❅❅❅❅❅❅❅❅❅❅❅❅❅❅1 1 0 0...i❄30 0 1 0...40 1 0 1 ..... . . . ..DiagonalFigure 8.5: Construcción <strong>de</strong> tabla para diagonalización


8.2. MÁQUINA DE TURING UNIVERSAL 137Se construye un lenguaje L D usando la diagonal <strong>de</strong> la tabla, para <strong>de</strong>terminar si un string pertenece a L Do no. Para garantizar que ninguna MT acepte L D , se <strong>de</strong>fine que w i ∈ L D si y sólo si la entrada (i, i) <strong>de</strong> latabla es 0, esto es, si M i no acepta w i .Suponga que alguna MT, M j , acepta L D , se produce la siguiente contradicción. Si w j ∈ L D , entoncesla entrada (j, j) es 0 (por <strong>de</strong>finición <strong>de</strong> L D , implicando que w j ∉ L(M j ) y contradiciendo L D = L(M j ).Si por el contrario, w j ∉ L D , entonces la entrada (j, j) es 1, implicando que w j ∈ L(M j ), lo que <strong>de</strong> nuevocontradice L D = L(M j ). Como w j está o no en L D , se concluye que la suposición L D = L(M j ) es falsa. Porlo tanto, ninguna MT en la lista acepta L D ; es <strong>de</strong>cir ninguna MT acepta L D .Lema 13 L D no es enumerable recursivamenteDemostración :Recién enunciada en la discusión anterior✷Se <strong>de</strong>fine L u , el lenguaje universal, como el conjunto{< M, w > /M acepta w}Se le llama “universal”, pues la pregunta <strong>de</strong> si un string w en particular es aceptado por una máquina<strong>de</strong> Turing M en particular, es equivalente a la pregunta si < M ′ , w > pertenece a L u ; don<strong>de</strong> M ′ es la MTequivalente a M construida con una cinta semi-infinita y alfabeto {0, 1, B} que acepte L u .Teorema 45 L u es enumerable recursivamente.Demostración : Se mostrará una MT con 3 cintas, M 1 , que acepta L u . La primera cinta <strong>de</strong> M 1 es la cinta<strong>de</strong> entrada y es usada para buscar movidas <strong>de</strong> M cuando se le da el código < M, w > como input. Lasegunda cinta <strong>de</strong> M 1 simulará la cinta <strong>de</strong> M. La tercera cinta mantiene el estado <strong>de</strong> M, con q i representadopor 0 i . M 1 funciona <strong>de</strong> la siguiente manera:1. Verifica el formato <strong>de</strong> la cinta 1 para ver que tiene un prefijo correspondiente al código <strong>de</strong> alguna MTy que no hay dos movidas codificadas que comiencen con 0 i 10 j para el mismo i y j. También verificaque si 0 i 10 j 10 k 10 l 10 m es un código, 1 ≤ j ≤ 3, 1 ≤ l ≤ 3, 1 ≤ m ≤ 2. La tercera cinta pue<strong>de</strong> usarsecomo “cinta borrador” para facilitar la comparación <strong>de</strong> códigos.2. Inicializa la cinta 2 a contener w, la parte <strong>de</strong>l input que sigue al segundo grupo <strong>de</strong> tres 1 ′ s consecutivos.Inicializa la cinta 3 con un solo 0, que simboliza q 1 . Las tres cabezas se posicionan en el símbolo <strong>de</strong>más a la izquierda. Esos símbolos pue<strong>de</strong>n ser marcados para facilitar la vuelta <strong>de</strong> las cabezas a ellos.3. Si la cinta 3 contiene ∞, el código para el estado final, la máquina se <strong>de</strong>tiene y acepta.4. Sea X j el símbolo bajo la cabeza en la segunda cinta y sea 0 i el contenido <strong>de</strong> la cinta 3. Se recorre lacinta 1 <strong>de</strong>s<strong>de</strong> la izquierda hasta el segundo 111, buscando un substring que comience con 110 i 10 j 1. Sino se encuentra, la máquina se <strong>de</strong>tiene y rechaza; M no tiene próxima movida y no ha aceptado. Sise encuentra ese código, sea 0 i 10 j 10 k 10 l 10 m . Se pone 0 k en la cinta 3, se escribe X l en la celda <strong>de</strong> lasegunda cinta y esa cabeza se mueve en dirección D m . Nótese que ya se ha chequeado que 1 ≤ l ≤ 3 yque 1 ≤ m ≤ 2. Repetir <strong>de</strong>spués el paso (3).Es simple ver que M 1 acepta < M, w > si y sólo si M acepta w. También es cierto que si M no se<strong>de</strong>tiene en w, M 1 no se <strong>de</strong>tiene en < M, w > y que si M se <strong>de</strong>tiene sin aceptar w, M 1 se <strong>de</strong>tiene sin aceptar< M, w >.✷


138 PROPIEDADES DE L. ENUMERABLES RECURSIVAMENTE Y RECURSIVOSLa existencia <strong>de</strong> M 1 es suficiente para probar el teorema. Sin embargo, usando los teoremas <strong>de</strong>l capítulo 7,se pue<strong>de</strong> encontrar una MT con una cinta semi-infinita y alfabeto {0, 1, B} que acepte L u . Esa MT enparticular se <strong>de</strong>nominará M U , la Máquina <strong>de</strong> Turing Universal, ya que ella hace el trabajo <strong>de</strong> cualquier MTcon alfabeto <strong>de</strong> entrada {0, 1}.Según el lema 13, el lenguaje diagonal L D no es enumerable recursivamente y, por lo tanto, no esrecursivo. Por un teorema anterior se concluye que L D no es recursivo. Nótese que L D = {w i /M i aceptaw i }. Se probará que el lenguaje universal L u = {< M, w > /M acepta w} no es recursivo, reduciendo L D aL u . Por lo tanto L u es un lenguaje enumerable recursivamente, pero no recursivo; en realidad, L D es otroejemplo <strong>de</strong> ese tipo.Teorema 46 L u no es recursivo.Demostración : Supóngase que A fuera un algoritmo que reconoce L u . Entonces se podría reconocer L D<strong>de</strong> la siguiente manera. Dado un string w ∈ (0 + 1) ∗ , se <strong>de</strong>termina (fácilmente) el valor <strong>de</strong> i, tal que w = w i .Ese entero i, en binario, es el código para una MT M i . Se alimenta a A con < M i , w i > y se acepta w si ysólo si M i acepta w i . Es fácil ver que el algoritmo así construido acepta w si y sólo si w = w i y w i ∈ L(M i ).Por lo tanto, se tiene un algoritmo para L D . Como dicho algoritmo no pue<strong>de</strong> existir, se concluye que lasuposición <strong>de</strong> que existe un algoritmo A para L u es falsa. Por lo tanto, L u es enumerable recursivamente,pero no recursivo. (Ver Figura 8.6).w ✲ ✲HIPOTETICO✘✘✿ SICONVERTIDORA para Lu ❳❳3 NOAlgoritmo construido para L u✲✲SINOFigure 8.6: Construcción <strong>de</strong> L D✷


Chapter 9INDECIDIBILIDAD9.1 ProblemasInformalmente se usa la palabra problema para referirse a preguntas tales como: ¿Es una gramática libre <strong>de</strong>contexto dada, ambigua? En el caso <strong>de</strong>l problema anterior, <strong>de</strong> la ambiguedad, una instancia <strong>de</strong>l problemaes una gramática en particular. En general, una instancia <strong>de</strong> un problema es una lista <strong>de</strong> argumentos, unargumento por cada parámetro <strong>de</strong>l problema. Restringiendo la atención sólo a problemas cuya respuesta seaSI o NO y codificando instancias <strong>de</strong>l problema por strings sobre un alfabeto finito, es posible transformarla pregunta <strong>de</strong> si existe un algoritmo para un problema, a saber si un lenguaje en particular es recursivo.Debe notarse que al consi<strong>de</strong>rar sólo problemas con respuesta SI o NO, no se está <strong>de</strong>jando <strong>de</strong> lado muchosproblemas importantes, ya que muchos tienen versiones en SI o NO que son, <strong>de</strong>mostrablemente, tan difícilescomo el “problema general”.Considérese el problema <strong>de</strong> la ambiguedad <strong>de</strong> las gramáticas libres <strong>de</strong> contexto. Denomínese AMB ala versión SI o NO. Una versión más general <strong>de</strong>l problema, llamada encuentre, requiere producir un stringcon 2 ó más árboles <strong>de</strong> <strong>de</strong>rivación, si existe, o respon<strong>de</strong>r “NO”, si no existe. Un algoritmo para encuentrepue<strong>de</strong> usarse para resolver AMB. Si encuentre produce un string w, se respon<strong>de</strong> SI ; si encuentre respon<strong>de</strong>NO, se respon<strong>de</strong> NO. Por otro lado, dado un algoritmo para AMB, se pue<strong>de</strong> producir un algoritmo paraencuentre. El algoritmo primero aplica AMB a la gramática. Si AMB respon<strong>de</strong> NO, se respon<strong>de</strong> NO. SiAMB respon<strong>de</strong> SI , el algoritmo comienza a generar sistemáticamente todos los strings sobre el alfabeto <strong>de</strong>G. Tan pronto como se genera un string w, se ve si tiene dos o más árboles <strong>de</strong> <strong>de</strong>rivación. Nótese que elalgoritmo empieza a generar strings sólo si G es ambigua, por lo tanto eventualmente encontrará el string<strong>de</strong>seado y lo escribirá. Por lo tanto, en realidad se tiene un algoritmo. La parte <strong>de</strong>l algoritmo que chequeasi w tiene 2 ó más árboles <strong>de</strong> <strong>de</strong>rivación se <strong>de</strong>ja como ejercicio.El proceso por el cual se construye un algoritmo para un problema (como encuentre), usando un supuestoalgoritmo para otro (AMB), es llamado una reducción (<strong>de</strong> encuentre a AMB). En general, cuando un problemaA se reduce a un problema B, se está mostrando que B es al menos tan “difícil” como A. Por lo tantoen este caso, como en muchos otros, el problema SI o NO AMB no es más sencillo (fácil) que la versión másgeneral <strong>de</strong>l problema. Posteriormente se verá que no hay algoritmo para AMB. Por la reducción <strong>de</strong> AMBa encuentre, se concluye que tampoco hay un algoritmo para encuentre, ya que su existencia implicaría laexistencia <strong>de</strong> un algoritmo para AMB, una contradicción.Un punto instructivo adicional concierne a la codificación <strong>de</strong> la gramática G. Como todas las MT tienenun alfabeto fijo, no se pue<strong>de</strong> consi<strong>de</strong>rar la notación <strong>de</strong> cuádrupla G = (V, T, P, S) como la codificación <strong>de</strong>G sin modificarla. Pero es posible codificar cuádruplas como strings binarios. Los metasímbolos (, ), {,}, , , → se codifican como 1, 10, 100, . . . , 10 5 , respectivamente. El i-ésimo símbolo <strong>de</strong> la gramática (encualquier or<strong>de</strong>n elegido), se codifica como 10 i+5 . Con esta codificación no se distinguen los terminales ni losno-terminales. Por supuesto que renombrar los no-terminales no afecta el lenguaje generado, por lo que sussímbolos no son importantes. Aún cuando se piensa que la i<strong>de</strong>ntidad <strong>de</strong> los terminales es importante, para139


140 PROPIEDADES DE L. ENUMERABLES RECURSIVAMENTE Y RECURSIVOSeste problema los símbolos son irrelevantes ya que el renombrar terminales no afecta la ambiguedad <strong>de</strong> unagramática.Un problema cuyo lenguaje es recursivo, se dice <strong>de</strong>cidible, en otro caso el problema es no-<strong>de</strong>cidible. Estoes, un problema es no-<strong>de</strong>cidible si no hay un algoritmo que tome como input una instancia <strong>de</strong>l problema y<strong>de</strong>termine si la respuesta a esa instancia es SI o NO.Una consecuencia poco intuitiva <strong>de</strong> la <strong>de</strong>finición <strong>de</strong> no-<strong>de</strong>cidible es que problemas con sólo una instanciason trivialmente <strong>de</strong>cidibles. Considérese el siguiente problema basado en la conjetura <strong>de</strong> Fermat. ¿Haysolución entre los enteros positivos a la ecuación x i + y i = z i , si i ≥ 3 ? Nótese que x, y, z e i no sonparámetros, sino que variables internas <strong>de</strong>l problema. Hay una MT que acepta todo input y otra que losrechaza todos. Una <strong>de</strong> ellas respon<strong>de</strong> correctamente a la conjetura <strong>de</strong> Fermat, aún cuando no se sabe cuál.De hecho, pue<strong>de</strong> ni siquiera haber una resolución <strong>de</strong> la conjetura usando los axiomas <strong>de</strong> la aritmética. Estoes, la conjetura pue<strong>de</strong> ser cierta y aún así pue<strong>de</strong> que no haya una <strong>de</strong>mostración aritmética <strong>de</strong> ella. Laposibilidad <strong>de</strong> esto, aunque no en certeza, sigue <strong>de</strong>l teorema <strong>de</strong> Incompletitud <strong>de</strong> Gö<strong>de</strong>l, que establece quecualquier sistema formal consistente y sufucientemente po<strong>de</strong>roso para <strong>de</strong>scribir teoría <strong>de</strong> números, <strong>de</strong>be tenersentencias verda<strong>de</strong>ras pero no <strong>de</strong>mostrables <strong>de</strong>ntro <strong>de</strong>l sistema.No <strong>de</strong>biera molestar que un problema como la conjetura <strong>de</strong> Fermat sea <strong>de</strong>cidible. La teoría <strong>de</strong> no<strong>de</strong>cidibilidadconcierne a la existencia o no existencia <strong>de</strong> algoritmos para resolver problemas con una infinidad<strong>de</strong> instancias.9.2 Otros Problemas No DecidiblesSe tiene ahora un ejemplo <strong>de</strong> un lenguaje enumerable recursivamente que no es recursivo. El problemaasociado a ese lenguaje, ¿Acepta M a w?, es no <strong>de</strong>cidible y se pue<strong>de</strong> usar para mostrar que otros problemasson no <strong>de</strong>cidibles.Ejemplo 90 Considérese el problema: ¿Es L(M) ≠ φ ? Sea < M > una codificación para M. Se <strong>de</strong>fineL NV = {< M > /L(M) ≠ φ}L V = {< M > /L(M) = φ}Nótese que L V y L NV son uno el complemento <strong>de</strong>l otro, ya que cada string binario representa algunaMT; aquellos mal formados, <strong>de</strong>notan una MT sin movidas. Todos estos strings están en L V . Se mostraráque L NV es enumerable recursivamente, pero no recursivo y que L V no es enumerable recursivamente.Se muestra que L NV es enumerable recursivamente, construyendo una MT, M, que reconoce códigos <strong>de</strong>MT’s que aceptan conjuntos no vacíos. Dado un input < M i >, M en forma no <strong>de</strong>terminística adivina unstring X aceptado por M i y verifica que M i lo acepte, simulando M i en input X. Este paso también pue<strong>de</strong>ser ejecutado en forma <strong>de</strong>terminística, usando el generador <strong>de</strong> pares. Para el par (j, k), se simula M i en elj-ésimo string durante k pasos. Si M i acepta, M acepta < M i >.Ahora se <strong>de</strong>be mostrar que L V no es recursivo. Supóngase que sí lo fuera, entonces se podría construir unalgoritmo para L u . Sea A un algoritmo hipotético que acepta L V . Hay un algoritmo B que, dado < M, w >,construye una MT M ′ que acepta φ si M no acepta w y que acepta {0, 1} ∗ si M acepta w. La i<strong>de</strong>a semuestra en la Figura 9.1. M ′ ignora su entrada X y simula M en entrada w, aceptando si M acepta.Note que M ′ no es B. Más bien, B es como un compilador que toma < M, w > como programa fuentey produce M ′ como programa objeto. Se ha <strong>de</strong>scrito qué hace B, pero no cómo lo hace. La construcciónes simple, toma < M, w > y separa w. Sea w = a 1 a 2 . . . a N . B crea N + 3 estados q 1 , q 2 , . . . , q N+3 , conmovidasδ(q1 , X) = (q 2 , $, D) para todo X (marca)δ(q i , X) = (q i+1 , a i−1 , D) para todo X y (escribe w)2 ≤ i ≤ N + 1δ(q N+2 , X) = (q N+2 , B, D) para X ≠ B (borra cinta)δ(q N+2 , B) = (q N+3 , B, I)δ(q N+3 , X) = (q N+3 , X, I) para X ≠ $ (busca marca)


8.2. MÁQUINA DE TURING UNIVERSAL 141X ✲w✲M✲SI✲SIM ′Figure 9.1: Construcción <strong>de</strong> M ′ , correspondiente al problema: ¿Es L(M) ≠ φ ?Habiendo producido el código para estas movidas, B agrega N + 3 a los índices <strong>de</strong> los estados <strong>de</strong> M eincluye la movidaδ(q N+3 , $) = (q N+4 , $, D) (hace partir a M )y todas las <strong>de</strong> M en la MT que genera. La MT resultante tiene un símbolo extra, $, pero por teorema <strong>de</strong>lcapítulo 7,se pue<strong>de</strong> construir M ′ con alfabeto <strong>de</strong> cinta {0, 1, B} y con seguridad se pue<strong>de</strong> hacer que q 2 seael estado <strong>de</strong> aceptación. Esto completa el algoritmo B y su salida es la máquina M ′ <strong>de</strong>seada.Supóngase ahora que existe un algoritmo A que acepta L V . Entonces se construye un algoritmo C paraL u como se indica en la Figura 9.2.< M, W ✲ BM ′C✲ASI✚ ✚✚✚❃❆❆❆❆❆❆❆❯❩ ❩❩❩7NO✁ ✁✁✁✁✁✁✕NOSIFigure 9.2: Construcción <strong>de</strong>l algoritmo CSi M acepta w, entonces L(M ′ ) ≠ φ; es <strong>de</strong>cir, A dice NO y C dice SI . Si M no acepta w, entoncesL(M ′ ) = φ; A dice SI y C dice NO. Como C no pue<strong>de</strong> existir, A no pue<strong>de</strong> existir. Por lo tanto, L V no esrecursivo.Si L NV fuera recursivo, L V también lo sería pues es su complemento. Por lo tanto L NV es enumerablerecursivamente pero no recursivo. Si L V fuera enumerable recursivamente, L V y L NV serían recursivos. Porlo tanto L V no es enumerable recursivamente.Ejemplo 91 Consi<strong>de</strong>re los lenguajesL R = {< M > /L(M) es recursivo }L NR = {< M > /L(M) no es recursivo }.Nótese que L R no es {< M > /M siempre se <strong>de</strong>tiene }, aún cuando incluye a este último. Una MTM pue<strong>de</strong> aceptar un lenguaje recursivo aunque pue<strong>de</strong> que M no pare para algunos strings que no estánen L(M); alguna otra MT equivalente a M <strong>de</strong>be siempre <strong>de</strong>tenerse. Se probará que ni L R ni L NR sonenumerables recursivamente.✷


142 PROPIEDADES DE L. ENUMERABLES RECURSIVAMENTE Y RECURSIVOSSuponga que L R fuese enumerable recursivamente. Entonces se pue<strong>de</strong> construir una MT para L u , quese sabe no pue<strong>de</strong> existir. Sea M R una MT que acepta L R . Se pue<strong>de</strong> construir un algoritmo A que tome< M, w > como input y produzca como output una MT M ′ , tal que{L(M ′ φ si M no acepta w) =si M acepta wL uNote que L u no es recursivo, así que M ′ acepta un lenguaje recursivo si y sólo si M no acepta w. El planpara M ′ se indica en la Figura 9.3.w ✲MSI✲✲Mu✲SI✲SIXM ′Figure 9.3: Construcción <strong>de</strong> M ′Como en el ejemplo anterior, se ha <strong>de</strong>scrito el output <strong>de</strong> A. Se <strong>de</strong>ja su construcción como ejercicio.Dado A y M R se pue<strong>de</strong> construir una MT que acepta L u . (Ver Figura 9.4).< M, w > ✲ AM ′✲M R✲SI✲SIFigure 9.4: Construcción <strong>de</strong> una MT que acepta L uEn input < M, w > la MT usa A para producir M ′ , y usa M R para <strong>de</strong>terminar si el conjunto aceptadopor M ′ es recursivo. Acepta si y sólo si L(M ′ ) es recursivo, pero L(M ′ ) es recursivo si y sólo si L(M ′ ) = φ,lo que significa que M no acepta w. Por lo tanto acepta < M, w > si y sólo si < M, w >∈ L u .Se estudia ahora L NR . Suponga que se tiene una MT, M NR , que acepta L NR . Se pue<strong>de</strong> usar M NR y unalgoritmo B a ser construido por el lector, que acepta L u . B toma < M, w > como entrada y produce unaMT M ′ (ver Figura 9.5), tal que{ ΣL(M ′ ∗si M acepta w) =si M no acepta wL uPor lo tanto M ′ acepta un lenguaje recursivo si y sólo si M acepta w. Dados B y M NR , la Figura 9.6siguiente es una MT que acepta L u :La MT acepta < M, w > si y sólo si L(M ′ ) no es recursivo, o equivalentemente, si y sólo si M no aceptaw. Esto es, la MT acepta < M, w > si y sólo si < M, w >∈ L u . Como ya se ha mostrado que no existetal MT, se concluye que la suposición <strong>de</strong> que M NR existe es falsa y, por lo tanto, L NR no es enumerablerecursivamente.✷


8.2. MÁQUINA DE TURING UNIVERSAL 143w✲M✲SI◗ ◗◗◗SIX✲Mu✲SI✑ ✑✑✑✸M ′Figure 9.5: Construcción <strong>de</strong> M ′< M, w > ✲M ′B✲MNR✲SI✲SIFigure 9.6: Máquina <strong>de</strong> Turing que acepta L uLos ejemplos anteriores muestran que no es <strong>de</strong>cidible si el conjunto aceptado por una MT es vacío orecursivo. La técnica usada en las <strong>de</strong>mostraciones se pue<strong>de</strong> usar para probar que no se pue<strong>de</strong> <strong>de</strong>cidir si elconjunto aceptado es finito, infinito, regular, libre <strong>de</strong> contexto, tiene un número par <strong>de</strong> strings o satisfacemuchos otros predicados.¿Qué pue<strong>de</strong> ser <strong>de</strong>cidido entonces sobre los conjuntos aceptados por una máquina <strong>de</strong> Turing? Sólo lospredicados triviales, tales como ¿Acepta una MT un lenguaje enumerable recursivamente? que son verda<strong>de</strong>rospara todas las MT o falsos para todas ellas.En lo que sigue se discutirán lenguajes que representan propieda<strong>de</strong>s <strong>de</strong> los lenguajes enumerables recursivamente.Esto es, los lenguajes son conjuntos <strong>de</strong> códigos <strong>de</strong> MT tales que la pertenencia <strong>de</strong> < M > en ellenguaje <strong>de</strong>pen<strong>de</strong> sólo <strong>de</strong> L(M) y no <strong>de</strong> M misma. Más a<strong>de</strong>lante se consi<strong>de</strong>rarán lenguajes <strong>de</strong> códigos <strong>de</strong>MT que <strong>de</strong>pen<strong>de</strong>n <strong>de</strong> la MT misma, como “M tiene 27 estados”, que pue<strong>de</strong>n ser satisfechos para algunas,pero no todas las MT que aceptan un lenguaje dado.Sea I un conjunto <strong>de</strong> lenguajes enumerables recursivamente, cada uno sobre {0, 1}. I es una propiedad<strong>de</strong> los lenguajes enumerables recursivamente. Un conjunto L tiene la propiedad I, si L ∈ I. Por ejemplo,la propiedad <strong>de</strong> ser infinito es {L/L es infinito }. I es una propiedad trivial si es vacío o consiste <strong>de</strong> todoslos lenguajes enumerables recursivamente. Sea L I el conjunto {< M > /L(M) ∈ im}.Teorema 47 (Teorema <strong>de</strong> Rice) Cualquier propiedad no trivial I <strong>de</strong> los lenguajes enumerables recursivamenteno es <strong>de</strong>cidible.Demostración : Sin per<strong>de</strong>r generalidad se asume que φ ∉ I (si no, considérese I). Como I es no trivial,existe L con propiedad I. Sea M L una MT que acepta L. Suponga que I fuera <strong>de</strong>cidible. Entonces existeun algoritmo M I que acepta L I . Se usa M L y M I para construir un algoritmo para L u . Primero seconstruye un algoritmo A que toma < M, w > y produce < M ′ >, en que L(M ′ ) ∈ I si y sólo si M aceptaw (< M, w >∈ L u ). (Ver Figura 9.7).Primero M ′ ignora su input y simula M en w. Si M no acepta w, M ′ no acepta X. Si M acepta w, M ′simula M L en X y acepta X si y sólo si M L acepta X. Luego M ′ acepta φ o L, <strong>de</strong>pendiendo <strong>de</strong> si M acepta


144 PROPIEDADES DE L. ENUMERABLES RECURSIVAMENTE Y RECURSIVOSw ✲MSI✲✲M L✲SI✲SIXM ′Figure 9.7: construcción <strong>de</strong> M ′ , correspondiente a la <strong>de</strong>mostración <strong>de</strong>l Teorema <strong>de</strong> Ricew.Se pue<strong>de</strong> usar el algoritmo hipotético M I para <strong>de</strong>terminar si L(M ′ ) ∈ I. Como L(M ′ ) ∈ I si y sólosi < M, w >∈ L u , se tiene un algoritmo que reconoce L u , una contradicción. Por lo tanto, I <strong>de</strong>be ser no<strong>de</strong>cidible. Note cómo esta <strong>de</strong>mostración generaliza el ejemplo 91.Este teorema tiene varias consecuencias, algunas <strong>de</strong> las cuales se resumen en el siguiente corolario:Corolario 4 Las siguientes propieda<strong>de</strong>s <strong>de</strong> los conjuntos enumerables recursivemente no son <strong>de</strong>cidibles:1. Ser vacío2. Ser finito3. Ser regular4. Ser libre <strong>de</strong> contexto¿Implica el teorema anterior que cualquier cosa sobre las MT es no <strong>de</strong>cidible? La respuesta es NO. Esteteorema sólo tiene que ver con propieda<strong>de</strong>s <strong>de</strong> los lenguajes aceptados, no con propieda<strong>de</strong>s <strong>de</strong> las máquinas<strong>de</strong> Turing mismas. Por ejemplo, el problema: ¿Tiene una MT dada un número par <strong>de</strong> estados?, es claramente<strong>de</strong>cidible. Al tratar propieda<strong>de</strong>s <strong>de</strong> las MT mismas se <strong>de</strong>be usar el ingenio.✷

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

Saved successfully!

Ooh no, something went wrong!