SlideShare ist ein Scribd-Unternehmen logo
1 von 144
Downloaden Sie, um offline zu lesen
Teor´ de Aut´matas y Lenguajes Formales
    ıa      o


       Leopoldo Altamirano, Miguel Arias,
        Jes´s Gonz´lez, Eduardo Morales,
           u      a
               Gustavo Rodr´ıguez
Objetivo General

    Proporcionar al estudiante los fundamentos de la teor´ de aut´matas as´
                                                         ıa      o        ı
como los de lenguajes formales. Tambi´n se incluye una introducci´n a las
                                        e                          o
m´quinas de Turing.
  a

                                  Temario

  1. Introducci´n
               o
  2. Aut´matas Finitos
        o
  3. Expresiones Regulares y Lenguajes
  4. Propiedades de los Lenguajes Regulares
  5. Gram´ticas Libres de Contexto y Lenguajes
         a
  6. Aut´mata de Pila
        o
  7. Propiedades de los Lenguajes Libres de Contexto
  8. Introducci´n a las M´quinas de Turing
               o         a

                Modalidad del Proceso de Ense˜anza
                                             n

    El material del curso es impartido por el instructor con resoluci´n de
                                                                       o
algunos problemas en clase. Tambi´n se asignarn tareas pr´cticas a los es-
                                    e                       a
tudiantes cuya soluci´n ser´ en algunos casos discutida en clase. Se tendr´n
                     o     a                                              a
sesiones de asesor´ con los asistentes de curso.
                  ıa

                                  Horario:

            Martes 9:30 a 12:00
   Clase:
            Jueves 9:30 a 12:00

               Martes 12:00 a 13:00
   Asosoria:
               Jueves 12:00 a 13:00

                                      i
Evaluaci´n:
                                  o

Tareas                 1/3
Examenes Parciales (2) 2/3
1er Parcial            19-Junio-2008
2o Parcial             15-Julio-2008


                       Calendarizaci´n.
                                    o

Sem.   Fecha           Tema
1      27 y 29 mayo    Introducci´n
                                 o
2      3 y 5 junio     Aut´matas Finitos
                           o
3      10 y 12 junio   Expresiones Regulares y Lenguajes
4      17 y 19 junio   Props. Lenguajes Regulares (Primer examen)
5      24 y 26 junio   Gram´ticas y Lenguajes Libres de Contexto
                             a
6      1 y 3 julio     Pushdown Automata
7      8 y 10 julio    Props. Lenguajes Libres de Contexto
8      15 y 17 julio   Intro. M´quina de Turing (Segundo examen)
                               a




                                ii
Referencias

 1. John E. Hopcroft, Rajeev Motwani and Jeffrey D. Ullman (2001). Au-
    tomata Theory, Language and Computation. Addison-Wesley Publish-
    ing.

 2. Michael Sipser (1997). Introduction to the Theory of Computation.
    PWS publishing company.




                                iii
Cap´
   ıtulo 1

Introducci´n
          o

1.1     Teor´ de Aut´matas
            ıa      o
   • Estudio de dispositivos o m´quinas de c´mputo abstractas
                                a           o

   • Turing en los 30’s estudi´ una m´quina 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 m´quina
                                                                    a
     pod´ hacer y lo que no, su conclusi´n aplica no solo a las m´quinas de
        ıa                              o                        a
     Turing, sino a las m´quinas actuales
                         a

   • En los 40’s y 50’s se estudiaron los Aut´matas Finitos
                                             o

   • Finales de los 50’s, N. Chomsky inicia el estudio formal de las gram´ticas
                                                                         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 eficientemente
         ıa                                       ıa
     o no (NP-duros).



1.2     Introducci´n a Pruebas Formales
                  o

Para qu´ pruebas?
       e

                                      1
• Hacer hip´tesis inductivas sobre partes de nuestros programas (iteraci´n
               o                                                           o
     o recursi´n)
              o

        – Hip´tesis consistente con la iteraci´n o recursi´n
             o                                o           o

   • Entender como trabaja un programa correcto es esencialmente lo mismo
     que la prueba de teoremas por inducci´n
                                          o

        – Pruebas deductivas (secuencia de pasos justificados)
        – Pruebas inductivas (pruebas recursivas de un estatuto parametrizado
          que se usa a s´ mismo con valores m´s bajos del par´metro)
                        ı                     a               a


1.2.1    Pruebas Deductivas

Secuencia de enunciados cuya verdad nos lleva de un enunciado inicil (hip´tesis)
                                                                         o
a una conclusi´n. 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 raz´n de ( x+1 )2 .
       o        x

   Tambi´n existen otras pruebas como pruebas por contradicci´n, por contra-
         e                                                   o
ejemplos y de conjuntos, pero nos vamos a enfocar en las pruebas por in-
ducci´n.
     o


1.2.2    Pruebas por Inducci´n
                            o
   • Para objetos definidos recursivamente

   • La mayor´ maneja enteros, pero en aut´matas se trabaja con ´rboles
               ıa                             o                 a
     y expresiones de varios tipos (expresiones regulares)




                                      2
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 Inducci´n: Asumir S(Y ) para Y “m´s 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.

   • Inducci´n 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.

Inducci´n: 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´ m´s dos sub´rboles 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 hip´tesis de inducci´n, 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 inducci´n.
                                                   o

    Frecuentemente el enunciado que tenemos que probar es de la forma “X
si y s´lo 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-s´lo-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 s´lo 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

Inducci´n: 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 verifica P (k + 1) y prueba que la ecuaci´n 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.

Inducci´n: Asumimos que P (k) : 1+2+22 +. . .+2k = 2k+1 −1 , es verdadero
        o
e intentamos probar que P (k + 1) tambi´n lo es:
                                       e

   P (k + 1) : 1 + 2 + 22 + ... + 2k+1 = 2(k+1)+1 − 1

   Rescribiendo la ecuaci´n anterior tenemos:
                         o

                1 + 2 + 22 + ... + 2k + 2k+1 =             2k+1 − 1 + 2k+1
                                              =            2(2k+1) − 1
                                              =            2k+1+1 − 1
                             Por lo tanto:
                    1 + 2 + 22 + . . . + 2k+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.

Inducci´n: Asumimos que P (k) : x0 + x1 + x2 + . . . + xk = (xk+1 − 1)/(x − 1)
       o
se cumple.

   Probamos que tambi´n P (k + 1) se cumple:
                     e
                                                               xk+1+1 −1
   P (k + 1) : x0 + x1 + x2 + . . . + xk + xk+1 =                (x−1)

   Demostramos que el lado izquierdo es igual al lado derecho:
   xk+1 −1              (xk+1 −1)+(x−1)(xk+1 )       xk+2 −1
    (x−1)
             + xk+1 =           (x−1)
                                                 =     x−1

Ejercicio: Probar que n2 > 3n para n ≥ 4.

Base: P (4) : 42 > 3(4) ´ 16 > 12, lo cual es cierto
                        o

Inducci´n: 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 Hip´tesis de Inducci´n)
                                              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)
                                             n(n+1)(n+2)
  3. 1 + 3 + 6 + . . . + n(n + 1)/2 =             6
                                    5n(n+1)
  4. 5 + 10 + 15 + . . . + 5n =        2
                              n(n+1)(2n+1)
  5. 12 + 22 + . . . +n 2 =        6

                              n2 (n+1)2
  6. 13 + 23 + . . . + n3 =        4

  7. n2 > n + 1 para n > 2

Ejercicios de tarea para la siguiente clase:

  1. 2 + 4 + 6 + ... + 2n = n(n + 1)
                                      n(2n−1)(2n+1)
  2. 12 + 32 + ... + (2n − 1)2 =            3

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



1.3     Teor´ de Aut´matas
            ıa      o

1.3.1    Motivaci´n
                 o

Los aut´matas finitos se utilizan como modelos para:
       o

                                             6
• Software para dise˜ ar circuitos digitales
                      n

  • Analizador l´xico de un compilador
                e

  • Buscar palabras clave en un archivo ´ en el web
                                        o

  • Software para verificar sistemas de estados finitos, como protocolos de
    comunicaciones



1.4    Conceptos de Teor´ de Aut´matas
                        ıa      o
  • Alfabeto = conjunto finito de s´
                                  ımbolos (Σ)

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

  • Cadena = secuencia finita 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 infinito, pero existe alg´ n conjunto
                                                             u
         finito 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 0’s seguidos por un n´ mero igual de 1’s; 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 alta-
mente utiles es la llamada “lenguajes regulares”.
      ´

   • Un grafo con un n´ mero finito de nodos, llamados estados.
                      u
   • Los arcos se etiquetan con uno o m´s s´
                                       a ımbolos de alg´ n alfabeto.
                                                       u
   • Un estado es designado como el estado de comienzo ´ estado inicial.
                                                       o
   • Algunos estados son estados finales o estados de aceptaci´n.
                                                             o
   • El lenguaje de los AF (Aut´mata Finito) es el conjunto de cadenas
                                o
     que etiquetan rutas que van desde el estado inicial a alg´ n estado de
                                                              u
     aceptaci´n.
             o
   • Abajo, el AF explora documentos HTML, busca una lista de lo que
     podr´ ser los pares de t´
          ıan                  ıtulo-autor, quiz´s en una lista de lectura para
                                                a
     alg´ n curso de literatura.
        u




                                      8
• Acepta cuando encuentra el final de un elemento de la lista.
   • En una aplicaci´n, las cadenas que casan con el t´
                    o                                 ıtulo (antes de ’by’)
     y autor (despu´s) ser´ almacenadas en una tabla de pares de t´
                   e      ıan                                        ıtulo-
     autor que son acumulados.


1.4.1    Ejemplos de Aut´matas Finitos
                        o

Aut´mata Finito para modelar un switch de encendido/apagado:
   o




   Aut´mata Finito para reconocer la cadena “hola”:
      o




1.4.2    Representaciones Estructurales
   • Gram´ticas: Modelos utiles para dise˜ ar SW que procesa datos con
          a                 ´            n
     una estructura recursiva
        – Un parser de un compilador
        – Expresiones aritm´ticas, condicionales, etc.
                           e
        – Una regla: E ⇒ E + E
   • Expresiones Regulares: Denotan la estructura de los datos, especial-
     mente cadenas de texto
        – Aut´matas pueden describir lo mismo que puede describir un
             o
          aut´mata finito
             o

                                     9
– El estilo difiere del de las gram´ticas
                                          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     Aut´matas y Complejidad
           o

Los aut´matas son esenciales para el estudio de los l´
       o                                             ımites de la computaci´n
                                                                           o

   • Qu´ puede hacer una computadora?
       e
        – Decidibilidad (decidability)
        – Problema decidible
   • Qu´ puede hacer una computadora eficientemente?
       e
        – Intractabilidad (intractability)
        – Polinomial vs Exponencial

Ejercicios en clase:

  1. Modelar un AF para cadenas de 0’s y 1’s que terminen siempre en 010.
  2. Modelar un AF para las cadenas que terminan con tres 0’s consecutivos.
  3. Modelar un AF para todas las cadenas en donde cada bloque de 5
     caracteres consecutivos contengan al menos dos 0’s.

Ejercicios de tarea para la siguiente clase:

  1. Modelar un AF donde el d´cimo s´
                             e      ımbolo de derecha a izquierda sea un
     1.

                                     10
2. Describir con palabras los conjuntos aceptados por los aut´matas finitos
                                                             o
   de los diagramas de transiciones de las siguientes figuras:




                                  11
Cap´
   ıtulo 2

Introducci´n a los Aut´matas
          o           o

Aut´mata: Conjunto de estados + Control → Cambio de estados en re-
    o
spuesta a una entrada.

Tipo de Control:

   • Determin´ıstico: Para cada entrada, hay s´lo un estado al que el aut´mata
                                              o                          o
     puede ir desde el estado en que se encuentre.

   • No determin´ıstico: Un aut´mata finito es no-determin´
                               o                         ıstico cuando se
     permite que el AF tenga 0 o m´s estados siguientes para cada par
                                     a
     estado-entrada.

   Si a˜ adimos la propiedad de no-determinismo, no a˜ adimos poder al
        n                                            n
aut´mata. Osea que no podemos definir ning´ n lenguaje que no se pueda
   o                                       u
definir con el aut´mata determin´
                 o             ıstico.

    Con la propiedad de no-determinismo se agrega eficiencia al describir una
aplicaci´n:
        o

   • Permite programar soluciones en un lenguaje de m´s alto nivel
                                                     a

   • Hay un algoritmo para compilar un N-DFA en un DFA y poder ser
     ejecutado en una computadora convencional

                                    12
Extensi´n del N-DFA para hacer saltos de un estado a otro espont´neamente,
           o                                                       a
con la cadena vac´ (ǫ) como entrada: ǫN-DFA. Estos aut´matas tambi´n
                  ıa                                       o            e
aceptan lenguajes regulares.

Ejemplo: Compra con dinero-electr´nico. 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 transfieran el dinero.




Tarea: Leer la secci´n 2.1.1 – 2.1.5 del libro
                    o



2.1     Definici´n formal de un Aut´mata Finito
               o                  o
        Determin´ıstico

Un AF se representa como la 5-tupla: A = (Q, Σ, δ, q0 , F ). Donde:

  1. Q es un conjunto finito 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 m´s estados finales/de aceptaci´n.
                          a                            o

  5. δ es una funci´n de transici´n. Esta funci´n:
                   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 Aut´mata 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 s´lo de 0’s y
                                                             o
     1’s.

   El Aut´mata A = (q0 , q1 , q2 , 0, 1, δ, q0 , q1 )
         o

   Aut´mata representado con una tabla de transiciones:
      o
              0    1
    → q0     q2   q0
     ·q1     q1   q1
      q2     q2   q1

   Aut´mata 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 flecha.




   • Los estados de aceptaci´n tienen doble c´
                            o                ırculo.

                                    ˆ
Funciones de transici´n 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 aceptaci´n, y
                                     o

  3. Tiene una secuencia de etiquetas a1 , a2 , . . . , an .

                                         15
Ejemplo: El siguiente AF acepta la cadena 01101:




                                     o             o    ˆ
   Formalmente, extendemos la funci´n de transici´n δ a δ(q, w), donde w
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).
             o ˆ             ˆ
   • Inducci´n: δ(q, w) = δ(δ(q, x), a), donde x es una cadena, y a es un solo
     s´
      ımbolo (i.e., ver a d´nde va el AF con x, luego buscar la transici´n
                           o                                               o
     para el ultimo s´
             ´        ımbolo a partir de ese estado).
                                                               ˆ
   • Hecho importante con una prueba inductiva directa: δ realmente rep-
     resenta rutas. Esto es, si w = a1 a2 . . . an , y δ(pi , ai ) = pi+1 , ∀i =
                                   ˆ
     0, 1, . . . , n − 1, entonces δ(p0 , w) = pn .

Aceptaci´n 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 confusi´n cuando se
                                                             o
trabaja con aut´matas (o matem´ticas 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
     aceptaci´n F son del tipo “conjunto de estados”.
             o
   • Ejemplo enga˜ oso: Es a un s´
                   n               ımbolo o una cadena de longitud 1? Re-
     spuesta: 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 s´lo las cadenas que tienen un n´ mero
                                     o                          u
par de 0’s y tambi´n un n´ mero par de 1’s
                  e      u




   Representaci´n tabular del aut´mata anterior:
               o                 o
              0    1
    · → q0   q2   q1
        q1   q3   q0
        q2   q0   q3
        q3   q1   q2

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




                                   17
2.2     Aut´mata Finito No-Determin´
           o                       ıstico

Un aut´mata finito es no-determin´
       o                          ıstico cuando se permite que el AF tenga
0 o m´s 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 aut´mata 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 l´xicos, etc. Es f´cil 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 m´s
                                       ı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 funci´n
                                                                        o
de transici´n δ es:
           o
                       0       1
    → q0      {q0 , q1 }   {q0 }
      q1               ∅   {q2 }
      q2               ∅       ∅

   Como puede observarse, todo se especifica en conjuntos.


2.2.1                  ˆ
           Extensi´n a δ
                  o

Similarmente a un DFA, podemos definir la funci´n de transici´n extendida
                                              o             o
ˆ como sigue:
δ

           ˆ
   • Base: δ(q, ǫ) = q

   • Inducci´n: Supongamos w es de la forma w = xa, donde a es el s´
                o                                                  ımbolo
                                                                ˆ
     terminal y x es el resto de w. Supongamos tambi´n que: δ(q, x) =
                                                      e
     {p1 , p2 , . . . , pk }.
        k
          δ(pi , a) = {r1 , r2 , . . . , rm }. Entonces ∪δ(q, w) = {r1 , r2 , . . . , rm }.
        i=1
                                              ˆ
     En otras palabras calculamos δ(q, w) primero calculando δ(q, x) y de-ˆ
     spu´s siguiendo cualquier transici´n de algunos de esos estados etique-
        e                                       o
     tada con a.

                              ˆ
Por ejemplo, podemos calcular δ(q0 , 00101) para el aut´mata anterior:
                                                       o
ˆ
δ(q0 , ǫ) = {q0 }

                                           19
ˆ
δ(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 final.


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 m´s f´cil de definir, 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 construcci´n de subconjunto que muestra un ejemplo
                                 o
de c´mo un aut´mata se puede construir a partir de otro.
    o          o


2.2.4      Construcci´n 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 construcci´n 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) = p∈S δN (p, a), osea, la
      uni´n 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 funci´n de transici´n δ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 notaci´n). Tambi´n es
                                                           o         e
importante notar que no todos los estados pueden ser alcanzados. En par-
ticular, s´lo los estados B, E y F son accesibles, por lo que los dem´s los
          o                                                          a
podemos eliminar.

   Una forma de no construir todos los subconjuntos para despu´s encontrar
                                                                    e
que s´lo unos cuantos son accesibles, es construir la tabla s´lo 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:




                         o                         a             ˆ
Teorema clave: inducci´n de |w| (la prueba est´ en el libro): δD ({q0 }, w) =
ˆ
δ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 construcci´n de
                                                                         o
subconjuntos, entonces L(D) = L(N).
                                               ˆ             ˆ
   Queremos probar por inducci´n en w que δD ({q0 }, w) = δN (q0 , w). Las
                                 o
dos funciones de transici´n 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 , ǫ).

Inducci´n: 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 definici´n de δ para
                                                                     o
                          ˆ                k
el NFA nos dice que: δN (q0 , w) = i=1 δN (pi , a).
                                                                                  k
    Por la construcci´n de subconjuntos: δD ({p1 , p2 , . . . , pk }, a) =
                     o                                                            i=1 δN (pi , a)

                       ˆ
    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)




                                               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 intervenci´n de un s´
                                                  o            ımbolo m´s alto entre
                                                                          a
esa previa aparici´n del s´
                  o       ımbolo, e.g., . . . 11, . . . 21112, . . . 312123.

   • Truco: Utilizar el estado de inicio con el significado “Creo que todav´
                                                                          ıa
     no se ha visto el s´
                        ımbolo que corresponde al s´ ımbolo final”.

   • Otros tres estados representando una elecci´n 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 Construcci´n del NFA Previo.
                                  o

    Un truco pr´ctico importante utilizado por analizadores l´xicos 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        2     3
    −→ p    pq        pr    Ps
       pq  pqt        pr    Ps
      pqt  pqt        pr    Ps
       pr  pqr       prt    Ps
      prt  pqr       prt    Ps
       ps  pqs       prs   Pst
      pst  pqs       prs   Pst
      prs pqrs      prst   Pst
     prst pqrs      prst   Pst
      pqs pqst       prs   Pst
     pqst pqst       prs   Pst
      pqr pqrt       prt    Ps
     pqrt pqrt       prt    Ps
     pqrs pqrst     prst   Pst
    pqrst pqrst     prst   Pst

Ejemplo: Problema 2.4.1.a



2.3     Aut´matas Finitos y Lenguajes Formales
           o

2.3.1    Aut´mata Finito con Transiciones-ǫ
            o

Sea ǫ una etiqueta en arcos.

    No hay ning´ n cambio extra: la aceptaci´n de w todav´ se da como la
                 u                            o              ıa
existencia de la ruta desde un estado de inicio a un estado de aceptaci´n con
                                                                       o
etiqueta w.

    Pero ǫ puede aparecer en los arcos, y significa que hay una cadena vac´
                                                                         ıa
(i.e., no tiene una contribuci´n visible para w).
                              o




                                     24
Ejemplo:




001 es aceptado siguiendo la ruta q, s, r, q, r, s, con la etiqueta 0ǫ01ǫ = 001.

   Podemos dise˜ ar un aut´mata 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.




   M´s formalmente: Un ǫ-NFA es una qu´
     a                                   ıntupla (Q, Σ, δ, q0 , F ), donde δ es
una funci´n de Q × Σ ∪ {ǫ} al conjunto potencia de Q.
         o




                                       25
La tabla de transici´n del ǫ-NFA del ejemplo anterior es:
                       o




2.4     Eliminaci´n de las Transiciones-ǫ
                 o

Las transiciones-ǫ son una conveniencia, pero no incrementan la potencia de
los FA’s. Para eliminar las transiciones-ǫ:

  1. Calcular la cerradura transitiva s´lo 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 transici´n de q a r en la entrada a (no ǫ), entonces a˜ ´dase una
                 o                                              na
     transici´n de p a r con la entrada a.
             o

  3. Convertir el estado p en un estado de aceptaci´n siempre y cuando p
                                                   o
     pueda alcanzar alg´ n estado de aceptaci´n q por medio de arcos ǫ.
                        u                    o




                                     26
4. Eliminar todas las transiciones-ǫ.




Ejemplo:

   De la misma forma como lo hicimos anteriormente, podemos definir las
transiciones extendidas para ǫ-NFA.
      ˆ
Base: δ(q, ǫ) = ECLOSE(q)

       o ˆ
Inducci´n: δ(q, xa) =        ˆ
                         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 final.

    Se puede demostrar que se puede construir un DFA a partir de un ǫ-NFA
siguiendo un esquema parecido al de construcci´n 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 f´cil
                                                                        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 aut´mata.
                                        o

   • Utilizado en muchos lugares como un lenguaje para describir patrones
     en texto que son sencillos pero muy utiles.
                                         ´
   • Pueden definir exactamente los mismos lenguajes que los aut´matas
                                                               o
     pueden describir: Lenguajes regulares
   • Ofrecen algo que los aut´matas 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 notaci´n de tipo expresi´n
                                                   o                 o
         regular para describir patrones
       – Convierte la expresi´n regular a un DFA o un NFA y simula el
                             o
         aut´mata en el archivo de b´ squeda
            o                       u
       – Generadores de analizadores-l´xicos. Como Lex o Flex.
                                      e
       – Los analizadores l´xicos son parte de un compilador. Dividen el
                           e
         programa fuente en unidades l´gicas (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 expresi´n regular, entonces L(E) denota el lenguaje que define
                   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 uni´n. L(E + F ) = L(E) ∪ L(F ).
                                  o
       2. Yuxtaposici´n (i.e., s´
                     o          ımbolo de no operador, como en xy que
          significa x × y) para representar la concatenaci´n. L(EF ) =
                                                         o
          L(E)L(F ), donde la concatenaci´n de los lenguajes L y M es
                                          o
          {xy|x ∈ L y y ∈ M}, la concatenaci´n tambi´n 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 expresi´n regular, entonces E ∗ es una expresi´n regu-
                              o                                     o
          lar, que denota la cerradura de L(E). Esto es, L(E ∗ ) = (L(E))∗ .
       5. Si E es una expresi´n regular, entonces (E), E entre par´ntesis,
                             o                                    e
          tambi´n es una expresi´n 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
          s´lo a la secuencia de s´
           o                      ımbolos a su izquierda que es una expresi´n
                                                                           o
          regular bien formada

                                    30
2. Concatenaci´n sigue en precedencia a la cerradura, el operador
                      o
           “dot”.
        3. Despu´s de agrupar los asteriscos a sus operandos, se agrupan los
                 e
           operadores de concatenaci´n a sus operandos
                                    o
        4. Se agrupan todas las expresiones yuxtapuestas (adyacentes sin
           operador interviniendo)
        5. Concatenaci´n es asociativa y se sugiere agrupar desde la izquierda
                        o
           (i.e. 012 se agrupa (01)2).
        6. La uni´n (operador +) tiene la siguiente precedencia, tambi´n es
                  o                                                   e
           asociativa.
        7. Los par´ntesis 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 0’s y 1’s, de longitud par,
     de tal manera que cada posici´n impar tenga un 0.
                                   o

Ejemplo 3.2: Expresi´n regular para el conjunto de cadenas que alterna 0’s
                    o
y 1’s:

   • (01)∗ + (10)∗ + 0(10)∗ + 1(01)∗

   • (ǫ + 1)(01)∗ (ǫ + 0)



3.2     Equivalencia de Lenguajes de FA y Lengua-
        jes RE
   • Se mostrar´ que un NFA con transiciones-ǫ puede aceptar el lenguaje
               a
     de una RE.


                                         31
• Despu´s, se mostrar´ que un RE puede describir el lenguaje de un DFA
           e            a
     (la misma construcci´n funciona para un NFA).
                         o

   • Los lenguajes aceptados por DFA, NFA, ǫ-NFA, RE son llamados lengua-
     jes regulares.


3.2.1      De DFA’s a Expresiones Regulares

Teorema 3.4: Si L = L(A) para alg´ n DFA A, entonces existe una expresi´n
                                 u                                     o
regular R tal que L = L(R).

Prueba: Suponiendo que A tiene estados {1, 2, . . . , n}, n finito. Tratemos
de construir una colecci´n de RE que describan progresivamente conjuntos
                        o
de rutas del diagrama de transiciones de A
     (k)
   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
                     (k)
  Para construir Rij se utiliza una definici´n inductiva de k = 0 hasta
                                           o
k=n

   BASE: k = 0, implica que no hay estados intermedios. S´lo dos clases de
                                                         o
rutas cumplen con esta condici´n:
                              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 transici´n del estado i al estado j con el s´
            o                                   ımbolo a

                                          (0)
   • Si no hay s´
                ımbolo a, entonces Rij = ∅.


                                          32
(0)
   • Si hay s´lo un s´
             o       ımbolo a, entonces Rij = a.
                                                             (0)
   • Si hay varios s´
                    ımbolos a1 , a2 , . . . , ak , entonces Rij = a1 + a2 + . . . + ak .


   Si i = j, s´lo se permiten rutas de longitud 0 y loops del estado i a ´l
              o                                                          e
mismo.


   • La ruta de longitud 0 se representa con ǫ
                                           (0)
   • Si no hay s´
                ımbolo a, entonces Rij = ǫ.
                                                 (0)
   • Si hay s´lo un s´
             o       ımbolo a, entonces Rij = ǫ + a.
                                                            (0)
   • 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
      (k−1)
     Rij .

  2. La ruta pasa por el estado k al menos una vez:
     Se divide la ruta en varias partes, una divisi´n cada que se pasa por el
                                                   o
     estado k
     Primero del estado i al estado k, despu´s, varios pasos del estado k a
                                             e
     s´ mismo, finalmente, del estado k al estado j.
      ı
                                                                    (k−1)     (k−1) ∗    (k−1)
     Las etiquetas de estas rutas se representan con la RE Rik              (Rkk   ) Rkj

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

                                          33
Asumimos que 1 es el estado inicial. El estado de aceptaci´n puede ser
                                                              o
un conjunto de estados La expresi´n regular para el lenguaje del aut´mata
                                 o                                  o
                                              (n)
es la suma (uni´n) de todas las expresiones R1j tal que j es un estado de
               o
aceptaci´n.
        o

Ejemplo: Un DFA que acepta todas las cadenas que tienen al menos un 0




                                                                   (0)             (0)
   Inicialmente sustituimos para la base: Ri j (0) = ǫ Rij = ǫ + a Rij =
ǫ + a1 + a2 + . . . + ak
      (0)
    R11     ǫ+1
     (0)
    R12     0
     (0)
    R21     ∅
     (0)
    R22     (ǫ + 0 + 1)
                                             (1)      (0)    (0)    (0)   (0)
   Ahora para el paso de inducci´n: Rij = Rij + Ri1 (R11 )∗ R1j
                                o

            Por sustituci´n directa
                         o                         Simplificado
     (1)
    R11     ǫ + 1 + (ǫ + 1)(ǫ + 1)∗ (ǫ + 1)        1∗
     (1)
    R12     0 + (ǫ + 1)(ǫ + 1)∗ 0                  1∗ 0
     (1)
    R21     ∅ + ∅(ǫ + 1)∗ (ǫ + 1)                  ∅
     (1)
    R22     ǫ + 0 + 1 + ∅(ǫ + 1)∗ 0                ǫ+0+1
     (2)     (1)    (1)   (1)   (1)
   Rij = Rij + Ri2 (R22 )∗ R2j

            Por sustituci´n directa
                           o                                        Simplificado
     (2)
    R11     1 + 1 0(ǫ + 0 + 1)∗ ∅
             ∗     ∗
                                                                    1∗
     (2)
    R12     1∗ 0 + 1∗ 0(ǫ + 0 + 1)∗ (ǫ + 0 + 1)                     1∗ 0(0 + 1)∗
     (2)
    R21     ∅ + (ǫ + 0 + 1)(ǫ + 0 + 1)∗ ∅                           ∅
     (2)
    R22     ǫ + 0 + 1 + (ǫ + 0 + 1)(ǫ + 0 + 1)∗ (ǫ + 0 + 1)         (0 + 1)∗

   Construcci´n de la RE final:
             o


                                        34
Uni´n de todas las expresiones donde el primer estado es el estado inicial
        o
y el segundo el estado de aceptaci´n
                                  o

   • Estado inicial: 1

   • Estado final: 2
                         (2)
   • S´lo necesitamos R12
      o

   • 1∗ 0(0 + 1)∗

Este m´todo funciona tambi´n para NFA y ǫ-NFA pero su construcci´n es
      e                     e                                   o
                                   n
muy costoso, hasta en el orden de 4 s´
                                     ımbolos.


3.2.2    Conversi´n de un DFA a una RE por Eliminaci´n
                 o                                  o
         de Estados

Evita duplicar trabajo en algunos puntos del teorema 3.4.

   Ahora utilizaremos aut´matas que podr´n tener RE como etiquetas.
                         o              a

    El lenguaje del aut´mata es la uni´n de todas las rutas que van del estado
                       o              o
inicial a un estado de aceptaci´n.
                               o

   • Concatenando los lenguajes de las RE que van a trav´s de la ruta.
                                                        e

   • En la siguiente figura se muestra un aut´mata 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, quiz´sa
     hacen un loop en s cero o m´s veces, y finalmente van a pj .
                                 a
     La expresi´n para estas rutas es Qi S ∗ Pj .
               o
     Esta expresi´n se suma (con el operador uni´n) 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 aut´mata resultante despu´s de la eliminaci´n de “s” es el siguiente
           o                     e                 o


3.2.2.1   Estrategia para construir el aut´mata
                                          o

  1. Para cada estado de aceptaci´n q, aplicar el proceso de reducci´n para
                                  o                                 o
     producir un aut´mata 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 aut´mata con 2 estados como el siguiente, una
                                 o
     forma de describir la RE de este aut´mata es (R + SU ∗ T )∗ SU ∗
                                         o


                                      36
3. Si el estado inicial tambi´n es un estado de aceptaci´n, tambi´n se
                               e                           o         e
     debe hacer una eliminaci´n de estados del aut´mata original que elim-
                             o                     o
     ine todos los estados menos el inicial y dejamos un aut´mata como el
                                                            o
     siguiente:




  4. La RE final es la suma (uni´n) de todas las expresiones derivadas del
                               o
     aut´mata reducido para cada estado de aceptaci´n por las reglas 2 y 3.
        o                                          o


Ejemplo: para el siguiente NFA que acepta cadenas de 0’s y 1’s de manera
que tienen un 1 dos o tres posiciones antes del final.




                                   37
3.2.3    Convirtiendo una RE a un Aut´mata
                                     o

Teorema 3.7: Todo lenguaje definido por una RE tambi´n esta definido por
                                                   e
un aut´mata finito.
      o

Prueba: Suponemos L = L(R) para la expresi´n regular R. Mostramos que
                                          o
L = L(E) para alg´ n ǫ-NFA E con:
                 u

  1. Exactamente un estado de aceptaci´n
                                      o
  2. Sin arcos que lleguen al estado inicial
  3. Sin arcos que salgan del estado de aceptaci´n
                                                o

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




   Inducci´n:
          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 Reg-
        ulares

3.3.1    Asociatividad y Conmutatividad
   • Ley conmutativa para la uni´n: L + M = M + L
                                o
   • Ley asociativa para la uni´n: (L + M) + N = L + (M + N)
                               o
   • Ley asociativa para la concatenaci´n: (LM)N = L(MN)
                                       o

NOTA: La concatenaci´n 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 adici´n: 0 + x = x + 0 = x.
                                     o
      1 es la identidad para la multiplicaci´n: 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 multiplicaci´n: 0 × x = x × 0 = 0
                                              o
      no hay aniquilador para la suma


3.3.3    Leyes
   • ∅ es la identidad para la uni´n: ∅ + L = L + ∅ = L
                                  o
   • ǫ es la identidad para la concatenaci´n: ǫL = Lǫ = L
                                          o
   • ∅ es el aniquilador para la concatenaci´n: ∅L = L∅ = ∅
                                            o

   NOTA: Estas leyes las utilizamos para simplificaciones

                                       41
3.3.3.1   Leyes Distributivas

   • Como la concatenaci´n no es conmutativa, tenemos dos formas de la
                           o
     ley distributiva para la concatenaci´n:
                                         o
     Ley Distributiva Izquierda para la concatenaci´n sobre uni´n: L(M +
                                                   o           o
     N) = LM + LN
     Ley Distributiva Derecha para la concatenaci´n sobre uni´n: (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 multiplicaci´n tampoco es idempotente: x × x = x
                               o

   • La uni´n e intersecci´n son ejemplos comunes de operadores idempo-
            o             o
     tentes
     Ley idempotente para la uni´n: 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 define 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 infinita de leyes para RE

   • Hay una metodolog´ general para hacer estas pruebas m´s f´cilmente?
                      ıa                                  a a
      Se reduce a probar la igualdad de dos lenguajes espec´
                                                           ıficos
      T´cnica ligada a los operadores para RE, no se puede extender a otros
       e
      operadores (como intersecci´n)
                                 o

   • Para probar que (L + M)∗ = (L∗ M ∗ )∗
      Probamos que las cadenas que est´n en (L + M)∗ tambi´n est´n en
                                      a                   e     a
        ∗  ∗ ∗
      (L M )
      Probamos que las cadenas que est´n en (L∗ M ∗ )∗ tambi´n est´n 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 expresi´n (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 expresi´n congelada (concreta) tambi´n es ǫ
                         o                            e

   • Si E = ∅, la expresi´n congelada tambi´n es ∅
                         o                 e


                                          43
• Si E = a, la expresi´n congelada es tambi´n a. Ahora wǫL(E) s´ y solo
                          o                    e                     ı
     s´ existe uǫL(a), tal que w = u y u est´ en el lenguaje de la expresi´n
      ı                                     a                             o
     congelada, i.e. uǫa.

Inducci´n (3 casos):
       o

   • Caso 1 (Uni´n): 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´
                                   ıficos. Entonces w esta en L(F ) o en
     L(G).

   • Caso 2 (Concatenaci´n):
                        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 ver´n las pruebas para decidir si dos RE denotan el mismo
                     a
lenguaje hasta la secci´n 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 aut´matas a partir de
                                                      o
     componentes usando operaciones, v.g., dado un lenguaje L y M con-
     struir un aut´mata para L ∩ M.
                  o

   • Propiedades de decisi´n: an´lisis computacional de aut´matas, v.g.,
                          o      a                         o
     probar si dos aut´matas son equivalentes.
                      o

   • T´cnicas de minimizaci´n: utiles para construir m´quinas m´s 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 m´quina acepta err´neamente 0j 1i , y si ∈ F entonces la m´quina
             a                 o                     /                a
rechaza err´neamente 0i 1i .
           o

   El problema es que el DFA tiene que tener historia de cu´ntos 0’s lleva
                                                            a
para poder aceptar el mismo n´ mero de 1’s 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 m´s, puede ser escrita como w = xyz, donde:
                                a

     1. y = ǫ

     2. |xy| ≤ n

     3. Para toda i ≥ 0, wy iz tambi´n 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 aut´mata, 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 despu´s de leer los primeros i s´
                                         e                          ımbolos de
w.

     q0 = estado de inicio, q1 = δ(q0 , a1 ), q2 = δ ′ (q0 , a1 a2 ), etc.


                                             46
Como s´lo 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 ocasi´n, o  o
                                 i
m´s, 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 par´metro.
                               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, satisfa-
     ciendo las propiedades del PL. De nuevo, puede que no sepamos como
     descomponer w, as´ que utilizaremos x, y, z como par´metros.
                        ı                                a
   • Derivamos una contradicci´n 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 0’s y
                                                           u
                                                        k
1’s. 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 0’s que 1’s.

Ejemplo 2: Supongamos que L = 1p : p es primo es regular. Sea n el
par´metro del pumping lemma y seleccionemos un primo p ≥ n + 2.
   a

                                                p

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



     |y| = m

   Ahora xy p−mz est´ en L. |xpp−m z| = |xz|+(p−m)|y| = p−m+(p−m)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 0’s 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.
                      2
     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 m´s grande que n2
                  a                                    a
                     2
y no m´s grande que n + n.
      a

  Sin embargo, el pr´ximo cuadrado perfecto despu´s de n2 es (n + 1)2 =
                    o                            e
 2
n + 2n + 1.

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

                                          48
Como hemos derivado una contradicci´n, la unica asunci´n que no se ha
                                       o       ´          o
probado –que L es regular– debe ser una falla, y tenemos una “prueba por
contradicci´n” que L no es regular.
           o


4.1.3    Propiedades de Cerradura

Algunas operaciones sobre lenguajes regulares garantizan producir lenguajes
regulares:

   • Uni´n: L ∪ M lenguajes con cadenas en L, M o en ambos.
        o

   • Intersecci´n: L ∩ M lenguajes con cadenas en ambos.
               o

   • Complemento: L cadenas que no est´n en L.
                                      a

   • Diferencia: LM o L − M.

   • Inversi´n: LR = {w R : w ∈ L}
            o

   • Cerradura: L∗

   • Concatenaci´n: L.M
                o

   • Homomorfismo (substituci´n): h(L) = {h(w) ∈ L}h es un homomor-
                            o
     fismo.

   • Homomorfismo inverso (substituci´n inversa): h−1 (L) = {w ∈ Σ :
                                    o
     h(w) ∈ L, h : Σ →} es un homomorfismo.

Uni´n: la uni´n de lenguajes regulares es regular. Sea L = L(E) y M =
    o         o
L(F ). Entonces L(E + F ) = L ∪ M , por la definici´n de “+” en RE.
                                                  o

Complemento: Si L es un lenguaje regular sobre Σ, entonces tambi´n lo es
                                                                e
     ∗
L = Σ L. Todos los estados son de aceptaci´n excepto los F.
                                          o




                                     49
Ejemplo: Sea L definido 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 0’s y 1’s 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.

Intersecci´n: Si L y M son regulares, entonces tambi´n L ∩ M. Usando las
          o                                         e
leyes de Morgan: L ∩ M = L ∪ M .

   Para esto tambi´n se puede construir un aut´mata que simula AL y AM
                    e                            o
en paralelo y llega a un estado de aceptaci´n si AL y AM tambi´n 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: LM lenguaje en L pero no en M, LM = L ∩ M.

Inversi´n: w R es la cadena invertida w. Ejemplo: 0010R = 0100.
       o

   Inversi´n 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 )∗

Homomorfismo

    Un homomorfismo sobre Σ es una funci´n 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}∗ definido 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)).

Inducci´n: 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
Homomorfismo Inverso: Sea h : Σ∗ → Θ∗ un homomorfismo. Sea L ⊆ Θ∗ ,
entonces h−1 (L) = {w|w ∈ Σ∗ : h(w) ∈ L}.




   Sea h : Σ∗ → Θ∗ un homomorfismo. Sea L ⊆ Θ∗ un lenguaje regular,
entonces h−1 (L) es regular.

    El DFA del homomorfismo inverso usa los estados del DFA original, pero
cambia los s´ımbolos de entrada de acuerdo a la funci´n h antes de decidir el
                                                      o
siguiente estado. En la prueba lo importante es que los estados de aceptaci´n
                                                                           o
de los dos aut´matas 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
o             ˆ            ˆ
   La prueba se hace por inducci´n sobre |w|. γ (q0 , w) = δ(q0 , h(w)).




4.1.4    Propiedades de decisi´n
                              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 definen el mismo lenguaje.

   Tambi´n podemos cuestionarnos acerca del costo computacional requerido
          e
para resolver estas preguntas o por ejemplo el requerido para hacer la con-
versi´n entre una representaci´n 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 m´s n2 arcos. El DFA tiene
                                                 a
           n
a lo m´s 2 estados. Para cada s´
       a                          ımbolo y cada subconjunto el calcular la
funci´n de transici´n para todos los estados, requiere a lo m´s 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 pr´ctica la
                                                                   a
                            3
complejidad se reduce a O(n s).



                                     54
Transformar un DFA a un NFA: S´lo 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 aut´mata 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 final o de aceptaci´n, 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 minimizaci´n de aut´matas
                                   o        o

Lo que queremos saber es si dos aut´matas diferentes definen el mismo
                                   o
lenguaje.

     Primero definiremos lo que son estados equivalentes.

  Dos estados p y q dentro de un aut´mata 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)
                                                      ∴A≡E



    Tambi´n podemos encontrar los pares equivalentes usando el algoritmo
          e
de llenado de tabla (table-filling algorithm).

Base: Si p ∈ F ∧ q = F ⇒ p = q
Inducci´n: 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 DFA’s

   • Junta los dos DFA’s

   • Prueba si los dos estados iniciales son equivalentes, en cuyo caso L =
     M. Si no son equivalentes, entonces L = M.




                                     57
Ejemplo:




   Los dos DFA’s aceptan: L(ǫ + (0 + 1)∗ 0). Si los consideramos a los dos
como un solo aut´mata, 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 aut´matas son
                                                                   o
equivalentes.


                                     58
4.2.2     Minimizaci´n de un DFA
                    o

Una consecuencia de encontrar estados equivalentes, es que podemos reem-
plazar los estados equivalentes por un solo estado representado por su uni´n.
                                                                          o

    Por otro lado, la relaci´n de equivalencia cumple con ser reflexiva, sim´trica
                            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 aut´mata, 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     Introducci´n
                  o
   • Hemos visto que muchos lenguajes no son regulares. Por lo que necsi-
     tamos una clase mas grande de lenguages

   • Las Gram´ticas Libres de Contexto (Context-Free Languages) o CFL’s
              a
     jugaron un papel central en lenguaje natural desde los 50’s y en los
     compiladores desde los 60’s

   • Las Gram´ticas Libres de Contexto forman la base de la sint´xis BNF
             a                                                  a

   • Son actualmente importantes para XML y sus DTD’s (document type
     definition)


    Vamos a ver los CFG’s, los lenguajes que generan, los ´rboles de parseo,
                                                          a
el pushdown automata y las propiedades de cerradura de los CFL’s.

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
contradicci´n.
           o

Definamos Lpal de forma inductiva.

Base: ǫ, 0 y 1 son pal´
                      ındromes.

Inducci´n: Si w es un pal´
       o                 ındrome, tambi´n 0w0 y 1w1.
                                       e

Ninguna otra cosa es pal´
                        ındrome.

    Las CFG’s son un mecanismo formal para la definici´nn como la de
                                                     o
pal´
   ındrome.

P   →ǫ
P   →0
P   →1
P   → 0P 0
P   → 1P 1

donde 0 y 1 son s´
                 ımbolos terminales.

P es una variable o s´
                     ımbolo no terminal o categor´ sint´ctica.
                                                 ıa    a

P es en esta gram´tica tambi´n el s´
                 a          e      ımbolo inicial.

1-5 son producciones o reglas. La variable definida (parcialmente) en la
producci´n tambi´n se llama la cabeza de la producci´n y la cadena de cero,
         o       e                                  o
1 o m´s s´
      a ımbolos terminales o variables a la derecha de la producci´n se
                                                                     o
llama el cuerpo de la producci´n.
                              o



5.2      Definici´n formal de CFG’s
                o

Una gr´matica libre de contexto se define 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 finito 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 definir por la gram´tica:
                                                                        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 programaci´n t´
                                                             o ıpico. Los
operadores son + y ∗, y los argumentos son identificadores, osea strings que
empiezan con a o b en L((a + b)(a + b + 0 + 1)∗ ).

   Las expresiones se definen por la gram´tica: 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 gram´ticas
                                a
   • Inferencia recursiva, usando las producciones del cuerpo a la cabeza.
     Con esto reconocemos si una cadena est´ en el lenguaje definido por la
                                            a
     gram´tica.
          a

                                    63
Ejemplo de una inferencia recursiva de la cadena: a ∗ (a + b00).
      Cadenas              Cabeza   Del Leng. de Cadenas usadas
      (i) a                I        5            −
      (ii) b               I        6            −
      (iii) b0             I        9            (ii)
      (iv) b00             I        9            (iii)
      (v) a                E        1            (i)
      (vi) b00             E        1            (iv)
      (vii) a + b00        E        2            (v),(vi)
      (viii) (a + b00)     E        4            (vii)
      (ix) a ∗ (a + b00)   E        3            (v),(viii)
   • Derivaciones, usando las producciones de la cabeza al cuerpo. Con esto
     derivamos cadenas que pertenecen a la gram´tica.
                                                  a
                                      ımbolo: ⇒
     Para esto introducimos un nuevo s´
     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 αγβ.

              ∗
   Definimos ⇒ como la cerradura reflexiva y transitiva de ⇒. Lo que quiere
decir es que usamos uno a mas pasos de derivaci´n.
                                               o

   Ideas:

                                             ∗
   • Base: Sea α ∈ (V ∪ T )∗ , entronces α ⇒ α (osea que cada cadena se
     deriva a s´ misma).
               ı
                      ∗                              ∗
   • Inducci´n: Si α ⇒ β, y β ⇒ γ, entonces α ⇒ γ
            o

Ejemplo: La derivaci´n de a∗(a+b00) a partir de E en la gram´tica 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 derivaci´n y la inferencia recursiva son equivalentes, osea que si pode-
              o
mos inferir que una cadena de s´ ımbolos terminales w est´ en el lenguaje de
                                                          a
                            ∗
una variable A entonces A ⇒ w y al rev´s.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 derivaci´n
                                                                       o
de a ∗ (a + b00).



5.4     Derivaciones m´s a la izquierda y m´s a
                      a                    a
        la derecha

Para restringir el n´ mero de opciones para derivar una cadena.
                    u


   • Derivaci´n m´s a la izquierda (leftmost derivation): ⇒lm siempre re-
             o    a
     emplaza la variable m´s a la izquierda por uno de los cuerpos de sus
                           a
     producciones.

   • Derivaci´n m´s a la derecha (rightmost derivation): ⇒rm siempre re-
             o    a
     emplaza la variable m´s a la derecha por uno de los cuerpos de sus
                          a
     producciones.


Ejemplo: la derivaci´n anterior la podemos hacer como derivaci´n m´s 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, tambi´n la podemos hacer m´s 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 derivaci´n tiene una derivaci´n equivalente m´s a la izquierda
                     o                    o               a
y una m´s 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 Gram´tica
                              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 inducci´n 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.

Inducci´n: 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 hip´tesis 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 inducci´n
                                                                  o
                     ∗
sobre la longitud de ⇒.
                        ∗
Base: La derivaci´n de ⇒ se hace en un solo paso, por lo que w debe de ser
                   o
ǫ, 0 o 1, todos pal´
                   ındromes.

                                      66
Inducci´n: Sea n ≥ 1 y suponemos que la derivaci´n 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
derivaci´n toma n pasos.
        o

   Por la hip´tesis 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 (left-
sentencial 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 gram´tica del lenguaje sencillo que definimos an-
                              a
teriormente, E ∗ (I + E) es una forma de sentencia ya que: E ⇒ E ∗ E ⇒
E ∗ (E) ⇒ E ∗ (E + E) ⇒ E ∗ (I + E).

   Esta derivaci´n no es ni m´s a la izquierda ni m´s 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 (sint´ctica) de w. w puede ser un programa,
                                         a
un query en SQL, un documento en XML, etc.

                                      67
Los ´rboles de parseo son una representaci´n atlernativa de las deriva-
        a                                    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 gram´tica:
                   a
E→I
E →E+E
E →E∗E
E → (E)
.
.
.
el siguiente es un ´rbol de parseo:
                   a




                                        68
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal
Principal

Weitere ähnliche Inhalte

Andere mochten auch

Andere mochten auch (20)

La inmaculada
La inmaculadaLa inmaculada
La inmaculada
 
Maria
MariaMaria
Maria
 
Fuentes ismael digitalizacion de documentos
Fuentes ismael   digitalizacion de documentosFuentes ismael   digitalizacion de documentos
Fuentes ismael digitalizacion de documentos
 
Presentacion comunicación
Presentacion  comunicaciónPresentacion  comunicación
Presentacion comunicación
 
De qué se quejan
De qué se quejanDe qué se quejan
De qué se quejan
 
Escolarización con Interprete_Presentación
Escolarización con Interprete_PresentaciónEscolarización con Interprete_Presentación
Escolarización con Interprete_Presentación
 
La personalidad
La personalidad  La personalidad
La personalidad
 
ENJ-1-337: Presentación Módulo III Curso Delitos Electrónicos (2)
ENJ-1-337: Presentación Módulo III Curso Delitos Electrónicos (2)ENJ-1-337: Presentación Módulo III Curso Delitos Electrónicos (2)
ENJ-1-337: Presentación Módulo III Curso Delitos Electrónicos (2)
 
Maria
MariaMaria
Maria
 
Modified Orientation
Modified OrientationModified Orientation
Modified Orientation
 
Maria
MariaMaria
Maria
 
Maria
MariaMaria
Maria
 
Controversias sobre el sistema integrado de contabilidad
Controversias sobre el sistema integrado de contabilidadControversias sobre el sistema integrado de contabilidad
Controversias sobre el sistema integrado de contabilidad
 
Tolmachev Alexander Web Search Engines
Tolmachev Alexander Web Search EnginesTolmachev Alexander Web Search Engines
Tolmachev Alexander Web Search Engines
 
e-economia
e-economiae-economia
e-economia
 
Regressionanalyse
RegressionanalyseRegressionanalyse
Regressionanalyse
 
Capm scenario identifying the critical path answers
Capm scenario identifying the critical path   answersCapm scenario identifying the critical path   answers
Capm scenario identifying the critical path answers
 
Individualismo
IndividualismoIndividualismo
Individualismo
 
3 requerimientos vs incidentes
3 requerimientos vs incidentes3 requerimientos vs incidentes
3 requerimientos vs incidentes
 
ttt
tttttt
ttt
 

Ähnlich wie Principal (20)

Orientación alumnos sexto
Orientación alumnos sextoOrientación alumnos sexto
Orientación alumnos sexto
 
Logica proposicional
Logica proposicionalLogica proposicional
Logica proposicional
 
Introduccion a la fisica.
Introduccion a la fisica.Introduccion a la fisica.
Introduccion a la fisica.
 
Logica
LogicaLogica
Logica
 
Lógica matemática
Lógica matemáticaLógica matemática
Lógica matemática
 
Semana 1 - Prposiciones Logicas y tablas de verdad.pdf
Semana 1 - Prposiciones Logicas y tablas de verdad.pdfSemana 1 - Prposiciones Logicas y tablas de verdad.pdf
Semana 1 - Prposiciones Logicas y tablas de verdad.pdf
 
Tippens fisica 7e_diapositivas_01
Tippens fisica 7e_diapositivas_01Tippens fisica 7e_diapositivas_01
Tippens fisica 7e_diapositivas_01
 
Tippens fisica 7e_diapositivas_01
Tippens fisica 7e_diapositivas_01Tippens fisica 7e_diapositivas_01
Tippens fisica 7e_diapositivas_01
 
Tippens fisica 7e_diapositivas_01
Tippens fisica 7e_diapositivas_01Tippens fisica 7e_diapositivas_01
Tippens fisica 7e_diapositivas_01
 
2.5 Razonamiento monótono..pptx
2.5 Razonamiento monótono..pptx2.5 Razonamiento monótono..pptx
2.5 Razonamiento monótono..pptx
 
El lenguaje simbólico y natural en la clase de matemática
El lenguaje simbólico y natural en la clase de matemáticaEl lenguaje simbólico y natural en la clase de matemática
El lenguaje simbólico y natural en la clase de matemática
 
Unidad _1
 Unidad _1 Unidad _1
Unidad _1
 
UNIDAD1
UNIDAD1UNIDAD1
UNIDAD1
 
Intro lógica de predicados
Intro lógica de predicadosIntro lógica de predicados
Intro lógica de predicados
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
5. formalización
5. formalización5. formalización
5. formalización
 
Curso propedéutico
Curso propedéuticoCurso propedéutico
Curso propedéutico
 
Silabo de análisis matemático III
Silabo de análisis matemático IIISilabo de análisis matemático III
Silabo de análisis matemático III
 
Prueba de-desarrollo
Prueba de-desarrolloPrueba de-desarrollo
Prueba de-desarrollo
 
Tipos de Logica.pptx
Tipos de Logica.pptxTipos de Logica.pptx
Tipos de Logica.pptx
 

Principal

  • 1. Teor´ de Aut´matas y Lenguajes Formales ıa o Leopoldo Altamirano, Miguel Arias, Jes´s Gonz´lez, Eduardo Morales, u a Gustavo Rodr´ıguez
  • 2. Objetivo General Proporcionar al estudiante los fundamentos de la teor´ de aut´matas as´ ıa o ı como los de lenguajes formales. Tambi´n se incluye una introducci´n a las e o m´quinas de Turing. a Temario 1. Introducci´n o 2. Aut´matas Finitos o 3. Expresiones Regulares y Lenguajes 4. Propiedades de los Lenguajes Regulares 5. Gram´ticas Libres de Contexto y Lenguajes a 6. Aut´mata de Pila o 7. Propiedades de los Lenguajes Libres de Contexto 8. Introducci´n a las M´quinas de Turing o a Modalidad del Proceso de Ense˜anza n El material del curso es impartido por el instructor con resoluci´n de o algunos problemas en clase. Tambi´n se asignarn tareas pr´cticas a los es- e a tudiantes cuya soluci´n ser´ en algunos casos discutida en clase. Se tendr´n o a a sesiones de asesor´ con los asistentes de curso. ıa Horario: Martes 9:30 a 12:00 Clase: Jueves 9:30 a 12:00 Martes 12:00 a 13:00 Asosoria: Jueves 12:00 a 13:00 i
  • 3. Evaluaci´n: o Tareas 1/3 Examenes Parciales (2) 2/3 1er Parcial 19-Junio-2008 2o Parcial 15-Julio-2008 Calendarizaci´n. o Sem. Fecha Tema 1 27 y 29 mayo Introducci´n o 2 3 y 5 junio Aut´matas Finitos o 3 10 y 12 junio Expresiones Regulares y Lenguajes 4 17 y 19 junio Props. Lenguajes Regulares (Primer examen) 5 24 y 26 junio Gram´ticas y Lenguajes Libres de Contexto a 6 1 y 3 julio Pushdown Automata 7 8 y 10 julio Props. Lenguajes Libres de Contexto 8 15 y 17 julio Intro. M´quina de Turing (Segundo examen) a ii
  • 4. Referencias 1. John E. Hopcroft, Rajeev Motwani and Jeffrey D. Ullman (2001). Au- tomata Theory, Language and Computation. Addison-Wesley Publish- ing. 2. Michael Sipser (1997). Introduction to the Theory of Computation. PWS publishing company. iii
  • 5. Cap´ ıtulo 1 Introducci´n o 1.1 Teor´ de Aut´matas ıa o • Estudio de dispositivos o m´quinas de c´mputo abstractas a o • Turing en los 30’s estudi´ una m´quina 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 m´quina a pod´ hacer y lo que no, su conclusi´n aplica no solo a las m´quinas de ıa o a Turing, sino a las m´quinas actuales a • En los 40’s y 50’s se estudiaron los Aut´matas Finitos o • Finales de los 50’s, N. Chomsky inicia el estudio formal de las gram´ticas 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 eficientemente ıa ıa o no (NP-duros). 1.2 Introducci´n a Pruebas Formales o Para qu´ pruebas? e 1
  • 6. • Hacer hip´tesis inductivas sobre partes de nuestros programas (iteraci´n o o o recursi´n) o – Hip´tesis consistente con la iteraci´n o recursi´n o o o • Entender como trabaja un programa correcto es esencialmente lo mismo que la prueba de teoremas por inducci´n o – Pruebas deductivas (secuencia de pasos justificados) – Pruebas inductivas (pruebas recursivas de un estatuto parametrizado que se usa a s´ mismo con valores m´s bajos del par´metro) ı a a 1.2.1 Pruebas Deductivas Secuencia de enunciados cuya verdad nos lleva de un enunciado inicil (hip´tesis) o a una conclusi´n. 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 raz´n de ( x+1 )2 . o x Tambi´n existen otras pruebas como pruebas por contradicci´n, por contra- e o ejemplos y de conjuntos, pero nos vamos a enfocar en las pruebas por in- ducci´n. o 1.2.2 Pruebas por Inducci´n o • Para objetos definidos recursivamente • La mayor´ maneja enteros, pero en aut´matas se trabaja con ´rboles ıa o a y expresiones de varios tipos (expresiones regulares) 2
  • 7. 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 Inducci´n: Asumir S(Y ) para Y “m´s 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. • Inducci´n 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. Inducci´n: 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´ m´s dos sub´rboles 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 hip´tesis de inducci´n, 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 inducci´n. o Frecuentemente el enunciado que tenemos que probar es de la forma “X si y s´lo si Y”. Esto requiere hacer dos cosas: o 3
  • 8. 1. Probar la parte-si: Asumir Y y probar X. 2. Probar la parte-si-y-s´lo-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 s´lo 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 Inducci´n: 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 verifica P (k + 1) y prueba que la ecuaci´n es verdadera para cualquier o entero positivo n. 4
  • 9. 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. Inducci´n: Asumimos que P (k) : 1+2+22 +. . .+2k = 2k+1 −1 , es verdadero o e intentamos probar que P (k + 1) tambi´n lo es: e P (k + 1) : 1 + 2 + 22 + ... + 2k+1 = 2(k+1)+1 − 1 Rescribiendo la ecuaci´n anterior tenemos: o 1 + 2 + 22 + ... + 2k + 2k+1 = 2k+1 − 1 + 2k+1 = 2(2k+1) − 1 = 2k+1+1 − 1 Por lo tanto: 1 + 2 + 22 + . . . + 2k+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. Inducci´n: Asumimos que P (k) : x0 + x1 + x2 + . . . + xk = (xk+1 − 1)/(x − 1) o se cumple. Probamos que tambi´n P (k + 1) se cumple: e xk+1+1 −1 P (k + 1) : x0 + x1 + x2 + . . . + xk + xk+1 = (x−1) Demostramos que el lado izquierdo es igual al lado derecho: xk+1 −1 (xk+1 −1)+(x−1)(xk+1 ) xk+2 −1 (x−1) + xk+1 = (x−1) = x−1 Ejercicio: Probar que n2 > 3n para n ≥ 4. Base: P (4) : 42 > 3(4) ´ 16 > 12, lo cual es cierto o Inducci´n: 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
  • 10. (k + 1)2 = k 2 + 2k + 1 > 3k + 2k + 1 (por la Hip´tesis de Inducci´n) 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) n(n+1)(n+2) 3. 1 + 3 + 6 + . . . + n(n + 1)/2 = 6 5n(n+1) 4. 5 + 10 + 15 + . . . + 5n = 2 n(n+1)(2n+1) 5. 12 + 22 + . . . +n 2 = 6 n2 (n+1)2 6. 13 + 23 + . . . + n3 = 4 7. n2 > n + 1 para n > 2 Ejercicios de tarea para la siguiente clase: 1. 2 + 4 + 6 + ... + 2n = n(n + 1) n(2n−1)(2n+1) 2. 12 + 32 + ... + (2n − 1)2 = 3 3. Probar que 2n < n!, para n ≥ 4 1.3 Teor´ de Aut´matas ıa o 1.3.1 Motivaci´n o Los aut´matas finitos se utilizan como modelos para: o 6
  • 11. • Software para dise˜ ar circuitos digitales n • Analizador l´xico de un compilador e • Buscar palabras clave en un archivo ´ en el web o • Software para verificar sistemas de estados finitos, como protocolos de comunicaciones 1.4 Conceptos de Teor´ de Aut´matas ıa o • Alfabeto = conjunto finito de s´ ımbolos (Σ) – Σ = {0, 1}, alfabeto binario. – Σ = {a, b, c, d, . . . , z}, alfabeto del abecedario en min´ sculas. u – Conjunto de los caracteres ASCII. • Cadena = secuencia finita 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 infinito, pero existe alg´ n conjunto u finito 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 0’s seguidos por un n´ mero igual de 1’s; esto es: u u {ǫ, 01, 0011, 000111, . . .}. 7
  • 12. – C ( el conjunto de programas compilables en C). – Espa˜ ol. n Una manera importante de describir ciertos lenguajes simples, pero alta- mente utiles es la llamada “lenguajes regulares”. ´ • Un grafo con un n´ mero finito de nodos, llamados estados. u • Los arcos se etiquetan con uno o m´s s´ a ımbolos de alg´ n alfabeto. u • Un estado es designado como el estado de comienzo ´ estado inicial. o • Algunos estados son estados finales o estados de aceptaci´n. o • El lenguaje de los AF (Aut´mata Finito) es el conjunto de cadenas o que etiquetan rutas que van desde el estado inicial a alg´ n estado de u aceptaci´n. o • Abajo, el AF explora documentos HTML, busca una lista de lo que podr´ ser los pares de t´ ıan ıtulo-autor, quiz´s en una lista de lectura para a alg´ n curso de literatura. u 8
  • 13. • Acepta cuando encuentra el final de un elemento de la lista. • En una aplicaci´n, las cadenas que casan con el t´ o ıtulo (antes de ’by’) y autor (despu´s) ser´ almacenadas en una tabla de pares de t´ e ıan ıtulo- autor que son acumulados. 1.4.1 Ejemplos de Aut´matas Finitos o Aut´mata Finito para modelar un switch de encendido/apagado: o Aut´mata Finito para reconocer la cadena “hola”: o 1.4.2 Representaciones Estructurales • Gram´ticas: Modelos utiles para dise˜ ar SW que procesa datos con a ´ n una estructura recursiva – Un parser de un compilador – Expresiones aritm´ticas, condicionales, etc. e – Una regla: E ⇒ E + E • Expresiones Regulares: Denotan la estructura de los datos, especial- mente cadenas de texto – Aut´matas pueden describir lo mismo que puede describir un o aut´mata finito o 9
  • 14. – El estilo difiere del de las gram´ticas 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 Aut´matas y Complejidad o Los aut´matas son esenciales para el estudio de los l´ o ımites de la computaci´n o • Qu´ puede hacer una computadora? e – Decidibilidad (decidability) – Problema decidible • Qu´ puede hacer una computadora eficientemente? e – Intractabilidad (intractability) – Polinomial vs Exponencial Ejercicios en clase: 1. Modelar un AF para cadenas de 0’s y 1’s que terminen siempre en 010. 2. Modelar un AF para las cadenas que terminan con tres 0’s consecutivos. 3. Modelar un AF para todas las cadenas en donde cada bloque de 5 caracteres consecutivos contengan al menos dos 0’s. Ejercicios de tarea para la siguiente clase: 1. Modelar un AF donde el d´cimo s´ e ımbolo de derecha a izquierda sea un 1. 10
  • 15. 2. Describir con palabras los conjuntos aceptados por los aut´matas finitos o de los diagramas de transiciones de las siguientes figuras: 11
  • 16. Cap´ ıtulo 2 Introducci´n a los Aut´matas o o Aut´mata: Conjunto de estados + Control → Cambio de estados en re- o spuesta a una entrada. Tipo de Control: • Determin´ıstico: Para cada entrada, hay s´lo un estado al que el aut´mata o o puede ir desde el estado en que se encuentre. • No determin´ıstico: Un aut´mata finito es no-determin´ o ıstico cuando se permite que el AF tenga 0 o m´s estados siguientes para cada par a estado-entrada. Si a˜ adimos la propiedad de no-determinismo, no a˜ adimos poder al n n aut´mata. Osea que no podemos definir ning´ n lenguaje que no se pueda o u definir con el aut´mata determin´ o ıstico. Con la propiedad de no-determinismo se agrega eficiencia al describir una aplicaci´n: o • Permite programar soluciones en un lenguaje de m´s alto nivel a • Hay un algoritmo para compilar un N-DFA en un DFA y poder ser ejecutado en una computadora convencional 12
  • 17. Extensi´n del N-DFA para hacer saltos de un estado a otro espont´neamente, o a con la cadena vac´ (ǫ) como entrada: ǫN-DFA. Estos aut´matas tambi´n ıa o e aceptan lenguajes regulares. Ejemplo: Compra con dinero-electr´nico. 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 transfieran el dinero. Tarea: Leer la secci´n 2.1.1 – 2.1.5 del libro o 2.1 Definici´n formal de un Aut´mata Finito o o Determin´ıstico Un AF se representa como la 5-tupla: A = (Q, Σ, δ, q0 , F ). Donde: 1. Q es un conjunto finito de estados. 2. Σ es un alfabeto de s´ ımbolos de entrada. 3. q0 es el estado inicial/de comienzo. 13
  • 18. 4. F representa cero o m´s estados finales/de aceptaci´n. a o 5. δ es una funci´n de transici´n. Esta funci´n: 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 Aut´mata 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 s´lo de 0’s y o 1’s. El Aut´mata A = (q0 , q1 , q2 , 0, 1, δ, q0 , q1 ) o Aut´mata representado con una tabla de transiciones: o 0 1 → q0 q2 q0 ·q1 q1 q1 q2 q2 q1 Aut´mata representado con un diagrama de transiciones: o Convenciones 14
  • 19. 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 flecha. • Los estados de aceptaci´n tienen doble c´ o ırculo. ˆ Funciones de transici´n 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 aceptaci´n, y o 3. Tiene una secuencia de etiquetas a1 , a2 , . . . , an . 15
  • 20. Ejemplo: El siguiente AF acepta la cadena 01101: o o ˆ Formalmente, extendemos la funci´n de transici´n δ a δ(q, w), donde w 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). o ˆ ˆ • Inducci´n: δ(q, w) = δ(δ(q, x), a), donde x es una cadena, y a es un solo s´ ımbolo (i.e., ver a d´nde va el AF con x, luego buscar la transici´n o o para el ultimo s´ ´ ımbolo a partir de ese estado). ˆ • Hecho importante con una prueba inductiva directa: δ realmente rep- resenta rutas. Esto es, si w = a1 a2 . . . an , y δ(pi , ai ) = pi+1 , ∀i = ˆ 0, 1, . . . , n − 1, entonces δ(p0 , w) = pn . Aceptaci´n 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 confusi´n cuando se o trabaja con aut´matas (o matem´ticas 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 aceptaci´n F son del tipo “conjunto de estados”. o • Ejemplo enga˜ oso: Es a un s´ n ımbolo o una cadena de longitud 1? Re- spuesta: Depende del contexto, i.e., se usa en δ(q, a), donde es un s´ ˆ ımbolo, o en δ(q, a), donde es una cadena? 16
  • 21. Ejemplo: DFA que acepta todas y s´lo las cadenas que tienen un n´ mero o u par de 0’s y tambi´n un n´ mero par de 1’s e u Representaci´n tabular del aut´mata anterior: o o 0 1 · → q0 q2 q1 q1 q3 q0 q2 q0 q3 q3 q1 q2 Ejemplo: Problema 2.2.1.a Ejemplo: Problema 2.2.4.a 17
  • 22. 2.2 Aut´mata Finito No-Determin´ o ıstico Un aut´mata finito es no-determin´ o ıstico cuando se permite que el AF tenga 0 o m´s 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 aut´mata 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
  • 23. cadenas, e.g., grep, analizadores l´xicos, etc. Es f´cil 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 m´s ı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 funci´n o de transici´n δ es: o 0 1 → q0 {q0 , q1 } {q0 } q1 ∅ {q2 } q2 ∅ ∅ Como puede observarse, todo se especifica en conjuntos. 2.2.1 ˆ Extensi´n a δ o Similarmente a un DFA, podemos definir la funci´n de transici´n extendida o o ˆ como sigue: δ ˆ • Base: δ(q, ǫ) = q • Inducci´n: Supongamos w es de la forma w = xa, donde a es el s´ o ımbolo ˆ terminal y x es el resto de w. Supongamos tambi´n que: δ(q, x) = e {p1 , p2 , . . . , pk }. k δ(pi , a) = {r1 , r2 , . . . , rm }. Entonces ∪δ(q, w) = {r1 , r2 , . . . , rm }. i=1 ˆ En otras palabras calculamos δ(q, w) primero calculando δ(q, x) y de-ˆ spu´s siguiendo cualquier transici´n de algunos de esos estados etique- e o tada con a. ˆ Por ejemplo, podemos calcular δ(q0 , 00101) para el aut´mata anterior: o ˆ δ(q0 , ǫ) = {q0 } 19
  • 24. ˆ δ(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 final. 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 m´s f´cil de definir, 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 construcci´n de subconjunto que muestra un ejemplo o de c´mo un aut´mata se puede construir a partir de otro. o o 2.2.4 Construcci´n 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 construcci´n 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) = p∈S δN (p, a), osea, la uni´n 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
  • 25. La funci´n de transici´n δ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 notaci´n). Tambi´n es o e importante notar que no todos los estados pueden ser alcanzados. En par- ticular, s´lo los estados B, E y F son accesibles, por lo que los dem´s los o a podemos eliminar. Una forma de no construir todos los subconjuntos para despu´s encontrar e que s´lo unos cuantos son accesibles, es construir la tabla s´lo 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
  • 26. δ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: o a ˆ Teorema clave: inducci´n de |w| (la prueba est´ en el libro): δD ({q0 }, w) = ˆ δ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 construcci´n de o subconjuntos, entonces L(D) = L(N). ˆ ˆ Queremos probar por inducci´n en w que δD ({q0 }, w) = δN (q0 , w). Las o dos funciones de transici´n 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 , ǫ). Inducci´n: 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 definici´n de δ para o ˆ k el NFA nos dice que: δN (q0 , w) = i=1 δN (pi , a). k Por la construcci´n de subconjuntos: δD ({p1 , p2 , . . . , pk }, a) = o i=1 δN (pi , a) ˆ 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) 22
  • 27. 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 intervenci´n de un s´ o ımbolo m´s alto entre a esa previa aparici´n del s´ o ımbolo, e.g., . . . 11, . . . 21112, . . . 312123. • Truco: Utilizar el estado de inicio con el significado “Creo que todav´ ıa no se ha visto el s´ ımbolo que corresponde al s´ ımbolo final”. • Otros tres estados representando una elecci´n 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 Construcci´n del NFA Previo. o Un truco pr´ctico importante utilizado por analizadores l´xicos 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
  • 28. 1 2 3 −→ p pq pr Ps pq pqt pr Ps pqt pqt pr Ps pr pqr prt Ps prt pqr prt Ps ps pqs prs Pst pst pqs prs Pst prs pqrs prst Pst prst pqrs prst Pst pqs pqst prs Pst pqst pqst prs Pst pqr pqrt prt Ps pqrt pqrt prt Ps pqrs pqrst prst Pst pqrst pqrst prst Pst Ejemplo: Problema 2.4.1.a 2.3 Aut´matas Finitos y Lenguajes Formales o 2.3.1 Aut´mata Finito con Transiciones-ǫ o Sea ǫ una etiqueta en arcos. No hay ning´ n cambio extra: la aceptaci´n de w todav´ se da como la u o ıa existencia de la ruta desde un estado de inicio a un estado de aceptaci´n con o etiqueta w. Pero ǫ puede aparecer en los arcos, y significa que hay una cadena vac´ ıa (i.e., no tiene una contribuci´n visible para w). o 24
  • 29. Ejemplo: 001 es aceptado siguiendo la ruta q, s, r, q, r, s, con la etiqueta 0ǫ01ǫ = 001. Podemos dise˜ ar un aut´mata 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. M´s formalmente: Un ǫ-NFA es una qu´ a ıntupla (Q, Σ, δ, q0 , F ), donde δ es una funci´n de Q × Σ ∪ {ǫ} al conjunto potencia de Q. o 25
  • 30. La tabla de transici´n del ǫ-NFA del ejemplo anterior es: o 2.4 Eliminaci´n de las Transiciones-ǫ o Las transiciones-ǫ son una conveniencia, pero no incrementan la potencia de los FA’s. Para eliminar las transiciones-ǫ: 1. Calcular la cerradura transitiva s´lo 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 transici´n de q a r en la entrada a (no ǫ), entonces a˜ ´dase una o na transici´n de p a r con la entrada a. o 3. Convertir el estado p en un estado de aceptaci´n siempre y cuando p o pueda alcanzar alg´ n estado de aceptaci´n q por medio de arcos ǫ. u o 26
  • 31. 4. Eliminar todas las transiciones-ǫ. Ejemplo: De la misma forma como lo hicimos anteriormente, podemos definir las transiciones extendidas para ǫ-NFA. ˆ Base: δ(q, ǫ) = ECLOSE(q) o ˆ Inducci´n: δ(q, xa) = ˆ 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 final. Se puede demostrar que se puede construir un DFA a partir de un ǫ-NFA siguiendo un esquema parecido al de construcci´n de subconjuntos visto para o NFA. QD = {S|S ⊆ QE ∧ S = ECLOSE(S)} qD = ECLOSE(q0 ) 27
  • 32. 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 f´cil 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
  • 33. Cap´ ıtulo 3 Expresiones Regulares Es un equivalente algebraico para un aut´mata. o • Utilizado en muchos lugares como un lenguaje para describir patrones en texto que son sencillos pero muy utiles. ´ • Pueden definir exactamente los mismos lenguajes que los aut´matas o pueden describir: Lenguajes regulares • Ofrecen algo que los aut´matas 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 notaci´n de tipo expresi´n o o regular para describir patrones – Convierte la expresi´n regular a un DFA o un NFA y simula el o aut´mata en el archivo de b´ squeda o u – Generadores de analizadores-l´xicos. Como Lex o Flex. e – Los analizadores l´xicos son parte de un compilador. Dividen el e programa fuente en unidades l´gicas (tokens). okens como while, o n´ meros, signos (+, −, <, etc.) u – Produce un DFA que reconoce el token 29
  • 34. 3.1 Operadores y Operandos Si E es una expresi´n regular, entonces L(E) denota el lenguaje que define 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 uni´n. L(E + F ) = L(E) ∪ L(F ). o 2. Yuxtaposici´n (i.e., s´ o ımbolo de no operador, como en xy que significa x × y) para representar la concatenaci´n. L(EF ) = o L(E)L(F ), donde la concatenaci´n de los lenguajes L y M es o {xy|x ∈ L y y ∈ M}, la concatenaci´n tambi´n 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 expresi´n regular, entonces E ∗ es una expresi´n regu- o o lar, que denota la cerradura de L(E). Esto es, L(E ∗ ) = (L(E))∗ . 5. Si E es una expresi´n regular, entonces (E), E entre par´ntesis, o e tambi´n es una expresi´n 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 s´lo a la secuencia de s´ o ımbolos a su izquierda que es una expresi´n o regular bien formada 30
  • 35. 2. Concatenaci´n sigue en precedencia a la cerradura, el operador o “dot”. 3. Despu´s de agrupar los asteriscos a sus operandos, se agrupan los e operadores de concatenaci´n a sus operandos o 4. Se agrupan todas las expresiones yuxtapuestas (adyacentes sin operador interviniendo) 5. Concatenaci´n es asociativa y se sugiere agrupar desde la izquierda o (i.e. 012 se agrupa (01)2). 6. La uni´n (operador +) tiene la siguiente precedencia, tambi´n es o e asociativa. 7. Los par´ntesis 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 0’s y 1’s, de longitud par, de tal manera que cada posici´n impar tenga un 0. o Ejemplo 3.2: Expresi´n regular para el conjunto de cadenas que alterna 0’s o y 1’s: • (01)∗ + (10)∗ + 0(10)∗ + 1(01)∗ • (ǫ + 1)(01)∗ (ǫ + 0) 3.2 Equivalencia de Lenguajes de FA y Lengua- jes RE • Se mostrar´ que un NFA con transiciones-ǫ puede aceptar el lenguaje a de una RE. 31
  • 36. • Despu´s, se mostrar´ que un RE puede describir el lenguaje de un DFA e a (la misma construcci´n funciona para un NFA). o • Los lenguajes aceptados por DFA, NFA, ǫ-NFA, RE son llamados lengua- jes regulares. 3.2.1 De DFA’s a Expresiones Regulares Teorema 3.4: Si L = L(A) para alg´ n DFA A, entonces existe una expresi´n u o regular R tal que L = L(R). Prueba: Suponiendo que A tiene estados {1, 2, . . . , n}, n finito. Tratemos de construir una colecci´n de RE que describan progresivamente conjuntos o de rutas del diagrama de transiciones de A (k) 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 (k) Para construir Rij se utiliza una definici´n inductiva de k = 0 hasta o k=n BASE: k = 0, implica que no hay estados intermedios. S´lo dos clases de o rutas cumplen con esta condici´n: 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 transici´n del estado i al estado j con el s´ o ımbolo a (0) • Si no hay s´ ımbolo a, entonces Rij = ∅. 32
  • 37. (0) • Si hay s´lo un s´ o ımbolo a, entonces Rij = a. (0) • Si hay varios s´ ımbolos a1 , a2 , . . . , ak , entonces Rij = a1 + a2 + . . . + ak . Si i = j, s´lo se permiten rutas de longitud 0 y loops del estado i a ´l o e mismo. • La ruta de longitud 0 se representa con ǫ (0) • Si no hay s´ ımbolo a, entonces Rij = ǫ. (0) • Si hay s´lo un s´ o ımbolo a, entonces Rij = ǫ + a. (0) • 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 (k−1) Rij . 2. La ruta pasa por el estado k al menos una vez: Se divide la ruta en varias partes, una divisi´n cada que se pasa por el o estado k Primero del estado i al estado k, despu´s, varios pasos del estado k a e s´ mismo, finalmente, del estado k al estado j. ı (k−1) (k−1) ∗ (k−1) Las etiquetas de estas rutas se representan con la RE Rik (Rkk ) Rkj (k) Si combinamos las expresiones de las rutas de los dos tipos: Rij = (k−1) (k−1) (k−1) (k−1) Rij +Rik (Rkk )∗ Rkj para todas las etiquetas de las rutas del estado i al j que no pasan por estados mayores que k. (n) Eventualmente tendremos Rij . 33
  • 38. Asumimos que 1 es el estado inicial. El estado de aceptaci´n puede ser o un conjunto de estados La expresi´n regular para el lenguaje del aut´mata o o (n) es la suma (uni´n) de todas las expresiones R1j tal que j es un estado de o aceptaci´n. o Ejemplo: Un DFA que acepta todas las cadenas que tienen al menos un 0 (0) (0) Inicialmente sustituimos para la base: Ri j (0) = ǫ Rij = ǫ + a Rij = ǫ + a1 + a2 + . . . + ak (0) R11 ǫ+1 (0) R12 0 (0) R21 ∅ (0) R22 (ǫ + 0 + 1) (1) (0) (0) (0) (0) Ahora para el paso de inducci´n: Rij = Rij + Ri1 (R11 )∗ R1j o Por sustituci´n directa o Simplificado (1) R11 ǫ + 1 + (ǫ + 1)(ǫ + 1)∗ (ǫ + 1) 1∗ (1) R12 0 + (ǫ + 1)(ǫ + 1)∗ 0 1∗ 0 (1) R21 ∅ + ∅(ǫ + 1)∗ (ǫ + 1) ∅ (1) R22 ǫ + 0 + 1 + ∅(ǫ + 1)∗ 0 ǫ+0+1 (2) (1) (1) (1) (1) Rij = Rij + Ri2 (R22 )∗ R2j Por sustituci´n directa o Simplificado (2) R11 1 + 1 0(ǫ + 0 + 1)∗ ∅ ∗ ∗ 1∗ (2) R12 1∗ 0 + 1∗ 0(ǫ + 0 + 1)∗ (ǫ + 0 + 1) 1∗ 0(0 + 1)∗ (2) R21 ∅ + (ǫ + 0 + 1)(ǫ + 0 + 1)∗ ∅ ∅ (2) R22 ǫ + 0 + 1 + (ǫ + 0 + 1)(ǫ + 0 + 1)∗ (ǫ + 0 + 1) (0 + 1)∗ Construcci´n de la RE final: o 34
  • 39. Uni´n de todas las expresiones donde el primer estado es el estado inicial o y el segundo el estado de aceptaci´n o • Estado inicial: 1 • Estado final: 2 (2) • S´lo necesitamos R12 o • 1∗ 0(0 + 1)∗ Este m´todo funciona tambi´n para NFA y ǫ-NFA pero su construcci´n es e e o n muy costoso, hasta en el orden de 4 s´ ımbolos. 3.2.2 Conversi´n de un DFA a una RE por Eliminaci´n o o de Estados Evita duplicar trabajo en algunos puntos del teorema 3.4. Ahora utilizaremos aut´matas que podr´n tener RE como etiquetas. o a El lenguaje del aut´mata es la uni´n de todas las rutas que van del estado o o inicial a un estado de aceptaci´n. o • Concatenando los lenguajes de las RE que van a trav´s de la ruta. e • En la siguiente figura se muestra un aut´mata al cual se va a eliminar o el estado “s”. 35
  • 40. • 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, quiz´sa hacen un loop en s cero o m´s veces, y finalmente van a pj . a La expresi´n para estas rutas es Qi S ∗ Pj . o Esta expresi´n se suma (con el operador uni´n) 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 aut´mata resultante despu´s de la eliminaci´n de “s” es el siguiente o e o 3.2.2.1 Estrategia para construir el aut´mata o 1. Para cada estado de aceptaci´n q, aplicar el proceso de reducci´n para o o producir un aut´mata 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 aut´mata con 2 estados como el siguiente, una o forma de describir la RE de este aut´mata es (R + SU ∗ T )∗ SU ∗ o 36
  • 41. 3. Si el estado inicial tambi´n es un estado de aceptaci´n, tambi´n se e o e debe hacer una eliminaci´n de estados del aut´mata original que elim- o o ine todos los estados menos el inicial y dejamos un aut´mata como el o siguiente: 4. La RE final es la suma (uni´n) de todas las expresiones derivadas del o aut´mata reducido para cada estado de aceptaci´n por las reglas 2 y 3. o o Ejemplo: para el siguiente NFA que acepta cadenas de 0’s y 1’s de manera que tienen un 1 dos o tres posiciones antes del final. 37
  • 42. 3.2.3 Convirtiendo una RE a un Aut´mata o Teorema 3.7: Todo lenguaje definido por una RE tambi´n esta definido por e un aut´mata finito. o Prueba: Suponemos L = L(R) para la expresi´n regular R. Mostramos que o L = L(E) para alg´ n ǫ-NFA E con: u 1. Exactamente un estado de aceptaci´n o 2. Sin arcos que lleguen al estado inicial 3. Sin arcos que salgan del estado de aceptaci´n o 38
  • 43. Base: cumpliendo las condiciones 1, 2, y 3. Inducci´n: o a) b) c) d) 39
  • 44. Ejemplo 3.8: Convertir la RE (0 + 1)∗ 1(0 + 1) a un ǫ-NFA. 40
  • 45. 3.3 Leyes Algebraicas de las Expresiones Reg- ulares 3.3.1 Asociatividad y Conmutatividad • Ley conmutativa para la uni´n: L + M = M + L o • Ley asociativa para la uni´n: (L + M) + N = L + (M + N) o • Ley asociativa para la concatenaci´n: (LM)N = L(MN) o NOTA: La concatenaci´n 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 adici´n: 0 + x = x + 0 = x. o 1 es la identidad para la multiplicaci´n: 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 multiplicaci´n: 0 × x = x × 0 = 0 o no hay aniquilador para la suma 3.3.3 Leyes • ∅ es la identidad para la uni´n: ∅ + L = L + ∅ = L o • ǫ es la identidad para la concatenaci´n: ǫL = Lǫ = L o • ∅ es el aniquilador para la concatenaci´n: ∅L = L∅ = ∅ o NOTA: Estas leyes las utilizamos para simplificaciones 41
  • 46. 3.3.3.1 Leyes Distributivas • Como la concatenaci´n no es conmutativa, tenemos dos formas de la o ley distributiva para la concatenaci´n: o Ley Distributiva Izquierda para la concatenaci´n sobre uni´n: L(M + o o N) = LM + LN Ley Distributiva Derecha para la concatenaci´n sobre uni´n: (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 multiplicaci´n tampoco es idempotente: x × x = x o • La uni´n e intersecci´n son ejemplos comunes de operadores idempo- o o tentes Ley idempotente para la uni´n: 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 define como L + LL + LLL + . . . L∗ = ǫ + L + LL + LLL + . . . LL∗ = Lǫ + LL + LLL + LLLL + . . . • L∗ = L + +ǫ • L? = ǫ + L 42
  • 47. 3.3.3.4 Descubriendo leyes para RE • Se puede proponer una variedad infinita de leyes para RE • Hay una metodolog´ general para hacer estas pruebas m´s f´cilmente? ıa a a Se reduce a probar la igualdad de dos lenguajes espec´ ıficos T´cnica ligada a los operadores para RE, no se puede extender a otros e operadores (como intersecci´n) o • Para probar que (L + M)∗ = (L∗ M ∗ )∗ Probamos que las cadenas que est´n en (L + M)∗ tambi´n est´n en a e a ∗ ∗ ∗ (L M ) Probamos que las cadenas que est´n en (L∗ M ∗ )∗ tambi´n est´n 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 expresi´n (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 expresi´n congelada (concreta) tambi´n es ǫ o e • Si E = ∅, la expresi´n congelada tambi´n es ∅ o e 43
  • 48. • Si E = a, la expresi´n congelada es tambi´n a. Ahora wǫL(E) s´ y solo o e ı s´ existe uǫL(a), tal que w = u y u est´ en el lenguaje de la expresi´n ı a o congelada, i.e. uǫa. Inducci´n (3 casos): o • Caso 1 (Uni´n): 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´ ıficos. Entonces w esta en L(F ) o en L(G). • Caso 2 (Concatenaci´n): 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 ver´n las pruebas para decidir si dos RE denotan el mismo a lenguaje hasta la secci´n 4.4. o 44
  • 49. 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 aut´matas a partir de o componentes usando operaciones, v.g., dado un lenguaje L y M con- struir un aut´mata para L ∩ M. o • Propiedades de decisi´n: an´lisis computacional de aut´matas, v.g., o a o probar si dos aut´matas son equivalentes. o • T´cnicas de minimizaci´n: utiles para construir m´quinas m´s 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
  • 50. esto es que para i < j, pi = pj . Llamemos a este estado q. Si δ(q, 1i) ∈ F entonces el m´quina acepta err´neamente 0j 1i , y si ∈ F entonces la m´quina a o / a rechaza err´neamente 0i 1i . o El problema es que el DFA tiene que tener historia de cu´ntos 0’s lleva a para poder aceptar el mismo n´ mero de 1’s 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 m´s, puede ser escrita como w = xyz, donde: a 1. y = ǫ 2. |xy| ≤ n 3. Para toda i ≥ 0, wy iz tambi´n 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 aut´mata, 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 despu´s de leer los primeros i s´ e ımbolos de w. q0 = estado de inicio, q1 = δ(q0 , a1 ), q2 = δ ′ (q0 , a1 a2 ), etc. 46
  • 51. Como s´lo 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 ocasi´n, o o i m´s, 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 par´metro. 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, satisfa- ciendo las propiedades del PL. De nuevo, puede que no sepamos como descomponer w, as´ que utilizaremos x, y, z como par´metros. ı a • Derivamos una contradicci´n 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 0’s y u k 1’s. Por el pumping lemma, w = xyz, |xy| ≤ n, y = ǫ y xy z ∈ L. 47
  • 52. w = 000 . . . . . . 0 0111 . . . 11 x y z En particular, xz ∈ L, pero xz tiene menos 0’s que 1’s. Ejemplo 2: Supongamos que L = 1p : p es primo es regular. Sea n el par´metro del pumping lemma y seleccionemos un primo p ≥ n + 2. a p w = 111 . . . . . . 1 111 . . . 11 x y z |y| = m Ahora xy p−mz est´ en L. |xpp−m z| = |xz|+(p−m)|y| = p−m+(p−m)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 0’s 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. 2 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 m´s grande que n2 a a 2 y no m´s grande que n + n. a Sin embargo, el pr´ximo cuadrado perfecto despu´s de n2 es (n + 1)2 = o e 2 n + 2n + 1. As´ xyyz no es de longitud cuadrada y no est´ en L. ı, a 48
  • 53. Como hemos derivado una contradicci´n, la unica asunci´n que no se ha o ´ o probado –que L es regular– debe ser una falla, y tenemos una “prueba por contradicci´n” que L no es regular. o 4.1.3 Propiedades de Cerradura Algunas operaciones sobre lenguajes regulares garantizan producir lenguajes regulares: • Uni´n: L ∪ M lenguajes con cadenas en L, M o en ambos. o • Intersecci´n: L ∩ M lenguajes con cadenas en ambos. o • Complemento: L cadenas que no est´n en L. a • Diferencia: LM o L − M. • Inversi´n: LR = {w R : w ∈ L} o • Cerradura: L∗ • Concatenaci´n: L.M o • Homomorfismo (substituci´n): h(L) = {h(w) ∈ L}h es un homomor- o fismo. • Homomorfismo inverso (substituci´n inversa): h−1 (L) = {w ∈ Σ : o h(w) ∈ L, h : Σ →} es un homomorfismo. Uni´n: la uni´n de lenguajes regulares es regular. Sea L = L(E) y M = o o L(F ). Entonces L(E + F ) = L ∪ M , por la definici´n de “+” en RE. o Complemento: Si L es un lenguaje regular sobre Σ, entonces tambi´n lo es e ∗ L = Σ L. Todos los estados son de aceptaci´n excepto los F. o 49
  • 54. Ejemplo: Sea L definido 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 0’s y 1’s 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. Intersecci´n: Si L y M son regulares, entonces tambi´n L ∩ M. Usando las o e leyes de Morgan: L ∩ M = L ∪ M . Para esto tambi´n se puede construir un aut´mata que simula AL y AM e o en paralelo y llega a un estado de aceptaci´n si AL y AM tambi´n lo hacen. o e 50
  • 55. 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: LM lenguaje en L pero no en M, LM = L ∩ M. Inversi´n: w R es la cadena invertida w. Ejemplo: 0010R = 0100. o Inversi´n 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
  • 56. 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 )∗ Homomorfismo Un homomorfismo sobre Σ es una funci´n 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}∗ definido 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)). Inducci´n: 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
  • 57. Homomorfismo Inverso: Sea h : Σ∗ → Θ∗ un homomorfismo. Sea L ⊆ Θ∗ , entonces h−1 (L) = {w|w ∈ Σ∗ : h(w) ∈ L}. Sea h : Σ∗ → Θ∗ un homomorfismo. Sea L ⊆ Θ∗ un lenguaje regular, entonces h−1 (L) es regular. El DFA del homomorfismo inverso usa los estados del DFA original, pero cambia los s´ımbolos de entrada de acuerdo a la funci´n h antes de decidir el o siguiente estado. En la prueba lo importante es que los estados de aceptaci´n o de los dos aut´matas 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
  • 58. o ˆ ˆ La prueba se hace por inducci´n sobre |w|. γ (q0 , w) = δ(q0 , h(w)). 4.1.4 Propiedades de decisi´n 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 definen el mismo lenguaje. Tambi´n podemos cuestionarnos acerca del costo computacional requerido e para resolver estas preguntas o por ejemplo el requerido para hacer la con- versi´n entre una representaci´n 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 m´s n2 arcos. El DFA tiene a n a lo m´s 2 estados. Para cada s´ a ımbolo y cada subconjunto el calcular la funci´n de transici´n para todos los estados, requiere a lo m´s 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 pr´ctica la a 3 complejidad se reduce a O(n s). 54
  • 59. Transformar un DFA a un NFA: S´lo 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 aut´mata 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 final o de aceptaci´n, 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 minimizaci´n de aut´matas o o Lo que queremos saber es si dos aut´matas diferentes definen el mismo o lenguaje. Primero definiremos lo que son estados equivalentes. Dos estados p y q dentro de un aut´mata 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
  • 60. 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) ∴A≡E Tambi´n podemos encontrar los pares equivalentes usando el algoritmo e de llenado de tabla (table-filling algorithm). Base: Si p ∈ F ∧ q = F ⇒ p = q Inducci´n: Si ∃a ∈ Σ : δ(p, a) = δ(q, a) ⇒ p = q o 56
  • 61. 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 DFA’s • Junta los dos DFA’s • Prueba si los dos estados iniciales son equivalentes, en cuyo caso L = M. Si no son equivalentes, entonces L = M. 57
  • 62. Ejemplo: Los dos DFA’s aceptan: L(ǫ + (0 + 1)∗ 0). Si los consideramos a los dos como un solo aut´mata, 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 aut´matas son o equivalentes. 58
  • 63. 4.2.2 Minimizaci´n de un DFA o Una consecuencia de encontrar estados equivalentes, es que podemos reem- plazar los estados equivalentes por un solo estado representado por su uni´n. o Por otro lado, la relaci´n de equivalencia cumple con ser reflexiva, sim´trica 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 aut´mata, lo podemos minimizar usando los estados o 59
  • 64. equivalentes. Nota: no podemos aplicar el algoritmo de llenado de tabla a un NFA. Ejemplo 4.4.1: 60
  • 65. Cap´ ıtulo 5 Gramaticas Libres de Contexto 5.1 Introducci´n o • Hemos visto que muchos lenguajes no son regulares. Por lo que necsi- tamos una clase mas grande de lenguages • Las Gram´ticas Libres de Contexto (Context-Free Languages) o CFL’s a jugaron un papel central en lenguaje natural desde los 50’s y en los compiladores desde los 60’s • Las Gram´ticas Libres de Contexto forman la base de la sint´xis BNF a a • Son actualmente importantes para XML y sus DTD’s (document type definition) Vamos a ver los CFG’s, los lenguajes que generan, los ´rboles de parseo, a el pushdown automata y las propiedades de cerradura de los CFL’s. Ejemplo: Considere Lpal = {w ∈ Σ∗ : w = w R } Por ejemplo, oso ∈ Lpal , anitalavalatina ∈ Lpal , Sea Σ = {0, 1} y supongamos que Lpal es regular. 61
  • 66. 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 contradicci´n. o Definamos Lpal de forma inductiva. Base: ǫ, 0 y 1 son pal´ ındromes. Inducci´n: Si w es un pal´ o ındrome, tambi´n 0w0 y 1w1. e Ninguna otra cosa es pal´ ındrome. Las CFG’s son un mecanismo formal para la definici´nn como la de o pal´ ındrome. P →ǫ P →0 P →1 P → 0P 0 P → 1P 1 donde 0 y 1 son s´ ımbolos terminales. P es una variable o s´ ımbolo no terminal o categor´ sint´ctica. ıa a P es en esta gram´tica tambi´n el s´ a e ımbolo inicial. 1-5 son producciones o reglas. La variable definida (parcialmente) en la producci´n tambi´n se llama la cabeza de la producci´n y la cadena de cero, o e o 1 o m´s s´ a ımbolos terminales o variables a la derecha de la producci´n se o llama el cuerpo de la producci´n. o 5.2 Definici´n formal de CFG’s o Una gr´matica libre de contexto se define con G = (V, T, P, S) donde: a • V es un conjunto de variables • T es un conjunto de terminales 62
  • 67. • P es un conjunto finito 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 definir por la gram´tica: 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 programaci´n t´ o ıpico. Los operadores son + y ∗, y los argumentos son identificadores, osea strings que empiezan con a o b en L((a + b)(a + b + 0 + 1)∗ ). Las expresiones se definen por la gram´tica: 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 gram´ticas a • Inferencia recursiva, usando las producciones del cuerpo a la cabeza. Con esto reconocemos si una cadena est´ en el lenguaje definido por la a gram´tica. a 63
  • 68. Ejemplo de una inferencia recursiva de la cadena: a ∗ (a + b00). Cadenas Cabeza Del Leng. de Cadenas usadas (i) a I 5 − (ii) b I 6 − (iii) b0 I 9 (ii) (iv) b00 I 9 (iii) (v) a E 1 (i) (vi) b00 E 1 (iv) (vii) a + b00 E 2 (v),(vi) (viii) (a + b00) E 4 (vii) (ix) a ∗ (a + b00) E 3 (v),(viii) • Derivaciones, usando las producciones de la cabeza al cuerpo. Con esto derivamos cadenas que pertenecen a la gram´tica. a ımbolo: ⇒ Para esto introducimos un nuevo s´ 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 αγβ. ∗ Definimos ⇒ como la cerradura reflexiva y transitiva de ⇒. Lo que quiere decir es que usamos uno a mas pasos de derivaci´n. o Ideas: ∗ • Base: Sea α ∈ (V ∪ T )∗ , entronces α ⇒ α (osea que cada cadena se deriva a s´ misma). ı ∗ ∗ • Inducci´n: Si α ⇒ β, y β ⇒ γ, entonces α ⇒ γ o Ejemplo: La derivaci´n de a∗(a+b00) a partir de E en la gram´tica 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
  • 69. La derivaci´n y la inferencia recursiva son equivalentes, osea que si pode- o mos inferir que una cadena de s´ ımbolos terminales w est´ en el lenguaje de a ∗ una variable A entonces A ⇒ w y al rev´s.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 derivaci´n o de a ∗ (a + b00). 5.4 Derivaciones m´s a la izquierda y m´s a a a la derecha Para restringir el n´ mero de opciones para derivar una cadena. u • Derivaci´n m´s a la izquierda (leftmost derivation): ⇒lm siempre re- o a emplaza la variable m´s a la izquierda por uno de los cuerpos de sus a producciones. • Derivaci´n m´s a la derecha (rightmost derivation): ⇒rm siempre re- o a emplaza la variable m´s a la derecha por uno de los cuerpos de sus a producciones. Ejemplo: la derivaci´n anterior la podemos hacer como derivaci´n m´s 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, tambi´n la podemos hacer m´s 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
  • 70. Cualquier derivaci´n tiene una derivaci´n equivalente m´s a la izquierda o o a y una m´s 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 Gram´tica 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 inducci´n 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. Inducci´n: 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 hip´tesis 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 inducci´n o ∗ sobre la longitud de ⇒. ∗ Base: La derivaci´n de ⇒ se hace en un solo paso, por lo que w debe de ser o ǫ, 0 o 1, todos pal´ ındromes. 66
  • 71. Inducci´n: Sea n ≥ 1 y suponemos que la derivaci´n 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 derivaci´n toma n pasos. o Por la hip´tesis 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 (left- sentencial 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 gram´tica del lenguaje sencillo que definimos an- a teriormente, E ∗ (I + E) es una forma de sentencia ya que: E ⇒ E ∗ E ⇒ E ∗ (E) ⇒ E ∗ (E + E) ⇒ E ∗ (I + E). Esta derivaci´n no es ni m´s a la izquierda ni m´s 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 (sint´ctica) de w. w puede ser un programa, a un query en SQL, un documento en XML, etc. 67
  • 72. Los ´rboles de parseo son una representaci´n atlernativa de las deriva- a 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 gram´tica: a E→I E →E+E E →E∗E E → (E) . . . el siguiente es un ´rbol de parseo: a 68