NotasTLP

68
NOTAS SOBRE LA TEORIA DE AUTOMATAS FINITOS, EXPRESIONES REGULARES y GRAMATICA FORMAL Alfonso Abarca Departamento de Electrónica e Informática San Salvador, enero de 2002

Transcript of NotasTLP

  • NOTAS SOBRE LA TEORIA DEAUTOMATAS FINITOS,

    EXPRESIONES REGULARES yGRAMATICA FORMAL

    Alfonso Abarca

    Departamento de Electrnica e Informtica

    San Salvador, enero de 2002

  • INDICE

    Introduccin i

    Seccin 1: Importancia de la teora de autmatas, expresiones regulares y gramtica formal 1

    Seccin 2: Definiciones bsicas 3

    Seccin 3: Autmatas finitos determinsticos 13

    Seccin 4: Una primera aproximacin a la clasificacin de los lenguajes 23

    Seccin 5: Autmatas finitos no determinsticos 33

    Seccin 6: Expresiones regulares 43

    Seccin 7: Gramtica formal 53

    Referencias bibliogrficas 65

  • Introduccin

    La intencin con la que se elaboran estas notas sobre autmatas finitos, expresionesregulares y gramtica formal, es la de proporcionar material de apoyo para la materia deteora de lenguajes de programacin.La experiencia al impartir esta materia en los ltimos aos me ensea que el estudiantede Licenciatura en Computacin se enfrenta de pronto y sin previo aviso a una teorapara la que no estaba preparado, ya sea por los formalismos de la matemtica que seusan, por el grado de rigurosidad con que se enfoca la teora o por que al principio nocomprende el rol que los autmatas jugarn posteriormente en la teora de lenguajes deprogramacin. Por supuesto que existe una extensa y excelente bibliografa sobre estos temas, delectura obligatoria para todo principiante en la materia, pero de nuevo la experienciaindica que el terreno resulta arduo para el estudiante de computacin cuyas basesmatemticas son dbiles o que dispone de poco tiempo para asimilar los conceptosbsicos.

    Decimos que el estudiante dispone de poco tiempo para asimilar los conceptos bsicosno en razn de su disponibilidad horaria para el estudio, sino ms bien, por el hecho deque la teora de autmatas es solo la introduccin a la teora de lenguajes deprogramacin, y de pronto, estos conceptos antes desconocidos (junto con la gramticaformal), se vuelven pilar fundamental en el desarrollo temtico de la materia.

    En el desarrollo de este trabajo me apoyar en las notas escritas para cursos de TeoraMatemtica de la Computacin y Teora de la Compilacin que he impartido en eltranscurso de los ltimos 15 aos, pero no debe presuponerse absoluta originalidad,puesto que en muchos lugares me he basado en la bibliografa existente y en algunasoportunidades se parafrasea a los grandes investigadores de estos temas.

    En cada seccin de estas notas, los conceptos ha estudiar se apoyan con ejemplos, y porsupuesto, al final de cada seccin se encontrarn ejercicios de refuerzo que el estudiantedeber de realizar para ampliar su dominio sobre estos conceptos.Al final de estas notas se hace referencia a la bibliografa, de modo que el estudiante nosustituya la lectura de los libros clsicos por estas sencillas notas de apoyo.

    El enfoque es formal, por lo menos en el sentido que se necesita que el estudiantemaneje medianamente bien los conceptos matemticos bsicos que le fueronproporcionados en los primeros aos de la carrera. Solo he omitido la demostracin dealgn teorema cuando he considerado que est ms all de los conocimientosmatemticos promedio del estudiante que cursa la materia de teora de lenguajes deprogramacin.

    Aunque estas notas se escriben como material de apoyo a la materia de teora delenguajes de programacin, otros lectores interesados en el tema tambin podranencontrar secciones que despierten su inters o refuercen sus conceptos sobre estostemas.

    iii

  • Seccin 1

    Importancia de la Teora de Autmatas, Expresiones Regulares y Gramtica Formal

    Es un hecho empricamente comprobado que la mayora de personas (estudiantes o no)cundo escuchan la frase Ciencias de la Computacin, inmediatamente piensan en unacomputadora. Esto de ninguna manera es incorrecto, pues este instrumento llamadoComputadora forma ahora parte de nuestra vida cotidiana y por asociatividad todostenemos la tendencia a pensar en una computadora al escuchar la palabra computacin.

    Si lo pensamos con un poco ms de detenimiento, tambin podra asociarse a la fraseCiencias de la Computacin el trmino Computar. Esto pareciera solo un juego depalabras si no fuese por el hecho que detrs del trmino computar se encuentran lasnociones ms profundas y fundamentales de las Ciencias de la Computacin.

    Las preguntas : Qu es computar? , Cul es la nocin de problema computable?,Son todos los problemas computables? son de capital importancia en computacin y dehecho las respuestas que se dan a ellas definen los fundamentos de toda esta ciencia.Sorprendentemente estas preguntas y sus respuestas se vienen estudiando desde muchoantes de la invencin de la computadora. El desarrollo formal del concepto computar ymquina de cmputo es resultado de los trabajos del matemtico ingls Alan Turing(19121954) que se remontan hasta el ao 1936.

    Tal como escribe Guillermo Levine en (1): "Como resultado de las investigaciones deTuring ahora sabemos cules son algunas limitantes, inherentes a nuestro sistema depensamiento, de los mecanismos mentales para averiguar la estructura formal delmundo. Estos estudios inauguran la teora matemtica de la computacin, de la cual lascomputadoras son tan solo un aspecto, el ms visible sin duda".

    La formalizacin de estos conceptos da a luz algunos modelos y nociones matemticasque forman, digmoslo as, un valioso instrumental para el estudio de problemas defondo en las ciencias de la computacin.

    Los autmatas finitos y las expresiones regulares son pilar de esta teora matemtica dela computacin y aparecen de una u otra forma de manera reiterada en muchas reas delas ciencias de la computacin y la electrnica. En particular, para el caso que nosocupa, las expresiones regulares sern usadas como metalenguaje para describir lasexpresiones que son procesadas por una fase dentro de un compilador. An ms, estafase del compilador ser programada en lenguaje C simulando el comportamiento de unautmata finito.Si se desea un excelente ejemplo de la aplicacin de los autmatas finitos encomputacin, se invita al lector a revisar la literatura sobre Redes Neuronales, que esuna exitosa e interesante aplicacin de estos modelos matemticos.

    4

  • Si continuamos con nuestro inters de conocer ms sobre la teora de lenguajes deprogramacin, centremos ahora nuestra atencin en el problema de la compilacin delenguajes de alto nivel. Un compilador es una pieza de ingeniera de software compleja, cuyo principal objetivoes leer un programa fuente escrito en algn lenguaje de alto nivel y traducirlo a cdigoobjeto de una computadora. Nos enfrentamos aqu a dos problemas importantes encomputacin: el primero es definir la estructura gramatical del lenguaje a compilar, estoes, sus reglas, y la segunda es construir un programa que sea capaz de reconocer frasesgeneradas a partir de las reglas establecidas en el lenguaje.

    La interpretacin, reconocimiento y traduccin de lenguajes por el proceso decompilacin no pueden ser reducidos a un "diccionario" para traducir de un lenguaje aotro. Todos aquellos que hemos programado alguna vez sabemos el nivel deexpresividad de los lenguajes de programacin modernos y la complejidad de losprogramas que pueden escribirse.

    En 1956 el lingista Noam Chomsky del Instituto Tecnolgico de Massachussets,publica un estudio clsico sobre la formalizacin matemtica del concepto de gramtica.En este estudio se propone el concepto de "Gramtica Formal" que es la base para ladefinicin de lenguajes de alto nivel y herramienta fundamental para la construccin deun compilador y de sus primos los intrpretes.

    Si se me permite aqu una reflexin personal, debo de decir que al margen de laimportancia de estos conceptos en computacin, la primera vez que se me presentaronlas nociones de teora de autmatas, expresiones regulares y gramtica formal quedefascinado por la sencillez y belleza de estas definiciones, y ms adelante, cuando se mepresentaron sus aplicaciones en la teora de la compilacin, arribe a la misma conclusinque J.R. Pierce al referirse a las ecuaciones del electromagnetismo de Maxwell, en elsentido de que uno debera de estudiar los fundamentos de la teora matemtica de lacomputacin "as sea solamente por el bien de su alma".

    5

  • Seccin 2

    Definiciones bsicas

    Alfabeto: Es un conjunto finito de smbolos. No daremos una definicinde "Smbolo", pues la aceptaremos como una "nocin comn".

    Ejemplos de alfabetos son:A1={A, B, C,..,Z, a, b, c,..., z}A2=ASCIIA3={, , }B={0,1}

    En estas notas algunas veces usaremos letras griegas para designar a unalfabeto: ?, ?, etc.

    Palabra, Frase o Cadena ("String") : Es una sucesin finita desmbolos tomados de algn alfabeto.

    Ejemplos de palabras son:

    ABC, palabra formada del alfabeto A1$**@@, palabra formada del alfabeto A2, palabra formada del alfabeto A31000, palabra formada del alfabeto B

    Si definimos al operador | . | , llamado "longitud de una palabra", comoaquel que al ser aplicado a una palabra nos devuelve el nmero de smbolosen ella, tenemos para el caso que:

    |ABC|=3|1000|=4

    Existe una palabra especial que se puede formar con cualquier alfabeto, lapalabra vaca, simbolizada ?, y es la palabra que carece de smbolos, portanto:

    | ?|=0.La existencia de la palabra vaca no debera de provocarnos problemas deinterpretacin, al fin y al cabo, en el idioma espaol o en cualquier otroidioma, an cuando se pueden formar una enorme cantidad de palabras,siempre se tiene la posibilidad de no formar ninguna y "guardar silencio".

    6

  • Concatenacin de palabras: La concatenacin de dos palabras x, yes la palabra resultante al escribir x seguida de y.

    La concatenacin se simboliza por medio de un punto entre las palabras porconcatenar, an cuando este punto puede ser omitido.

    Ejemplo de concatenacin:

    Si x=ABC y y=1000, entonces xy=xy=ABC1000

    Prefijo de una palabra : Es cualquier sucesin de smbolosordenados iniciales sobre una palabra.

    Ejemplos de prefijos: Si x=ABB1* es una palabra formada sobre algn alfabeto, entonces:? ,A,AB,ABB,ABB1 y ABB1* son todos los prefijos de la palabra x.Obsrvese que la palabra vaca es prefijo de toda palabra.Matemticamente un prefijo se define as:Si x,y son palabras, entonces:

    y prefijo de x si existe una palabra z / yz=x

    Sufijo de una palabra : Es cualquier sucesin de smbolosordenados terminales (o finales) sobre una palabra.

    Ejemplos de sufijos:Si x=ABB1* es una palabra formada sobre algn alfabeto, entonces:? ,*,1*,B1*,BB1*,ABB1* son todos los sufijos de la palabra x.Obsrvese que la palabra vaca es sufijo de toda palabra.Matemticamente un sufijo se define as:Si x,y son palabras, entonces:

    y sufijo x si existe z / zy=x Subpalabra: Si x es palabra, una subpalabra de x es cualquier

    sucesin consecutiva de smbolos en x.

    7

  • Ejemplos de subpalabras:Si x=*abc es una palabra formada a partir de algn alfabeto, entoncesab, abc, *a y ? son ejemplos de algunas subpalabras de x.

    Las definiciones anteriores son bsicas pero de importancia capital en la teoramatemtica de la computacin y en particular, en la teora de lenguajes deprogramacin. Obsrvese la forma en la que la matemtica formaliza nocioneslingsticas de uso tan comn, como : palabra, prefijo, sufijo, etc.

    Solo con estas definiciones precisas es posible construir un modelo matemtico que nospermita, sin duda ni ambigedad, referirnos a conceptos computacionales que de otraforma quedaran vagamente definidos o susceptibles a su interpretacin subjetiva.Con estas definiciones elementales podemos ahora definir el concepto de Lenguaje, quesin ninguna duda, es en computacin un trmino importante:

    Definicin : Un lenguaje formal es cualquier conjunto de palabras formadas sobrealgn alfabeto. Es decir: L es lenguaje formal sobre el alfabeto ?, si y solamente si L esun subconjunto de palabras formadas sobre ?.

    Ejemplos de lenguajes formales:Si ?={A,B,*}, entonces:

    L1={ABB, BB*, A}L2={**A, BBBB, AAB, ***, A*}L3={ ? , A, AA, AAA,....}L4={}=L5={ ? }

    Son todos lenguajes formales formados a partir de palabras sobre ?.Obsrvese que los lenguajes pueden tener un conjunto finito o infinito de palabras yadems, el lenguaje formado por el conjunto vaco es vlido. (Es un lenguaje sinninguna palabra).

    Obviamente L4 ? L5. Porqu?.

    Como ya se mencion antes, debido a la importancia del concepto de lenguaje en lasciencias de la computacin, no nada ms se debera de dar su definicin y comprobar suexistencia con algunos ejemplos. Probablemente el lector estara interesado en conocercuntos lenguajes se pueden formar.

    8

  • Comenzaremos por establecer un teorema que nos ayudar a contar el nmero depalabras que se pueden formar a partir de un alfabeto.1

    Teorema 2.1: Dado un alfabeto ?={a1,a2,...,an}, el conjunto de todas las palabras que sepueden formar es infinito y numerable.

    Comentario: En teora de conjuntos el concepto de infinito tiene una connotacinligeramente diferente a la que estamos acostumbrados en anlisis matemtico.En teora de conjuntos se pueden distinguir varias clases de infinitos, por ejemplo:conjuntos infinitos numerables, esto es, conjuntos con un numero infinito de elementospero en los cuales dichos elementos se pueden ordenar en una sucesin, uno detrs deotro.En esta caso el infinito tiene una especie de patrn ordenado. Un ejemplo de conjuntoinfinito numerable es N, los nmeros naturales. N es un conjunto infinito, pero suselementos se pueden ordenar muy fcilmente: 1,2,3,.....Por otro lado existen los conjuntos infinitos no numerables. Estos conjuntos tienen unnmero de elementos infinito, pero no es posible ordenarlos en una sucesin. Porejemplo el conjunto R, de los nmeros reales. R es un conjunto infinito, pero sin lacaracterstica del orden sucesivo. (Qu nmero sigue despus de 1.2?).

    Si est interesado en el tema de la numerabilidad y en los llamados nmeros transfinitos,puede consultar (2).

    El teorema 2.1 dice que el conjunto de todas las palabras que se pueden formar apartir de un alfabeto es infinito, pero que estas palabras se pueden ordenar deforma sucesiva.

    Demostracin:

    El conjunto de todas las palabras que pueden formarse a partir del alfabeto ?, quesimbolizaremos ?* se puede escribir:

    ?* = {?} U {x / |x| ? N}, N={1,2,3...}Es ?* estn todas las palabras de longitud cero que se pueden formar, unidas con todaslas palabras de longitud uno que se pueden formar, unidas con todas las palabras delongitud dos que se pueden formar, etc. Debe de ser claro entonces que en ?* estn todaslas palabras que se pueden formar a partir de ? y por definicin, ?* es un conjuntoinfinito.Para Mostar que ?* es infinito pero numerable, es decir, que podemos establecer unorden sobre sus elementos (las palabras), expresaremos ahora a ?* de la siguiente forma:

    ??* ={ x / |x |=0}U{ x / |x |=1}U{ x / |x |=2}U{ x / |x |=3}...= U{ x / |x |=i},

    1 Un teorema es cualquier proposicin susceptible de ser probada usando razonamientos lgicos vlidos.

    9

  • i=0

    Obsrvese que cada conjunto en la unin se puede ordenar, puesto que es finito, luegopodemos formar una sucesin con las palabras de ?* colocando los elementos del primerconjunto (de hecho es la palabra vaca), seguido de los elementos del segundo conjunto(que es el mismo alfabeto), seguido de los elementos del tercer conjunto, etc.A este orden se le conoce como "Orden Lexicogrfico".

    (Q.E.D)

    Ahora, recordando un poco ms de teora de conjuntos podemos contestar a la preguntaCuntos lenguajes se pueden formar a partir de un alfabeto?

    Teorema 2.2: El nmero de lenguajes que se pueden formar a partir de un alfabeto esinfinito.

    Demostracin:

    Por definicin, dado un alfabeto ?, un lenguaje es cualquier subconjunto de ?*.Esto es : L lenguaje sobre ? si y solamente si L ?*.

    El nmero de subconjuntos de ?* no puede ser finito, pues contiene al menos, unsubconjunto formado con cada elemento de ?* (una palabra por subconjunto) y elteorema anterior prueba que el nmero de elementos en ?* es infinito.

    (Q.E.D)

    La figura 2.1 ayuda a ilustrar la idea de lenguaje como subconjunto de ?*.

    10

  • Un hecho sorprendente que no probaremos aqu, es que se puede demostrar que elnmero de lenguajes que se pueden formar a partir de un alfabeto es adems de infinito,no numerable, es decir, este infinito no tiene la caracterstica del orden.

    Hay entonces suficientes lenguajes como para proceder a estudiar sus caractersticas, porejemplo: su nivel de complejidad, patrones, clasificacin, etc.Comenzaremos ahora a echar un vistazo sobre la estructura misma de los lenguajes ysobre la manera de describirlos.

    Definicin: Un lenguaje finito es aquel que tiene un nmero finito de palabras.Ejemplo 1. Pregunta: Todo lenguaje finito se puede describir con un nmero finito desmbolos?

    Para contestar esta pregunta recordemos que hemos definido a los lenguajes partiendode la teora de conjuntos, por tanto, los problemas de descripcin de un lenguaje debernde ser remitidos a esta teora.

    En teora de conjuntos existen dos formas conocidas para describir conjuntos: porextensin o enumeracin y por comprensin.

    Si el lenguaje es finito es trivial describirlo por extensin, simplemente se enumeran laspalabras de las que consta:

    Si L lenguaje finito, entonces, L={primera palabra, segunda palabra, ....,ltima palabra}.

    * *

    *

    **

    *

    *

    *

    *

    **

    *

    *** *

    *

    *

    *

    **

    **

    **

    **

    *

    *

    *

    Fig. 2.1: L1, L2 y L3 son lenguajes sobre ?

    ?*

    L1

    L2

    L3palabras

    11

  • Pero tambin hay lenguajes con un nmero infinito de palabras que pueden serrepresentados con un nmero finito de smbolos:

    Ejemplo 2: Sea ? un alfabeto, y L1 , L2 ?* (es decir, L1,L2 son lenguajes formalessobre ?) con un nmero infinito de palabras, entonces la concatenacin de L1 con L2 sedenota:

    L1 . L2 = L1L2 = {xy / x ? L1 y y ? L2}.

    Ejemplo 3: Describir al lenguaje de todos los nmeros binarios pares.

    El lenguaje de los nmeros binarios es de especial importancia en teora matemtica dela computacin (y por supuesto en la computacin en general) y la mayora de ejemplosque seguirn en estas notas, usarn de manera reiterada a este lenguaje.En este ejemplo describiremos por comprensin al lenguaje de los nmeros binariospares L.

    No es difcil probar (ver ejercicio #2), que :Un nmero binario es par si y solamente si termina en cero,

    De aqu se sigue inmediatamente que si ?={0,1}, entonces:

    L={y0 / y ? ?*}

    Ejemplo 4: En el ejemplo anterior se han repetido nmeros binarios. Aunque la palabra10 y la palabra 010 son distintas, su equivalente numrico es el mismo: ambasrepresentan al entero 2. De hecho hay infinitas repeticiones para cada par: 10, 010,0010, etc. Describir al lenguaje de los binarios pares sin repeticin.El hecho de que existan repeticiones no quiere decir que hallamos cometido un error enel ejemplo anterior. La descripcin es correcta desde el punto de vista de larepresentacin, pero ahora el lenguaje por describir es distinto e indica que debemosomitir estas repeticiones. Si ?={0,1}, entonces proponemos inicialmente que el lenguajede los binarios pares sin repeticin es:

    L={1y0 / y ? ?*},

    Lo cual elimina la posibilidad de repeticin. Pero debemos de ser ms cuidadosos aldescribir por comprensin a un lenguaje. Recuerde que estamos bajo la notacin de lateora de conjuntos y por tanto la rigurosidad matemtica debe de ser respetada. Unexamen ms minucioso de la representacin propuesta nos indica que NO representa allenguaje solicitado. Porqu?.

    12

  • Porqu no contiene a todos las palabras binarias pares!. Se ha omitido al binario parcero. La justificacin de que solamente un par entre infinitos es el que se ha omitido novale en teora de conjuntos. Sencillamente la representacin de arriba es incorrecta.Considere ahora a: L={1y0 / y ? ?*}U{0},

    Esta nueva representacin corrige el error de omisin y soluciona el problema.

    13

  • Ejercicios

    1. Sea el alfabeto ?={a1,a2,...,an} :

    1.1. Indicar cuntas palabras tienen los siguientes conjuntosi) ?0 = { x / |x|

  • Seccin 3

    Autmatas Finitos Determinsticos

    El conteo del nmero de lenguajes que se pueden formar sobre un alfabeto result en elabrumador infinito. An ms, en un infinito en donde la caracterstica del orden estausente.

    El estudio de la teora de lenguajes y en particular la de los lenguajes de programacin,se sustenta fundamentalmente en el conocimiento de la estructura de los lenguajes.Cmo podemos inferir algo sobre la estructura de los lenguajes si son tantos?Una primera aproximacin a la estructura de los lenguajes son los Autmatas Finitos(desde ahora FA de su abreviatura en ingls). Los FA son modelos matemticos que nospermitirn estudiar una clase de lenguajes importantes.Los FA no son de uso exclusivo de la teora matemtica de la computacin. Estas"mquinas" se usan para representar otro tipo de fenmenos que se caracterizan porpasar siempre de un estado a otro de forma discreta, siendo siempre el nmero deestados finito (de all el nombre de autmatas finitos).Por ejemplo: la electrnica usa los FA para diagramar todos los cambios de estadoposibles en componentes que usan lgica digital, muchas otras mquinas como porejemplo una sencilla mquina expendedora de chicles puede basar su operacin en unFA.

    Definicin: Un autmata finito determinstico (DFA por sus siglas en ingls) es unquintuplete (Q, ?, ?, q0, F) donde:

    a) Q es un conjunto finito de estadosb) ? es un conjunto finito de smbolos llamado alfabeto de entrada.c) ? es una funcin: ?:QX? Q, llamada funcin de transicin del autmatad) q0 ? Q es el estado inicial del autmatae) F Q es un conjunto llamado estados finales

    Antes de entrar a usar de forma operacional el modelo matemtico anterior, podemosdar una descripcin mecnica del autmata. Recuerde que el DFA es un modelomatemtico y la visin mecnica que daremos solamente es una ayuda para comprendersu funcionamiento.

    En la figura 3.1 hemos representado al DFA como formado por una cinta infinita desolo lectura, con una palabra en alguna porcin de ella. El DFA adems tiene un controlfinito, que es un hardware especial donde se ha codificado un programa (la funcin ?).El control finito tiene un pequeo foco (led) que es capaz de cambiar de colores en unrango preestablecido de colores (el conjunto de estados Q).El control finito tiene una cabeza lectora que siempre se encuentra en el primer smbolode la palabra en la cinta e inicia en un color especial llamado el color inicial (el estadoinicial del autmata).

    15

  • Cuando el control finito lee un smbolo, introduce al programa el color en el que seencuentra actualmente el led y el smbolo ledo, y el programa acta cambiando de coloral led y avanzando al siguiente smbolo. Observe que para tomar la decisin del nuevocolor se tienen como datos el color actual y el smbolo que se encuentra en la cinta.

    Ejemplo 1: Sea M= (Q, ?, ?, q0, F), donde:Q={qo,q1,q2,q3}?={0,1}F={q0},

    y la funcin de transicin es como sigue:

    ?(qo,0) = q1 ?(q2,0) = q3?(qo,1) = q2 ?(q2,1) = q0?(q1,0) = qo ?(q3,0) = q2?(q1,1) = q3 ?(q3,1) = q1

    Ntese que el conjunto de estados finales de esta DFA consta solamente del mismoestado inicial.De particular importancia es la especificacin de la funcin de transicin. Lo primeroque debe verse es que verdaderamente sea una funcin, es decir, que todo elemento desu dominio QX? tiene una imagen y ningn elemento de su dominio tiene ms de unaimagen.

    16

    ...... a1 a1 a2 a3 an... a n1

    Controlfinito

    Direccin de avance

    led cambiando de color

    Fig. 3.1: Visin mecnica de un autmata finito determinstico

    Cabeza lectora

  • El dominio de la funcin es el producto cartesiano QX?, as que si usted tiene problemaspara especificar una funcin de transicin debera comenzar por escribir siempre elproducto QX? y de all partir para la especificacin.

    Este no es el nico estilo de especificar funciones de transicin. En la literatura yespecialmente en la correspondiente a lgica digital encontrar la funcin escrita enforma de tabla, para el caso anterior:

    ? 0 1q0 q1 q2q1 q0 q3q2 q3 q0q3 q2 q1

    Los DFA se pueden especificar sin usar todo el formalismo matemtico de la definicinde una manera ms intuitiva, usando los llamados diagramas de transicin de estados.

    Los diagramas de transicin de estados son grafos en los cuales un estado se simbolizapor un circulo, los estados finales con doble circulo y se dibujan flechas dirigidas paraespecificar las transiciones de ?, por ejemplo, para el caso anterior tenemos:

    Con el diagrama de transicin podemos ensayar como funciona el DFA sobre unapalabra cualquiera: 0110.

    El DFA siempre comienza a trabajar desde su estado inicial qo, y analizando el primersmbolo de la palabra, en este caso 0. El diagrama de transicin indica que el DFAestando en el estado qo y viendo al 0 pasa a q1. Ahora hay que analizar que hace el DFAestando en el estado q1 y viendo al segundo smbolo de la palabra: 1.El DFA estando en q1 y viendo a un 1 pasa a q3. Ahora estando en q3 y viendo al tercersmbolo, el 1, regresa a q1.Finalmente desde q1 y viendo al ltimo smbolo, un 0, pasa a q0.

    El lector puede comprobar que con la palabra: 01010 el DFA termina en q1.

    qo q1

    q2 q3

    0

    01 1

    0

    0

    1 1

    17

  • La ilustracin del recorrido del DFA anterior ejemplifica claramente la mecnica con laque se espera operen los autmatas, sin embargo, la funcin ? tal como estaespecificada, no permite que los DFA operen sobre palabras completas a partir delestado inicial, sino solamente sobre un smbolo desde algn estado (su dominio es QX?).Por esto definiremos una funcin de transicin extendida a partir de ? que legitime laoperacin de los DFA sobre palabras completas.

    Definicin: Dado el DFA M y su funcin de transicin ?, definimos a ?^, la funcin detransicin extendida de M, as:

    ?^ :Qx?* Q , tal que:

    i) ?^ (qi, ?) = qi , para todo qieQ

    ii) ?^ (qi, aj) = ?(qi, aj) , para todo qieQ y para todo aje?

    iii) ?^ (qi, ajx) = ?^ (?(qi, aj),x) , para todo qi ? Q, para todo aj ? ? . x ? ?*

    La funcin ?^ responde a la palabra vaca no haciendo transicin alguna yresponde a las palabras de un solo smbolo como lo hara ?.En la parte iii de la definicin anterior, que es una funcin recursiva, se define elcomportamiento del DFA frente a una palabra grande.

    Ejemplo 2: En el DFA anterior, indicar en que estado finaliza el autmata luego deexaminar la palabra 010100.

    Aplicamos ?^, as:

    ?^ (qo,010100) = ?^ (?(qo,0),10100)= ?^ (q1,10100)= ?^ (?(q1,1),0100)= ?^ (q3,0100)= ?^ (?(q3,0),100)= ?^ (q2,100)= ?^ (?(q2,1),00)= ?^ (q0,00)= ?^ (?(q0,0),0)= ?^ (q1,0)=?(q1,0)=q0.

    Por tanto el DFA termina en q0.

    Pasaremos ahora a definir el concepto de aceptacin. La definicin de un DFA incluyelos denominados estados finales que como veremos a continuacin, son estadosdistinguidos en el autmata.

    Definicin: Decimos que el autmata finito M=(Q, ?, ?, q0, F) acepta a la palabraxe?*

    , si M empezando en el estado inicial qo, luego de leer toda la palabra termina en unestado final.Matemticamente:

    x ? ?* es aceptado por M si y solo si ?^ (qo,x)=qi ? F.

    18

  • Definicin: El lenguaje aceptado por un DFA es el conjunto de todas las palabrasaceptadas por el DFA.

    Matemticamente el lenguaje aceptado por un DFA M se denota L(M), y por definicin:L(M)={ x / x ? ?* y ?^(qo,x)=qi ? F}

    Ejemplo 3: En el DFA del ejemplo 1 se tiene que :01010 ? L(M) puesto que al terminar de leer a la palabra 01010, M finaliza en q1

    que no es un estado final.

    010100 ? L(M) puesto que al terminar de leer a la palabra 010100, M finaliza enqo que es un estado final (el nico).

    Podra el lector indicar el lenguaje aceptado por M, el DFA del ejemplo 1 ? No siempre es trivial o sencillo describir al lenguaje aceptado por un DFA. Puede ser unDFA con muchos estados, adems el DFA puede tener transiciones que no siemprehagan evidente el conjunto de palabras que alcanzan un estado final.Para encontrar L(M) en el caso del ejemplo 1, usaremos la observacin aguda deldiagrama de transicin junto con un argumento muy sencillo de teora de grafos:Volvamos a dibujar el diagrama de transicin, pero ahora coloquemos los ejes X y Y,como se muestra en la figura siguiente:

    Obsrvese ahora que M siempre se encuentra arriba del eje X si ha ledo un nmero parde unos, y tambin, M siempre se encuentra a la izquierda el eje Y si ha ledo un nmeropar de ceros. Luego, el grafo muestra que M siempre se encontrar arriba del eje X y ala izquierda del eje Y, es decir en su nico estado final, si ha ledo un nmero par deunos y un nmero par de ceros.

    Concluimos entonces que L(M) es el conjunto de todas las palabras binarias que tienenun nmero par de unos y un nmero par de ceros.

    qo q1

    q2 q3

    1 11

    0

    0

    0

    01

    Eje X

    Eje Y

    19

  • Si los autmatas finitos nos servirn para analizar (o aceptar) lenguajes, deberamosproseguir contando cuntos FA se pueden formar, con la esperanza de que al menosexista uno que reconozca a cada lenguaje posible sobre un alfabeto.Comenzaremos por observar que dado un alfabeto ?, el conjunto de todos losautmatas finitos M= (Q, ?, ?, q0, F) que se pueden forma es infinito. Basta ver quepodemos construir autmatas con cualquier nmero finitos de estados, sin restriccin, esdecir: |Q| ? N. (Dado un nmero natural, siempre se puede construir un FA con esenmero de estados).

    Esto nos acerca a materializar nuestras esperanzas, puesto que el nmero de lenguajesque se pueden formar sobre un alfabeto es infinito y el nmero de autmatas tambin.

    Sin embargo, existe un hecho que no probaremos aqu, y es que aunque el nmero deautmatas que se pueden formar es infinito, este infinito es numerable.Ambos conjuntos, el de los lenguajes sobre un alfabeto, y el de los autmatas con estealfabeto son infinitos, pero el primero es no numerable y el segundo es numerable.Aunque al principio parezca sorprendente este hecho, hace que por ms autmatas quese construyan, nunca se alcancen a cubrir todos los lenguajes.Ms adelante veremos que los FA no solo son menos que los lenguajes formales, sinoque, tambin son incapaces de aceptar lenguajes con una estructura relativamentecompleja. Esto no debe de desanimarnos en nuestro estudio, porque la clase de lenguajesaceptados por los FA, aunque pequea, es de mucha importancia en la teora delenguajes de programacin. Esta clase de lenguajes aceptados por los FA sirve paradefinir los componentes lexicogrficos de los lenguajes de programacin.En teora matemtica de la computacin, las limitaciones impuestas por los FA sesuperan definiendo modelos ms poderosos (mquinas ms poderosas): autmatas depila determinsticos, autmatas de pila no determinsticos, mquinas de Turing, etc.El estudiante interesado puede consultar la bibliografa, en particular (3) para ampliarsus conocimientos en estos interesantes temas.

    Ejemplo 4: Sea ?={0,1}. Considerar L1={ x0 / x ? ?*}.L1 es el lenguaje de los binarios pares con repeticin. Encontrar un DFA que acepte a L1.

    Definimos a M1=(Q, ?, ?, q0, F) , donde:

    Q={qo,q1},?={0,1},F={qo}, y las transiciones como se muestran en el diagrama:

    20

  • El autmata M1 acepta a todas las palabras binarias que terminan en cero, peroL(M1) ? L1, puesto que M1 acepta ms. M1 acepta a ?, la palabra vaca, debido a queestando en qo, M permanece en qo sin ver ningn smbolo.

    Esto es: ?^(q0, ?) = qo ? F.

    Nuevamente se debe de recordar que la teora de autmatas que se ha construido hastaahora, fundamenta su formalismo en la teora de conjuntos, y en esta teora dosconjuntos son iguales si y solamente si tienen todos sus elementos iguales.

    Entonces: L(M1)=L1U{ ? } ? L1.

    El problema se resuelve fcilmente invirtiendo el estado final:

    Ahora la palabra vaca es rechazada y L(M1)=L1.

    Ejemplo 5: El siguiente ejemplo es muy ilustrativo, en el sentido que muestra unaaplicacin real del concepto de autmata finito a la teora de lenguajes de programacin.Usted probablemente se ha preguntado antes como un compilador de algn lenguaje deprogramacin es capaz de aceptar o rechazar (marcando un error) a los identificadores.Por ejemplo, en lenguajes como Pascal o C, los identificadores siempre inician con unaletra y pueden seguir con cualquier combinacin de letras o dgitos.2

    22 Pueden tener un patrn ms complicado, pero aqu lo especificaremos as por simplicidad.

    q0 q1

    0

    1

    0

    1

    q0

    10

    1

    0

    q1

    21

  • Pues bien, los compiladores poseen un autmata finito codificado que es capaz dereconocer el lxico definido para los identificadores, y as aceptar o rechazar a losidentificadores. El DFA es como se muestra el diagrama de transicin:

    Hemos simplificado las cosas indicando sobre los caminos de las transiciones conceptoscomo letra, digito y coc (cualquier otra cosa que no sea letra y digito).

    Ms adelante definiremos a otros miembros importantes de la familia de los autmatasfinitos: los autmatas finitos no determinsticos y los autmatas finitos nodeterminsticos con movimientos vacos.

    22

    letra

    digito

    coc

    letra

    digito

    coc

    letradigito

    q0 q1 q2 coc

  • Ejercicios

    1. Considerar a L2={1x0 / x ? ?*}U{0 } , ?={0,1}. L2 es el lenguaje de los binariospares sin repeticin. Encontrar un DFA que acepte a L2.Escribir completamente el formalismo matemtico para este autmata,incluyendo la escritura de la funcin de transicin como en la definicin yadems en forma de tabla. Dibuje un diagrama de transicin de estados para elautmata.

    2. Describir por extensin al lenguaje aceptado por el siguiente DFA:

    3. Encontrar un DFA que acepte a los binarios divisibles entre 8 sin repeticin.

    4. Encontrar un DFA que acepte a los binarios divisibles entre 8 con repeticin.

    5. Encontrar autmatas finitos que acepten a los lenguajes siguientes sobre ?={0,1} a. El conjunto de todas las palabras que terminan en 00b. El conjunto de todas las palabras con 3 ceros consecutivos.

    6. Especificar un DFA que acepte a todas las palabras binarias divisibles entre 3.

    7. Demostrar que para todo lenguaje finito siempre se puede construir un DFA quelo acepte.

    8. Sea ? la funcin de transicin para un DFA. Probar que para cualquier par depalabras de entrada x,y y un estado q se cumple que:

    ?^ (q,xy)= ?^ (?^ (q,x),y).

    Sugerencia: Aplique el axioma de induccin completa sobre |x| 9. Definimos a un nmero real simplificado y sin signo de la siguiente manera:

    ######.######

    donde cada smbolo "#" representa a cualquier dgito entre 0 y 9.Estos reales simplificados obligatoriamente tienen una parte entera y una partedecimal, por lo que nmeros como 123. o .123 NO son nmeros reales

    q0 q1 q2

    0

    1

    1

    0

    0,1

    23

  • simplificados y sin signo. Construir un DFA que acepte a los nmeros realessimplificados y sin signo.

    10. Encontrar un DFA que acepte al lenguaje: L={x / x empieza con 1, termina con 1 y no tiene 2 unos consecutivos}.

    11. Sea M=(Q, ?, ?, q0, F) DFA y x,y,z ? ?*, q ? Q.

    Probar que si ?^ (q,x)= ?^ (q,y) entonces ?^ (q,xz)= ?^ (q,yz).

    12. Elaborar un programa de computadora en lenguaje C que simule a un DFA.Sugerencia: Puede suponer que en ste caso ? est formado por todos loscaracteres que se pueden generar usando el teclado de la computadora o porsubconjuntos de estos.

    24

  • Seccin 4

    Una primera aproximacin a la clasificacin de los lenguajes

    Antes de continuar nuestro estudio de los autmatas, es bueno detenerse para intentarrevisar lo que hemos conseguido. Veremos a continuacin que ya tenemos elementospara brindar alguna clasificacin sobre los lenguajes formales, sin que esta clasificacinsea muy profunda. Sin embargo y a pesar de todo, lo que antes era el infinito de loslenguajes formales, se convertir en un todo ms ordenado.Consideremos una primera clasificacin de los lenguajes, as :

    Por su cardinalidad:

    i) Existen lenguajes infinitos ( con un nmero infinito de palabras), yii) Existen lenguajes finitos (con un nmero finito de palabras).

    Otra manera de clasificarlos es:

    Por su representacin:

    i) Los lenguajes representables con un numero finito de smbolos, yii) Los lenguajes no representables con un nmero finito de smbolos.

    No todos los lenguajes posibles formados sobre un alfabeto son representables y esto sederiva de que su nmero es infinito no numerable. No existe ningn mtodo deespecificacin de lenguajes que sea capaz de definir todos los lenguajes sobre unalfabeto.La figura 4.1 muestra la relacin entre las 2 clasificaciones anteriores:

    Antes de proceder a intentar una tercera clasificacin, consideremos las siguientesdefiniciones:

    Lenguajesfinitos

    Lenguajes representables con un nmero finito desmbolos

    Lenguajes infinitos

    Todos los lenguajes sobre ?

    Fig 4.1 : Diagrama deVennEuler declasificacin de loslenguajes por sucardinalidad yrepresentacin.

    25

  • Definicin: Un procedimiento es un conjunto de instrucciones con las siguientescaractersticas :

    i) El conjunto de instrucciones es finitoii) Las instrucciones son bsicas y efectivasiii) Tienen una entradaiv) Tienen una salida

    Definicin: Un algoritmo es un procedimiento que siempre termina, es decir, tiene lascaractersticas i a iv, y necesariamente una caracterstica v: es finito en tiempo.

    Ejemplo 1: Considerar el siguiente segmento de programa en FORTRAN:10 GOTO 2020 GOTO 1030 END

    Donde la instruccin GOTO es la segmentacin incondicional del programa hacia lalnea que indica la etiqueta.

    Este es un ejemplo de procedimiento, pues cumple con las condiciones iiv, pero no esfinito en tiempo.

    Ahora estamos listos para las siguientes definiciones:

    Definicin: Un lenguaje L se dice recursivo si existe un algoritmo que siempre decide siuna palabra pertenece o no al lenguaje.La fig. 4.2 ilustra el comportamiento de los lenguajes recursivos.

    El lector encontrar la definicin de lenguaje recursivo en teora matemtica de lacomputacin muy distinta a la clsica definicin de lenguaje recursivo queprobablemente conoci de sus cursos de programacin.

    26

    x (palabra)

    Algoritmo G

    x ? Lx ? L

    Entrada

    Salida

  • All recibi la definicin de lenguaje recursivo como todo aquel en el que se permiteque un procedimiento, mdulo, bloque o funcin se invoque a si mismo. En teoramatemtica de la computacin la acepcin es obviamente diferente, por motivos que nodiscutiremos aqu.

    Definicin: Un lenguaje L se dice recursivamente numerable si existe un procedimientotal que si una palabra pertenece a L el procedimiento se detiene escribiendo SI, pero sila palabra no pertenece a L puede que el procedimiento se detenga y diga NO o puedeque no se detenga nunca (entrando en un loop infinito).

    En la fig. 4.3 se ilustra el comportamiento de un lenguaje recursivamente numerable:

    Obsrvese que solo cuando la palabra no pertenece a L se puede presentar elcomportamiento de loop infinito. Cuando la palabra si pertenece a L, el comportamientoes finito y sin ambigedad: P contesta SI.

    x (palabra) y pertenece a L

    Proc. P

    SI

    x (palabra) y no pertenece a L

    Proc. P

    NO

    x (palabra) y no pertenece a L

    Proc. P en un loopinfinito

    ????No hay salida

    Fig 4.3. Comportamiento de un lenguaje recursivamente numerable

    27

  • Teorema 4.1: Todo lenguaje finito es recursivo.Demostracin:

    Si L finito, entonces L tiene un nmero finito de palabras, digamos:

    L={p1,p2,...pn}

    Sea x una palabra, el algoritmo que siempre decide si x pertenece o no a L, se detalla enel siguiente pseudocdigo o espaol estructurado:

    Algoritmo

    Comienza

    Lee xSi x=p1 entonces Escribe SI

    Otro Si x=p2 entonces Escribe SI.

    .

    .

    Otro Si x=pn Escribe SIOtro Escribe NO

    Termina

    El algoritmo termina un tiempo finito, a lo ms, luego de n comparaciones.

    (Q.E.D.)

    Teorema 4.2: Si el lenguaje L es recursivamente numerable y su complemento Ltambin, entonces L es recursivo.

    Comentario: El teorema anterior establece que de dos procedimientos asociados con unlenguaje y su complemento podemos construir un algoritmo para el lenguaje.Recuerde adems que por definicin: L=?*L.

    Demostracin:

    Debido a que por hiptesis L y L son recursivamente numerables, tienen asociados losprocedimientos respectivos que llamaremos P y P.

    Construimos con ellos el siguiente algoritmo:

    28

  • La explicacin del algoritmo construido es como sigue: Dada x palabra la introducimosal programa quin inicialmente copia x para obtener un duplicado. (Este es un procesotrivialmente finito en tiempo). Una x se introduce en el procedimiento P y la copia en P.Supongamos que x ? L, entonces el procedimiento P contestar SI. Ya no importa si Pcontesta NO o entra en un loop. Nuestro programa ya contest en un tiempo finito SI.

    Ahora supongamos que x ? L, entonces por definicin x ? L y ser el procedimiento Pquin contestar SI, con la operacin de negacin obtenemos NO como respuesta en untiempo finito.

    Luego nuestro dispositivo siempre decide en un tiempo finito si x ? L.

    (Q.E.D.)

    Teorema 4.3: Si L es recursivo, entonces L es recursivamente numerable.

    x (palabra)

    Proc. P

    SI

    Proc. P

    Copia x

    xx

    Posible Loop

    SI NO

    SI

    29

  • Demostracin:

    Llamemos A al conjunto de algoritmos y P al conjunto de procedimientos, entonces pordefinicin A P. Esto es, todo algoritmo es procedimiento.

    (Q.E.D.)

    Armados con estos nuevos hallazgos, procedemos a ofrecer nuevas clasificaciones paralos lenguajes:

    Teorema 4.4: Todo lenguaje aceptado por un autmata finito determinstico esrecursivo.

    Comentario: En realidad no daremos aqu una demostracin formal de este hecho, perodaremos una razn contundente para justificarlo.Dado un lenguaje aceptado por un DFA M, la funcin de transicin de M puedecodificarse como un algoritmo de manera que si dada una palabra x, M alcanza unestado final al terminar de leerla, el algoritmo simula este comportamiento y escribe SI,y si no alcanza un estado final, el algoritmo escribe NO. En otras palabras, en este casoel algoritmo buscado es el mismo DFA codificado.

    A partir de este resultado podemos dibujar una nueva clasificacin para los lenguajes,segn la siguiente figura:

    30

    Lenguajesfinitos

    Lenguajes recursivos

    Lenguajes recursivamente numerables

    Todos los lenguajes sobre ?

  • Ahora una pregunta: Ser cierta la recproca del ltimo teorema?.Ser todo lenguaje recursivo aceptado por algn DFA?.De ser la respuesta un "Si", habremos encontrado una equivalencia para los DFA en ladefinicin de lenguajes recursivos, y la familia de los DFA quedara caracterizada por laexistencia o no de un algoritmo apropiado.

    Como veremos en un momento, la respuesta a esta pregunta es "No".

    Pumping lemma El lema del bombeo.

    Veremos ahora un resultado por dems importante en toda la teora de autmatas yexpresiones regulares. Este resultado es llamado el "lema del bombeo" que es de enorme

    Lenguajesfinitos

    Lenguajes aceptados por algn DFA

    Lenguajes recursivos

    Todos los lenguajes sobre ?Lenguajes recursivamente numerables

    31

  • utilidad para la comprensin de las limitaciones de los autmatas finitos determintsicosy como herramienta auxiliar en la prueba de muchos teoremas importantes de estateora. Desgraciadamente, no daremos una demostracin formal de este lema, debido aque a mi juicio, se necesitara un poco ms de las nociones matemticas que hasta elmomento se han presupuesto para el lector promedio de estas notas. Sin embargo,daremos argumentos intuitivos que le permitirn al lector convencerse de que el lema escierto. De hecho, el resultado que propone el lema es muy sencillo de entender sin usartodo el formalismo necesario para desarrollar una demostracin completa.

    Lema del bombeo: Sea L un lenguaje aceptado por algn DFA, esto es, M autmatafinito determinstico, tal que L=L(M), entonces siempre es posible encontrar una palabraw suficientemente grande que es aceptada por el autmata M y que provoca un loopen M, es decir, en el anlisis de la palabra w el autmata pasa al menos 2 veces por unmismo estado.

    Interpretacin del lema del bombeo: Este lema debera ser fcil de interpretar deforma intuitiva. Dado un DFA, por definicin el nmero de estados que posee es finito,digamos n ? N. Si comenzamos a bombear smbolos desde el estado inicial (unapalabra suficientemente grande), luego de a lo ms n smbolos bombeados se debe depasar por un estado que ya se visit, pues el DFA tiene exactamente n estados.

    Esto es claro para una palabra cualquiera suficientemente grande, pero el lema va msall, establece que esta palabra que hace un loop puede ser escogida dentro de lasaceptadas por el DFA.

    En (3) el lector podr encontrar una excelente formulacin del lema del bombeo con surespectiva demostracin.

    Ahora, auxiliados por el lema anterior, formularemos un teorema que nos mostrar unade las limitaciones ms importantes de los autmatas finitos:

    Teorema 4.5: No todo lenguaje recursivo es aceptado por un autmata finitodeterminstico.

    Comentario: La demostracin formal del teorema anterior hace uso del lema delbombeo. Debido que solo enunciamos intuitivamente la formulacin de este lema,tambin comentaremos solo de forma intuitiva la demostracin del teorema 4.5.

    Para probar el teorema 4.5 basta mostrar un lenguaje que sea recursivo para el cual seaimposible construir un DFA.

    Definamos a L={ancan / n ? N}. La notacin an significa la aparicin del smbolo atantas veces como lo indica la n. Por ejemplo, si n=3, entonces se tiene queaaacaaa=a3ca3 ? L. El lenguaje L es un lenguaje palindrmico, es decir, sus palabras seleen igual tanto de derecha a izquierda como de izquierda a derecha. (Como la palabraOSO en espaol)

    32

  • El lenguaje L es recursivo. El algoritmo que siempre decide si una palabra est o no enL es conocido desde nuestros cursos de estructura de datos. Es fundamentalmente unprograma que dada una palabra x la lee de izquierda a derecha apilando (push) en unstack (dispositivo de pila LIFO3) cada a detectada. Al encontrar la marca c, comienzael proceso inverso, y por cada a leda se desapila (pop) una a. Si al final el stack estvaco x ? L, en otro caso x ? L. El ejercicio 2 se refiere a la elaboracin de esteprograma.

    Pero L no es aceptado por ningn DFA. Probaremos esto por contradiccin.Suponer que existe M con n estados, autmata finito determinstico que acepta a L.

    Por el lema del bombeo existe una palabra suficientemente grande que es aceptada porel autmata y que hace un loop en l. Sea w=apcap, con p ? N esta palabra.

    Ahora bien , si w hace un loop para aceptar a apcap puedo usar este loop para queacepte a ap+1cap (o bien a apcap+1, dependiendo de donde este el loop). Esto contradiceque M acepta a L, pues M acepta a palabras que no estn en L. Vea la figura 4.1.

    Este teorema tiene consecuencias profundas sobre la capacidad de los autmatas finitosdeterminsticos de aceptar lenguajes, confirmndonos lo que ya habamos previsto alcomparar la cantidad de lenguajes formales con la cantidad de autmatas: es imposibleconstruir un DFA para cada lenguaje formal sobre un alfabeto.La estructura de esta mquina de estados es tal, que solo puede recordar usando elmecanismo de pasar de un estado a otro, y esta mecanismo es limitado y finito.

    3 LIFO= Last input First output. Ultimo en entrar primero en salir.

    ...

    ...

    a

    a

    Fig. 4.1: Si M hace un loop entre qi y qj, podemos usar este looppara desbalancear a la palabra dando tantas vueltas como se quiera yluego continuando hacia el estado de aceptacin.

    qi

    qj

    33

  • Ejercicios

    1. Justificar la afirmacin de que todo algoritmo es procedimiento.

    2. Sea L={ancan / n ? N} un lenguaje sobre el alfabeto {a,c}.Elaborar un programa de computadora en lenguaje C que teniendo como entradauna palabra formada a partir del alfabeto {a,c} indique si la palabra est o no enL.

    3. Demuestre que si existe un lenguaje recursivamente numerable, pero norecursivo, entonces existe un lenguaje que no es recursivamentenumerable.

    4. Sea L={ai bi /i>=0}. Se puede construir un DFA que acepte a L?.Justifique plenamente su respuesta.

    5. Indiquemos que L es recursivo escribiendo Lrec e indiquemos que L esrecursivamente numerable escribiendo Lrec num.

    i) Como es Lrec U Lrec num ? ii) Como es Lrec Lrec num ?

    6. Demostrar que si L es recursivo entonces su complemento tambin.

    7. Una funcin f : N N se dice computable si para todo argumento n ? N def, existe un algoritmo para determinar f(n). (Esto es f(n) se puede"calcular" por algn mtodo). Demostrar que si existe una funcin nocomputable, existen infinitas funciones no computables.

    34

  • Seccin 5

    Autmatas Finitos No Determinsticos

    Reformularemos ahora la definicin de autmata finito determinstico para permitircierto nivel de paralelismo en la manera en la que los autmatas funcionan

    Recordemos antes una definicin bsica de teora de conjuntos: La nocin de conjuntopotencia.

    Definicin: Si A es un conjunto entonces al conjunto de todos los subconjuntos que sepueden formar a partir de A se le llama el conjunto potencia de A, y se simboliza P(A).Ejemplo 1: A={1,2,3}, entonces: P(A)={ {},{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3} }.Ntese que el conjunto vaco y el subconjunto formado por el mismo conjunto originalestn en el conjunto potencia.Tambin recordemos que en teora de conjuntos al conjunto vaco se le simboliza con laletra . Esto es ={}, luego : P(A)={ ,{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3} }.

    Un resultado importante de teora de conjuntos referente a P(A) es que:Si el conjunto A tiene n elementos entonces P(A) tiene 2n elementos.(Ver ejercicio #1 de sta seccin)

    Definicin: Un autmata finito no determinstico (NDFA por sus siglas en ingls) es unquintuplete (Q, ?, ?, q0, F) donde:

    i) Q es un conjunto finito de estadosii) ? es un conjunto finito de smbolos llamado alfabeto de entrada.ii) ? es una funcin: ?:QX? P(Q), llamada funcin de transicin del autmataiv) q0 ? Q es el estado inicial del autmatav) F Q es un conjunto llamado estados finales

    Como se observa, la diferencia entre un DFA y un NDFA se encuentra en la definicinde la funcin de transicin ?. Ahora estando en un estado y leyendo un smbolopodemos pasar a VARIOS estados. El NDFA tiene ms caminos por recorrer paraaceptar una palabra.

    Ntese adems que existe la posibilidad de escribir la siguiente transicin:

    ? (qi,aj)= ,

    es decir, que el NDFA en el estado qi no posee informacin para efectuar una transicinsi lee al smbolo aj.

    Ejemplo 2: Definimos al NDFA M de la siguiente forma:35

  • Q={q0,q1,q2},?={0,1},F={q2}

    y la funcin de transicin de la siguiente manera:

    ?(qo,0)={q0,q1}?(qo,1)= ?(q1,0)={q1}?(q1,1)={qo,q1,q2}?(q2,0)= ?(q2,1)={q2}

    El diagrama de transicin de estados para este NDFA es el siguiente:

    En el estado qo no hay transicin para el smbolo 1 y en q1 si se lee al smbolo 1se pasa simultneamente a 3 estados: qo,q1 y q2. Ambas transiciones son nodeterminsticas.

    De la misma forma que en el DFA, la funcin de transicin del NDFA debe de serextendida para soportar la nocin de leer una palabra completa y luego determinar enque estado queda el autmata.

    Definicin: Dado el NDFA M y su funcin de transicin ?, definimos a ?^, la funcin detransicin extendida de M, as:

    ?^ :Qx?* P(Q) , tal que:

    i) ?^(q, ?) = { q

    }

    ,

    para todo q ? Q

    ii) ?^(qi, aj) = ?(qi, aj) , para todo qi ? Q y para todo aj ? ?

    iii) ?^ (qi, ax) = U?^ (qj, x) , para todo qi ? Q, para todo a ? ? y x ? ?* qj??(qi,a)

    36

    qo q1 q20

    0

    1

    0

    1

    1 1

  • Ejemplo 3: En el NDFA del ejemplo 1, determinar en donde finaliza el autmata luegode leer a la palabra 0010.

    Tenemos que :

    ?^(qo,0010)= ?^(qo,010) U ?^(q1,010).

    Escribimos lo anterior, puesto que primero determinamos a donde pasa el autmataestando en qo y leyendo el primer cero de la palabra. Segn el diagrama de transicin Mpasa a dos estados: {qo,q1} (En realidad se queda en qo y pasa a q1).

    Ahora debemos analizar las transiciones que siguen con el segundo cero de la palabra apartir de esos dos estados en los que se encuentra el autmata. Por eso realizamos launin.

    Ahora:

    ?^(qo,010) = ?^(qo,10) U ?^(q1,10), y?^(q1,010) = ?^(q1,10),

    luego: ?^(qo,010) U?^ (q1,010) = ?^(qo,10) U ?^(q1,10) U ?^(q1,10) =?^(qo,10) U ?^(q1,10).

    Una vez entendida la forma de operar de la funcin ?^ para el NDFA, escribimos eldesarrollo completo, as:

    ?^(qo,0010) = ?^(qo,010) U ?^(q1,010)= ?^(qo,10) U ?^(q1,10) U ?^(q1,10)= ?^(qo,10) U ?^(q1,10)= U ?^(q1,10)= ?^(q1,10)= ?^(q0,0) U ?^(q1,0) U ?^(q2,0)= ?(q0,0) U ?(q1,0) U ?(q2,0)= {q0,q1} U {q1} U = {q0,q1}

    Definicin: Se dice que una palabra x es aceptada por un NDFA M, si qi ? ?^(qo,x) talque qi ? F. Esto es, al leer todos los smbolos de la palabra x, el autmata queda en algnestado final.

    Definicin: El lenguaje aceptado por un NDFA es el conjunto formado por todas laspalabras que el NDFA acepta.

    37

  • Enunciaremos y probaremos ahora dos teoremas que muestran la equivalencia de losDFA y los NDFA.

    Teorema 5.1 : Sea L(M) el lenguaje aceptado por un DFA M, entonces existe un NDFAM que acepta al mismo lenguaje.Demostracin:

    Sea M=(Q, ?, ?, q0, F), entonces definimos al NDFA M: =(Q, ?, ?, q0, F) tal que:

    ?(qi,aj)= {qk} si y solo si ?(qi,aj)=qk con qi,qk ? Q y aj ? ?

    (Q.E.D.)

    La demostracin anterior es realmente trivial. Todo lo que dice es que para construir apartir de un DFA un NDFA equivalente (en el sentido de que acepta el mismo lenguaje),basta cambiar la especificacin formal del DFA para que la funcin de transicin tengacomo rango un conjunto de estados formado en cada transicin por el conjunto unitario{qk}.

    Teorema 5.2 : Sea L(M) el lenguaje aceptado por un NDFA M, entonces existe un DFAM que acepta al mismo lenguaje.Demostracin:

    Sea M=(Q, ?, ?, q0, F) un NDFA que acepta a L(M). Definimos a partir de M al DFAM=(Q, ?, ?, q0, F), tal que:

    i) Q esta formado por todos los subconjuntos de Q, esto es: Q=P(Q). Luego el nmerode elementos en Q es 2|Q|. Denotaremos a un elemento de Q como [q1,q2,...,qn], dondeq1,q2,...,qn ? Q.

    ii) F es el conjunto de todos los estados en Q que contienen al menos un estado final de M.

    iii) q0=[qo]

    iv) Definimos :

    ?([q1,q2,...,qi],a)=[ p1,p2,...,pn] , si y solamente si:

    ? (q1,a)U?(q2,a)U...U? (qi,a)={p1,p2,...,pn }, esto es:

    38

  • ? se calcula aplicando la funcin ? sobre cada estado q1,q2,...,qi y luego tomando launin resultante. Esta unin sirve para definir un estado en M que es a dondetransiciona el autmata finito determinstico al ver el smbolo a.

    Se puede probar (ver ejercicio #2) por induccin sobre la longitud de x ? ?* que :?(qo,x)= [q1,q2,...,qi] si y solo si ?(qo,x)= {q1,q2,...,qi}.

    Si x ? ?* es aceptada por M entonces {q1,q2,...,qi} contiene a algn estado final de M, ypor el resultado anterior esta misma palabra llegar al estado [q1,q2,...,qi] en M, que pordefinicin, es un estado final de M. Luego x tambin es aceptada por M.

    (Q.E.D.)

    Ejemplo 4: Encontrar un DFA equivalente al NDFA definido en el ejemplo 2.Ya indicamos que equivalente quiere decir que acepta al mismo lenguaje.La demostracin anterior nos indica el mtodo constructivo para obtener un DFAequivalente a un NDFA dado.

    Tomamos los estados del NDFA del ejemplo 2 y establecemos el dominio del DFAequivalente:

    Q={ [], [qo],[q1],[q2],[qo,q1],[q0,q2],[q1,q2],[q0,q1,q2] }

    Ahora establecemos la funcin de transicin del DFA simulando al NDFA, as:

    ?([],0) = ?([],1)= [] ?([qo,q1],0) =[qo,q1]?([qo,q1],1) =[q0,q1,q2]

    ?([qo],0) =[qo,q1] ?([qo,q2],0) =[qo,q1]?([qo],1) = [] ?([qo,q2],1) =[q2]

    ?([q1],0) =[q1] ?([q1,q2],0) =[q1]?([q1],1) =[q0,q1,q2] ?([q1,q2],1) =[q0,q1,q2]

    ?([q2],0) = [] ?([q0,q1,q2],0) =[qo,q1]?([q2],1) =[q2] ?([q0,q1,q2],1) =[q0,q1,q2]

    Por definicin F={[q2], [qo,q2], [q1,q2], [q0,q1,q2]}.

    Las transiciones han sido construidas de forma que contienen en un estado del DFA,toda la informacin de las transiciones del NDFA, por ejemplo: Hemos escrito ?([qo],0) =[qo,q1], puesto que en el NDFA estando en el estado qo yviendo al smbolo 0, el autmata transiciona a los estados q0 y q1.

    Dibujamos ahora un diagrama de transicin:

    39

  • Si se observa detenidamente este diagrama, se observar que los estados [q2], [q1], [qo,q2]y [q1,q2] no son alcanzables desde el estado inicial [qo]. Luego el DFA puede sersimplificado para funcionar con menos estados. El siguiente diagrama muestra estasimplificacin junto con los estados renombrados de manera ms familiar:

    De los dos teoremas anteriores podemos concluir que los lenguajes aceptados por losDFA son los mismos que aceptan los NDFA y viceversa. Ningn autmata es mspoderoso que el otro.

    40

    [qo]

    [qo,q1,q2]

    []1

    [qo,q1]

    0

    0,1

    0

    1

    0

    1

    [q2]0

    [q1]

    1

    [qo,q2]1

    0

    [q1,q2]0

    1

    0

    1

    qo

    q3

    q2

    q1

    0

    0,1

    0

    1

    1

    0

    1

  • Definiremos ahora a un nuevo tipo de autmata que presenta la sensacin de moversesolo, es decir, que efecta transiciones de un estado a otro sin necesidad de versmbolos.

    Definicin: Un autmata finito no determinstico con transiciones vacas ( abreviadoNDFA?) es un quintuplete (Q, ?, ?, q0, F) donde:

    i) Q es un conjunto finito de estadosii) ? es el alfabeto de entrada.iii) ? es una funcin: ?:QX(?U{?}) P(Q)iv) q0 ? Q es el estado inicial del autmatav) F Q es un conjunto llamado estados finales

    Ejemplo 5: Considerar al NDFA? siguiente:

    Se tiene que :

    Q={qo,q1,q2}, ?={0,1}, F={q1} y :

    ? (qo,0) ={q1}? (qo,1) = ? (qo, ?) ={q2}

    ? (q1,0) ={q1,q2}? (q1,1) ={q2}? (q1, ?) =

    ? (q2,0) ={q0}? (q2,1) ={q1}? (q2, ?) ={q1}

    En este caso se incluyen cambios de estado sin necesidad de ver un smbolo. Por ejemplo: la palabra 10 comenzando en q0 alcanza al estado final q1, puesto quedesde qo se llega a q2 sin necesidad de ver ningn smbolo (la transicin se hace por elcamino etiquetado ?), de all se pasa a q1 con el smbolo 1 de la palabra y luego viendo aun 0 se queda en q1 y pasa q2 (finaliza en ambos estados).

    qo

    q2

    q1

    0

    00

    0,1

    1

    ?

    ?

    41

  • Las nociones de palabra aceptada y lenguaje aceptado por un NDFA? son anlogas alas de un DFA y NDFA desde el punto de vista intuitivo, aunque su definicinoperacional es relativamente ms compleja.

    Teorema 5.3: Si M es un NDFA que acepta al lenguaje L(M) entonces existe unNDFA? que acepta al mismo lenguaje.

    En el ejercicio #5 se invita al lector a formular una demostracin de este ltimo teorema.El siguiente teorema, que se da sin demostracin, completa la equivalencia entre losNDFAs y los NDFA? :

    Teorema 5.4: Si M es un NDFA? que acepta al lenguaje L(M) entonces existe unNDFA (sin movimientos vacos) que acepta al mismo lenguaje.Los teoremas 5.3 y 5.4 cierran el ciclo de autmatas finitos, estableciendo laequivalencia entre los 3 modelos matemticos presentados aqu.

    El dibujo que sigue muestra grficamente estas equivalencias:

    No exploraremos ms aqu sobre los NDFA? y se remite al lector interesado a (3).Cerraremos esta seccin con un ejemplo muy ilustrativo del uso de los NDFA?.Ejemplo 6: Construir un autmata finito que acepte a las palabras binarias divisiblesentre 2 o 3.

    Si el planteamiento del problema fuese construir un autmata finito determinstico queacepte a las palabras binarias divisibles entre 2 o 3, posiblemente no fuese tan sencilloencontrar el DFA solicitado. (De hecho, probablemente sea un problema muycomplicado).

    Con el auxilio de los NDFA?, este problema se resuelve rpidamente y con muchaelegancia. Basta recordar que en la seccin 3 se present al DFA que acepta a losbinarios pares y en la misma seccin se dej como ejercicio elaborar el DFA que aceptaa los binarios divisibles entre 3. Usando como base ambos DFAs podemos construir alautmata solicitado:

    42

    DFA NDFA NDFA?

    1 0 0 M1

  • El truco se encuentra en que en este NDFA?, de entrada viendo a la palabra vaca setransita a ambos autmatas determinsticos M1 y M2 , esto es, el NDFA? siempre seencuentra en dos estados a la vez.

    Finalmente debemos de decir que la demostracin del teorema 5.4 es constructiva y porlo tanto, es posible seguir ciertos pasos para construir a partir del NDFA? anterior unNDFA y luego usar el teorema 5.2 para obtener un DFA.

    q1 1 q2

    q3 q4

    q5 q6

    0

    1

    0

    11

    0

    0

    1q0

    ?

    ? M2

    43

  • Ejercicios

    1. Si A es un conjunto con n elementos, probar que P(A) tiene 2nelementos.

    2. Probar la siguiente afirmacin del teorema 5.2 :

    ?(qo,x)= [q1,q2,...,qi] si y solo si ?(qo,x)= {q1,q2,...,qi}.

    3. Dado el siguiente NDFA encontrar el DFA equivalente:

    4. Determine si es posible construir un DFA M tal que L(M)={1,4,1,6...}, donde elconjunto {1,4,1,6...} contiene los dgitos en la expansin decimal del nmeroirracional PI.

    5. Probar el teorema 5.3

    44

    qo q1

    q2 q3

    0,1

    0

    0

    10,1

    0

    00

    1 1

  • Seccin 6

    Expresiones Regulares

    En las secciones anteriores estudiamos a los autmatas finitos y describimos a L(M)como el lenguaje aceptado por un autmata M. Adems sabemos que no todos loslenguajes son aceptados por un autmata finito.Reflexionemos un momento frente a las siguientes preguntas:Cmo son en general los lenguajes aceptados por los autmatas finitos?, Cules sonestos lenguajes?, Podemos describir de forma general a la clase de lenguajes aceptadospor los autmatas finitos?.

    Los lenguajes aceptados por los autmatas finitos son descritos por expresiones simplesllamadas expresiones regulares. Las expresiones regulares son un metalenguaje, esto es,son un lenguaje que describe a otro lenguaje.

    Definicin: Sea L un lenguaje formado sobre algn alfabeto, entonces definimos a lacerradura de Kleene de L, simbolizada L*, como la unin:

    L 0 U L 1 U L 2 U L 3...

    donde L i designa a la concatenacin de L consigo mismo tantas veces como lo indique i.Por definicin L 0={ ?}.

    ?Luego : L*=ULi

    i=0

    Definimos tambin a L+, la cerradura positiva de L, como: ?

    L+=L*{ ? }=ULi i=1

    Ejemplo 1: Si L={0}, es decir, L es el lenguaje formado por la nica palabra 0,entonces: L*={ ?, 0,00,000,0000,...}. En L* se encuentran todas las palabras que sepueden formar con el smbolo 0, incluyendo a la palabra vaca.Tenemos que L+={ 0,00,000,0000,...}.

    Definicin: Sea ? un alfabeto. Las expresiones regulares sobre ? y los conjuntos queestas denotan se definen as:

    1) El smbolo es una expresin regular y denota al lenguaje ={}2) ? es una expresin regular que denota al lenguaje { ? }3) El smbolo ai ? ? es una expresin regular y denota al lenguaje { ai }

    para todo ai ? ?

    45

  • 4) Si V y S son expresiones regulares que denotan a los lenguajes V y Srespectivamente, entonces:

    i) V+S es una expresin regular que denota al conjunto formado por VUSii) VS es una expresin regular que denota al conjunto formado por VS: la

    concatenacin de V con S.iii) V* es una expresin regular que denota al conjunto formado por la

    cerradura de Kleene de V.

    Ejemplo 2: Sea ?={A,B,/,x}, entonces : es expresin regular sobre ? y representa al lenguaje {}? es expresin regular sobre ? y representa al lenguaje { ? }A es expresin regular sobre ? y representa al lenguaje { A }B es expresin regular sobre ? y representa al lenguaje { B }/ es expresin regular sobre ? y representa al lenguaje { / }x es expresin regular sobre ? y representa al lenguaje { x }

    Esta notacin es muy sencilla, lo cul es valioso en matemticas, pero ciertamentepodran presentarse confusiones. Por ejemplo, al escribir A, puede referirse al smbolo Adel alfabeto ? o a la expresin regular que denota al lenguaje{A}.A medida que profundicemos en esta seccin, ser claro para el lector a que nosreferimos en cada caso puesto que se deducir del contexto, o bien, escribiremosexplcitamente:"la expresin regular A".

    Continuando con el ejemplo:A+ ? es la expresin regular que denota a {A}U{ ? }= { ?, A }.

    De la misma forma:

    A+A+B+ ?={A,B, ? }A?={A}AB={A,B}A*={ ?,A,AA,AAA...}(A+B)*={?,A,B,AA,AB,BA,BB,...}

    Obsrvese que en (A+B)* se encuentran todas las palabras que se pueden formar con Ay B. Esta claro adems que se pueden formar expresiones regulares que denotan alenguajes complicados: ( (A*+B)(/+B*+AB)*AA(X+/) )*.Ejemplo 3: Describir al lenguaje de los nmeros binarios pares usando una expresinregular. Solucin: (0+1)*0

    Ejemplo 4: Describir al lenguaje de los nmeros binarios pares sin repeticin usandouna expresin regular. Solucin: 1(0+1)*0Ejemplo 5: Indicar que lenguaje describe la siguiente expresin regular:

    46

  • (0+1)*1(00+01+10+11)Solucin: Observamos que el lenguaje puede iniciar con cualquier combinacin de

    ceros y unos, incluyendo ningn 0 y ningn 1, pero definitivamente, debido aque a continuacin se encuentra la expresin 1(00+01+10+11), debe detener un 1 como tercer smbolo de derecha a izquierda.La expresin regular (0+1)*1(00+01+10+11) denota al lenguaje de losbinarios con un 1 como tercer smbolo de derecha a izquierda.

    Ejemplo 6: En este ejemplo encontraremos una aplicacin de mucho inters de lasexpresiones regulares a la computacin.En los lenguajes de programacin es usual que los identificadores seconstruyan comenzando con una letra del alfabeto y a continuacin,combinando cualquier cantidad de letras y dgitos. Describir a los identificadores usando una expresin regular.

    Definimos a :

    letra={a,b,..,z,A,B,...,Z}digito={0,1,2,...,9}

    Luego, la expresin regular buscada es:

    letra(letra+digito)*

    Ahora centraremos nuestra atencin en corroborar que el siguiente diagrama se cumple:

    Los teoremas 5.1, 5.2, 5.3 y 5.4 se discutieron en la seccin 5 y muestran laequivalencia entre los autmatas finitos determinsticos, los no determinsticos sinmovimientos vacos y los autmatas no determinsticos con movimientos vacos.

    Los teoremas 6.1 y 6.2 nos mostrarn la equivalencia entre las expresiones regulares ylos autmatas finitos. Con esto cerraremos el crculo y estaremos en posibilidad de

    DFA

    Expresionesregulares

    NDFA?

    NDFA

    Teorema 6.2Teorema 6.1

    Teoremas 5.1 y 5.2 Teoremas 5.3 y 5.4

    47

  • declarar que las expresiones regulares describen a la clase de lenguajes aceptados porlos autmatas finitos.

    Teorema 6.1: Sea ? una expresin regular que denota a un lenguaje sobre ?, entoncesexiste un NDFA? con un solo estado final y sin transiciones en ese estado que acepta almismo lenguaje.Demostracin:

    Definiremos a las expresiones regulares bsicas como: , ? y ai??. Es decir, lasexpresiones regulares bsicas sern aquellas sin operadores, en otro caso se denominarncompuestas.La demostracin de este teorema es por induccin completa sobre el nmero deoperadores de ?.

    i) Si ? tiene 0 operadores, entonces es una expresin regular bsica y se tieneque:

    a) Si ? = , el NDFA? con un solo estado final y sin transiciones en eseestado que acepta a este lenguaje es:

    b) Si ? = ?, el NDFA? con un solo estado final y sin transiciones en eseestado que acepta a este lenguaje es:

    c) Si ? = ai, el NDFA? con un solo estado final y sin transiciones en eseestado que acepta a este lenguaje es:

    ii) Si ? tiene n+1 operadores, n ? N, entonces por definicin de expresinregular, ? es necesariamente de la forma:

    a) r+s, donde r o s contienen a lo ms n operadoresb) rs, donde r o s contienen a lo ms n operadoresc) r* donde r contiene a lo ms n operadores

    Analizaremos cada caso por separado:

    48

    qo qf

    q0

    qo qf

    ai

  • a) r+s. Por hiptesis de induccin completa, existenM1=(Q1, ?1, ?1, q1, {f1) } y M2=(Q2, ?2, ?2, q2, {f2}), ambos NDFA? conun solo estado final y sin transiciones en ese estado, tal que: L(M1)=r yL(M2)=s.

    Dado que podemos renombrar los estados en Q1 y Q2, podemos asumirsin prdida de generalidad que Q1 Q2= .Sea q0 un nuevo estado inicial y f0 un nuevo estado final, definimos:

    M=(Q1UQ2U{q0,f0}, ?1U?2, ?, q0, {f0}), tal que:

    i) ?(qo, ?)={q1,q2}ii) ?(q, a)= ?1(q, a) q ? Q1{f1} y a ? ?1U{ ? }iii) ?(q, a)= ?2(q, a) q ? Q2{f2} y a ? ?2U{ ? }iv) ?(f1, ?)=?(f2, ?)={f0}

    M grficamente es as:

    Deber ahora estar claro que M es un NDFA? con un solo estado final ysin transiciones en ese estado construido de manera que acepta a r+s.

    b) rs. De manera anloga, en este caso definimos aM=(Q1UQ2, ?1U?2, ?, q1, {f2}), tal que:

    i) ?(q, a)= ?1(q, a) q ? Q1{f1} y a ? ?1U{ ? }ii) ?(f1, ?)= {q2}iii) ?(q, a)= ?2(q, a) q ? Q2 y a ? ?2U{ ? }

    M grficamente es as:

    M es un NDFA? con un solo estado final y sin transiciones en ese estadoconstruido de manera que acepta a rs.

    ...

    ...

    M1

    M2

    q1 f1

    q2 f2

    f0

    q0? ?

    ? ?

    ...M2

    q1 f1 q2 f2

    M1 ?...

    49

  • c) r*. Por hiptesis de induccin completa, existe M1=(Q1, ?1, ?1, q1, {f1) }NDFA? con un solo estado final y sin transiciones en ese estado, tal que:L(M1)=r.

    Sea q0 un nuevo estado inicial y f0 un nuevo estado final, definimos:

    M=(Q1U{q0,f0}, ?1, ?, q0, {f0}), tal que:

    i) ?(qo, ?)= ?(f1, ?)={q1,f0} ii) ?(q, a) = ?1(q, a) q ? Q1{f1} y a ? ?1U{ ? }

    M grficamente es as:

    Afirmamos que M es un NDFA? con un solo estado final y sintransiciones en ese estado construido de manera que acepta a r*.Invitamos al lector para encontrar los argumentos que permitan justificaresta ltima afirmacin.

    (Q.E.D.)

    La demostracin anterior es otra de estas valiossimas demostraciones constructivas, estoes, adems de demostrar el teorema, los argumentos de la demostracin producen unalgoritmo de construccin.

    Ejemplo 7: Sea ?={0,1}. Encontrar un autmata finito que acepte al lenguaje descritopor la expresin regular 1(0+1)*0.

    Solucin: Esta claro cul es el autmata finito que acepta a 1(0+1)*0, pues staexpresin caracteriza a los binarios pares sin repeticin. Solo deseamos aqu encontrareste autmata por un camino distinto al de la intuicin o la heurstica. Lo construiremosusando el algoritmo del teorema 6.1.

    Sea r=0 y s=1, entonces construimos los siguientes autmatas:

    50

    ...

    f1

    M1

    q1 f0q0

    ?

    ?

    ??

    qo q10

    q2 q3

    1

  • El primero acepta a r y el segundo a s.

    Ahora construimos un autmata que acepte a (0+1) a partir de los 2 anteriores:

    Continuamos con la construccin del autmata que acepta a (0+1)*:

    y finalmente, terminamos con el autmata para 1(0+1)*0:

    En el NDFA? anterior los estados pueden ser renumerados y se pueden simplificarestados redundantes, de forma que el autmata resultante sea ms sencillo.Parece que la intuicin o la heurstica funcionan mejor en ciertos casos, y as es. El teorema 6.1 resulta til cuando la expresin regular es medianamente complicada.Incluso, un programa de computadora puede ser escrito para tener como entrada unaexpresin regular y usando el algoritmo anterior producir cmo salida un FA que acepte

    qo q10

    q2 q31

    q4 q5?

    ??

    ?

    qo q10

    q2 q31

    q4 q5

    ?

    ??

    ?

    q6 q7

    ?

    ? ?

    ?

    qo q10

    q2 q31

    q4 q5

    ?

    ??

    ?

    q6 q7? ?

    ?

    q8q9

    1q11q10

    ?? 0

    51

  • al lenguaje descrito por aquella. (Ver ejercicio #10). Sin embargo, en otrascircunstancias ser preferible construir el autmata sin usar el algoritmo.

    El siguiente teorema se da sin demostracin. Revise (3) si desea obtener unademostracin completa del teorema.

    Teorema 6.2: Si M es un DFA que reconoce al lenguaje L(M), entonces existe unaexpresin regular ? que denota al mismo lenguaje.Esto cierra el ciclo propuesto, y por tanto podemos afirmar:

    Teorema 6.3: Las expresiones regulares son cerradas respecto al complemento y lainterseccin.

    Demostracin: Ya que conocemos la equivalencia entre expresiones regulares yautmatas, podemos ahora usar esta equivalencia para nuestras demostraciones.

    i) Si L es expresin regular, entonces existe un DFA M que acepta al lenguajedescrito por L. Redefinamos a M de manera que todos los estados finalessean no finales, y que todos los estados no finales sean ahora finales. (Podradecirse que "complementamos" al autmata). Llamemos al DFA resultante M. Si el conjunto de estados finales de M es Q,entonces el conjunto de estados finales de M es Q (El complemento de Q).No es muy difcil ver que M acepta a L (El complemento de L) y de aquque existe una expresin regular para L.

    ii) Si L1 y L2 son expresiones regulares entonces L1?L2 es expresin regular, puesaplicando la 2 ley de DMorgan y conviniendo que el smbolo " " significa complemento de conjuntos tenemos que :

    L1?L2 = (L1UL2) .(Q.E.D.)

    Como puede observarse, los conceptos pueden ser extendidos de forma inmediata paraprobar muchas propiedades interesantes sobre las expresiones regulares, conformando loque se conoce como "lgebra regular".

    Ejercicios

    1. Encuentre un autmata finito para cada una de las siguientes expresionesregulares:

    a) 10+(0+11)0*1b) 01(((10)*+111)*+0)*1

    52

    La clase de lenguajes aceptados por los autmatas finitos esprecisamente la clase de lenguajes descrita por las expresionesregulares.

  • 2. Encuentre autmatas finitos que acepten a los lenguajes binariossiguientes:

    a) Todas las palabras que terminan en 00b) Todas las palabras con 3 ceros consecutivosc) Todas las palabras cuyo sexto smbolo de derecha a

    izquierda es 1

    3. Construir un autmata finito que acepte al lenguaje de las palabrasbinarias que no contienen a la subpalabra 101 ni a la subpalabra 010.

    4. Encontrar una expresin regular que describa al lenguaje todas laspalabras binarias que en las cuales los 2 ltimos smbolos son iguales.Construir un autmata que acepte a este lenguaje.

    5. Sea ?={0,1,2}. Definimos L1={01x22 / x ? ?*} y L2={x012y / x,y ??*}.

    Encontrar autmatas finitos que acepten a L1UL2 y a L1L2.

    6. Sean L1 y L2 lenguajes denotados por expresiones regulares.Demostrar que:

    (L1?L2)U(L1?L2)= si y solo si L1=L2.

    7. Considerar los siguientes autmatas:

    Encontrar M3 tal que: L(M3)=L(M1) ?L(M2).

    8. Demostrar que todo lenguaje que puede ser expresado por medio deuna expresin regular es recursivo.

    9. Sea L un lenguaje. Lr se define como :Lr={x / (x al revs) ? L }

    qo q2

    q1

    A

    C B

    01

    1

    01

    0

    qo0

    0

    0

    1

    1

    1

    1

    M1

    53

  • Probar que si existe una expresin regular para describir a L entonces tambinexiste una expresin regular para describir a Lr.

    10. Escribir un programa de computadora en lenguaje C, de forma que la entrada delprograma sea una expresin regular sobre el alfabeto {0,1} y el programaproduzca como salida la especificacin del autmata finito que acepta al lenguajedescrito por la expresin regular.

    54

  • Seccin 7

    Gramtica Formal

    En la seccin 1 comentbamos sobre la posibilidad de escribir un compilador. Decamos que un compilador tiene como objetivo leer un programa fuente escrito enalgn lenguaje de alto nivel y traducirlo a cdigo objeto de una computadora.El primer paso antes de intentar escribir un compilador es tener clara la especificacindel lenguaje a compilar. Con esto queremos decir que las reglas del lenguaje deben deestar especificadas por escrito de alguna forma precisa y sin ambigedad, pues elcompilador deber (como todo algoritmo) revisar de forma mecnica un programaescrito en este lenguaje y decidir en un tiempo finito si est bien escrito o no, cotejandoen cada momento si no se han cometido violaciones a las reglas.Por otro lado, las reglas que se definan para el lenguaje deben de ser amplias yadecuadas como para generar programas suficientemente expresivos, de alto nivel y queayuden a los usuarios a resolver problemas complejos usando todo el poder de lacomputadora.

    Son las expresiones regulares adecuadas para definir con ellas a un lenguaje deprogramacin?. Desgraciadamente la respuesta es NO.

    Las expresiones regulares no son suficientes para especificar completamente a unlenguaje de programacin de alto nivel. La razn de esto radica bsicamente en larelativa sencillez de los lenguajes que describen, no obstante las expresiones regularesjuegan un papel importante en un compilador, permitiendo definir las componenteslexicogrficas del lenguaje.Fue Noam Chomsky, del Instituto Tecnolgico de Massachussets, quin por primera vezpropuso la formalizacin del concepto de gramtica, es decir, la matematizacin delconcepto a fin de poder definir y estudiar rigurosamente sus propiedades.Estas herramientas permitieron la definicin de lenguajes de programacin expresivos yla construccin de compiladores para estos lenguajes.En esta ltima seccin estudiaremos brevemente algunos conceptos bsicos de gramticaformal.

    Definicin: Sea V un alfabeto. Una gramtica sin restricciones o del tipo 0, tambinllamada natural, es un cuadruplete (Vn,Vt,P,S), donde:

    a) Vn V. (Vn se llama conjunto de smbolos no terminales)b) Vt V. (Vt se llama conjunto de smbolos terminales),

    Se tiene que : VnUVt=V y Vn?Vt= .

    c) P es un conjunto de proposiciones de la forma ?>?, donde:

    55

  • ? ? V+ y ? ? V*. El smbolo ">" se lee "produce a".

    d) S ?Vn se llama smbolo inicial o distinguido de la gramtica.

    Ejemplo 1: Sea G=(Vn,Vt,P,S) tal que:Vn={S}, Vt={0,1} y P={S>0S1, S>01}.

    Si partimos siempre del smbolo inicial y usamos las reglas de forma consecutiva ysistemtica, podemos obtener algunas palabras a partir de G:

    i) S>0S1>0011ii) S>0S1>00S11>000S111>0000S1111

    Las palabras 0011 y 0000S1111 son producidas por la gramtica G. La primera constade solo smbolos terminales y la segunda combina terminales y un no terminal.

    Como se muestra, la idea es producir palabras o frases por el mecanismo de sustituirsmbolos usando reglas preestablecidas.

    Al principio, la idea de definir una gramtica de esta forma puede no parecer muynatural. Esto es comprensible debido al hecho de que nuestra gramtica ms familiar, ladel idioma espaol, no nos fue enseada con semejante formalismo. Sin embargo elsiguiente ejemplo podra contribuir a aclarar algunas ideas.Ejemplo 2: Definimos:

    Vn={,,),Vt={Pedro, Mara, Duerme, Come}

    En este ejemplo usamos a una palabra completa como un smbolo, para el caso, lapalabra "Sujeto" o la palabra "Duerme" debern de ser consideradas como un todo ycomo un solo smbolo. Encerraremos entre < > a los smbolos no terminales a fin depoder distinguirlos.

    S=, y adems:

    P={ > , > Pedro,

    > Juan, > Duerme > Come}

    Con esta gramtica ms familiar se pueden obtener frases como: Pedro Come, as:

    > > Pedro > Pedro Come.o bien, Mara Duerme, as:

    56

  • >> Mara> Mara Duerme.Obsrvese que a partir de esta gramtica es posible generar algunas frases que formanun pequeo lenguaje: {PedroCome, PedroDuerme, MaraCome, MaraDuerme}.Regresemos ahora al ejemplo 1. Cul es el conjunto de palabras formadas solamentepor smbolos terminales producidas por G?.

    No es difcil ver que es el lenguaje descrito por 0n1n, donde por definicin : Si a es unsmbolo, an es la palabra : aaaa...aaaa ("a" repetida n veces). Por supuesto n ? N.

    Definicin: Se dice que la palabra ??? deriva directamente a la palabra ??? en lagramtica G, y se escribe:

    ???==> ???, G

    si existe una produccin en G de la forma ?>?.

    Ejemplo 3: Sea G=({S},{0,1},{S>01, S>0S1},S)En esta gramtica 00S11 deriva directamente a la palabra 000S111. Basta conidentificar: ?=00, ?=S, ?=11 y ?=0S1.

    Definicin: Se dice que la palabra w1 deriva a la palabra wn en la gramtica G, y seescribe: *

    w1==> wn, G

    si existe una sucesin w1,w2,...,wn de palabras, tal que:

    w1==>w2==>...==>wn G G G

    Ejemplo 4: Usando la misma gramtica del ejemplo anterior se tiene que: *

    00S11==>0000011111 G

    Puesto que: 00S11==>000S111==>0000S1111==>0000011111 G G G Definicin: El lenguaje generado por una gramtica G es el conjunto de todas laspalabras en Vt* que se derivan a partir de S utilizando las producciones de G.Matemticamente:

    n

    57

  • *

    L(G)={x / S==>x y x ? Vt*} G

    El lenguaje generado por una gramtica G es el conjunto de todas las palabras formadassolo por smbolos terminales que pueden derivarse a partir de S en G.

    Ejemplo 5: Consideremos a la gramtica G1=(Vn,Vt,P1,S):Vn={S,A,B}, Vt={0,1} yP1={S>AB, B>0,A>A0,A>A1, A>0,A>1,A> ? }.

    Podemos abreviar la escritura de las producciones P1 usando el smbolo "|" para indicaralternativa. Para el caso, P1 puede rescribirse:

    P1={S>AB, B>0, A>A0|A1|0|1| ? }.La produccin A> ? significa que el smbolo A puede ser sustituido por lapalabra vaca, es decir, que a partir de A se genera a la palabra vaca. Esto no contradicela definicin de gramtica, puesto que la especificacin de que en toda produccin?>?, ? ? V+, impide que la palabra vaca este a la izquierda de la produccin, pero no a suderecha.

    Un examen del comportamiento de las producciones en G1 muestra que:

    L(G1)=(0+1)*0

    Si consideramos ahora a G2=(Vn,Vt,P2,S), con:

    P2={S>A0, A>A0|A1|? }, Notamos que tambin L(G2)=(0+1)*0, de lo cual se concluye que 2 gramticas distintaspueden generar el mismo lenguaje. Como sucede con los lenguajes aceptados por los autmatas finitos, en general nosiempre ser posible encontrar de un vistazo el lenguaje generado por una gramtica, enespecial cuando sta tiene muchas producciones complejas.

    Definicin: Una gramtica sensible de contexto (CSG=Context Sensitive Grammar) odel tipo 1, es una gramtica de tipo 0 con la restriccin de que todas las producciones?>? cumplen con la condicin: | ? |?| ? |. (Recuerde que el operador | . | es la"longitud de una palabra").Definicin: Una gramtica libre de contexto (CFG=Context Free Grammar) o del tipo 2,es una gramtica de tipo 1 con la restriccin de que todas las producciones?>? cumplen con la condicin: | ? |=1.

    58

  • Ejemplo 6: Sea G=(Vn,Vt,P,S), donde:Vn={S,A,B,C,D,E}, Vt={a,b}

    y P={S>AcaB,Ca>aaCCB>DB | Aba,aD>Da, AD>AC,aE>Ea,AE>ab, AaE>AbE}

    Todas las producciones de G cumplen la condicin: | ? |?| ? |, y por tanto G es CSG.El termino de "sensitivas del contexto" es importante en este tipo de gramticas.Significa precisamente que la sustitucin de smbolos en las derivaciones en G dependedel contexto en el que se encuentren los smbolos. En las gramticas CSG si se tieneproducciones de la forma ?1A?2> ?1B?2 , ?1,?2 en V*, significa que el smbolo A solopuede ser reemplazado por el smbolo B en el contexto ?1?2.

    Por ejemplo en la gramtica del ejemplo anterior se tiene la produccin AaE>AbE.Esta produccin nos permite reemplazar al smbolo "a" por el smbolo "b" solo cuando"a" se encuentre en el contexto AE.

    Ejemplo 7: Sea Vn={S,A,B,C} y Vt={0,1}y P={S>ABC,A>1,B>BB|0|1}

    En esta gramtica todas las producciones ?>? cumplen con la condicin: | ? |=1, portanto G es CFG.

    Las gramticas de este tipo se denominan "libres de contexto" debido a que en ellas lasustitucin de smbolos se puede hacer sin reparar en el contexto en el que se encuentradicho smbolo. Por ejemplo en la gramtica anterior, si nos encontramos derivando unapalabra, el smbolo "A" puede ser reemplazado en donde se encuentre por el smbolo"1".

    Usted puede fcilmente encontrar un ejemplo para convencerse de que existengramticas que no son del tipo 1 ni del tipo 2.

    Definicin: Una gramtica regular (RG=Regular Grammar) o del tipo 3 es unagramtica de tipo 2 en donde todas las producciones cumplen con ser de una de dosformas: A>a o A>aB, con A,B ? Vn y a ?Vt.

    Ejemplo 8: Definamos G=({A,S},{0,1},P,S}, donde : P={S>1A, A>0|0A|1A}.

    59

  • G es evidentemente regular.

    Si se examina con detenimiento a G se puede ver que L(G)=1(0+1)*0, el lenguaje de losbinarios pares sin repeticin.

    Para el caso de las gramticas regulares, la definicin nos dice que una de las formas delas producciones es A>aB, denominndose entonces regular por la derecha.Se puede dar la posibilidad de que la produccin sea de la forma A>Ba, lo culproduce una gramtica denominada regular por la izquierda.

    Los nombres de los lenguajes generados por las gramticas se denominan de acuerdo ala gramtica que las genera, para el caso:

    Si G0 es natural. entonces L(G0) es naturalSi G1 es sensitiva del contexto, L(G1) es sensitivo del contextoSi G2 es libre de contexto, L(G2) es libre de contextoSi G3 es regular, L(G3) es regular.

    Esto produce una nueva clasificacin de los lenguajes de acuerdo a la gramtica que losproduce, segn el siguiente diagrama:

    Desde luego esto nos dice que todo lenguaje regular es libre de contexto, que todolenguaje libre de contexto es sensitivo de contexto y que todo lenguaje sensitivo decontexto es natural.

    El lector inquisitivo habr notado una cierta ligereza en la denominacin de lenguajeregular para los lenguajes generados por una gramtica regular, puesto que porcongruencia, los nicos lenguajes que pueden denominarse con propiedad "regulares",son aquellos que pueden ser descritos por alguna expresin regular.

    El siguiente teorema legitima el uso de la expresin "regular" para estos lenguajes:

    Teorema 7.1: Sea G gramtica regular, entonces L(G) es aceptado por un autmatafinito.

    60

    L(G3)

    L(G2)L(G1)L(G0)

  • Comentario: Si L(G) es aceptado por una autmata finito, entonces existe una expresinregular que describe a L(G).

    Demostracin: Indicaremos de forma constructiva el autmata requerido y dejamos allector los detalles para convencerse de que dicho autmata acepta exactamente a L(G).

    Como G es regular, todas las producciones son de la forma A>a o A>aB, con A,B ? Vn y a ? Vt. Creamos el conjunto denominado [Vn], formado por los nuevossmbolos [A] y [B].

    Construimos ahora al autmata finito M, equivalente a G as:

    M={[Vn]U[qf],Vt, ?, [A],{[qf]}},

    (Obsrvese que a cada smbolo no terminal le asociamos un estado)

    y definimos a ? de la siguiente manera:

    i) Si A>a entonces ?([A],a)=[qf] ii) Si A>aB entonces ?([A],a)=[B]

    Note que las transiciones del autmata simulan de forma precisa a las reglas dellenguaje:

    A>a se simula con la transicin:

    A>aB se simula con la transicin:

    M acepta a L(G).

    (Q.E.D.)

    Ejemplo 9: Sea Vn={S,A} y Vt={0,1}.P={S>0A|1A|0|0S|1S, A>0}

    Esta gramtica es regular.