Está en la página 1de 144

Teor de Autmatas y Lenguajes Formales a o

Leopoldo Altamirano, Miguel Arias, Jess Gonzlez, Eduardo Morales, u a Gustavo Rodr guez

Objetivo General
Proporcionar al estudiante los fundamentos de la teor de autmatas as a o como los de lenguajes formales. Tambin se incluye una introduccin a las e o mquinas de Turing. a Temario 1. Introduccin o 2. Autmatas Finitos o 3. Expresiones Regulares y Lenguajes 4. Propiedades de los Lenguajes Regulares 5. Gramticas Libres de Contexto y Lenguajes a 6. Autmata de Pila o 7. Propiedades de los Lenguajes Libres de Contexto 8. Introduccin a las Mquinas de Turing o a Modalidad del Proceso de Enseanza n El material del curso es impartido por el instructor con resolucin de o algunos problemas en clase. Tambin se asignarn tareas prcticas a los ese a tudiantes cuya solucin ser en algunos casos discutida en clase. Se tendrn o a a sesiones de asesor con los asistentes de curso. a Horario: Clase: Martes 9:30 a 12:00 Jueves 9:30 a 12:00 Martes 12:00 a 13:00 Jueves 12:00 a 13:00 i

Asosoria:

Evaluacin: o Tareas 1/3 Examenes Parciales (2) 2/3 1er Parcial 19-Junio-2008 2o Parcial 15-Julio-2008 Calendarizacin. o Sem. 1 2 3 4 5 6 7 8 Fecha 27 y 29 mayo 3 y 5 junio 10 y 12 junio 17 y 19 junio 24 y 26 junio 1 y 3 julio 8 y 10 julio 15 y 17 julio Tema Introduccin o Autmatas Finitos o Expresiones Regulares y Lenguajes Props. Lenguajes Regulares (Primer examen) Gramticas y Lenguajes Libres de Contexto a Pushdown Automata Props. Lenguajes Libres de Contexto Intro. Mquina de Turing (Segundo examen) a

ii

Referencias
1. John E. Hopcroft, Rajeev Motwani and Jerey D. Ullman (2001). Automata Theory, Language and Computation. Addison-Wesley Publishing. 2. Michael Sipser (1997). Introduction to the Theory of Computation. PWS publishing company.

iii

Cap tulo 1 Introduccin o


1.1 Teor de Autmatas a o

Estudio de dispositivos o mquinas de cmputo abstractas a o Turing en los 30s estudi una mquina abstracta con las capacidades o a de las de hoy (en lo que pod calcular) an La meta de Turing era describir la frontera entre lo que una mquina a pod hacer y lo que no, su conclusin aplica no solo a las mquinas de a o a Turing, sino a las mquinas actuales a En los 40s y 50s se estudiaron los Autmatas Finitos o Finales de los 50s, N. Chomsky inicia el estudio formal de las gramticas a En 1969 S. Cook extiende el trabajo de Turing para estudiar lo que se pod y no calcular (compute), y lo que se pod resolver ecientemente a a o no (NP-duros).

1.2

Introduccin a Pruebas Formales o

Para qu pruebas? e 1

Hacer hiptesis inductivas sobre partes de nuestros programas (iteracin o o o recursin) o Hiptesis consistente con la iteracin o recursin o o o Entender como trabaja un programa correcto es esencialmente lo mismo que la prueba de teoremas por induccin o Pruebas deductivas (secuencia de pasos justicados) Pruebas inductivas (pruebas recursivas de un estatuto parametrizado que se usa a s mismo con valores ms bajos del parmetro) a a

1.2.1

Pruebas Deductivas

Secuencia de enunciados cuya verdad nos lleva de un enunciado inicil (hiptesis) o a una conclusin. Son del tipo If H Then C. o Por ejemplo, probar que: Si x 4 Entonces 2x x2 . La idea general es probar que se cumple para 4 y probar que mientras x crece, el lado izquierdo duplica su valor con cada incremento, mientras que el lado derecho crece a una razn de ( x+1 )2 . o x Tambin existen otras pruebas como pruebas por contradiccin, por contrae o ejemplos y de conjuntos, pero nos vamos a enfocar en las pruebas por induccin. o

1.2.2

Pruebas por Induccin o

Para objetos denidos recursivamente La mayor maneja enteros, pero en autmatas se trabaja con rboles a o a y expresiones de varios tipos (expresiones regulares)

1.2.2.1

Inducciones estructurales

Probar el enunciado S(X) respecto a una familia de objetos X (i.e., enteros, rboles) en dos partes: a 1. Base: Probar directamente para uno o varios valores peque os de X. n 2. Paso de Induccin: Asumir S(Y ) para Y ms peque a que X; probar o a n S(X) a partir de lo que se asumi. o Un rbol binario con n hojas tiene 2n 1 nodos. a Formalmente, S(T ): Si T es un rbol binario con n hojas, entonces T a tiene 2n 1 nodos. Induccin respecto al tama o = n mero de nodos de T . o n u Base: Si T tiene 1 hoja, se trata de un rbol de un nodo. 1 = 2 1 1, est a a bien. Induccin: Asumir S(U) para rboles con menos nodos que T . En particular, o a asumir para los sub-rboles de T : a T debe consistir de una ra ms dos subrboles U y V . z a a Si U y V tienen u y v hojas, respectivamente, y T tiene t hojas, entonces u + v = t. Por la hiptesis de induccin, U y V tienen 2u 1 y 2v 1 nodos, o o respectivamente. Entonces T tiene 1 + (2u 1) + (2v 1) nodos. = 2(u + v) 1. = 2t 1, probando con el paso de induccin. o Frecuentemente el enunciado que tenemos que probar es de la forma X si y slo si Y. Esto requiere hacer dos cosas: o 3

1. Probar la parte-si: Asumir Y y probar X. 2. Probar la parte-si-y-slo-si: Asumir X y probar Y . o

1.2.3

Equivalencia de Conjuntos

Muchos hechos importantes en la teor del lenguaje son de la forma de dos a conjuntos de cadenas, descritas de dos maneras diferentes y que realmente son el mismo conjunto. Para probar que los conjuntos S y T son los mismos, probar: x S si y slo si x T . Esto es: o Asumir que x S; probar que x T . Asumir que x T ; probar que x S. Ejemplo: Probar que 1 + 3 + 5 + . . . + (2n 1) = n2 . Base: P (1) 1 = 12 Induccin: Suponemos P (k) : 1 + 3 + 5 + . . . + (2k 1) = k 2 . Para probar o que P (k + 1) es verdadera: P (k + 1) 1 + 3 + 5 + . . . + [2(k + 1) 1] = (k + 1)2 y esto se puede escribir como: 1 + 3 + 5 + . . . + (2k 1) + [2(k + 1) 1] = (k + 1)2 y la parte izquierda es igual a: k 2 + [2(k + 1) 1] = k 2 + 2k + 1 = (k + 1)2 por lo tanto, 1 + 3 + 5 + . . . + [2(k + 1) 1] = (k + 1)2 esto verica P (k + 1) y prueba que la ecuacin es verdadera para cualquier o entero positivo n. 4

Ejemplo: Probar que 1 + 2 + 22 + . . . + 2n = 2n+1 1 para toda n 1. Base: P (1) 1 + 2 = 21+1 1, 3 = 22 1, lo cual es verdadero. Induccin: Asumimos que P (k) : 1+2+22 +. . .+2k = 2k+1 1 , es verdadero o e intentamos probar que P (k + 1) tambin lo es: e P (k + 1) : 1 + 2 + 22 + ... + 2k+1 = 2(k+1)+1 1 Rescribiendo la ecuacin anterior tenemos: o 1 + 2 + 22 + ... + 2k + 2k+1 = = = Por lo tanto: 1 + 2 + 22 + . . . + 2k+1 = 2k+1 1 + 2k+1 2(2k+1) 1 2k+1+1 1 2(k+1)+1 1

Ejercicio: Probar que x0 + x1 + x2 + . . . + xn = (xn+1 1)/(x 1) Base: P (1) : x0 + x1 = x + 1, y (x2 1)/(x 1) = ((x + 1)(x 1))/(x 1) = (x + 1), por lo tanto, la base si se cumple. Induccin: Asumimos que P (k) : x0 + x1 + x2 + . . . + xk = (xk+1 1)/(x 1) o se cumple. Probamos que tambin P (k + 1) se cumple: e P (k + 1) : x0 + x1 + x2 + . . . + xk + xk+1 =
xk+1+1 1 (x1)

Demostramos que el lado izquierdo es igual al lado derecho:


xk+1 1 (x1)

+ xk+1 =

(xk+1 1)+(x1)(xk+1 ) (x1)

xk+2 1 x1

Ejercicio: Probar que n2 > 3n para n 4. Base: P (4) : 42 > 3(4) 16 > 12, lo cual es cierto o Induccin: Asumimos P (k) : k 2 > 3k para k > 4 y tratamos de probar que o P (k + 1) : (k + 1)2 > 3(k + 1) 5

(k + 1)2 = > > > >

k 2 + 2k + 1 3k + 2k + 1 (por la Hiptesis de Induccin) o o 3k + 2(4) + 1 (porque k > 4) 3k + 3 3(k + 1).

Ejercicios a resolver en clase: 1. 2 + 6 + 10 + . . . + (4n 2) = 2n2 2. 1 + 5 + 9 + . . . + (4n 3) = n(2n 1) 3. 1 + 3 + 6 + . . . + n(n + 1)/2 = 4. 5 + 10 + 15 + . . . + 5n = 5. 12 + 22 + . . . +n 2 = 6. 13 + 23 + . . . + n3 =


n(n+1)(n+2) 6

5n(n+1) 2

n(n+1)(2n+1) 6 n2 (n+1)2 4

7. n2 > n + 1 para n > 2 Ejercicios de tarea para la siguiente clase: 1. 2 + 4 + 6 + ... + 2n = n(n + 1) 2. 12 + 32 + ... + (2n 1)2 =
n(2n1)(2n+1) 3

3. Probar que 2n < n!, para n 4

1.3
1.3.1

Teor de Autmatas a o
Motivacin o

Los autmatas nitos se utilizan como modelos para: o 6

Software para dise ar circuitos digitales n Analizador lxico de un compilador e Buscar palabras clave en un archivo en el web o Software para vericar sistemas de estados nitos, como protocolos de comunicaciones

1.4

Conceptos de Teor de Autmatas a o


= {0, 1}, alfabeto binario. = {a, b, c, d, . . . , z}, alfabeto del abecedario en min sculas. u Conjunto de los caracteres ASCII.

Alfabeto = conjunto nito de s mbolos ()

Cadena = secuencia nita de s mbolos elegidos de un alfabeto. 01101 abracadabra La cadena vac se denota como: , a Todas las cadenas de un alfabeto de longitud k se denotan como k . E.g., 0 = {}, si = {0, 1}, entonces, 1 = {0, 1}, 2 = {00, 01, 10, 11}, etc. El conjunto de todas las cadenas de un alfabeto se denota como . = 0 1 2 . . .. Sin la cadena vac + . Por lo que: a: 0 + = . Lenguaje = conjunto de cadenas elegidas de alg n alfabeto. u Nota: El lenguaje puede ser innito, pero existe alg n conjunto u nito de s mbolos de los cuales se componen todas sus cadenas. El conjunto de todas las cadenas binarias que consisten de alg n u n mero de 0s seguidos por un n mero igual de 1s; esto es: u u {, 01, 0011, 000111, . . .}. 7

C ( el conjunto de programas compilables en C). Espa ol. n Una manera importante de describir ciertos lenguajes simples, pero altamente utiles es la llamada lenguajes regulares. Un grafo con un n mero nito de nodos, llamados estados. u Los arcos se etiquetan con uno o ms s a mbolos de alg n alfabeto. u Un estado es designado como el estado de comienzo estado inicial. o Algunos estados son estados nales o estados de aceptacin. o El lenguaje de los AF (Autmata Finito) es el conjunto de cadenas o que etiquetan rutas que van desde el estado inicial a alg n estado de u aceptacin. o Abajo, el AF explora documentos HTML, busca una lista de lo que podr ser los pares de t an tulo-autor, quizs en una lista de lectura para a alg n curso de literatura. u

Acepta cuando encuentra el nal de un elemento de la lista. En una aplicacin, las cadenas que casan con el t o tulo (antes de by) y autor (despus) ser almacenadas en una tabla de pares de t e an tuloautor que son acumulados.

1.4.1

Ejemplos de Autmatas Finitos o

Autmata Finito para modelar un switch de encendido/apagado: o

Autmata Finito para reconocer la cadena hola: o

1.4.2

Representaciones Estructurales

Gramticas: Modelos utiles para dise ar SW que procesa datos con a n una estructura recursiva Un parser de un compilador Expresiones aritmticas, condicionales, etc. e Una regla: E E + E Expresiones Regulares: Denotan la estructura de los datos, especialmente cadenas de texto Autmatas pueden describir lo mismo que puede describir un o autmata nito o 9

El estilo diere del de las gramticas a Estilo de expresiones regulares de UNIX [A Z][a z] [ ][A Z][A Z] Representa palabras que inician con may scula seguidas de u un espacio y dos letras may sculas (e.g., Ithaca NY) u No incluye ciudades con nombres compuestos ([A Z][a z] [ ]) [A Z][A Z]

1.5

Autmatas y Complejidad o

Los autmatas son esenciales para el estudio de los l o mites de la computacin o Qu puede hacer una computadora? e Decidibilidad (decidability) Problema decidible Qu puede hacer una computadora ecientemente? e Intractabilidad (intractability) Polinomial vs Exponencial Ejercicios en clase: 1. Modelar un AF para cadenas de 0s y 1s que terminen siempre en 010. 2. Modelar un AF para las cadenas que terminan con tres 0s consecutivos. 3. Modelar un AF para todas las cadenas en donde cada bloque de 5 caracteres consecutivos contengan al menos dos 0s. Ejercicios de tarea para la siguiente clase: 1. Modelar un AF donde el dcimo s e mbolo de derecha a izquierda sea un 1. 10

2. Describir con palabras los conjuntos aceptados por los autmatas nitos o de los diagramas de transiciones de las siguientes guras:

11

Cap tulo 2 Introduccin a los Autmatas o o


Autmata: Conjunto de estados + Control Cambio de estados en reo spuesta a una entrada. Tipo de Control: Determin stico: Para cada entrada, hay slo un estado al que el autmata o o puede ir desde el estado en que se encuentre. No determin stico: Un autmata nito es no-determin o stico cuando se permite que el AF tenga 0 o ms estados siguientes para cada par a estado-entrada. Si a adimos la propiedad de no-determinismo, no a adimos poder al n n autmata. Osea que no podemos denir ning n lenguaje que no se pueda o u denir con el autmata determin o stico. Con la propiedad de no-determinismo se agrega eciencia al describir una aplicacin: o Permite programar soluciones en un lenguaje de ms alto nivel a Hay un algoritmo para compilar un N-DFA en un DFA y poder ser ejecutado en una computadora convencional 12

Extensin del N-DFA para hacer saltos de un estado a otro espontneamente, o a con la cadena vac () como entrada: N-DFA. Estos autmatas tambin a o e aceptan lenguajes regulares. Ejemplo: Compra con dinero-electrnico. El cliente utiliza un archivo (env o o por internet) para pagar al comerciante. El comerciante al recibir el archivo pide al banco que le transeran el dinero.

Tarea: Leer la seccin 2.1.1 2.1.5 del libro o

2.1

Denicin formal de un Autmata Finito o o Determin stico

Un AF se representa como la 5-tupla: A = (Q, , , q0 , F ). Donde: 1. Q es un conjunto nito de estados. 2. es un alfabeto de s mbolos de entrada. 3. q0 es el estado inicial/de comienzo. 13

4. F representa cero o ms estados nales/de aceptacin. a o 5. es una funcin de transicin. Esta funcin: o o o Toma un estado y un s mbolo de entrada como argumentos. Regresa un estado. Una regla de se escribe como (q, a) = p, donde q y p son estados, y a es un s mbolo de entrada. Intuitivamente: Si el AF est en un estado q, y recibe una entrada a a, entonces el AF va al estado p (nota: q = p OK). Ejemplo: Un Autmata A que acepta L = {x01y|x, y {0, 1}} o El DFA acepta cadenas que tienen 01 en alguna parte de la cadena El lenguaje del DFA es el conjunto de cadenas que acepta {w|w tiene la forma x01y para algunas cadenas x y y que consisten slo de 0s y o 1s. El Autmata A = (q0 , q1 , q2 , 0, 1, , q0 , q1 ) o Autmata representado con una tabla de transiciones: o q0 q1 q2 0 q2 q1 q2 1 q0 q1 q1

Autmata representado con un diagrama de transiciones: o

Convenciones 14

Se utilizan algunas convenciones para evitar mencionar el tipo de cada nombre, para esto utilizamos las siguientes reglas: Los s mbolos de entrada son a, b, etc., o d gitos. Las cadenas de s mbolos de entrada son u, v, . . . , z. Los estados son q, p, etc. Diagrama de Transiciones Un AF se puede representar por medio de un grafo; los nodos representan estados; un arco de p a q se etiqueta con el conjunto de s mbolos de entrada a tal que (q, a) = p. No hay arco si a no existe. El estado de inicio se indica con la palabra start con una echa.

Los estados de aceptacin tienen doble c o rculo. Funciones de transicin extendidas () o Intuitivamente, un FA acepta una cadena w = a1 a2 . . . an si hay una ruta en el diagrama de transiciones que: 1. Empieza en el estado de inicio, 2. Termina en un estado de aceptacin, y o 3. Tiene una secuencia de etiquetas a1 , a2 , . . . , an . 15

Ejemplo: El siguiente AF acepta la cadena 01101:

Formalmente, extendemos la funcin de transicin a (q, w), donde w o o puede ser cualquier cadena de s mbolos de entrada: Base: (q, ) = q (i.e., nos quedamos en el mismo lugar si no recibimos una entrada). Induccin: (q, w) = ((q, x), a), donde x es una cadena, y a es un solo o s mbolo (i.e., ver a dnde va el AF con x, luego buscar la transicin o o para el ultimo s mbolo a partir de ese estado). Hecho importante con una prueba inductiva directa: realmente representa rutas. Esto es, si w = a1 a2 . . . an , y (pi , ai ) = pi+1 , i = 0, 1, . . . , n 1, entonces (p0 , w) = pn . Aceptacin de Cadenas: Un AF A = (Q, , , q0 , F ) acepta la cadena w o si (p0 , w) est en F . a Lenguaje de un AF: Un AF acepta el lenguaje L(A) = w|(p0, w) F . Algunas confusiones frecuentes Una gran fuente de confusin cuando se o trabaja con autmatas (o matemticas en general) son los errores de tipo: o a Ejemplo: No confundir A, un FA, i.e., un programa, con L(A), el cual es del tipo conjunto de cadenas. Ejemplo: El estado de inicio q0 es del tipo estado pero los estados de aceptacin F son del tipo conjunto de estados. o Ejemplo enga oso: Es a un s n mbolo o una cadena de longitud 1? Respuesta: Depende del contexto, i.e., se usa en (q, a), donde es un s mbolo, o en (q, a), donde es una cadena? 16

Ejemplo: DFA que acepta todas y slo las cadenas que tienen un n mero o u par de 0s y tambin un n mero par de 1s e u

Representacin tabular del autmata anterior: o o q0 q1 q2 q3 0 q2 q3 q0 q1 1 q1 q0 q3 q2

Ejemplo: Problema 2.2.1.a Ejemplo: Problema 2.2.4.a

17

2.2

Autmata Finito No-Determin o stico

Un autmata nito es no-determin o stico cuando se permite que el AF tenga 0 o ms estados siguientes para cada par estado-entrada: a

En el ejemplo anterior, se puede apreciar que de q0 se puede ir a q0 a o q1 con la entrada 0, y esto hace al AF ser no-determinista. Un NFA puede estar en varios estados a la vez o se puede ver que adivina a qu estado ir. e Por ejemplo, el siguiente autmata acepta todas las cadenas que terminan o en 01:

Lo que pasa al procesar como entrada a 00101 es:

Un NFA es una herramienta importante para dise ar procesadores de n 18

cadenas, e.g., grep, analizadores lxicos, etc. Es fcil dise ar NFAs que e a n encuentren secuencias de palabras en texto. NFA: Formalmente, un NFA es una qu ntupla A = (Q, , , q0 , F ), donde todo es un DFA, pero (q, a) nos regresa un conjunto de estados en lugar de un solo estado. De hecho puede ser vac tener un solo estado o tener ms o, a estados. Un NFA acepta, al igual que un DFA, lenguajes regulares Por ejemplo, para el NFA que acepta cadenas que acaban en 01 su funcin o de transicin es: o q0 q1 q2 0 {q0 , q1 } 1 {q0 } {q2 }

Como puede observarse, todo se especica en conjuntos.

2.2.1

Extensin a o

Similarmente a un DFA, podemos denir la funcin de transicin extendida o o como sigue: Base: (q, ) = q Induccin: Supongamos w es de la forma w = xa, donde a es el s o mbolo terminal y x es el resto de w. Supongamos tambin que: (q, x) = e {p1 , p2 , . . . , pk }. (pi , a) = {r1 , r2 , . . . , rm }. Entonces (q, w) = {r1 , r2 , . . . , rm }. En otras palabras calculamos (q, w) primero calculando (q, x) y despus siguiendo cualquier transicin de algunos de esos estados etiquee o tada con a. Por ejemplo, podemos calcular (q0 , 00101) para el autmata anterior: o (q0 , ) = {q0 } 19
k i=1

(q0 , 0) = (q0 , 0) = {q0 , q1 } (q0 , 00) = (q0 , 0) (q1 , 0) = {q0 , q1 } (q0 , 001) = (q0 , 1) (q1 , 1) = {q0 } {q2 } = {q0 , q2 } (q0 , 0010) = (q0 , 0) (q2 , 0) = {q0 , q1 } = {q0 , q1 } (q0 , 00101) = (q0 , 1) (q1 , 1) = {q0 } {q2 } = {q0 , q2 } Que tiene un estado nal.

2.2.2

Lenguajes de un NFA

El lenguaje aceptado por un NFA, A, es: L(A) = {w|(q0 , w) F = }.

2.2.3

Equivalencia entre un DFA y un NFA

Un NFA es normalmente ms fcil de denir, aunque al mismo tiempo, para a a cualquier NFA N existe un DFA D tal que L(D) = L(N) y viceversa. Para esto se usa la construccin de subconjunto que muestra un ejemplo o de cmo un autmata se puede construir a partir de otro. o o

2.2.4

Construccin de Subconjunto o

Para cada NFA existe un DFA equivalente (acepta el mismo lenguaje). Pero el DFA puede tener un n mero exponencial de estados. u Sea N = (QN , , N , q0 , FN ) un NFA. El DFA equivalente construido a partir del subconjunto de construccin es D = (QD , , D , {q0 }, FD ), donde: o |QD | = 2|QN | ; i.e., QD es el conjunto de todos los subconjuntos de QN . FD es el conjunto de conjuntos S en QD tal que S FN = . Para cualquier S QN y a , D (S, a) = pS N (p, a), osea, la unin de todos los estados a partir de p con entrada a. D ({q1 , q2 , . . . , qk }, a) = o N (p1 , a) N (p2 , a) . . . N (pk , a). 20

La funcin de transicin D del NFA anterior es: o o

Al existir 3 estados, tenemos 8 subconjuntos. Esto mismo lo podemos poner como:

Lo cual es un DFA (simplemente cambiando la notacin). Tambin es o e importante notar que no todos los estados pueden ser alcanzados. En particular, slo los estados B, E y F son accesibles, por lo que los dems los o a podemos eliminar. Una forma de no construir todos los subconjuntos para despus encontrar e que slo unos cuantos son accesibles, es construir la tabla slo para los estados o o accesibles (lazy evaluation). Para el ejemplo anterior: D (q0 , 0) = q0 , q1 D (q0 , 1) = q1 D (q0 , q1 , 0) = q0 , q1 21

D (q0 , q1 , 1) = q0 , q2 = N (q0 , 1) N (q1 , 1) D (q0 , q2 , 0) = q0 , q1 D (q0 , q2 , 1) = q0 Lo que nos queda:

Teorema clave: induccin de |w| (la prueba est en el libro): D ({q0 }, w) = o a N (q0 , w). Lo que queremos probar es que si D = (QD , , D , {q0 }, FD ) es construido a partir del NFA N = (QN , , N , q0 , FN ) usando construccin de o subconjuntos, entonces L(D) = L(N). Queremos probar por induccin en w que D ({q0 }, w) = N (q0 , w). Las o dos funciones de transicin regresan conjuntos de estados de QN , pero la o determin stica lo interpreta como uno solo de sus estados QD . Base: w = , en este caso D ({q0 }, ) = N (q0 , ). Induccin: Tomamos w de longitud n + 1 y asumimos que se cumple el o enunciado para n, o sea que D ({q0 }, x) = N (q0 , x). Sean estos dos conjuntos de estados = {p1 , p2 , . . . , pk }. Dividimos a w en xa. La denicin de para o k el NFA nos dice que: N (q0 , w) = i=1 N (pi , a). Por la construccin de subconjuntos: D ({p1 , p2 , . . . , pk }, a) = o Usando esto, y que D ({q0 }, x) = {p1 , p2 , . . . , pk } tenemos que: D ({q0 }, w) = D (D ({q0 }, x), a) = D ({p1 , p2 , . . . , pk }, a) =
k i=1 N (pi , a) k i=1 N (pi , a)

22

Tanto D como N aceptan w cuando contiene un estado en FN. Consecuencia: L(D) = L(N). Ejemplo: Problema 2.3.1 Ejemplo: En este ejemplo un tanto imaginario, se dise ar un NFA para n a aceptar cadenas sobre el alfabeto {1, 2, 3} de tal manera que el ultimo s mbolo aparezca previamente, sin ninguna intervencin de un s o mbolo ms alto entre a esa previa aparicin del s o mbolo, e.g., . . . 11, . . . 21112, . . . 312123. Truco: Utilizar el estado de inicio con el signicado Creo que todav a no se ha visto el s mbolo que corresponde al s mbolo nal. Otros tres estados representando una eleccin de que el s o mbolo con que acaba la cadena se ha visto y se recuerda de que s mbolo se trata.

Ejemplo: Subconjunto de Construccin del NFA Previo. o Un truco prctico importante utilizado por analizadores lxicos y otros a e procesadores de texto es ignorar los (frecuentemente muchos) estados que no son accesibles desde el estado de inicio (i.e., no hay ruta que lleve a ellos). Para el ejemplo anterior de NFA, de los 32 subconjuntos posibles, solo 15 son accesibles. Calculando las transiciones por demanda obtenemos el siguiente D :

23

1 p pq pq pqt pqt pqt pr pqr prt pqr ps pqs pst pqs prs pqrs prst pqrs pqs pqst pqst pqst pqr pqrt pqrt pqrt pqrs pqrst pqrst pqrst

2 pr pr pr prt prt prs prs prst prst prs prs prt prt prst prst

3 Ps Ps Ps Ps Ps Pst Pst Pst Pst Pst Pst Ps Ps Pst Pst

Ejemplo: Problema 2.4.1.a

2.3
2.3.1

Autmatas Finitos y Lenguajes Formales o


Autmata Finito con Transiciones- o

Sea una etiqueta en arcos. No hay ning n cambio extra: la aceptacin de w todav se da como la u o a existencia de la ruta desde un estado de inicio a un estado de aceptacin con o etiqueta w. Pero puede aparecer en los arcos, y signica que hay una cadena vac a (i.e., no tiene una contribucin visible para w). o

24

Ejemplo:

001 es aceptado siguiendo la ruta q, s, r, q, r, s, con la etiqueta 001 = 001. Podemos dise ar un autmata que acepte cadenas de n meros que tengan n o u un signo al inicio opcional, seguida posiblemente de una cadena de decimales, seguida de un punto decimal y posiblemente de otra cadena de decimales.

Ms formalmente: Un -NFA es una qu a ntupla (Q, , , q0 , F ), donde es una funcin de Q {} al conjunto potencia de Q. o

25

La tabla de transicin del -NFA del ejemplo anterior es: o

2.4

Eliminacin de las Transiciones- o

Las transiciones- son una conveniencia, pero no incrementan la potencia de los FAs. Para eliminar las transiciones-: 1. Calcular la cerradura transitiva slo para los arcos o Ejemplo: q {q}; r {r, s}; s {r, s}. 2. Si un estado p puede alcanzar al estado q por medio de arcos , y existe una transicin de q a r en la entrada a (no ), entonces a dase una o na transicin de p a r con la entrada a. o 3. Convertir el estado p en un estado de aceptacin siempre y cuando p o pueda alcanzar alg n estado de aceptacin q por medio de arcos . u o

26

4. Eliminar todas las transiciones-.

Ejemplo: De la misma forma como lo hicimos anteriormente, podemos denir las transiciones extendidas para -NFA. Base: (q, ) = ECLOSE(q) Induccin: (q, xa) = o
p((q,x),a)

ECLOSE(p)

Por ejemplo, (q0 , 5.6) es: (q0 , ) = {q0 , q1 } = ECLOSE(q0 ) (q0 , 5) (q1 , 5) = {q1 , q4 } ECLOSE(q1 ) ECLOSE(q4 ) = {q2 , q3 } )q1 , .) (q4 , .) = {q1 , q4 } ECLOSE(q2 ) ECLOSE(q3 ) = {q2 , q3 , q5 } = (q0 , 5.) )q2 , 6) (q3 , 6) (q5 , 6) = {q3 } (q3 ) = {q3 , q5 } = (q0 , 5.6) Como antes, el lenguaje aceptado por un -NFA, E, es: L(E) = {w|(q0 , w) F = }, osea todas las cadenas w que van de un estado inicial q0 a al menos un estado nal. Se puede demostrar que se puede construir un DFA a partir de un -NFA siguiendo un esquema parecido al de construccin de subconjuntos visto para o NFA. QD = {S|S QE S = ECLOSE(S)} qD = ECLOSE(q0 ) 27

FD = {S|S QD S FE = } D (S, a) = ECLOSE(p)|p (t, a), t S} lo que se calcula para todos los a y conjuntos S QD . Ejemplo: Problema 2.5.6 Por ejemplo, el DFA correspondiente al -NFA de n meros decimales u (omitiendo todas las transiciones a estados muertos) es:

Se puede demostrar que un lenguaje L es aceptado por alg n -NFA E u si y solo si L es aceptado por un DFA. Para esto, hacia un sentido es fcil a (cambiando un DFA a un -NFA) y para el otro sentido se hace lo mismo que hemos hecho antes, probando con el caso base y el caso inductivo, donde partimos w = xa, asumimos que es verdad para x y probamos para w, solo que ahora tomando la cerradura o ECLOSE para los estados.

28

Cap tulo 3 Expresiones Regulares


Es un equivalente algebraico para un autmata. o Utilizado en muchos lugares como un lenguaje para describir patrones en texto que son sencillos pero muy utiles. Pueden denir exactamente los mismos lenguajes que los autmatas o pueden describir: Lenguajes regulares Ofrecen algo que los autmatas no: Manera declarativa de expresar las o cadenas que queremos aceptar Ejemplos de sus usos Comandos de b squeda, e.g., grep de UNIX u Sistemas de formateo de texto: Usan notacin de tipo expresin o o regular para describir patrones Convierte la expresin regular a un DFA o un NFA y simula el o autmata en el archivo de b squeda o u Generadores de analizadores-lxicos. Como Lex o Flex. e Los analizadores lxicos son parte de un compilador. Dividen el e programa fuente en unidades lgicas (tokens). okens como while, o n meros, signos (+, , <, etc.) u Produce un DFA que reconoce el token 29

3.1

Operadores y Operandos

Si E es una expresin regular, entonces L(E) denota el lenguaje que dene o E. Las expresiones se construyen de la manera siguiente: Un operando puede ser: 1. Una variable, que pertenece o se representa por medio de un lenguaje. 2. Un s mbolo, que se representa a s mismo como un conjunto de cadenas, i.e., a representa al lenguaje {a} (formalmente, L(a) = {a}). 3. , representado por {} (un lenguaje). 4. , representando a (el lenguaje vac o). Los operadores son: 1. +, que representa la unin. L(E + F ) = L(E) L(F ). o 2. Yuxtaposicin (i.e., s o mbolo de no operador, como en xy que signica x y) para representar la concatenacin. L(EF ) = o L(E)L(F ), donde la concatenacin de los lenguajes L y M es o {xy|x L y y M}, la concatenacin tambin se representa por o e un punto como dot. o 3. para representar la cerradura. L(E ) = (L(E)) , donde L = {} L LL LLL . . .. 4. Si E es una expresin regular, entonces E es una expresin reguo o lar, que denota la cerradura de L(E). Esto es, L(E ) = (L(E)) . 5. Si E es una expresin regular, entonces (E), E entre parntesis, o e tambin es una expresin regular que denota el mismo lenguaje e o que E. Formalmente: L((E)) = L(E). Precedencia de los operadores de Expresiones-Regulares 1. El asterisco de la cerradura tiene la mayor precedencia. Aplica slo a la secuencia de s o mbolos a su izquierda que es una expresin o regular bien formada 30

2. Concatenacin sigue en precedencia a la cerradura, el operador o dot. 3. Despus de agrupar los asteriscos a sus operandos, se agrupan los e operadores de concatenacin a sus operandos o 4. Se agrupan todas las expresiones yuxtapuestas (adyacentes sin operador interviniendo) 5. Concatenacin es asociativa y se sugiere agrupar desde la izquierda o (i.e. 012 se agrupa (01)2). 6. La unin (operador +) tiene la siguiente precedencia, tambin es o e asociativa. 7. Los parntesis pueden ser utilizados para alterar el agrupamiento e Ejemplos L(001) = 001. L(0 + 10 ) = {0, 1, 10, 100, 1000, . . .}. L((0(0 + 1)) ) = el conjunto de cadenas de 0s y 1s, de longitud par, de tal manera que cada posicin impar tenga un 0. o Ejemplo 3.2: Expresin regular para el conjunto de cadenas que alterna 0s o y 1s: (01) + (10) + 0(10) + 1(01) ( + 1)(01) ( + 0)

3.2

Equivalencia de Lenguajes de FA y Lenguajes RE

Se mostrar que un NFA con transiciones- puede aceptar el lenguaje a de una RE. 31

Despus, se mostrar que un RE puede describir el lenguaje de un DFA e a (la misma construccin funciona para un NFA). o Los lenguajes aceptados por DFA, NFA, -NFA, RE son llamados lenguajes regulares.

3.2.1

De DFAs a Expresiones Regulares

Teorema 3.4: Si L = L(A) para alg n DFA A, entonces existe una expresin u o regular R tal que L = L(R). Prueba: Suponiendo que A tiene estados {1, 2, . . . , n}, n nito. Tratemos de construir una coleccin de RE que describan progresivamente conjuntos o de rutas del diagrama de transiciones de A Rij es el nombre de la RE con lenguaje el conjunto de cadenas w w es la etiqueta de la ruta del estado i al estado j de A. Esta ruta no tiene estado intermedio mayor a k. Los estados inicial y terminal no son intermedios, i y/o j pueden ser igual o menores que k Para construir Rij se utiliza una denicin inductiva de k = 0 hasta o k=n BASE: k = 0, implica que no hay estados intermedios. Slo dos clases de o rutas cumplen con esta condicin: o 1. Un arco del nodo (estado) i al nodo j 2. Una ruta de longitud 0 con un solo nodo i Si i = j, solo el caso 1 es posible. Examinar el DFA A y encontrar los s mbolos de entrada a tal que hay una transicin del estado i al estado j con el s o mbolo a Si no hay s mbolo a, entonces Rij = . 32
(0) (k) (k)

Si hay slo un s o mbolo a, entonces Rij = a. Si hay varios s mbolos a1 , a2 , . . . , ak , entonces Rij = a1 + a2 + . . . + ak . Si i = j, slo se permiten rutas de longitud 0 y loops del estado i a l o e mismo. La ruta de longitud 0 se representa con Si no hay s mbolo a, entonces Rij = . Si hay slo un s o mbolo a, entonces Rij = + a. Si hay varios s mbolos a1 , a2 , . . . , ak , entonces Rij = +a1 +a2 +. . .+ak . INDUCCION: Suponemos que hay una ruta del estado i al estado j que no pasa por ning n estado mayor que k. u Se consideran 2 casos. 1. La ruta no pasa por el estado k: Etiqueta de la ruta esta en el lenguaje (k1) Rij . 2. La ruta pasa por el estado k al menos una vez: Se divide la ruta en varias partes, una divisin cada que se pasa por el o estado k Primero del estado i al estado k, despus, varios pasos del estado k a e s mismo, nalmente, del estado k al estado j. Las etiquetas de estas rutas se representan con la RE Rik
(k1) (0) (0) (0) (0)

(0)

(Rkk

(k1)

) Rkj

(k1)

Si combinamos las expresiones de las rutas de los dos tipos: Rij = (k1) (k1) (k1) (k1) Rij +Rik (Rkk ) Rkj para todas las etiquetas de las rutas del estado i al j que no pasan por estados mayores que k. Eventualmente tendremos Rij . 33
(n)

(k)

Asumimos que 1 es el estado inicial. El estado de aceptacin puede ser o un conjunto de estados La expresin regular para el lenguaje del autmata o o (n) es la suma (unin) de todas las expresiones R1j tal que j es un estado de o aceptacin. o Ejemplo: Un DFA que acepta todas las cadenas que tienen al menos un 0

Inicialmente sustituimos para la base: Ri j (0) = Rij = + a Rij = + a1 + a2 + . . . + ak R11 (0) R12 (0) R21 (0) R22
(0)

(0)

(0)

+1 0 ( + 0 + 1)
(1) (0) (0) (0) (0)

Ahora para el paso de induccin: Rij = Rij + Ri1 (R11 ) R1j o


(1) R11 (1) R12 (1) R21 (1) R22 (2)

Por sustitucin directa o + 1 + ( + 1)( + 1) ( + 1) 0 + ( + 1)( + 1) 0 + ( + 1) ( + 1) + 0 + 1 + ( + 1) 0


(1) (1) (1) (1)

Simplicado 1 1 0 +0+1

Rij = Rij + Ri2 (R22 ) R2j


(2) R11 (2) R12 (2) R21 (2) R22

Por sustitucin directa o 1 + 1 0( + 0 + 1) 1 0 + 1 0( + 0 + 1) ( + 0 + 1) + ( + 0 + 1)( + 0 + 1) + 0 + 1 + ( + 0 + 1)( + 0 + 1) ( + 0 + 1)

Simplicado 1 1 0(0 + 1) (0 + 1)

Construccin de la RE nal: o 34

Unin de todas las expresiones donde el primer estado es el estado inicial o y el segundo el estado de aceptacin o Estado inicial: 1 Estado nal: 2 Slo necesitamos R12 o 1 0(0 + 1) Este mtodo funciona tambin para NFA y -NFA pero su construccin es e e o n muy costoso, hasta en el orden de 4 s mbolos.
(2)

3.2.2

Conversin de un DFA a una RE por Eliminacin o o de Estados

Evita duplicar trabajo en algunos puntos del teorema 3.4. Ahora utilizaremos autmatas que podrn tener RE como etiquetas. o a El lenguaje del autmata es la unin de todas las rutas que van del estado o o inicial a un estado de aceptacin. o Concatenando los lenguajes de las RE que van a travs de la ruta. e En la siguiente gura se muestra un autmata al cual se va a eliminar o el estado s.

35

Se eliminan todos los arcos que incluyen a s Se introducen, para cada predecesor qi de s y cada sucesor pj de s, una RE que representa todas las rutas que inician en qi , van a s, quizs a hacen un loop en s cero o ms veces, y nalmente van a pj . a La expresin para estas rutas es Qi S Pj . o Esta expresin se suma (con el operador unin) al arco que va de qi a o o pj . Si este arco no existe, se a ade primero uno con la RE n El autmata resultante despus de la eliminacin de s es el siguiente o e o 3.2.2.1 Estrategia para construir el autmata o

1. Para cada estado de aceptacin q, aplicar el proceso de reduccin para o o producir un autmata equivalente con RE como etiquetas en los arcos. o Eliminar todos los estados excepto q y el estado inicial q0 . 2. Si q = q0 , se genera un autmata con 2 estados como el siguiente, una o forma de describir la RE de este autmata es (R + SU T ) SU o 36

3. Si el estado inicial tambin es un estado de aceptacin, tambin se e o e debe hacer una eliminacin de estados del autmata original que elimo o ine todos los estados menos el inicial y dejamos un autmata como el o siguiente:

4. La RE nal es la suma (unin) de todas las expresiones derivadas del o autmata reducido para cada estado de aceptacin por las reglas 2 y 3. o o Ejemplo: para el siguiente NFA que acepta cadenas de 0s y 1s de manera que tienen un 1 dos o tres posiciones antes del nal.

37

3.2.3

Convirtiendo una RE a un Autmata o

Teorema 3.7: Todo lenguaje denido por una RE tambin esta denido por e un autmata nito. o Prueba: Suponemos L = L(R) para la expresin regular R. Mostramos que o L = L(E) para alg n -NFA E con: u 1. Exactamente un estado de aceptacin o 2. Sin arcos que lleguen al estado inicial 3. Sin arcos que salgan del estado de aceptacin o 38

Base: cumpliendo las condiciones 1, 2, y 3.

Induccin: o a)

b)

c)

d)

39

Ejemplo 3.8: Convertir la RE (0 + 1) 1(0 + 1) a un -NFA.

40

3.3

Leyes Algebraicas de las Expresiones Regulares


Asociatividad y Conmutatividad

3.3.1

Ley conmutativa para la unin: L + M = M + L o Ley asociativa para la unin: (L + M) + N = L + (M + N) o Ley asociativa para la concatenacin: (LM)N = L(MN) o NOTA: La concatenacin no es conmutativa, es decir LM = ML o

3.3.2

Identidades y Aniquiladores

Una identidad para un operador es un valor tal que cuando el operador se aplica a la identidad y a alg n otro valor, el resultado es el otro u valor. 0 es la identidad para la adicin: 0 + x = x + 0 = x. o 1 es la identidad para la multiplicacin: 1 x = x 1 = x o Un aniquilador para un operador es un valor tal que cuando el operador se aplica al aniquilador y alg n otro valor, el resultado es el aniquilador. u 0 es el aniquilador para la multiplicacin: 0 x = x 0 = 0 o no hay aniquilador para la suma

3.3.3

Leyes

es la identidad para la unin: + L = L + = L o es la identidad para la concatenacin: L = L = L o es el aniquilador para la concatenacin: L = L = o NOTA: Estas leyes las utilizamos para simplicaciones 41

3.3.3.1

Leyes Distributivas

Como la concatenacin no es conmutativa, tenemos dos formas de la o ley distributiva para la concatenacin: o Ley Distributiva Izquierda para la concatenacin sobre unin: L(M + o o N) = LM + LN Ley Distributiva Derecha para la concatenacin sobre unin: (M + o o N)L = ML + NL 3.3.3.2 Ley de Idempotencia

Se dice que un operador es idempotente si el resultado de aplicarlo a dos argumentos con el mismo valor es el mismo valor En general la suma no es idempotente: x + x = x (aunque para algunos valores s aplica como 0 + 0 = 0) En general la multiplicacin tampoco es idempotente: x x = x o La unin e interseccin son ejemplos comunes de operadores idempoo o tentes Ley idempotente para la unin: L + L = L o 3.3.3.3 Leyes que involucran la cerradura

(L ) = L (Idempotencia para la cerradura) = = L+ = LL = L L, L+ se dene como L + LL + LLL + . . . L = + L + LL + LLL + . . . LL = L + LL + LLL + LLLL + . . . L = L + + L? = + L 42

3.3.3.4

Descubriendo leyes para RE

Se puede proponer una variedad innita de leyes para RE Hay una metodolog general para hacer estas pruebas ms fcilmente? a a a Se reduce a probar la igualdad de dos lenguajes espec cos Tcnica ligada a los operadores para RE, no se puede extender a otros e operadores (como interseccin) o Para probar que (L + M) = (L M ) Probamos que las cadenas que estn en (L + M) tambin estn en a e a (L M ) Probamos que las cadenas que estn en (L M ) tambin estn en a e a (L + M) Cualquier RE con variables se puede ver como una RE concreta sin variables Ver cada variable como si fuera un s mbolo diferente La expresin (L + M) se puede ver como (a + b) o Utilizamos esta forma como una gu para concluir sobre los lenguajes a Teorema 3.13: Sea E una RE con variables L1 , L2 , . . . , Lm . Se forma una RE concreta C reemplazando cara ocurrencia de Li por un s mbolo ai , para i = 1, 2, . . . , m. Luego para cada lenguaje L1 , L2 , . . . , Lm , cada cadena w en L(E) puede escribirse como w1 w2 . . . wk , donde cada wi esta en uno de los lenguajes, como Lji, y la cadena aj1 aj2 . . . ajk esta en el lenguaje L(C). Menos formal, podemos construir L(E) iniciando con cada cadena en L(C), como aj1 aj2 . . . ajk , y sustituyendo por cada aji s cualquier cadena del lenguaje correspondiente Lji . Base (3 casos): Si E = , la expresin congelada (concreta) tambin es o e Si E = , la expresin congelada tambin es o e 43

Si E = a, la expresin congelada es tambin a. Ahora wL(E) s y solo o e s existe uL(a), tal que w = u y u est en el lenguaje de la expresin a o congelada, i.e. ua. Induccin (3 casos): o Caso 1 (Unin): E = F + G, L(E) = L(F ) + L(G). Utilizamos las o expresiones concretas C y D formadas de F y G respectivamente y las sustituimos en todas sus apariciones. Obtenemos: L(C + D) = L(C) + L(D) Suponemos que w es una cadena en L(E) cuando las variables de E se reemplazan por lenguajes espec cos. Entonces w esta en L(F ) o en L(G). Caso 2 (Concatenacin): o Case 3 (Cerradura): La prueba de una Ley Algebraica para una RE Probar si E = F es verdadero. E y F son dos RE con el mismo conjunto de variables. PASOS: 1. Convertir E y F a RE concretas C y D, respectivamente, reemplazando cada variable por un s mbolo concreto. 2. Probar si L(C) = L(D). Si es cierto, entonces E = F es una ley verdadera y si no, la ley es falsa. NOTA: No se vern las pruebas para decidir si dos RE denotan el mismo a lenguaje hasta la seccin 4.4. o

44

Cap tulo 4 Propiedades de los Lenguajes Regulares


Existen diferentes herramientas que se pueden utilizar sobre los lenguajes regulares: El lema de Pumping: cualquier lenguaje regular satisface el pumping lemma, el cual se puede usar para probar que un lenguaje no es regular. Propiedades de cerradura: se pueden construir autmatas a partir de o componentes usando operaciones, v.g., dado un lenguaje L y M construir un autmata para L M. o Propiedades de decisin: anlisis computacional de autmatas, v.g., o a o probar si dos autmatas son equivalentes. o Tcnicas de minimizacin: utiles para construir mquinas ms peque as. e o a a n La clase de lenguajes conocidos como lenguajes regulares tienen al menos 4 descripciones: DF A, NF A, NF A y RE. No todos los lenguajes son regulares, por ejemplo, L = {0n 1n |n 1}. Si suponemos que el lenguaje es regular y es aceptado por un DFA A de k estados, si lee al menos k 0s se tiene que cumplir que dos estados se repitan, 45

esto es que para i < j, pi = pj . Llamemos a este estado q. Si (q, 1i) F entonces el mquina acepta errneamente 0j 1i , y si F entonces la mquina a o / a rechaza errneamente 0i 1i . o El problema es que el DFA tiene que tener historia de cuntos 0s lleva a para poder aceptar el mismo n mero de 1s y que este n mero es variable. u u

4.1

Lema de Pumping

Si L es un lenguaje regular, entonces existe una constante n tal que cada cadena w L, de longitud n o ms, puede ser escrita como w = xyz, donde: a 1. y = 2. |xy| n 3. Para toda i 0, wy iz tambin est en L. Notese que y i = y repetida i e a 0 veces; y = . Lo que dice es que si tenemos una cadena con una longitud mayor al n mero u de estados del autmata, entonces una cadena no vac y puede ser repetida o a (pumped ) un n mero arbitrario de veces. u

4.1.1

Prueba del Lema de Pumping

Como se da por hecho que L es regular, debe haber un DFA A tal que L = L(A). Si A tiene n estados; escogemos esta n para el lema de pumping. Sea w una cadena de longitud n en L, como en w = a1 a2 . . . am , donde m n. Sea qi el estado en que A esta despus de leer los primeros i s e mbolos de w. q0 = estado de inicio, q1 = (q0 , a1 ), q2 = (q0 , a1 a2 ), etc. 46

Como slo hay n estados diferentes, dos de q0 , q1 , . . . , qn deben ser los o mismos; digamos qi = qj , donde 0 i < j n. Sea x = a1 . . . ai ; y = ai+1 . . . aj ; z = aj+1 . . . am . Entonces, si repetimos el ciclo desde qi a qi con la etiqueta ai+1 . . . aj cero veces por una ocasin, o o i ms, se puede probar que xy z es aceptado por A. a

4.1.2

Uso del Lema de Pumping

El Lema de Pumping se utiliza para mostrar que un lenguaje L no es regular. Se inicia asumiendo que L es regular. Luego, debe haber alguna n que sirva como la constante de PL. Puede que no sepamos el valor de n, pero podemos seguir con el resto del juego con n como un parmetro. a Escogemos una w que sabemos que est en L. T a picamente, w depende de n. Aplicando el PL, sabemos que w puede descomponerse en xyz, satisfaciendo las propiedades del PL. De nuevo, puede que no sepamos como descomponer w, as que utilizaremos x, y, z como parmetros. a Derivamos una contradiccin escogiendo i (la cual puede depender de o i n, x, y, y/ z) tal que xy z no est en L. o a Ejemplo: considere el lenguaje de cadenas con el mismo n mero de 0s y u k 1s. Por el pumping lemma, w = xyz, |xy| n, y = y xy z L. 47

w = 000 . . . . . . 0 0111 . . . 11
x y z

En particular, xz L, pero xz tiene menos 0s que 1s. Ejemplo 2: Supongamos que L = 1p : p es primo es regular. Sea n el parmetro del pumping lemma y seleccionemos un primo p n + 2. a
p

w = 111 . . . . . . 1 111 . . . 11
x y z

|y| = m Ahora xy pmz est en L. |xppm z| = |xz|+(pm)|y| = pm+(pm)m = a (1 + m)(p m) Que no es un n mero primo, a menos que uno de los factores sea 1. Pero: u y = 1 + m > 1 y m = |y| |xy| n, p n + 2 p m n + 2 n = 2 Problema 1: Considere el problema 0n 10n y demuestre que no es regular. Problema 2: Considere que el conjunto de cadenas de 0s cuya longitud es un cuadrado perfecto; formalmente L = {0i|i es un cuadrado}. Suponemos que L es regular. Entonces hay una n constante que satisface las condiciones del PL. Considere w = 0n , que seguramente estar en L. a Entonces w = xyz, donde |xy| n y y = Por PL xyyz est en L. Pero la longitud de xyyz es ms grande que n2 a a 2 y no ms grande que n + n. a Sin embargo, el prximo cuadrado perfecto despus de n2 es (n + 1)2 = o e n + 2n + 1.
2
2

As xyyz no es de longitud cuadrada y no est en L. , a 48

Como hemos derivado una contradiccin, la unica asuncin que no se ha o o probado que L es regular debe ser una falla, y tenemos una prueba por contradiccin que L no es regular. o

4.1.3

Propiedades de Cerradura

Algunas operaciones sobre lenguajes regulares garantizan producir lenguajes regulares: Unin: L M lenguajes con cadenas en L, M o en ambos. o Interseccin: L M lenguajes con cadenas en ambos. o Complemento: L cadenas que no estn en L. a Diferencia: L\M o L M. Inversin: LR = {w R : w L} o Cerradura: L Concatenacin: L.M o Homomorsmo (substitucin): h(L) = {h(w) L}h es un homomoro smo. Homomorsmo inverso (substitucin inversa): h1 (L) = {w : o h(w) L, h : } es un homomorsmo. Unin: la unin de lenguajes regulares es regular. Sea L = L(E) y M = o o L(F ). Entonces L(E + F ) = L M , por la denicin de + en RE. o Complemento: Si L es un lenguaje regular sobre , entonces tambin lo es e L = L. Todos los estados son de aceptacin excepto los F. o

49

Ejemplo: Sea L denido por el siguiente DFA (el lenguaje de cadenas que terminan en 01):

Entonces L es descrito por (el lenguaje de cadenas que no terminan en 01):

Las cadenas de un n mero diferente de 0s y 1s es dif probarlo con u cil n n el pumping lemma. Sin embargo, ya probamos que L = 0 1 no es regular. M = 0n 1m , n = m es L. Como L no es regular su complemento tampoco. Interseccin: Si L y M son regulares, entonces tambin L M. Usando las o e leyes de Morgan: L M = L M . Para esto tambin se puede construir un autmata que simula AL y AM e o en paralelo y llega a un estado de aceptacin si AL y AM tambin lo hacen. o e

50

Ejemplo: (a) todos las cadenas con un 0, (b) todas las cadenas con un 1, (c) todas las cadenas con un 0 y un 1.

Diferencia: L\M lenguaje en L pero no en M, L\M = L M. Inversin: w R es la cadena invertida w. Ejemplo: 0010R = 0100. o Inversin de un lenguaje L es el lenguaje con todas las cadenas de L o invertidas. Por ejemplo: L = {001, 10, 111}, LR = {100, 01, 111}. Se puede probar que L(E R ) = (L(E))R . En particular, E R = E para conjunto vac y a. o Si E = F + G, entonces, E R = F R + GR Si E = F G, entonces E R = GR F R Por ejemplo, L(E1 ) = {01, 111} y L(E2 ) = {00, 10}. 51

L(E1 )L(E2 ) = {0100, 0110, 11100, 11110} LR (E1 ) = {10, 111} y LR (E2 ) = {00, 01} LR (E1 )LR (E2 ) = {0010, 00111, 0110, 01111} = (L(E1 )L(E2 ))R Si L = (0 + 1)0 , LR = (0 )R (0 + 1)R = 0 (0 + 1) Si E = F , entonces E R = (F R ) Homomorsmo Un homomorsmo sobre es una funcin h : , donde y son o alfabetos. Sea w = a1 a2 . . . an . Entonces h(w) = h(a1 )h(a2 ) . . . h(an ) y h(L) = {h(w) L}. Ejemplo: sea h : {0, 1} {a, b} denido como h(0) = ab, y h(1) = . Entonces h(0011) = abab y h(L(10 1)) = L((ab) ). h(L) es regular si L es regular. Sea L = L(E) para una RE E, queremos probar que L(h(E)) = h(L). Base: E es , h(E) = E y L(h(E)) = L(E) = h(L(E)). o E es un solo s mbolo, a. Entonces L(E) = a, y L(h(E)) = L(h(a)) = {h(a)} = h(L(E)). Induccin: Hay tres casos, dependiendo de si R = R1 + R2 , R = R1 R2 , o o R = R1 . L = E + F, L(h(E + F )) = L(h(E) + h(F )) = L(h(E)) L(h(F )) = h(L(E)) h(L(F )) = h(L(E) L(F )) = h(L(E + F )) L = E F, L(h(E F )) = L(h(E)) L(h(F )) = h(L(E)) h(L(F )) = h(L(E) L(F )) L = E , L(h(E )) = L(h(E) ) = h(L(E)) = h(L(E ))

52

Homomorsmo Inverso: Sea h : un homomorsmo. Sea L , entonces h1 (L) = {w|w : h(w) L}.

Sea h : un homomorsmo. Sea L un lenguaje regular, entonces h1 (L) es regular. El DFA del homomorsmo inverso usa los estados del DFA original, pero cambia los s mbolos de entrada de acuerdo a la funcin h antes de decidir el o siguiente estado. En la prueba lo importante es que los estados de aceptacin o de los dos autmatas son los mismos y que h(a), para cualquier s o mbolo a dentro del alfabeto del DFA original puede ser , un s mbolo o muchos s mbolos. (q, a) = (q, h(a)).

53

La prueba se hace por induccin sobre |w|. (q0 , w) = (q0 , h(w)). o

4.1.4

Propiedades de decisin o

Algunas de las preguntas que nos podemos hacer acerca de lenguajes son si el lenguaje es vac si una cadena particular pertenece al lenguaje o si dos o, descripciones denen el mismo lenguaje. Tambin podemos cuestionarnos acerca del costo computacional requerido e para resolver estas preguntas o por ejemplo el requerido para hacer la conversin entre una representacin a otra. o o Transformar un -NFA a un DFA: Si el -NFA tiene n arcos. Para calcular ECLOSE(p) se requieren seguir a lo ms n2 arcos. El DFA tiene a n a lo ms 2 estados. Para cada s a mbolo y cada subconjunto el calcular la funcin de transicin para todos los estados, requiere a lo ms n3 pasos, lo o o a 3 n cual nos da una complejidad total de O(n 2 ). En general el n mero de u estados del DFA es de orden lineal (digamos s), por lo que en la prctica la a 3 complejidad se reduce a O(n s).

54

Transformar un DFA a un NFA: Slo se requiere poner corchetes a los o estados, lo cual nos da O(n). Transformar un FA a una RE: O(n34n ). Es todav peor si el FA es NFA. a 3 n Si lo convertimos primero a un DFA nos da: O(n3 4n 2 ). Transformar de una RE a un FA: se puede construir un autmata en o n pasos. Si eliminamos transiciones toma O(n3 ). Si se requiere un DFA puede tomar un n mero exponencial de pasos. u Decidir si un lenguaje es vac el probar si existe un camino entre un o: estado inicial a uno nal o de aceptacin, es simplemente un problema de o ver si un nodo est conectado en un grafo, lo cual tiene una complejidad de a O(n2 ). Probar por pertenencia a un lenguaje regular: ver si una cadena es miembro del lenguaje. Si la cadena w es de longitud n para un DFA, esto es de complejidad O(n). Si es un NFA de s estados, entonces la complejidad es: O(ns2 ). Si es un -NFA entonces la complejidad es O(ns3).

4.2

Equivalencia y minimizacin de autmatas o o

Lo que queremos saber es si dos autmatas diferentes denen el mismo o lenguaje. Primero deniremos lo que son estados equivalentes. Dos estados p y q dentro de un autmata son equivalentes: p q w o w) F (q, w) F . : (p,

Si no, entonces se dice que son distinguibles. Osea que p y q son distin guibles si: w : (p, w) F (q, w) F o viceversa. /

55

Ejemplo:

(C, ) F, (G, ) F C = G / 01) = C F, (G, 01) = E F A = G (A, / (A, ) = A F, (E, ) = E F / / (A, 1) = F = (E, 1) (A, 1x) = (E, 1x) = (F, 1x) (A, 00) = G = (E, 00) (A, 01) = C = (E, 01) AE

Tambin podemos encontrar los pares equivalentes usando el algoritmo e de llenado de tabla (table-lling algorithm). Base: Si p F q = F p = q Induccin: Si a : (p, a) = (q, a) p = q o

56

Por ejemplo, para el DFA anterior:

4.2.1

Prueba de equivalencia entre lenguajes regulares

Sea L y M dos lenguajes regulares (dados en alguna forma). Convierte L y M a DFAs Junta los dos DFAs Prueba si los dos estados iniciales son equivalentes, en cuyo caso L = M. Si no son equivalentes, entonces L = M.

57

Ejemplo:

Los dos DFAs aceptan: L( + (0 + 1) 0). Si los consideramos a los dos como un solo autmata, el algoritmo de llenado de tabla nos da: o

Lo que nos deja los siguientes pares de estados equivalentes: {A, C}, {A, D}, {C, D} y {B, E}. Como A y C son equivalentes, entonces los dos autmatas son o equivalentes. 58

4.2.2

Minimizacin de un DFA o

Una consecuencia de encontrar estados equivalentes, es que podemos reemplazar los estados equivalentes por un solo estado representado por su unin. o Por otro lado, la relacin de equivalencia cumple con ser reexiva, simtrica o e y transitiva. La prueba de equivalencia de estados es transitiva, osea que si encontramos que p y q son equivalentes y q y r son equivalentes, entonces p y r son equivalentes. Ejemplo: el siguiente autmata, lo podemos minimizar usando los estados o

59

equivalentes.

Nota: no podemos aplicar el algoritmo de llenado de tabla a un NFA. Ejemplo 4.4.1:

60

Cap tulo 5 Gramaticas Libres de Contexto


5.1 Introduccin o

Hemos visto que muchos lenguajes no son regulares. Por lo que necsitamos una clase mas grande de lenguages Las Gramticas Libres de Contexto (Context-Free Languages) o CFLs a jugaron un papel central en lenguaje natural desde los 50s y en los compiladores desde los 60s Las Gramticas Libres de Contexto forman la base de la sintxis BNF a a Son actualmente importantes para XML y sus DTDs (document type denition) Vamos a ver los CFGs, los lenguajes que generan, los rboles de parseo, a el pushdown automata y las propiedades de cerradura de los CFLs. Ejemplo: Considere Lpal = {w : w = w R } Por ejemplo, oso Lpal , anitalavalatina Lpal , Sea = {0, 1} y supongamos que Lpal es regular.

61

Sea n dada por el pumping lemma. Entonces 0n 10n Lpal . Al leer 0n el FA debe de entrar a un ciclo. Si quitamos el ciclo entonces llegamos a una contradiccin. o Denamos Lpal de forma inductiva. Base: , 0 y 1 son pal ndromes. Induccin: Si w es un pal o ndrome, tambin 0w0 y 1w1. e Ninguna otra cosa es pal ndrome. Las CFGs son un mecanismo formal para la denicinn como la de o pal ndrome. P P P P P 0 1 0P 0 1P 1

donde 0 y 1 son s mbolos terminales. P es una variable o s mbolo no terminal o categor sintctica. a a P es en esta gramtica tambin el s a e mbolo inicial. 1-5 son producciones o reglas. La variable denida (parcialmente) en la produccin tambin se llama la cabeza de la produccin y la cadena de cero, o e o 1 o ms s a mbolos terminales o variables a la derecha de la produccin se o llama el cuerpo de la produccin. o

5.2

Denicin formal de CFGs o

Una grmatica libre de contexto se dene con G = (V, T, P, S) donde: a V es un conjunto de variables T es un conjunto de terminales 62

P es un conjunto nito de producciones de la forma A , donde A es una variables y (V T ) S es una variable designada llamada el s mbolo inicial Ejemplo: Gpal = ({P }, {0, 1}, A, P ), donde A = {P , P 0, P 1, P 0P 0, P 1P 1}. Muchas veces se agrupan las producciones con la misma cabeza, e.g., A = {P |0|1|0P 0|1P 1}. Ejemplo: Expresiones regulares sobre {0, 1} se pueden denir por la gramtica: a Gregex = ({E}, {0, 1}, A, E), donde A = {E 0, E 1, E E.E, E E + E, E E , E (E)}. Ejemplo: expresiones (simples) en un lenguaje de programacin t o pico. Los operadores son + y , y los argumentos son identicadores, osea strings que empiezan con a o b en L((a + b)(a + b + 0 + 1) ). Las expresiones se denen por la gramtica: G = ({E, I}, T, P, E) donde a T = {+, .(, ), a, b, 0, 1} y P es el siguiente conjunto de producciones: 1)E I 2)E E + E 3)E E E 4)E (E) 5)I a 6)I b 7)I Ia 8)I Ib 9)I I0 10)I I1

5.3

Derivaciones usando gramticas a

Inferencia recursiva, usando las producciones del cuerpo a la cabeza. Con esto reconocemos si una cadena est en el lenguaje denido por la a gramtica. a 63

Ejemplo de una inferencia recursiva de la cadena: a (a + b00). Cadenas (i) a (ii) b (iii) b0 (iv) b00 (v) a (vi) b00 (vii) a + b00 (viii) (a + b00) (ix) a (a + b00) Cabeza I I I I E E E E E Del Leng. de Cadenas usadas 5 6 9 (ii) 9 (iii) 1 (i) 1 (iv) 2 (v),(vi) 4 (vii) 3 (v),(viii)

Derivaciones, usando las producciones de la cabeza al cuerpo. Con esto derivamos cadenas que pertenecen a la gramtica. a Para esto introducimos un nuevo s mbolo: Sea G = (V, T, P, S) una CFG, A V, {, } (V T ) y A P . Entonces, escribimos: A G o si se sobre-entiende G: A y decimos que A deriva . Denimos como la cerradura reexiva y transitiva de . Lo que quiere decir es que usamos uno a mas pasos de derivacin. o Ideas: Base: Sea (V T ) , entronces (osea que cada cadena se deriva a s misma). Induccin: Si , y , entonces o Ejemplo: La derivacin de a(a+b00) a partir de E en la gramtica anterior o a ser a: E E E I E a E a (E) a (E + E) a (I + E) a (a + E) a (a + I) a (a + I0) a (a + I00) a (a + b00) Podemos abreviar y simplemente poner: E a (a + b00)

64

La derivacin y la inferencia recursiva son equivalentes, osea que si podeo mos inferir que una cadena de s mbolos terminales w est en el lenguaje de a una variable A entonces A w y al revs. e Nota 1: en cada paso podemos tener varios reglas de las cuales escoger, e.g.: I E a E a (E) o I E I (E) a (E) Nota 2: no todas las opciones nos llevan a derivaciones exitosas de una cadena en particular, por ejemplo: E E + E no nos lleva a la derivacin o de a (a + b00).

5.4

Derivaciones ms a la izquierda y ms a a a la derecha

Para restringir el n mero de opciones para derivar una cadena. u Derivacin ms a la izquierda (leftmost derivation): lm siempre reo a emplaza la variable ms a la izquierda por uno de los cuerpos de sus a producciones. Derivacin ms a la derecha (rightmost derivation): rm siempre reo a emplaza la variable ms a la derecha por uno de los cuerpos de sus a producciones. Ejemplo: la derivacin anterior la podemos hacer como derivacin ms a la o o a izquierda: E lm E E lm I E lm a E lm a (E) lm a (E + E) lm a(I +E) lm a(a+E) lm a(a+I) lm a(a+I0) lm a(a+I00) lm a (a + b00) o simplemente E lm a (a + b00) Por otro lado, tambin la podemos hacer ms a la derecha: e a E rm E E rm E (E) rm E (E + E) rm E (E + I) rm E (E +I0) rm E (E +I00) rm E (E +b00) rm E (I +b00) rm E (a+b00) rm I (a+b00) rm a(a+b00) o simplemente E rm a(a+b00). 65

Cualquier derivacin tiene una derivacin equivalente ms a la izquierda o o a y una ms a la derecha. a Si w es una cadena de s mbolos terminales y A es una variable, A w si y solo si A lm w y si y solo si A rm w.

5.5

El Lenguaje de la Gramtica a

Si G(V, T, P, S) es una CFG, entonces el lenguaje de G es: L(G) = {w T : S G w}, osea el conjunto de cadenas sobre T derivadas del s mbolo inicial. Si G es una CFG al L(G) se llama lenguaje libre de contexto. Por ejemplo, L(Gpal ) es un lenguaje libre de contexto. Teorema: L(Gpal ) = {w {0, 1} : w = w R } Prueba: () Suponemos w = w R . Mostramos por induccin en |w| que o w L(Gpal ). Base: |w| = 0 or |w| = 1. Entonces w es , 0 o 1. Como P , P 1 y P 0 son producciones, concluimos que P G w en todos los casos base. Induccin: Suponemos |w| 2. Como w = w R , tenemos que w = 0x0 o o w = 1x1 y que x = xR . Si w = 0x0 sabemos de la hiptesis inductiva que P x, entonces o P 0P 0 0x0 = w, entonces w L(Gpal ). El caso para w = 1x1 es similar. (): Asumimos que w L(Gpal ) y tenemos que mostrar que w = w R . Como w L(Gpal ), tenemos que P w. Lo que hacemos es induccin o sobre la longitud de . Base: La derivacin de se hace en un solo paso, por lo que w debe de ser o , 0 o 1, todos pal ndromes. 66

Induccin: Sea n 1 y suponemos que la derivacin toma n + 1 pasos y que o o el enunciado es verdadero para n pasos. Osea, si P x en n pasos, x es pal ndrome. Por lo que debemos de tener para n + 1 pasos: w = 0x0 0P 0 P o w = 1x1 1P 1 P donde la segunda derivacin toma n pasos. o Por la hiptesis inductiva, x es un pal o ndrome, por lo que se completa la prueba.

5.6

Sentential Forms

Sea G = (V, T, P, S) una CFG y (V T ) . Si S decimos que est a en forma de sentencia /sentential form). Si S lm decimos que es una forma de sentencia izquierda (leftsentencial form), y si S rm decimos que es una forma de sentencia derecha (right-sentencial form). L(G) son las formas de sentencia que estan en T . Ejemplo: Si tomamos la gramtica del lenguaje sencillo que denimos ana teriormente, E (I + E) es una forma de sentencia ya que: E E E E (E) E (E + E) E (I + E). Esta derivacin no es ni ms a la izquierda ni ms a la derecha. o a a Por otro lado: a E es una forma de sentencia izquierda, ya que: E lm E E lm I E lm a E y E (E + E) es una forma de sentencia derecha, ya que: E rm E E rm E (E) rm E (E + E)

5.7

Arboles de Parseo

Si w L(G) para alguna CFG, entonces w tiene un rbol de parseo (parse a tree), el cual nos da la estructura (sintctica) de w. w puede ser un programa, a un query en SQL, un documento en XML, etc. 67

Los rboles de parseo son una representacin atlernativa de las derivaa o ciones e inferencias recursivas. Pueden existir varios rboles de parseo para la misma cadena. a Idealmente nos gustar que existiera solo uno, i.e., que el lenguaje fuera a no ambig o. Desafortunadamente no siempre se puede quitar la ambig edad. u u

5.7.1

Construyendo Arboles de Parseo

Sea G = (V, T, P, S) una CFG. Un rbol es un rbol de parseo de G si: a a 1. Cada nodo interior est etiquetado con una variable en V a 2. Cada hoja est etiquetada con un s a mbolo en V T {}. Cada hoja etiquetada con es el unico hijo de su padre. 3. Si un nodo interior tiene etiqueta A y sus hijos (de izquierda a derecha) tienen etiquetas: X1 , X2 , . . . , Xk , entonces: A X1 , X2 , . . . , Xk P Ejemplo: En la gramtica: a EI E E+E E EE E (E) . . . el siguiente es un rbol de parseo: a

68

Este rbol muestra la derivacin: E I + E. a o Ejemplo: En la gramtica: a P P 0 P 1 P 0p0 P 0p0 el siguiente es un rbol de parseo: a

Este rbol muestra la derivacin: P 0110. a o

5.7.2

El producto de un rbol de parseo a

El producto (yield ) de un rbol de parseo es la cadena de hojas de izquierda a a derecha. Son en especial relevantes los rboles de parseo que: a 1. El producto es una cadena terminal 2. La ra est etiquetada con el s z e mbolo inicial El conjunto de productos de estos rboles de parseo nos denen el lenguaje a de la gramtica. a 69

Ejemplo: considere el siguiente rbol de parseo a

cuyo producto es: a(a+b00) (podemos comparar este rbol con la derivacin a o que hicimos antes). Sea G = (V, T, P, S) una CFG y A V . Vamos a demostrar que lo siguiente es equivalente: Podemos determinar por inferencia recursiva que w est en el lenguaje e de A Aw A lm w y A rm w Existe un rbol de parseo de G con ra A que produce w a z

70

El siguiente es el plan a seguir para probar las equivalencias:

5.7.3

De inferencias a rboles a

Teorema: Sea G = (V, T, P, S) una CFG y supongan que podemos mostrar que w est en el lenguaje de una variable A. Entonces existe un rbol de a a parseo para G que produce w. Prueba: la hacemos por induccin en la longitud de la inferencia o Base: Un paso. Debemos de usar la produccin A w. El rbol de parseo o a es entonces:

Induccin: w es inferido en n + 1 pasos. Suponemos que el ultimo paso se o baso en la produccin: A X1 , X2 , . . . , Xk , donde Xi V T . o Descomponemos w en: w1 w2 . . . wk , donde wi = Xi cuando Xi T , y cuando Xi V , entonces wi fu previamente inferida en Xi en a los ms n e a pasos. Por la hiptesis de inferencia existen i rboles de parseo con ra Xi que o a z producen wi . Entonces el siguiente en una rbol de parseo de G con ra en a z 71

A que produce w:

5.7.4

De rboles a derivaciones a

Mostraremos como construir una derivacin ms a la izquierda de un rbol o a a de parseo. Ejemplo: De una gramtica podemos tener la siguiente derivacin: E a o I Ib ab. Entonces, para cualquier y existe uan derivacin E I o Ib ab. Por ejemplo, supongamos que tenemos la derivacin: o E E + E E + (E) Entonces podemos escoger = E+( y = ) y seguir con la derivacin o como: E + (E) E + (I) E + (Ib) E + (ab) Por esto es que las CFG se llaman libres de contexto (substitucin de o cadenas por variables, independientes del contexto). Teorema: Sea G = (V, T, P, S) una CFG y supongamos que existe un rbol a de parseo cuya ra tiene etiqueta A y que produce w. Entonces A lm w z en G. Prueba: la hacemos por induccin en la altura del rbol. o a 72

Base: La altura es 1, y el rbol debe de verse asi: a

Por lo tanto A w P y A lm w. Induccin: Altura es n + 1. El rbol debe de verse as o a :

Entonces w = w1 w2 . . . wk donde: 1. Si Xi T , entonces wi = Xi 2. Si Xi V , entonces debe de ser la ra de un subrbol que nos da wi , z a Xi lm wi en G por la hiptesis inductiva o Ahora mostramos A w1 w2 . . . wiXi+1 Xi+2 . . . Xk , obtener una derivacin o lm ms a la izquierda. Probamos sobre i: a Base: Sea i = 0. Sabemos que: A lm X1 X2 . . . Xk Induccin: Hacemos la hiptesis inductiva: A w1 w2 . . . wi1 Xi Xi+1 . . . Xk o o lm Caso 1: Si Xi T , no hacemos nada ya que Xi = wi que nos da: A w1 w2 . . . wi Xi+1 . . . Xk lm Case 2: Xi V . Por la hiptesis inductiva existe una derivacin Xi lm o o 73

1 lm 2 . . . lm wi . Por la propiedad libre de contexto de las revivaciones podemos proceder como:

A w1 w2 . . . wi1 Xi Xi+1 . . . Xk lm lm w1 w2 . . . wi1 1 Xi+1 . . . Xk lm w1 w2 . . . wi1 2 Xi+1 . . . Xk lm ... w1 w2 . . . wi1 wi Xi+1 . . . Xk lm

Ejemplo: Construyamos la derivacin ms a la izquierda del rbol: o a a

Sopongamos que construimos inductivamente la derivacin ms a la izquierda: o a E lm I lm a que corresponde con la rama izquierda del rbol, y la a derivacin ms a la izquierda: o a E lm (E) lm (E + E) lm (I + E) lm (a + E) lm (a I) lm 74

(a + I0) lm (a + I00) lm (a + b00) correspondiendo a la rama derecha del rbol. a Para las derivaciones correspondientes del rbol completo empezamos con a E lm E E y expandimos la primera E con la primera derivacin y la o segunda E con la segunda derivacin: o E lm E E lm I E lm a E lm a (E) lm a (E + E) lm a(I +E) lm a(a+E) lm a(aI) lm a(a+I0) lm a(a+I00) lm a (a + b00) De forma similar podemos convertir un rbol en una derivacin ms a la a o a derecha. Osea, si existe un rbol de parseo con ra etiquetada con la variable a z A que produce w T , entonces existe: A rm w.

5.7.5

De derivaciones a inferencias recursivas

Supongamos que A X1 X2 . . . Xk w, entonces: w = w1 w2 . . . wk donde Xi w i . El factor wi se puede extraer de A w viendo unicamente a la expansin o de Xi . Por ejemplo: E a b + a y E E
X1

X2

E
X3

+
X4

E
X5

Tenemos que: E E E E E + E I E + E I I + E I I +I aI +I ab+I ab+a Viendo solo a la expansin de X3 = E podemos extraer: E I b o Teorema: Sea G = (V, T, P, S) una CFG. Suponga A G w y que w es una cadena de s mbolos terminales. Entonces podemos inferir que w est en el a lenguaje de la variable A. Prueba: la hacemos por induccin en la longitud de la derivacin A G w o o 75

Base: Un paso. Si A G w entonces debe de existir una produccin A w o en P . Por lo que podemos inferir que w est en el lenguaje de A. a Induccin: Suponemos A G w en n + 1 pasos. Escribimos la derivacin o o como: A G X1 X2 . . . X k G w Como vimos, podemos partir w como w1 w2 . . . wk donde Xi G wi . Adems Xi G wi puede usar a lo ms n pasos. a a Ahora tenemos una produccun A X1 X2 . . . Xk y sabemos por la o hiptesis inductiva que podemos inferir que wi est en el lenguaje de Xi . o a Por lo que podemos inferir que w1 w2 . . . wk est en el lenguaje de A. a

5.8

Ambig edad en Gramticas y Lenguajes u a

En la gramtica: a EI E E+E E EE E (E) ... la sentencia E + E E tiene dos derivaciones: E E + E E + E E y E E E E + E E lo cual nos da dos rboles de parseo: a

Si tuvieramos n meros, e.g., 2,4 y 6, en lugar de las Es nos dar 26 u a 76

por un lado y 36 por el otro. La existencia de varias derivaciones no es gran problema, sino la existencia de varios rboles de parseo. a Por ejemplo, en la misma gramtica: a ... Ia Ib I Ia I Ib I I0 I I1 la cadena a + b tiene varias derivaciones: E E+E I +E a+E a+I a+b E E+E E+I I +I I +ba+b sin embargo, sus rboles de parseo son los mismos y la estructura de a + b a no es amb ua. g Denicin: Sea G = (V, T, P, S) una CFG. Decimos que G es amb ua si o g existe una cadena en T que tenga ms de un rbol de parseo. a a Si todas las cadenas en L(G) tienen a lo ms un rbol de parseo, se dice a a que G es no amb ua. g Ejemplo: La cadena a + a a tiene dos rboles de parseo: a

77

5.8.1

Removiendo la ambig edad de las gramticas u a

Las buenas noticias: A veces se puede remover la ambig edad a mano u Las malas noticias: no hay un algoritmo para hacerlo Peores noticias: Algunos CFLs solo tienen CFGs amb uas. g En la gramtica: E I|E + E|E E|(E) y I a|b|Ia|Ib|I0|I1 existen a dos problemas: 1. No hay precedencia entre y + 2. No existe un agrupamiento en las secuencias de operadores, e.g., E + E + E signica: E + (E + E) o (E + E) + E. Solucin: podemos introducir ms variables para forzar un agrupamiento o a uniforme: Un factor (F ) es una expresin que no puede separarse por un o + o Un trmino (T ) es una expresin que no puede separarse por un + e o El resto son expresiones que pueden separarse por o + La gramtica queda: a I a|b|Ia|Ib|I0|I1 F I|(E) T F |T F E T |E + T

78

Con esto, el unico rbol de parseo de a + a a es: a

Las razones por las cuales la gramtica nueva es no amb ua son: a g Un factor es o un identicador o (E) para una expresin E o El unico rbol de parseo de una secuencia f1 f2 . . . fn1 fn de a

79

factores es el que da f1 f2 . . . fn1 como trmino y fn como factor. e

Una expresin es una sequencia de: t1 + t2 + . . . + tn1 + tn de trminos o e ti y solo se puede parsear con t1 + t2 + . . . + tn1 como una expresin o y con tn como trmino. e

80

5.8.2

Derivaciones ms a la izquierda y ambig edad a u

En gramticas no amb uas, las derivaciones ms a la izquierda y ms a la a g a a derecha son unicas. Los dos rboles de derivacin de a + a a son: a o

que nos da dos derivaciones: E lm E + E lm I + E lm a + E E lm a + I E lm a + a E lm a + a I lm a + a a y E lm E + E E lm I + E E lm a + E E lm a + I E lm a + a E lm a + a I lm a + a a En general: Se tienen un rbol de parseo pero varias derivaciones a Muchas derivaciones ms a la izquierda implican muchos rboles de a a parseo Muchas derivaciones ms a la derecha implican muchos rboles de a a parseo 81

Teorema: For cualquier CFG G, una cadena de terminales w tiene dos rboles de parseo diferentes si y solo si w tiene dos derivaciones ms a la a a izquierda distintas desde el s mbolo inicial. Esquema de la prueba: (Solo si) Si dos rboles de parseo dieren, tienen a un nodo con diferentes producciones. Las derivaciones ms a la izquierda a correspondientes usaran sus derivaciones en estas dos producciones diferentes y por lo tanto sern distintas. a (Si) Analizando como se construye un rbol de parseo a partir de una derivacin a o ms a la izquierda, debe de ser claro que dos derivaciones distintas producen a dos rboles de parseo distintos. a

5.8.3

Ambig edad Inherente u

Un CFL L es inherentemente amb uo si todas las gramticas para L son g a amb uas. g Ejemplo: Considere L = {an bn cm dm : n 1, m 1} {an bm cm dn : n 1, m 1} Una gramtica para L es: a S AB|C A aAb|ab B cBd|cd C aCd|aDd D bDc|bc

82

Veamos los rboles para: aabbccdd: a

Vemos que existen dos derivaciones ms a la izquierda: a S lm AB lm aAbB lm aabbB lm aabbcBd lm aabbccdd y S lm C lm aCd lm aabDdd lm aabbccdd Se puede mostrar que todas las gramticas para L se comportan como la a anterior. L es inherentemente amb uo. g

83

Cap tulo 6 Autmatas de Pila (Push-down o automata)


6.1 Pushdown Automata

Las gramticas libres de contexto tienen un tipo de autmata que las dene a o llamado pushdown automata. Un pushdown automata (PDA) es bsicamente un -NFA con un stack, a en donde se puede almacenar una cadena y por lo tanto se puede recordar informacin. o Sin embargo, slo puede acceder a esta informacin en forma LIFO por o o lo que existen lenguajes reconocidos por una computadora pero no por un PDA, por ejemplo: {0n 1n 2n |n 1}. En una transicin el PDA: o 1. Consume un s mbolo de entrada o hace una transicin vac () o a 2. Se va a un nuevo estado (o se queda en el mismo) 3. Reemplaza el primer elemento del stack por alguna cadena (puede ser el mismo s mbolo de arriba del stack, lo que corresponde con no hacer 84

nada, hace pop, lo que corresponde con , o hace push de una cadena al stack )

Ejemplo: sea Lw = {ww R : w {0, 1} } con una gramtica: P a 0P 0, P 1P 1, P . Un PDA para Lwwr tiene 3 estados y opera de la siguiente manera: 1. Adivina que esta leyendo w. Se queda en el estado 0 y push el s mbolo de entrada al stack. 2. Adivina que est en medio de la cadena (ww R) y se mueve espontneamente a a al estado 1. 3. Est leyendo w R y compara el valor con el valor de hasta arriba del a stack. Si son iguales hace un pop y se queda en el estado 1. 4. Si se vac el stack, se va al estado 2 y acepta. a

85

o El PDA para Lwwr es el siguiente diagrama de transicin:

Los nodos, nodo inicial y nal, son como los hemos visto antes. La diferencia principal es que en las transiciones (arcos) la etiqueta a, X/ signica que (q, a, X) tiene el par (p, ). O sea nos dice la entrada y cmo estaba y o cmo queda la parte superior del stack. o Lo unico que no nos dice es cul es el s a mbolo inicial del stack. Por convencin se usa Z0 . o Formalmente, un PDA es una sptupla: P = (Q, , , , q0 , Z0 , F ), donde: e Q: es un conjunto nito de estados : es un alfabeto nito de entradas : es un alfabeto nito del stack : Q {} 2Q es la funcin de transicin o o

q0 : es el estado inicial Z0 : es el s mbolo inicial del stack F Q: es el conjunto de estados nales o de aceptacin o

86

Ejemplo: El PDA

Es la siguiente tupla: P = ({q0 , q1 , q2 }, {0, 1}, {0, 1, Z0}, , q0 , Z0 , {q2 }). Donde est denida por la siguiente tabla: a q0 q1 q2 0, Z0 q0 , 0Z0 1, Z0 q0 , 1Z0 0, 0 0, 1 1, 0 1, 1 q0 , 00 q0 , 01 q0 , 11 q1 , Z0 q1 , q1 , , Z0 q1 , 0 q2 , Z0 , 0 , 1 q1 , 1

Descripciones instantneas o IDs. Una ID es una tripleta (q, w, ) donde a q es un estado, w es lo que falta de la entrada y es el contenido del stack. Esto es lo que para los FA es el . Usamos para representar un movimiento en un PDA. Sea P = (Q, , , , q0 , Z0, F ) un PDA. Entonces w , : (p, ) (q, a, X) (q, aw, X) (p, w, ). Denimos como la cerradura reexiva-transitiva de:

87

Ejemplo: Con la entrada 1111 el PDA:

Tiene la siguiente secuencia:

88

Se cumplen las siguientes propiedades. Si una secuencia ID es una computacin legal para un PDA: o 1. Entonces tambin es legal la secuencia que se obtiene al a adir una e n cadena al nal del segundo componente. 2. Entonces tambin es legal la secuencia que se obtiene al a adir una e n cadena hasta abajo del tercer componente. 3. Y el nal de una entrada no es consumida, el eliminar ese nal de todos los IDs tambin resulta en una secuencia legal. e Teoremas: w , (q, x, ) (p, y, ) (q, xw, ) (p, yw, ) que cubre el primer principio si = y el segundo si w = . Y: (q, xw, ) (p, yw, ) (q, x, ) (p, y, ) que cubre el tercer principio. Existen dos formas equivalentes de PDA que aceptan un cierto lenguaje L: 1. Aceptar por el estado nal: L(P ) = {w : (q0 , w, Z0) (q, , ), q F } 2. Aceptar por el stack vac N(P ) = {w : (q0 , w, Z0) (q, , )} o: Por ejemplo, podemos ver una secuencia legal para aceptar por estado nal un pal ndrome: (q0 , ww R, Z0 ) (q0 , w R , w R Z0 ) (q1 , w R , w RZ0 ) (q1 , , Z0 ) (q2 , , Z0 ) Las dos representaciones son equivalentes y se puede pasar de una que acepta por stack vac a una que acepta por estado nal y viceversa. o

89

6.1.1

De stack vac a estado nal o

Se ilustra en la siguiente gura:

La idea, es usar un s mbolo nuevo como marca para se alizar el nal n del stack y un nuevo estado cuyo unico objetivo es poner Z0 arriba de este s mbolo especial. Despus se simula la misma transicin de estados hasta e o que se vac el stack. Finalmente, a adimos un nuevo estado que es el de e n aceptacin al que se llega cada vez que se vac el stack. o a Lo anterior lo podemos expresar como sigue: (q0 , w, X0) F (q0 , w, Z0X0 ) F (q, , X0 ) F (pf , , )

6.1.2

De un estado nal a un stack vac o

Se ilustra en la siguiente gura:

90

La idea es la siguiente: Cada vez que se llega a un estado nal, se hace una transicin vac a un nuevo estado en donde se vac el stack sin consumir o a a s mbolos de entrada. Para evitar simular una situacin en donde se vac o a el stack sin aceptar la cadena, de nuevo se introduce al principio un nuevo s mbolo al stack. Lo anterior lo podemos expresar como sigue: (p0 , w, X0) N (q0 , w, Z0X0 ) N (q, , X0) N (p, , ) Ejemplo: podemos pasar del siguiente PDA que acepta por stack vac a o un PDA que acepta por estado nal:

PN = ({q}, {i, e}, {Z}, N , q, Z), donde N es: N (q, i, Z) = {(q, ZZ)} N (q, e, Z) = {(q, )}

PF = ({p, q, r}, {i, e}, {Z, X0}, F , p, X0 , r), donde F es: F (p, , X0) = {(q, ZX0 )} F (q, i, Z) = {(q, ZZ)} F (q, e, Z) = {(q, )} F (q, , X0 ) = {(r, )}

91

6.2

Equivalencia entre PDAs y CFGs

Los lenguajes denidos por los PDA son los lenguajes libres de contexto. Un lenguaje es generado por un CFG si y solo si es aceptado por un PDA con stack vac si y solo si es aceptado por un PDA con estado nal. o

La ultima parte ya la sabemos y slo nos falta demostrar lo primero. o

6.2.1

De un CFG a un PDA

Dada una gramtica G vamos a construir un PDA que simula lm a Cualquier forma de sentencia izquierda que no es una cadena terminal la podemos escribir como xA donde A es la variable ms a la izquierda, x a son los s mbolos terminales que aparecen a la izquierda, y es la cadena de s mbolos terminales y variables que aparecen a la derecha de A. La idea para construir un PDA a partir de una gramtica, es que el PDA a simula las formas de sentencia izquierdas que usa la gramtica para generar a una cadena w. A que es la cola de la forma de sentencia izquierda que va a aparecer en el stack con A como primer elemento. Sea xA lm x. Usa o adivina que se usa la produccin A . o Esto corresponde a un PDA que consume primero a x con A en el stack y luego con saca (pops) A y mete (pushes) . O de otra forma, sea w = xy, entonces el PDA va en forma no-determin sta de la conguracin (q, y, A) o a la conguracin (q, y, ). o En (q, y, ) el PDA se comporta como antes, a menos que sean s mbolos terminales en el prejo de , en cuyo caso el PDA los saca (pops) del stack, 92

si puede consumir s mbolos de entrada. Si todo se adivina bien, el PDA acaba con un stack vac y con la cadena o de entrada. Ntese que el PDA tiene un solo estado. o Formalmente, sea G = (V, T, Q, S) un CFG. Se dene un PG como ({q}, T, V T, , q, S) donde: (q, , A) = {(q, ) : A Q} para A V , y (q, a, a) = {(q, )} para a T . Ejemplo: convirtamos la siguiente gramtica en un PDA. I a|b|Ia|Ib|I0|I1 a E I|E E|E + E|(E) Los s mbolos terminales del PDA son: {a, b, 0, 1, (, ), +, } La funcin de transicin del PDA es: o o (q, , I) = {(q, a), (q, b), (q, Ia), (q, Ib), (q, I0), (q, I1)} (q, , E) = {(q, I), (q, E + E), (q, E E), (q, (E))} (q, a, a) = {(q, )}, (q, b, b) = {(q, )}, (q, 0, 0) = {(q, )}, (q, 1, 1) = {(q, )}, (q, (, () = {(q, )}, (q, ), )) = {(q, )}, (q, +, +) = {(q, )}, (q, , ) = {(q, )}. Teorema: N(P G) = L(G). Sea w L(G), entonces, S = 1 lm 2 lm n = w Sea i = xi i . Vamos a probar por induccin en i que si: S lm i entonces: (q, w, S) o (q, yi, i ) Donde w = xi yi. El caso base es fcil, donde i = 1, 1 = , y a y1 = w. Dado (q, w, S) (q, yi, i ) queremos probar para el siguiente paso, o sea: (q, yi, i ) (q, yi+1 , i+1 ) i empieza con una variable A y tenemos lo siguiente: xi A lm xi+1
i i+1

Por la hiptesis inductiva, A est en el stack y yi no ha sido consumida. o a De la construccin de PG sigue que podemos hacer el siguiente movimiento: o (q, yi, A) (q, yi, ). Si tiene un prejo de terminales, podemos sacarlos (pop) con terminales correspondientes en un prejo de yi , acabando con la conguracin o 93

(q, yi+1, i+1 ), donde i+1 = que es la parte nal de: xi+1 = i+1 . Finalmente, como n = w, tenemos que n = , y yn = , y por lo tanto: (q, w, S) (q, , epsilon), por lo que w N(PG ), osea que P acepta w con stack vac o. Para la otra parte de la prueba, tenemos que probar que si: (q, x, A) (q, , ) entonces: A x. El caso base es simple, con x = . Para el caso inductivo, tenemos que, como A es una variable, tenemos en general: (q, x, A) (q, x, Y1Y2 . . . Yk ) . . . (q, , ) donde A Y1 Y2 . . . Yk est en G. a Si escribimos x como x1 x2 . . . xk , x1 es la parte de la entrada que es consumida hasta que Y1 es sacada (popped ) del stack. Luego consumimos x2 sacando a Y2 del stack, y as sucesivamente. Podemos imaginarnos lo de la siguiente gura con Y1 = B, Y2 = a y Y3 = C.

Aqu x es divido en 3 partes. La hiptesis inductiva nos dice que si o (q, x, A) (q, , ) entonces A x. Si ahora tenemos una x que la podemos descomponer en varias xi , entonces podemos aplicar la hiptesis inductiva a o 94

cada una de las partes y demostrar que: A Y1 Y2 . . . Yk x1 Y2 . . . Yk . . . x1 x2 . . . xk . Para completar la prueba suponemos que A = S y que x = w. Se puede tambin demostrar como pasar de PDAs a CFGs. Osea como e consumir una cadena x = x1 x2 . . . xn y vaciar el stack.

La idea es denir una gramtica con variables de la forma [pi1 Yi pi ] que a representan ir de pi1 a pi haciendo un pop de Yi . Formalmente, sea P = (Q, , , , q0 , Z0 , F ) un PDA. Denimos una gramtica G = (V, , R, S), a como: V = {pXq] : {p, q} Q, Xin} {S} R = {S [q0 Z0 p] : p Q {[qXrk ] a[rY1 r1 ] . . . [rk1 Yk rk ] : a {}, {r1 , . . . , rk } Q, (r, Y1 Y2 . . . Yk ) (q, a, X) Osea las variables son el s mbolo inicial S junto con todos los s mbolos formados por pXq donde p y q son estados de Q y X es un s mbolo del stack. Las producciones se forman primero para todos los estados p, G tiene la produccin S [q0 Z0 p], que genera todas las cadenas w que causan a P o 95

sacar (pop) a Z0 del stack mientras se va del estado q0 al estado p. Esto es (q0 , w, Z0) (p, , ). Por otro lado, se tienen las producciones que dicen que una forma de sacar (pop) a X e ir de un estado q a un estado rk , es leer a a (que puede ser ), usar algo de entrada para sacar (pop) a Y1 del stack, mientras vamos del estado r al estado r1 , leer ms entrada que saca Y2 del stack y as sucesivamente. a Ejemplo: Supongamos el siguiente PDA

PN = ({q}, {i, e}, Z, N , q, Z), donde N (q, i, Z) = {(q, ZZ)}, y N (q, e, Z) = {(q, )}. Podemos denir la siguiente gramtica equivalente. G = (V, {i, e}, R, S), a donde V = {[qZq], S} y R = {S [qZq], [qZq] i[qZq][qZq], [qZq] e}. Asumimos que S es el s mbolo de entrada para toda gramtica. [qZq] a es la unica tripleta que podemos formar con s mbolos de entrada y s mbolos del stack. A partir de S la unica produccin entonces que tenemos es: S o [qZq]. Debido que tenemos la transicin: N (q, i, Z) = {(q, ZZ)} generamos o la produccin: [qZq] i[qZq][qZq], y con N (q, e, Z) = {(q, )}, generamos o la produccin: [qZq] e. o Si remplazamos a [qZq] por A, nos queda: S A y A iAA|e. De hecho podemos poner simplemente S iSS|e. Ejemplo2: Sea PN = ({p, q}, {0, 1}, {X, Z0}, , q, Z0), donde est dada a por: (q, 1, Z0) = {(q, XZ0)} (q, 1, X) = {(q, XX)} (q, 0, X) = {(p, X)} (q, , X) = {(q, )} (p, 1, X) = {(p, )} (p, 0, Z0) = {(q, Z0 )}

96

El CFG equivalente es: G(V, {0, 1}, R, S), donde: V = {[pXp], [pXq], [pZ0p], [pZ0q], [qXq], [qXp], [qZ0q], [qZ0p], S} y las reglas de produccin R son: o S [qZ0q]|[qZ0p] De la primera regla de transicin: o [qZ0q] 1[qXq], [qZ0q] [qZ0q] 1[qXp], [pZ0q] [qZ0p] 1[qXq], [qZ0p] [qZ0p] 1[qXp], [pZ0q] De la 2: [qXq] 1[qXq], [qXq] [qXq] 1[qXp], [pXq] [qXp] 1[qXq], [qXp] [qXp] 1[qXp], [pXp] De la 3: [qXq] 0[pXq] [qXp] 0[pXp] De la 4: [qXq] De la 5: [pXp] 1 De la 6: [pZ0q] 0[qZ0q] [pZ0p] 0[qZ0p] Se puede probar que si G se construye como arriba a partir de un PDA P , entonces, L(G) = N(P ). La prueba se hace por induccin sobre las o derivaciones. Se quiere probar que: Si (q, w, X) (p, , ) entonces: [qXp] w. El caso base, es sencillo cuando w es a o y (p, ) (q, w, X), por lo que por construccin de G tenemos [qXp] w y por lo tanto [qXp] w. o 97

Para la parte de induccin tenemos que: (q, w, X) (r0 , x, Y1 Y2 . . . Yk ) o . . . (p, , ). Donde w = ax o w = x, por lo que (r0 , x, Y1 Y2 . . . Yk ) (q, a, X). Entonces tenemos la siguiente produccin: [qXrk ] a[r0 Y1 r1 ] . . . [rk1Yk rk ] o para toda {r1 , . . . , rk } Q. Podemos escoger ri ser el estado en la secuencia cuando Yi sale del stack (popped ). Sea w = w1 w2 . . . wk , donde wi es consumido cuando Yi es sacado (popped ). Entonces: (ri1 , wi , Yi) (ri , , ) Por la hiptesis de induccin tenemos: [ri1 , Y, ri] wi . o o Por lo que obtenemos la siguiente secuencia de derivacin: o [qXrk ] a[r0 Y1 r1 ] . . . [rk1 Yk rk ] aw1 [r1 Y2 r2 ][r2 Y3 r3 ] . . . [rk1 Yk rk ] aw1 w2 [r2 Y3 r3 ] . . . [rk1 Yk rk ] ... aw1 w2 . . . wk = w Para el only-if queremos probar que si: [qXp] w entonces: (q, w, X) (p, , ) La prueba sigue las mismas ideas que hemos estado viendo.

6.3

PDAs determin sticos

Un PDA P = (Q, , , , q0 , Z0 , F ) es determin stico si y solo si: 1. (q, a, X) es siempre vac o es un singleton. o 2. Si (q, a, X) no es vac entonces (q, , X) debe de ser vac o, o.

98

Ejemplo: Sea Lwcwr = {wcw R : w {0, 1} }. Entonces Lwcwr es reconocido por el siguiente DPDA:

Se puede demostrar que RE L(DP DA) CF L. La primera parte es fcil. Si es RE se puede construir un DFA, por lo que construir un DPDA es a trivial a partir de este. De hecho podemos ignorar el stack.

6.3.1

Algunas propiedades

RE L(DP DA) CF L Por ejemplo: Lwcwr es reconocido por L(DP DA) pero no por RE. Lwwr es reconocido por un lenguaje de un CFG pero no por L(DP DA). Si L = L(P ) para alg n DPDA P , entonces L tiene un CFG no ambiguo. u

99

Cap tulo 7 Propiedades de los Lenguajes Libres de Contexto


Simplicacin de CFGs. Esto facilita la vida, porque podemos decir o que si un lenguaje es CF, entonces tiene una gramtica de una forma a especial. Lema de Pumping para CFLs. Similar a el caso regular. No se cubre en este curso. Propiedades de cerradura. Algunas, pero no todas, de las propiedades de cerradura de los lenguajes regulares que se acarrean a los CFLs. Propiedades de decisin. Podemos probar la membres y vac pero o a o, por ejemplo, la equivalencia de CFLs no es decidible.

7.1

Forma Normal de Chomsky

Queremos mostrar que todo CFL (sin ) se genera por una CFG donde todas las producciones son de la forma A BC, o A a

100

Donde A, B, y C son variables, y a es un terminal. A esto se le conoce como CNF, y para llegar a ella debemos: 1. Eliminar s mbolos no- tiles, aquellos que no aparecen en ninguna derivacin u o S w, para el s mbolo de inicio S y el terminal w. 2. Eliminar las producciones-, es decir, producciones de la forma A . 3. Eliminar producciones unitarias, es decir, producciones de la forma A B, donde A y B son variables.

7.1.1

Eliminando S mbolos no-Utiles

Un s mbolo X es util para una gramtica G = (V, T, P, S), si hay una a derivacin: S G X G w para una cadena terminal w. A los s o mbolos que no son utiles se les denomina intiles. u Un s mbolo X es generador si X G w, para alguna w T . Un s mbolo X es alcanzable si S G X, para alg n , (V T ) . u Cabe notar que si eliminamos a los s mbolos no-generadores primero, y luego a los no-alcanzables, nos quedamos unicamente con s mbolos utiles. Ejemplo: Sea G: S AB|a, A b S y A son generadores, B no lo es. Si eliminamos B tenemos que eliminar S AB, dejando la gramtica S a, A b a Ahora slo S es alcanzable. Eliminando A y b nos deja con S a o Con el lenguaje {a}. De otra manera (para este ejemplo), si eliminamos primero los s mbolos no-alcanzables, nos damos cuenta de que todos los s mbolos son alcanzables. A partir de: S AB|a, A b Despus eliminamos B como no-generador, y nos quedamos con S e a, A b 101

que todav contiene s a mbolos in tiles. u Teorema 7.2: Sea G = (V, T, P, S) una CFG tal que L(G) = . Sea G1 = (V1 , T1 , P1 , S) la gramtica obtenida: a 1. Eliminando todos los s mbolos no-generadores y las producciones en las que ocurren. Sea la nueva gramtica G2 = (V2 , T2 , P2 , S). a 2. Eliminando de G2 todos los s mbolos no-alcanzables y las producciones en que ocurren. G1 no tiene s mbolos in tiles, y L(G1 ) = L(G). u Prueba: Primero probamos que G1 no tiene s mbolos in tiles: u Si X (V1 T1 ). As X w en G1 , para alg n w T . Adems, cada u a s mbolo utilizado en esta derivacin tambin es generador. As que X w o e en G2 tambin. e Como X no se elimin en el paso 2, hay una y una , tal que S o X en G2 . A n ms, cada s u a mbolo utilizado en esta derivacin tambin es o e alcanzable, as S X en G1 . Sabemos que cada s mbolo en X es alcanzable y que estn en V2 T2 , a entonces cada uno de ellos es generador en G2 . La derivacin terminal X xwy en G2 solo involucra s o mbolos que son alcanzables desde S, porque son alcanzados por s mbolos en X. De este modo, la derivacin terminal tambin es una derivacin de G1 , i.e., o e o S X xwy en G1 . Ahora mostramos que L(G1 ) = L(G). Como slo eliminamos s o mbolos y producciones de G a G1 (O1 ) P ), entonces tenemos que L(G1 ) L(G). Entonces, sea w L(G). As S G w. Cada s mbolo en esta derivacin es o evidentemente alcanzable y generador, entonces esta es tambin una derivacin e o de G1 . As w L(G1 ). 102

7.1.2

Clculo de S a mbolos Generadores y Alcanzables

Necesitamos algoritmos para calcular los s mbolos generadores y alcanzables de G = (V, T, P, S). Los s mbolos generadores g(G) se calculan con el siguiente algoritmo de cerradura: Base: Todo s mbolo de T es generador, se genera a s mismo. Induccin: Suponemos que tenemos la produccin A , y cada s o o mbolo de es generador. Entonces A es generador (esto incluye = , las reglas que tienen a en el cuerpo son generadoras). Ejemplo: Sea G: S AB|a, A b Entonces, primero g(G) = {a, b}. Como S a ponemos a S en g(G), y porque A b a adimos tambin n e a A, y eso es todo, el conjunto de s mbolos generadores es {a, b, A, S}. Teorema 7.4: El algoritmo anterior encuentra todos y slo los s o mbolos generadores de G. Prueba: Se mostrara con una induccin sobre la fase en la cual un s o mbolo X se a ade a g(G) y que X es en verdad generador. n Entonces suponemos que X es generador. De este modo X G w, para alguna w T . Ahora probamos por induccin sobre esta derivacin que o o X g(G). Base: Cero pasos. Entonces X es terminal y se a ade en la base del algoritmo n de cerradura. Induccin: La derivacin toma n > 0 pasos. Sea la primera produccin o o o utilizada X . Entonces X w y w en menos de n pasos y por la hiptesis de induccin g(G). o o De la parte inductiva del algoritmo se concluye que X g(G) porque X . 103

El conjunto de s mbolos alcanzables r(G) de G = (V, T, P, S) se calcula con el siguiente algoritmo de cerradura: Base: r(G) = {S}, S es alcanzable. Induccin: Si la variable A r(G) y A P entonces se a aden todos o n los s mbolos de a r(G). Ejemplo: Sea G : S AB|a, A b Entonces, primero r(G) = {S}. Con base en la primera produccin a adimos {A, B, a} a r(G). o n Con base en la segunda produccin a adimos {b} a r(G) y eso es todo. o n Teorema 7.6: El algoritmo anterior encuentra todos y solo los s mbolos alcanzables de G. Prueba: Esta prueba se hace con un par de inducciones parecidas a las del teorema 7.4.

7.2

Eliminando Producciones-

Aunque las producciones son convenientes, no son esenciales. Se probar que si L es CF, entonces L {} tiene una CFG sin produca ciones . La estrategia consiste en descubrir cules variables son nulicables. Se a dice que la variable A es nulicable si A . Sea A nulicable. Reemplazaremos una regla como A BAD con A BAD, A BD

104

Y borraremos cualquier regla con cuerpo . El siguiente algoritmo calcula n(G), el conjunto de s mbolos nulicables de una gramtica G = (V, T, P, S) como sigue: a Base: n(G) = {A : A P } Induccin: Si {C1 , C2 , . . . , Ck } n(G) y A C1 , C2 , . . . , Ck P , entonces o n(G) = n(G) {A}. Nota, cada C i debe ser una variable para ser nulicable, entonces se consideran slo las producciones con cuerpos conformados o de variables. Teorema 7.7: En cualquier gramtica G, los unicos s a mbolos nulicables son las variables encontradas por el algoritmo anterior. Prueba: La induccin es sencilla en ambas direcciones. o Base: Un paso. A debe ser una produccin y se encuentra en la parte o base del algoritmo. Induccin: Suponemos que A en n pasos donde n > 1. El primer paso o se ve como A C1 C2 . . . Ck , donde cada Ci deriva en una secuencia de menos de n pasos. Por la HI, cada Ci es descubierta por el algoritmo como nulicable. Entonces, por el paso de induccin, se descubre que A es nulicable, por la o produccin A C1 C2 . . . Ck o Una vez que conocemos los s mbolos nulicables, podemos transformar G en G1 como sigue: Para cada A X1 X2 . . . Xk P con m k s mbolos nulicables, reemplazar por 2m reglas, una con cada sub-lista de los s mbolos nulicables ausentes. Excepcin: Si m = k no a adimos la regla donde borramos todos los o n m s mbolos nulicables. Borrar todas las reglas de la forma A . Ejemplo: Sea G : S AB, A aAA|, B bBB| 105

Ahora n(G) = {A, B, S}. La primer regla se convertir en S AB|A|B a la segunda: A aAA|aA|aA|a la tercera B bBB|bB|bB|b Despus borramos reglas con cuerpos-, y terminamos con la gramtica e a G1 : S AB|A|B, A aAA|aA|aA|a, B bBB|bB|bB|b La gramtica nal es: S AB|A|B, A aAA|aA|a, B bBB|bB|b. a Se concluye que la eliminacin de producciones con la construccin o o anterior no cambia el lenguaje, excepto que ya no est presente si lo estaba a en el lenguaje de G. Ahora la prueba de que para cada CFG G, hay una gramtica G1 sin producciones tal que: L(G1) = L(G) {} a Teorema 7.9: Si la gramtica G1 se construye a partir de G con la cona struccin anterior para eliminar producciones , entonces L(G1) = L(G) o {}. Prueba: Se probar el enunciado ms fuerte: a a A w en G1 s y solo si w = y A w en G. Direccin (slo si ): Suponemos que A w en G1 . Entonces claramente o o w = , porque G1 no tiene producciones-. Ahora mostraremos por una induccin sobre la longitud de la derivacin o o que A w tambin en G. e Base: Un paso. Entonces existe A w en G1 . A partir de la construccin o de G1 tenemos que existe A en G, donde es w ms algunas variables a nulicables esparcidas. Entonces: A w en G. Induccin: La derivacin toma n > 1 pasos. o o Entonces A X1 X2 . . . Xk w en G1 . y la primera derivacin debi o o venir de una produccin: o A Y1 Y2 . . . Ym . donde m k, algunas Yis son Xj s y los otros son s mbolos nulicables 106

de G. Ms a n, w = w1 w2 . . . wk , y Xi wi en G1 en menos de n pasos. a u Por la hiptesis de induccin tenemos que Xi wi en G. Ahora tenemos: o o A G Y 1 Y 2 . . . Y m G X1 X 2 . . . X k G w 1 w 2 . . . w k = w Direccin (si ): Sea A G w, y w = . Se mostrar por induccin de la o a o longitud de la derivacin que A w en G1 . o Base: La longitud es uno. Entonces A w esta en G, y como w = la regla tambin esta en G1 . e Induccin: La derivacin toma n > 1 pasos. Entonces esto se ve como: o o A G Y1 Y2 . . . Ym G w Ahora w = w1 w2 . . . wm , y Y i G wi en menos de n pasos. Sean X1 X2 . . . Xk aquellos Yj s en orden, tal que wj = . Entonces A X1 X2 . . . Xk es una regla de G1 . Ahora X1 X2 . . . Xk G w, las unicas Yj s no presentes entre las Xs son las que derivan . Cada Xj /Yj G wj en menos de n pasos, entonces, por la hiptesis de o induccin tenemos que si w = entonces Yj wj en G1 . o As A X1 X2 . . . Xk w en G1 . la demanda del teorema ahora sigue del enunciado: A w en G1 s y solo si w = y A w en G (presentado en la prueba del teorema 7.9) al elegir A = S.

7.3

Eliminando Producciones Unitarias

A B es una produccin unitaria, cuando A y B son variables. o

107

Las producciones unitarias se pueden eliminar. Veamos la gramtica: I a|b|Ia|Ib|I0|I1 a F I|(E) T F |T F E T |E + T tiene las producciones unitarias E T, T F , y F I. Ahora expandiremos la regla E T y obtendremos las reglas. Sustituimos en E T a la T por F y luego por (T F ): E F, E T F despus expandemos E F y obtenemos: e E I|(E)|T F Finalmente expandemos E I y obtenemos: E a|b|Ia|Ib|I0|I1|(E)|T F El mtodo de expansin trabaja siempre y cuando no haya ciclos en las e o reglas, por ejemplo en: A B, B C, C A. El siguiente mtodo basado en pares unitarios trabajar para todas las e a gramticas. a (A, B) es un par unitario si A B utilizando unicamente producciones unitarias. Nota: En A BC, C tenemos A B, pero no utilizamos solo producciones unitarias. Para calcular u(G), el conjunto de todos los pares unitarios de G = (V, T, P, S) utilizamos el siguiente algoritmo de cerradura. Base: (A, A) es un par unitario para la variable A. Esto es, A A en cero pasos. u(G) = {(A, A) : A V } Induccin: Suponemos que (A, B) u(G) y que B C P donde C es o una variable. Entonces a adimos (A, C) a u(G). n 108

Teorema 7.11: El algoritmo anterior encuentra todos y solo los pares unitarios de una CFG G. Prueba: En una direccin, hacemos una induccin sobre el orden en que se o o descubren los pares, si encontramos que (A, B) es un par uitario, entonces A G B utilizando unicamente producciones unitarias (prueba omitida). En la otra direccin, suponemos que A G B usando unicamente proo ducciones unitarias. Podemos mostrar por induccin de la longitud de la o derivacin que encontraremos el par (A, B). o Base: Cero pasos. Entonces A = B, y a adimos el par (A, B) en la base. n Induccin: Suponemos que A B en n pasos, para alguna n > 0, cada paso o consiste en aplicar una produccin unitaria. La derivacin luce como: o o ACB A C toma n 1 pasos, y por la hiptesis inductiva, descubrimos el par o (A, C). La parte inductiva del algoritmo combina el par (A, C) con la produccin o C B para inferir el par (A, B). Para eliminar producciones unitarias, procedemos de la siguiente manera. Dada G = (V, T, P, S), podemos construir G1 = (V, T, P1 , S): 1. Encontrando todos los pares unitarios de G. 2. Para cada par unitario (A, B), a adimos a P1 todas las producciones n A , donde B es una produccin no unitaria en P . Note o que es posible tener A = B; de esta manera, P1 contiene todas las producciones unitarias en P . P1 = {A : V, B P, (A, B) u(G)} / Ejemplo: A partir de la gramtica: a I a|b|Ia|Ib|I0|I1 F I|(E) T F |T F E T |E + T 109

podemos obtener: Par (E, E) (E, T ) (E, F ) (E, I) (T, T ) (T, T ) (T, F ) (F, F ) (F, I) (I, I) Produccin o E E+T E T F E (E) E a|b|Ia|Ib|I0|I1 T T F T (E) T a|b|Ia|Ib|I0|I1 F (E) F a|b|Ia|Ib|I0|I1 I a|b|Ia|Ib|I0|I1

La gramtica resultante es equivalente a la original (prueba omitida). a Resumen Para limpiar una gramtica podemos: a 1. Eliminar producciones- 2. Eliminar producciones unitarias 3. Eliminar s mbolos in tiles u en este orden.

7.4

Forma Normal de Chomsky, CNF

Ahora se mostrar que cada CFL no vac sin tiene una gramtica G sin a o a s mbolos in tiles, y de tal manera que cada produccin tenga la forma: u o A BC, donde {A, B, C} T , o A , donde A V , y T . Para lograr esto, iniciamos con alguna gramtica para el CFL, y: a 110

1. Limpiamos la gramtica. a 2. Hacemos que todos los cuerpos de longitud 2 o ms consistan solo de a variables. 3. Dividimos los cuerpos de longitud 3 o ms en una cascada de produca ciones con cuerpos-de-dos-variables. Para el paso 2, por cada terminal a que aparece en un cuerpo de longitud 2, creamos una nueva variable, como A, y reemplazamos a a por A en todos los cuerpos. Despus a adimos una nueva regla A a. e n Para el paso 3, por cada regla de la forma A B1 B2 . . . Bk , k 3, introducimos variables nuevas C1 , C2 , . . . Ck2, y reemplazamos la regla con: A B1 C1 C1 B2 C2 ... Ck3 Bk2 Ck2 Ck2 Bk1 Bk

111

Ilustracin del efecto del paso 3: o

7.4.1

Ejemplo de una Conversin CNF o

Iniciamos con la gramtica (el paso 1 ya esta hecho): a E E + T |T F |(E)|a|b|Ia|Ib|I0|I1 T T E|(E)|a|b|Ia|Ib|I0|I1 F (E)|a|b|Ia|Ib|I0|I1 I a|b|Ia|Ib|I0|I1 Para el paso 2, necesitamos las reglas:

112

A a, B b, Z 0, O 1 P +, M , L (, R ) y al reemplazar obtenemos la gramtica: a E EP T |T MF |LER|a|b|Ia|Ib|I0|I1 T T P E|LEL|a|b|Ia|Ib|I0|I1 F LER|a|b|Ia|Ib|I0|I1 I a|b|Ia|Ib|I0|I1 A a, B b, Z 0, O 1 P +, M , L (, R ) Para el paso 3, reemplazamos: E EP T por E EC1 , C : 1 P T E T MF, T T MF por E T C2 , T T C2 , C2 MF E LER, T LER, F LER por E LC3 , T LC3 , F LC3 , C3 ER La gramtica CNF nal es: a E EC1 |T C2 |LC3 |a|b|IA|IB|IZ|IO T T C2 |LC3 |a|b|IA|IB|IZ|IO F LC3 |a|b|IA|IB|IZ|IO I a|b|IA|IB|IZ|IO C1 P T, C2 MF, C3 ER A a, B b, Z 0, O 1 P +, M , L (, R )

7.5

Propiedades de Cerradura de los CFLs

Considrese el mapeo: s : 2 donde y son alfabetos nitos. Sea e w , donde w = a1 a2 . . . an , y se dene: s(a1 a2 . . . an ) = s(a1 ).s(a2 ). . . . .s(an ) y, para L , s(L) = wL s(w) Tal mapeo s se llama una substitucin. o Ejemplo: = {0, 1}, = {a, b}, s(0) = {an bn : n 1}, s(1) = {aa, bb}. Sea w = 01. Entonces s(w) = s(0).s(1) = {an bn aa : n 1} {an bn+2 : 113

n 1} Sea L = {0} . Entonces s(L) = (s(0)) = {an1 bn1 an2 bn2 . . . ank bnk : k 0, ni 1} Teorema 7.23: Sea L un CFL sobre , y s una substitucin, tal que s(a) o sea un CFL, a . Entonces s(L) es un CFL. Iniciamos con las gramticas: G = (V, , P, S) para L, y G = (Va , Ta , Pa , Sa ) a para cada s(a). Construimos: G = (V , T , P , S ), donde: V = (Ua Ta ) V, T = Ua Ta , P = Ua Pa ms las producciones de P a con cada a en un cuerpo reemplazado con el s mbolo Sa . Ahora debemos mostrar que L(G ) = s(L). Sea w s(L). Entonces x = a1 a2 . . . an en L, y xi s(ai ), tal que w = x1 x2 . . . xn . Un rbol de derivacin en G se ver como: a o a

As podemos generar Sa1 Sa2 . . . San en G y de ah generamos x1 x2 . . . xn = w. De este modo w L(G ). Despus, sea w L(G ). Entonces el rbol de parseo para w debe verse e a como el de arriba. Ahora borramos los sub-rboles que cuelgan. Ahora se tiene la proa e duccin: Sa1 Sa2 . . . San , donde a1 a2 . . . an L(G). Ahora w es tambin igual o a s(a1 a2 . . . an ), lo cual esta en S(L). 114

7.6

Aplicaciones del Teorema de Substitucin o

Teorema 7.24: Los CFLs son cerrados bajo (i): unin, (ii): concatenacin, o o (iii): Cerradura de Kleene y cerradura positiva +, y (iv): homomorsmo. Prueba: (i) : Sean L1 y L2 CFLs, sea L = {1, 2}, y s(1) = L1 , s(2) = L2 . Entonces L1 L2 = s(L). (ii) : Aqu elegimos L = {1, 2} y s como antes. Entonces L1 L2 = s(L). (iii) : Suponemos que L1 es CF. Sea L = 1, s(1) = L1 . Ahora L = s(L). 1 Prueba similar para +. (iv) : Sea L1 un CFL sobre , y h un homomorsmo sobre . Entonces denimos s por a {h(a)} Entonces h(L) = s(L). Teorema: Si L es CF, entonces tambin en LR . e Prueba: Suponemos que L es generado por G = (V, T, P, S). Construimos GR = (V, T, P R , S), donde: P R = {A R : A P } Mostrar (en casa) por induccin sobre las longitudes de las derivaciones o en G (para una direccin) y en GR (para la otra direccin) que (L(G))R = o o L(GR ). Sea L1 = {0n 1n 2i : n 1, i 1}. L1 es CF con la gramtica: a S AB A 0A1|01 B 2B|2 Adems, L2 = {0i 1n 2n : n 1, i 1} es CF con la gramtica a a S AB A 0A|0 B 1B2|12

115

Sin embargo, L1 L2 = {0n 1n 2n : n 1} lo cual no es CF. Teorema 7.27: Si L es CR, y R regular, entonces L R es CF. Prueba: Sea L aceptado por el PDA: P = (QP , , , P , qP , Z0 , FP ), por el estado nal, y R aceptado por el DFA: A = (QA , , , A , qA , Z0 , FA ) Construiremos un PDA para L R de acuerdo a la gura:

Formalmente, denimos: P = (QP QA , , , , (qP , qA ), Z0 , FP FA ) donde: ((q, p), a, X) = {((r, A (p, a)), ) : (r, ) P (q, a, X)} Probar en casa por induccin de , para P y para P que: (qP , w, Z0) o (q, , ) en P s y solo si ((qP , qA ), w, Z0) ((q, (pA , w)), , ) en P porqu? e Teorema 7.29: Sean L, L1 , L2 CFLs y R regular. Entonces: 1. L R es CF 2. L no es necesariamente CF 116

3. L1 L2 no es necesariamente CF Prueba: 1. R es regular, L R es regular, y L R = L R. 2. Si L siempre fue CF, se tiene que dar que: L1 L2 = L1 L2 siempre sea CF. 3. Note que es CF, de este modo, si L1 L2 siempre fue CF, entonces tambin lo ser L = L. e a

7.7

Homomorsmo Inverso

Sea h : un homomorsmo. Sea L , y denimos: h1 (L) = {w : h(w) L} ahora tenemos: Teorema 7.30: Sea L un CFL, y h un homomorsmo. Entonces h1 (L) es un CFL.

117

Prueba: El plan de la prueba es

Sea L aceptado por el PDA: P = (Q, , , , q0 , Z0 , F ), construimos un nuevo PDA P = (Q , , , , (q0 , ), Z0 , F {}) donde: Q = {(q, x) : q Q, x suf f ix(h(a)), a } ((q, ), a, X) = {((q, h(a)), X) : = a T {}, q Q, X } Mostrar en casa con inducciones que:

(q0 , h(w), Z0) (p, , ) in P si y solo si ((q0 , ), w, Z0) ((p, ), , ) en P .

7.8

Propiedades de Decisin de los CFLs o

Se vern los siguientes temas: a Complejidad de convertir entre CFAs y PDAQs Conversin de un CFG a CNF o Probar L(G) = , para una G dada 118

Probar w L(G), para una w dada y una G ja. Avances de problemas no decidibles de CFL

7.8.1

Convirtiendo entre CFAs y PDAs

El tama o de la entrada es n. n Lo siguiente trabaja en tiempo O(n): 1. Convertir una CFG a un PDA 2. Convertir un PDA de estado nal a un PDA de pila vac a 3. Convertir un PDA de pila vac a un PDA de estado nal a

7.8.2

Explosin Exponencial Evitable o

Para convertir un PDA a una CFG tenemos: Formalmente, sea P = (Q, , , , q0 , Z0 ) un PDA. Denimos G = (V, , R, S), donde: V = {[pXq] : {p, q} Q, X } {S} R = {S [q0 Z0 p] : p Q} {[qXrk ] a[rY1 r1 ] . . . [rk1 Yk rk ] : a {}, {r1 , . . . , rk } Q, (r, Y1 Y2 . . . Yk ) (q, a, X)} cuando mucho n3 variables de la forma [pXq]. Si (r, Y 1Y 2 . . . Y k) (q, a, X), tendremos O(nn ) reglas de la forma: [qXrk ] a[rY1 r1 ] . . . [rk1 Yk rk ] Introduciendo k 2 estados nuevos podemos modicar el PDA para hacer un push de a lo ms un s a mbolo por transicin. o Ahora, k ser 2 para todas las reglas. a 119

La longitud total de todas las transiciones es todav O(n). a Ahora, cada transicin genera a lo ms n2 producciones. o a El tama o total (y tiempo para calcular) la gramtica es entonces O(n3 ). n a

7.8.3

Conversin a CNF o

Buenas noticias: 1. Calcular r(G) y g(G) y eliminar s mbolos no- tiles toma tiempo O(n). u Esto se mostrar pronto. a 2. El tama o de u(G) y la gramtica resultante con producciones P1 es n a 2 O(n ) 3. Arreglando que los cuerpos consistan solo de variables lleva O(n) 4. Dividir los cuerpos lleva O(n) Malas noticias: 1. La eliminacin de los s o mbolos nulicables puede hacer que la nueva gramtica tenga un tama o de O(2n ) a n La mala noticia es evitable: Dividir los cuerpos primero antes de la eliminacin de s o mbolos nulicables. La conversin a CNF lleva O(n2 ) o

7.8.4

Probando si los CFLs son Vac os

L(G) es no-vac si el s o mbolo de inicio S es generador. Una implementacin ingenua sobre g(G) tome tiempo O(n2). o 120

g(G) se puede calcular en tiempo O(n) como sigue:

La creacin e inicializacin del arreglo lleva O(n) o o La creacin e inicializacin de las ligas y contadores lleva O(n) o o Cuando un contador va a cero, tenemos que: 1. Encontrar la variable cabeza A, vericar si ya existe yes en el arreglo, y si no, ponerlo en la cola lleva O(1) por produccin. Total O(n) o 2. Seguir las ligas para A, y decrementar los contadores. Toma un tiempo de O(n). El tiempo total es O(n).

7.8.5

w L(G)?

Modo ineciente: Suponemos que G esta en CNF, probamos que la cadena sea w con |w| = n. Como el rbol de parseo es binario, hay 2n 1 nodos internos. a La generacin de todos los rboles de parseo binarios de G con 2n 1 o a nodos internos. 121

Vericar si alg n rbol de parseo genera w. u a Algoritmo CYK para Probar Membres a La gramtica G es ja a La entrada es w = a1 a2 . . . an Construimos una tabla triangular, donde Xij contiene todas las variables A, tal que: A G ai ai+1 . . . aj : X15 X14 X13 X12 X11 X25 X24 X23 X22

X35 X34 X33

X45 X44

X55

Para llenar la tabla trabajamos rengln-por-rengln, hacia arriba o o El primer rengln se calcula en la base, los subsecuentes en la induccin. o o Base: Xii == {A : A ai G} Induccin: Deseamos calcular Xij , el cual esta en el rengln j i + 1. o o A Xij si A ai ai+1 . . . aj si para alg na k < j y A BC, tenemos u B ai ai+1 . . . ak y C ak+1 ak+2 . . . aj si B Xik y C Xkj Ejemplo: G tiene las producciones: S AB|BC A BA|a B CC|b C AB|a Para calcular Xij necesitamos comparar a lo ms n pares de conjuntos a previamente calculados: (Xii , Xi+1,j ), (Xi,i+1 , Xi+1,j ), . . . , (Xi,j1, Xjj ) como

122

se sugiere abajo:

Para w = a1 . . . an , hay que calcular O(n2 ) entradas Xij . Para cada Xij necesitamos comparar a lo ms n pares (Xik , Xk+1,j ). a El trabajo total es O(n3).

7.8.6

Muestra de Problemas CFL No-Decidibles

Los siguientes son problemas no-decidibles: 1. Es una CFG G dada ambigua? 2. Es un CFL dado inherentemente ambiguo? 3. Es la interseccin de dos CFLs vac o a? 4. Son dos CFLs el mismo? 5. Es un CFL dado universal (igual a )?

123

Cap tulo 8 Mquinas de Turing a


8.1 Introduccin o

Hasta ahora hemos visto clases de lenguajes relativamente simples. Lo que vamos a ver ahora es preguntarnos qu lenguajes pueden denirse por cualquier e equipo computacional. Vamos a ver qu pueden hacer las computadoras y los problemas que no e pueden resolver, a los que llamaremos indecidibles. Por ejemplo, podemos pensar en un programa sencillo de computadora que imprima hola. De igual forma, podemos pensar en otro programa que imprima hola cuando encuentre un entero positivo n > 2, que cumpla: xn + y n = z n , para x, y y z enteros positivos. La solucin entera de la ecuacin de arriba se conoce como el ultimo o o teorema de Fermat, que llevo a los matemticos 300 a os resolver. a n El poder analizar cualquier programa de computadora y decidir si va a imprimir un letrero como hola es en general indecidible. La idea de la prueba es relativamente simple. Necesitamos tener un programa H que toma de entrada otro programa P y una entrada a ese programa I y regresa si o no dependiendo de si el programa P imprime hola o 124

no. Podemos pensar igualmente en un programa H1 que imprima si cuando el programa P imprima hola e imprima hola cuando no.

Ahora podemos pensar en otro programa H2 que toma solo de entrada a P e imprime si cuando P imprime hola e imprime hola cuando P no imprime hola.

Ahora si le damos H2 como entrada a H2 llegamos a una contradiccin. o

Muchas veces para probar si un problema es indecidible, se transforma a otra del cual ya se sabe que es indecidible. Por ejemplo, si queremos probar que un programa va a llamar a una funcin foo es o no es indecidible. La idea es dise ar un programa que o n con cierta entrada llame a la funcin foo cuando otro programa imprima o hola. 125

8.2

Mquina de Turing a

El propsito de la teor de indecibilidad no es slo establecer cuales probleo a o mas son indecidibles, sino tambin dar una gu sobre qu es lo que se puede e a e hacer o no con programacin. o Tambin tiene que ver con problemas, que aunque decidibles, son intrate ables. A nales del s. XIX y principios del s. XX, D. Hilbert lanz la pregunta o abierta, si era posible encontrar un algoritmo que determinara el valor de verdad de una frmula en lgica de primer orden aplicada a los enteros. o o En 1931, K. Gdel prob su teorema de incompletes usando un argumento o o parecido al de H2 que vimos arriba, para probar que no se pod construir a dicho algoritmo. En 1936, A. Turing public su mquina de Turing como un modelo para o a cualquier tipo de computacin (aunque todav no exist las computadoo a an ras). La hiptesis de Church o la tsis de Church-Turing dice que lo que las o e mquinas de Turing (y para tal caso las computadoras modernas) pueden a computar son las funciones recursivamente enumerables. Una mquina de Turing consiste de un control nito que puede estar en a cualquier estado de un conjunto nito de estados. Se tiene una cinta dividida en celdas, cada celda con un s mbolo. Inicialmente, la entrada (cadena nita de s mbolos del alfabeto) se coloca en la cinta, el resto de las celdas tienen el s mbolo especial vac o. La cabeza de la cinta est siempre sobre una celda y al principio est sobre a a la celda ms a la izquierda con el primer s a mbolo de la cadena de entrada. Un movimiento o transicin puede cambiar de estado (o quedarse en el o estado actual), escribir un s mbolo (reemplazando el s mbolo que exist o a

126

dejando el mismo) y mover la cabeza a la izquierda o derecha.

Formalmente, una mquina de Turing es una sptupla: M = (Q, , , , q0, B, F ), a e donde: Q: es un conjunto nito de estados : es un conjunto nito de s mbolos de entrada : es el conjunto de s mbolos de la cinta. es siempre un subconjunto de : la funcin de transicin (q, X) = (p, Y, D), donde p es el siguiente o o estado en Q, Y es el s mbolo en que se escribe en la celda que est a viendo la cabeza de la cinta y D es la direccin (izq. o der.). o q0 : es el estado inicial B: es el s mbolo de vac que esta en pero no en o, F : es el conjunto de estados nales o de aceptacin. o

8.2.1

Descripciones instantneas o IDs para las mquinas a a de Turing

Como la cinta es innita, se representan slo los s o mbolos entre los Bs (a veces se pueden incluir algunos Bs) y se incluye un s mbolo especial para 127

indicar la posicin de la cabeza. Por ejemplo: X1 X2 . . . Xi1 qXi Xi+1 . . . Xn o representa in ID donde: q es el estado de la mquina de Turing. a La cabeza de la cinta est viendo el i-simo s a e mbolo a la izquierda X1 X2 . . . Xn es el pedazo de cinta entre los s mbolos ms a la izquierda y ms a la derecha a a que no son vac os. Usamos la misma notacin de ID que para los PDAs: y . o Supongamos que (q, Xi) = (p, Y, L), el siguiente movimiento es a la izquierda (L). Entonces: X1 X2 . . . Xi1 qXi Xi+1 . . . Xn X1 X2 . . . Xi2 pXi1 Y Xi+1 . . . Xn Excepciones: 1. Si i = 1 entonces M se mueve al B a la izquierda de X1 : qX1 X2 . . . Xn pBY X2 . . . Xn 2. Si i = n y Y = B, entonces el s mbolo que se re-escribe sobre Xn se une a la cadena innita de Bs y no se escribe: X1 X2 . . . Xn1 qXn X1 X2 . . . Xn2 pXn1 Ahora, supongamos que (q, Xi ) = (p, Y, R), movimiento hacia la derecha (R): X1 X2 . . . Xi1 qXi Xi+1 . . . Xn X1 X2 . . . Xi1 pY Xi+1 . . . Xn Excepciones: 1. Si i = n entonces la i + 1 celda tiene un B que no era parte de la ID anterior: X1 X2 . . . Xn1 qXn X1 X2 . . . Xn1 Y pB 2. Si i = 1 y Y = B, entonces el s mbolo que se re-escribe sobre X1 se une a la cadena innita de Bs y no se escribe: qX1 X2 . . . Xn pX2 . . . Xn Ejemplo: una TM que acepta: {0n 1n |n 1} Nos queda lo siguiente: M = ({q0 , q1 , q2 , q3 , q4 }, {0, 1}, {0, 1, X, Y, B}, , q0, B, {q4 }) 128

Con la siguiente tabla de transicin: o Estado q0 q1 q2 q3 q4 0 (q1 , X, R) (q1 , 0, R) (q2 , 0, L) 1 (q2 , Y, L) S mbolo X (q0 , X, R) Y (q3 , Y, R) (q1 , Y, R) (q2 , Y, L) (q3 , Y, R) B (q4 , B, R)

Por ejemplo, si le damos la entrada 0011 sigue las siguientes transiciones: q0 0011 Xq1 011 X0q1 11 Xq2 0Y 1 q2 X0Y 1 Xq0 0Y 1 XXq1 Y 1 XXY q1 1 XXq2 Y Y Xq2 XY Y XXq0 Y Y XXY q3 Y XXY Y q3 B XXY Y Bq4 B Mientras que para la cadena 0010, tenemos lo siguiente: q0 0010 Xq1 010 X0q1 10 Xq2 0Y 0 q2 X0Y 0 Xq0 0Y 0 XXq1 Y 0 XXY q1 0 XXY 0q1 B

8.2.2

Diagramas de transicin para TMs o

En un diagrama de transicin para TMs los nodos son los estados y los arcos o tienen etiquetas de la forma X/Y D donde X y Y son s mbolos de la cinta y D es la direccin. o Para cada (q, X) = (p, Y, D), tenemos un arco con etiqueta: X/Y D que va del nodo q al nodo p. Lo unico que falta es el s mbolo vac que asumimos que es B. o

129

Por ejemplo, el diagrama de transicin para la TM anterior es: o

Ejemplo: Dise ar una TM que calcula la funcin llamada monus o subn o straccin propia, que se dene como: m n = max(m n, 0). o La siguiente tabla y diagrama de transicin lo denen: o Estado q0 q1 q2 q3 q4 q5 q6 0 (q1 , B, R) (q1 , 0, R) (q3 , 1, L) (q3 , 0, L) (q4 , 0, L) (q5 , B, R) S mbolo 1 (q5 , B, R) (q2 , 1, R) (q2 , 1, R) (q3 , 1, L) (q4 , B, L) (q5 , B, R) B (q4 , B, L) (q0 , B, R) (q6 , 0, R) (q6 , B, R)

130

Diagrama de transicin: o

8.2.3

Lenguaje de una TM

El lenguaje que aceptan las TMs es el conjunto de cadenas w tales que q0 w p para un estado p en F y cualesquiera cadenas en la cinta y . Los lenguajes que aceptan las TMs se llama lenguajes recursivamente enumerables o lenguajes RE. Halting: otra forma de aceptar cadenas usado normalmente en las TMs es aceptar por paro (halting). Decimos que una TM se para (halts) si entra a un estado q leyendo el s mbolo de la cinta X y no existe ning n movimiento, u i.e., (q, X) no est denido. a Por ejemplo la mquina de Turing que calcula , se para (halts) con a 131

todas las cadenas de 0s y 1s ya que eventualmente alcanza el estado q6 . Asumimos que una TM siempre se para en un estado de aceptacin. o Ejercicios: Extensiones a TMs: Una TM es tan poderosa como una computadora convencional. Se pueden realizar varias extensiones a una TM que permiten hacer especicaciones ms simples, aunque no aumentan su expresividad (reconocen a los mismos lenguajes).

8.2.4

Almacenar informacin en un estado o

Podemos usar el control nito de una TM no slo para indicar la posicin o o actual, sino tambin para almacenar una cantidad nita de datos. e No se extiende el modelo, lo que hacemos es que pensamos en el estado como una tupla. Por ejemplo, si queremos aceptar 01 + 10 podemos almacenar el primer elemento que se lee y asegurarnos que ese elemento no aparezca en el resto de la cadena. El M = (Q, {0, 1}, {0, 1, B}, , [q0, B], {[q1 , B]}) Su funcin de transicin es: o o ([q0 , B], a) = ([q1 , a], a, R) para a = 0 o a = 1. ([q1 , a], ca) = ([q1 , a], ca, R) donde ca es el complento de a. Si a = 0 entonces ca = 1, y viceversa. ([q1 , a], B) = ([q1 , B], B, R) para a = 0 o a = 1, llegando al estado de aceptacin: [q1 , B]. o

132

8.2.5

Tracks m ltiples u

Otro truco es pensar que tenemos varios caminos paralelos. Cada una tiene un s mbolo y el alfabeto de la cinta de la TM es una tupla con un componente por cada camino. El siguiente dibujo ilustra una TM con almacenamiento de informacin o en el control y con caminos m ltiples: u

Un uso com n de esto es usar un camino para guardar informacin y u o otro para guardar una marca. Por ejemplo, si queremos reconocer: Lwcw = {wcw|w (0 + 1)+ } M = (Q, , , , [q1 , B], [B, B], {[q9 , B]}) Q: el conjunto de estados en {q0 , q1 , . . . , q9 } {0, 1, B}, osea pares que tienen un estado de control (qi ) y un componente de dato (0, 1 o blank ). : los s mbolos de la cinta son {B, } {0, 1, c, B}, donde el primer componente es vac (blank ) o (para marcar s o mbolos del primer y segundo grupo de 0s y 1s). : los s mbolos de entrada son [B, 0] y [B, 1]. : la funcin de transicin es (donde a y b pueden ser 0 o 1): o o 1. ([q1 , B], [B, a]) = ([q2 , a], [, a], R) 133

2. ([q2 , a], [B, b]) = ([q2 , a], [B, b], R) 3. ([q2 , a], [B, c]) = ([q3 , a], [B, c], R) 4. ([q3 , a], [, b]) = ([q3 , a], [, b], R) 5. ([q3 , a], [B, a]) = ([q4 , B], [, a], L) 6. ([q4 , B], [, a]) = ([q4 , B], [, a], L) 7. ([q4 , B], [B, c]) = ([q5 , B], [B, c], L) 8. ([q5 , B], [B, a]) = ([q6 , B], [B, a], L) 9. ([q6 , B], [B, a]) = ([q6 , B], [B, a], L) 10. ([q6 , B], [, a]) = ([q1 , B], [, a], R) 11. ([q5 , B], [, a]) = ([q7 , B], [, a], R) 12. ([q7 , B], [B, c]) = ([q8 , B], [B, c], R) 13. ([q8 , B], [, a]) = ([q8 , B], [, a], R) 14. ([q8 , B], [B, B]) = ([q9 , B], [B, B], R)

8.2.6

Subrutinas

Una subrutina de una TM es un conjunto de estados que realiza alg n proceso u util. Su llamado ocurre cuando se hace una transicin a su estado inicial. o Si se requiere llamar varias veces desde diferentes estados, se tienen que hacer varias copias con estados diferentes. Por ejemplo, la siguiente TM implementa la multiplicacin, y empieza o con una cadena 0m 10n 1 en su cinta y termina con la cadena 0mn en la cinta. El n cleo es una subrutina llamada Copia que copia un bloque de 0s al u nal. Copia convierte una ID de forma 0mk 1q 0n 10(k1)n a la siguiente ID 1 0mk 1q5 0n 10kn . Las siguientes guras ilustran la subrutina Copia y la TM completa para

134

multiplicacin: o

8.2.7

TM con m ltiples cintas u

Tiene un n mero nito de cintas. En el estado inicial los s u mbolos de entrada son colocados en la primera cinta y la cabeza del resto de las cintas en un B arbitrario. En un movimiento, el control entra a un nuevo estado y en cada cinta se escribe un s mbolo en la celda que est leyendo, cada cabeza de cada cinta a hace un movimiento que puede ser a la izquierda, derecha o quedarse donde 135

est. a Las TM con cintas m ltiples aceptan entrando a un estado de aceptacin. u o

Se puede demostrar que todo lenguaje aceptado por una TM con m ltiples u cintas es recursivamente enumerable. Bsicamente para una TM con k cintas se simula una TM de una cinta a con 2k caminos, donde la mitad de los caminos guardan el contenido de las cintas y la otra mitad guardan una marca que indica la posicin de las o cabezas de cada cinta.

8.2.8

TM no determinista

En una TM no determinista (NTM) la funcin de transicin es ahora un o o conjunto de tripletas y puede seleccionar cualquier elemento de ese conjunto en cada transicin. (q, X) = {(q1 , Y1, D1 ), (q2 , Y2, D2 ), . . . , (qk , Yk , Dk )} o Una NTM acepta una cadena w si existe una secuencia de selecciones de movimientos que nos llevan a un ID con un estado de aceptacin. o De nuevo se puede probar que para cada NTM existe una TM (determinista). Bsicamente se siguen las m posibles opciones en cada movimiento a 136

siguiendo un esquema tipo breadth-rst. Ejercicios:

8.3

Mquinas de Turing restringidas a

Se pueden imponer ciertas restricciones a la TM y de todos modos mostrar que aceptan el mismo lenguaje.

8.3.1

TM con cinta semi-innita

La cinta es innita en un sentido, la cadena de entrada se coloca al principio de la cinta la cual no continua a la izquierda. Tambin se incluye la restriccin e o de no poder escribir B (blank ) en la cinta. Se puede demostrar que un TM normal se puede simular con una TM semi-innita usando dos caminos, uno que simula la cinta a la izquierda de la cadena de entrada y otro que simula la otra parte de la cinta. X0 X1 X1 X2 X2 ... ...

Los estados en la TM semi-innita son los que tiene la TM original junto con U o L para representar arriba (U) o abajo (L), adems de un par de a estados para preparar la TM semi-innita. Las transiciones en la cinta de arriba son iguales a las de la TM original, y las de abajo son contrarias (si la TM original se mueve a la derecha, la TM semi-innita inferior se mueve a la izquierda y al revs, si se mueve a la e izquierda la TM original la otra se mueve a la derecha). Slo se tiene que tener cuidado en las situaciones en donde se cambia de o un camino al otro.

137

8.3.2

Mquinas multistack a

Podemos pensar en una generalizacin de los PDAs cuando consideramos o varios stacks.

Una mquina de k-stacks es un PDA determinista con k stacks. Un a movimiento en esta mquina, cambia el estado y reemplaza el s a mbolo de arriba de cada stack con una cadena normalmente diferente para cada stack. La transicin ser (q, a, X1 , X2 , . . . , Xk ) = (p, 1, 2 , . . . , k ). Donde en o a: estado q con Xi hasta arriba de cada uno de los i = 1, 2, . . . , k stacks, se consume el s mbolo a y se reemplaza cada Xi por i . Se puede demostrar que un PDA con 2 stacks puede simular una TM. En la demostracin se asume que al nal de la cadena de entrada existe o un s mbolo especial que no es parte de la entrada. Lo primero que se hace es que se copia la cadena al primer stack, se hace pop de este stack y push en el segundo stack, con esto el primer elemento de la cadena de entrada est hasta arriba del segundo stack, y luego se empiezan a a simular las transiciones de estados. El primer stack vac nos representa todos los blanks a la izquierda de la o cadena de entrada y en general lo que est a la izquierda de donde apunta la a cabeza de la cinta de la TM. 138

Si TM reemplaza X por Y y se mueve a la derecha, PDA introduce (pushes) Y en el primer stack y saca (pops) X del segundo emphstack. Si TM reemplaza X por Y y se mueve a la izquierda, PDA saca (pops) el primer elemento del primer stack (digamos Z) y reemplaza X por ZY en el segundo stack.

8.3.3

Mquinas contadoras (counter machines) a

Una mquina contadora tiene la misma estructura que una mquina multia a stack, slo que en lugar de stacks tiene contadores. o Un contador tiene alg n entero positivo y slo puede distinguir entre 0 u o (cero) o un contador diferente de cero. En cada movimiento, cambia de estado y suma o resta 1 del contador (que no puede volverse negativo). Tambin podemos verlo como una mquina multistack restringida que e a tiene dos s mbolos de stack Z0 (marca el fondo) y X. El tener Xi Z0 nos identica al contador i. Se puede demostrar que los lenguajes aceptados por una mquina de un a contador son los CFL. Se puede demostrar que cualquier lenguaje recursivamente enumerable puede ser aceptado por una mquina de dos contadores. a

8.4

Mquinas de Turing y Computadoras a

Una computadora puede simular una mquina de Turing. Aunque con un a n mero muy grande de s u mbolos y cadenas en principio innitas, se podr an tener problemas de memoria, se puede codicar la TM (TM universal) y simular en una computadora convencional sin problemas de memoria. Una TM puede simular una computadora usando varias cintas para tomar 139

en cuenta los diferentes procesos que se realizan en una computadora (para representar la memoria de la computadora, la siguiente instruccin a realizar, o si se requiere copiar cierto contenido de la memoria, cambiarlo, etc.).

Se puede demostrar que si una computadora tiene slo instrucciones que o incrementan la longitud del tama o de las palabras en 1 y las instrucciones n de tama o w se pueden realizar en una TM con cintas m ltiples en O(k 2 ) n u pasos, entonces una TM parecida a la mostrada arriba pueden simular n pasos de la computadora en O(n3 ) pasos.

140

También podría gustarte