Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Teoria de La Computacion Automatas

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 137

 

Capı́tulo 1

Lenguajes formales

1.1. Alfabetos y palabras


Un   alfabeto es un conjunto finito no vacı́o cuyos elementos se llaman  sı́mbolos .
Denotamos un alfabeto arbitrario con la letra Σ.
Una   palabra  o   cadena  sobre un alfabeto Σ es cualquier sucesión finita de ele-
mentos de Σ. Admitimos la existencia de una única palabra que no tiene sı́mbolos,
la cual se denomina   palabra vacı́a  y se denota con λ. La palabra vacı́a desem-
peña, en la teorı́a de lenguajes formales, un papel similar al que desempeña el
conjunto vacı́o   ∅  en la teorı́a de conjuntos.
    
Ejemplo   Sea Σ =  { a, b}  el alfabeto que consta de los dos sı́mbolos a  y b. Las
    siguientes son palabras sobre Σ:
aba
ababaaa
aaaab
Obsérvese que aba  
=  aab. El orden de los sı́mbolos en una palabra es significativo
ya que las palabras se definen como   sucesiones , es decir, conjuntos   secuencial-
mente ordenados .

El conjunto de   todas    las palabras sobre un alfabeto Σ, incluyendo la palabra


vacı́a, se denota por Σ∗ .
    
Ejemplo Sea Σ =  {a,b,c}, entonces
    

Σ∗ = { λ,a,b,c,aa,ab,ac,ba,bb,bc,ca,cb,cc,aaa,aab,abc,baa,...}.

Observaciones:

1. Si bien un alfabeto Σ es un conjunto finito, Σ∗ es siempre un conjunto

1
 

2   Teorı́a de la Computación (15410) 2003-I.   Profesor: Rodrigo De Castro

infinito (enumerable). En el caso más simple, Σ contiene solo un sı́mbolo,


Σ =  {a}, y Σ∗ =  {λ,a,aa,aaa,aaaa,aaaaa,... }.

2. Hay que distinguir entre los siguientes objetos, que son todos diferentes
entre sı́:
∅   λ   {∅} {λ}

3. La teorı́a de lenguajes se hace con referencia a un alfabeto Σ fijo (pero


arbitrario).

Notación usada en la teorı́a de lenguajes


Σ denota un alfabeto.
Σ∗ denota el conjunto de todas las palabras que se
pueden formar con los sı́mbolos de Σ.
a,b,c,d,e,. . . denotan sı́mbolos del alfabeto Σ.
u,v,w,x,y,z,. . . denotan palabras, es decir, sucesiones finitas de
sı́mbolos de Σ.
λ   denota la palabra vacı́a, es decir, la única palabra
en Σ∗ que no tiene sı́mbolos.
A,B,C,. . . ,L,M,N,. . . denotan lenguajes (definidos más adelante).

1.2. Concatenación de palabras


Dado un alfabeto Σ, y dos palabras u, v   ∈  Σ∗ , la  concatenación de   u   y   v   se
denota como u · v o simplemente uv  y se define descriptivamente ası́:

1. Si v  = λ, entonces u · λ = λ · u = u. Es decir, la concatenación de cualquier


palabra u  con la palabra vacı́a, a izquierda o a derecha, es igual a u.

2. Si u = a1 a2 · · · an , v = b1 b2 · · · bm , entonces

u · v = a 1 a2 · · · an b1 b2 · · · bm.

Es decir,   u  ·  v   es la palabra formada escribiendo los sı́mbolos de  u   y a


continuación los sı́mbolos de v.

La concatenación de palabras se puede definir inductiva o recursivamente de la


siguiente manera. Si u, v  ∈  Σ ∗ , a  ∈  Σ, entonces

1.   u · λ = λ · u = u.
 

Capı́t ulo 1   Lenguajes formales   3

2.   u · (va) = (u · v)a.

Propiedad.  La concatenación de palabras es una operación asociativa. Es decir,


si   u, v,w  ∈  Σ ∗ , entonces 
(uv)w = u(vw).
on :
Demostraci´  Se puede hacer escribiendo explı́citamente las palabras u, v, w   y
usando la definición descriptiva de concatenación. También se puede dar una
demostración inductiva usando la definición recursiva de concatenación (ejercicio
opcional).

1.3. Potencias de una palabra


Dada u  ∈  Σ∗ y n  ∈ N, se define (descriptivamente) u n en la siguiente forma

u0 = λ,
un = uu · · · u
    
n   veces

    
Ejercicio   Dar una definición recursiva de u n .
    

1.4. Longitud de una palabra


La  longitud  de una palabra u  ∈  Σ ∗ se denota  | u|  y se define como el número de
sı́mbolos de u  (contando los sı́mbolos repetidos). Es decir,
 0,   si u = λ,
|u|  =
n,   si u = a 1 a2 · · · an
    
Ejemplo   |aba|  = 3,  |baaa|  = 4.
    
    
Ejemplo   Si w  ∈  Σ ∗ , n, m  ∈ N, demostrar que
    

|wn+m |  =  | wn | + |wm |

Solución:
Caso n, m ≥  1.  | wn+m |  =  | ww · · · w |  = (n + m)|w|. Por otro lado,
    
n+m   veces

|wn| + |wm |  =  | ww · · · w | + | ww · · · w |  = n |w| + m|w|.


         
n   veces m   veces
 

4   Teorı́a de la Computación (15410) 2003-I.   Profesor: Rodrigo De Castro

Caso n = 0, m  ≥  1.  |wn+m|  =  |w0+m |  =  | wm |. Por otro lado,

|wn| + |wm |  =  |w0 | + |wm |  =  |λ| + |wm |  = 0 + |wm |  =  | wm |.

Caso m = 0, n  ≥  1. Similar al caso anterior.


Caso n = 0, m = 0.  | wn+m |  =  | w0+0 |  =  | λ|  = 0. Por otro lado,

|wn| + |wm |  =  |w0 | + |w0 |  =  |λ| + |λ|  = 0 + 0 = 0.

1.5. Inversa de una palabra


La   inversa   o   transpuesta   de una palabra  u   ∈   Σ∗ se denota   u−1 y se define
descriptivamente ası́:

−1
 λ,   si u = λ,
u =
an · · · a2 a1 ,   si u = a1 a2 · · · an .

De la definición se observa claramente que la inversa de la inversa de una palabra


es la misma palabra, es decir,

(u−1 )−1 = u   para u, ∈  Σ∗ .


    
Ejercicio   Dar una definición recursiva de u −1 .
    
    
Ejercicio   Si u, v  ∈  Σ ∗ , demostrar que (uv)−1 = v −1 u−1 .
    
    
Ejercicio   Generalizar la propiedad del ejercicio anterior a la concatenación de
    n palabras.

1.6. Subpalabras, prefijos y sufijos


Una palabra v  es una   subpalabra  o   subcadena  de u si existen palabras  x, y
tales que u = xvy. Nótese que x o y pueden ser λ y, por lo tanto, la palabra vacı́a
es una subpalabra de cualquier palabra.
Un   prefijo  de u es una palabra v tal que u = vw  para alguna palabra w  ∈  Σ∗ .
Se dice que v  es un  prefijo propio  si  v  
=  u.
Similarmente, un sufijo de u es una palabra v tal que u = wv para alguna palabra
w  ∈  Σ∗ . Se dice que v es un  sufijo propio  si  v  
=  u.
Obsérvese que  λ  es un prefijo y un sufijo de toda palabra u  ya que uλ = λu = u.
Por la misma razón, toda palabra u es prefijo y sufijo de sı́ misma.
 

Capı́t ulo 1   Lenguajes formales   5

    
Ejemplo   Sea Σ =  { a,b,c,d}, u = bcbaadb.
    
Prefijos de u : Sufijos de u :
λ λ
b b
bc db
bcb adb
bcba aadb
bcbaa baadb
bcbaad cbaadb
bcbaadb bcbaadb

1.7. Lenguajes
Un  lenguaje  L  sobre un alfabeto Σ es un subconjunto de Σ∗ , es decir L  ⊆  Σ∗ .
Casos extremos:
L = ∅,   (Lenguaje vacı́o)
L = Σ∗ ,   (Lenguaje de todas las palabras sobre Σ)

Todo lenguaje L satisface ∅ ⊆  L  ⊆  Σ∗ , y puede ser finito o infinito. Los lenguajes


se denotan con letras mayúsculas  A , B , C , . . . , L , M , N , . . ..
    
Ejemplos   Los siguientes son ejemplos de lenguajes sobre los alfabetos dados.
    

Σ =  {a,b,c}. L =  {a, aba, aca}.


Σ =  {a,b,c}. L =  {a,aa,aaa,... }  =  {an : n  ≥  1 }.
Σ =  {a,b,c}. L =  {λ,a,aba,ab 2 a,ab3 a , . . .} =  {abna : n  ≥  1 } ∪ {λ}.

Σ =  {a , b , c , . . . , x , y , z}  . L =  {u  ∈  Σ∗ : u  aparece en el diccionario español}.


L es un lenguaje finito.
Σ =   {a,b,c}.   L   =   {u   ∈   Σ∗ :   u  no contiene el sı́mbolo   c}. Por ejemplo,
abbaab  ∈  L  pero abbcaa ∈ /  L.
Σ =   {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. El conjunto N   de los números naturales se
puede definir como un lenguaje sobre Σ, en la siguiente forma:

N =  {u ∈  Σ ∗ : u = 0 o 0 no es un prefijo de  u }.

    
Ejercicio   Definir el conjunto de los enteros Z =  { . . . , −2, −1, 0, 1, 2, . . .} como
    un lenguaje sobre un alfabeto adecuado.
 

6   Teorı́a de la Computación (15410) 2003-I.   Profesor: Rodrigo De Castro

1.8. Operaciones entre lenguajes


Puesto que los lenguajes sobre Σ son subconjuntos de Σ∗ , las operaciones usuales
entre conjuntos son también operaciones válidas entre lenguajes. Ası́, si A y B
son lenguajes sobre Σ (es decir A, B  ⊆  Σ ∗), entonces los siguientes también son
lenguajes sobre Σ:

A∪B   Unión
A∩B   Intersección
A−B   Diferencia

A = Σ − A   Complemento

Estas operaciones entre lenguajes se llaman   operaciones conjuntistas   para


distinguirlas de las  operaciones lingüı́s ticas  (concatenación, potencia, inverso,
clausura) que son extensiones a los lenguajes de las ya mencionadas operaciones
entre palabras.

1.9. Concatenación de lenguajes


La  concatenación  de dos lenguajes A y B  sobre Σ, notada A · B o simplemente
AB se define como
AB =  { uv : u  ∈  A, v  ∈  B }
En general AB  
= BA.
    
Ejemplo   Si Σ =  { a,b,c}, A =  { a,ab,ac}, B  =  { b, b2 }, entonces
    

AB =  {ab, ab2 , ab2 , ab3 ,acb,acb2 }.


BA =  {ba,bab,bac,b2 a, b2 ab,b2 ac}
    
Ejemplo   Si Σ =  { a,b,c}, A =  { ba, bc}, B =  { bn : n  ≥  0 }, entonces
    

AB   =  {babn : n  ≥  0 } ∪ {bcbn : n  ≥  0 }.


BA   =  {bn ba : n  ≥  0 } ∪ {bn bc : n  ≥  0 }
= {bn+1 a : n  ≥  0 } ∪ {bn+1 c : n  ≥  0 }
= {bn a : n  ≥  1 } ∪ {bnc : n  ≥  1 }.

    
Ejercicio   Dé un ejemplo de un alfabeto Σ y dos lenguajes A, B sobre Σ tales
    que AB  = BA

Propiedades de la concatenación de lenguajes. Sean A, B,C   lenguajes sobre 


Σ, es decir   A, B,C   ⊆  Σ∗ . Entonces 
 

Capı́t ulo 1   Lenguajes formales   7

1.   A · ∅ = ∅ · A = ∅.

2.   A · {λ} =  { λ} · A = A.

3. Propiedad Asociativa.

A · (B · C ) = (A · B) · C.

4. Distributividad de la concatenación con respecto a la unión.

A · (B  ∪ C ) = A · B  ∪ A · C.
(B  ∪ C ) · A = B  · A ∪ C  · A.

5. Propiedad distributiva generalizada. Si {Bi}i∈I  es una familia cualquiera de


lenguajes sobre Σ, entonces


    Bi  = (A · Bi )
i∈I  i∈I 
   Bi · A = (Bi · A).
i∈I  i∈I 

on :
Demostraci´ 

1.   A · ∅ =  {uv : u  ∈  A, v  ∈ ∅}  = ∅.

2.   A · {λ} =  { uv : u  ∈  A, v  ∈ {λ}}  =  {u : u  ∈  A } = A.

3. Se sigue de la asociatividad de la concatenación de palabras.

4. Caso particular de la propiedad general, demostrada a continuación.

5. Demostración de la igualdad A ·
    Bi  = (A · Bi ):
i∈I  i∈I 

x ∈  A ·

i∈I   Bi   ⇐⇒   x = u · v,   con u  ∈  A  &  v  ∈ i∈I  Bi
 
⇐⇒   x = u · v,   con u  ∈  A  &  v  ∈  B j ,   para algún j  ∈  I 
⇐⇒   x  ∈  A · B j ,   para algún j  ∈  I 
 
⇐⇒   x  ∈ i∈I (A · Bi).
La igualdad
  Bi · A =
  (Bi · A) se demuestra de forma similar.
i∈I  i∈I 
 

8   Teorı́a de la Computación (15410) 2003-I.   Profesor: Rodrigo De Castro

Observaciones:

La propiedad asociativa permite escribir concatenaciones de tres o más len-


guajes sin necesidad de usar paréntesis.
En general, no se cumple que A · (B ∩ C ) = A · B ∩ A · C . Es decir, la con-
catenación no es distributiva con respecto a la intersección. Contraejemplo:
A =  { a, λ}, B =  {λ}, C  =  {a}.
Se tiene: A · (B ∩ C ) =  {a, λ} · ∅ = ∅. Por otro lado,

A · B ∩ A · C   =  {a, λ} · {λ} ∩ {a, λ} · {a} =  {a, λ} ∩ {a2 , a}  =  {a}.

    
Ejercicio   Una de las dos contenencias siguientes es verdadera y la otra es
    falsa. Demostrar o refutar, según sea el caso:
1. A · (B  ∩ C )  ⊆  A · B  ∩ A · C .
2. A · B  ∩ A · C   ⊆  A · (B  ∩ C ).

1.10. Potencias de un lenguaje


Dado un lenguaje  A  sobre Σ (A ⊆   Σ∗ ), y  n   ∈   N, se define  An en la siguiente
forma
A0 = {λ},
An = AA · · · A      
n   veces

Esta definición generaliza a lenguajes la definición de potenciación de palabras.

1.11. La clausura de Kleene de un lenguaje


La   clausura de Kleene  o   estrella de Kleene  de un lenguaje A, A  ⊆  Σ ∗, es
la unión de todas las potencias de A  y se denota por A ∗ .

A∗ =
 Ai = A 0 ∪ A1 ∪ A2 ∪ · · · ∪ An · · ·   (Descripción 1)
i≥0

A∗ se puede describir de la siguiente manera

A∗ = conjunto de   todas  las concatenaciones


de palabras de A, incluyendo λ (Descripción 2)
=   {u1 · · · un  :   ui  ∈  A, n  ≥  0 }
 

Capı́t ulo 1   Lenguajes formales   9

De manera similar se define la   clausura positiva  de un lenguaje A, A  ⊆  Σ ∗ , la


cual se denota por A + .

A+ =
 Ai = A 1 ∪ A2 ∪ · · · ∪ An · · ·
i≥1

A+ se puede describir de la siguiente manera

A+ = conjunto de   todas  las concatenaciones de palabras de A,


=   {u1 · · · un  :   ui  ∈  A, n  ≥  1 }

Obsérvese que  A ∗ = A + ∪ {λ}  y que A∗ = A + si y solamente si λ  ∈  A.

Propiedades. Sea A  un lenguaje sobre Σ, (A  ⊆  Σ ∗ ).

1.   A+ = A∗ · A = A · A∗

2.   A∗ · A∗ = A∗

3.
A∗
 n
= A∗ , para todo n  ≥  1.

4.
A∗
 ∗
= A ∗ .

5.   A+ · A+ ⊆  A+ .

6.
A∗
 +
= A ∗ .

7.
A+
 ∗
= A ∗ .

8.
A+
 +
= A+ .

on :
Demostraci´ 

1.
A · A∗ =   A · (A0 ∪ A1 ∪ A2 ∪ · · · )
=   A1 ∪ A2 ∪ A3 ∪ · · ·
=   A+ .
Similarmente se demuestra que A ∗ · A = A + .
2. Si x  ∈  A ∗ · A∗ , entonces x = u · v, con u  ∈  A∗ , v  ∈  A ∗ . Entonces, x = u · v,
con u = u 1 u2 · · · un ,   ui  ∈  A,   n ≥  0 y v = v 1 v2 · · · vm ,   vi  ∈  A,   m  ≥  0.
De donde
x = u · v = u 1 · u2 · · · un · v1 · v2 · · · vm .
 

10   Teorı́a de la Computación (15410) 2003-I.   Profesor: Rodrigo De Castro

con u i  ∈  A, v i  ∈  A,   n  ≥  0. Por lo tanto, x es una concatenación de n + m


palabras de A. Ası́ que x  ∈  A ∗ .
Recı́procamente, si x  ∈  A ∗ , entonces x = x · λ  ∈  A ∗ · A∗ .
Esto prueba la igualdad de los conjuntos A ∗ · A∗ y A∗ .

3. Se sigue de la propiedad anterior.

4.        
0 1 2

A∗ = A∗ ∪ A∗ ∪ A∗ ∪ · · ·
= {λ} ∪ A∗ ∪ A∗ ∪ A∗ ∪ · · ·
=   A∗ .

5. La demostración de esta propiedad es similar a la de la propiedad 2, pero


con la restricción m, n  ≥  1.
En general, no se tiene la igualdad  A+ · A+ =  A+ ; más adelante se mos-
trará un contraejemplo.

6.      
+ 1 2 3
A∗ = A∗ ∪ (A∗ ∪ (A∗ ∪···
=   A∗ ∪ A∗ ∪ A∗ ∪ · · ·
=   A∗ .

7.        
0 1 2

A+ = A+ ∪ A+ ∪ A+ ∪ · · ·
=   {λ} ∪ A+ ∪ A+ A+ ∪ · · ·
=   A∗ ∪   (conjuntos contenidos en A+ )
=   A∗

8.        
+ 1 2 3
A+ = A+ ∪ A+ ∪ A+ ∪ · · ·  ,
=   A+ ∪   (conjuntos contenidos en A + )
=   A+

Contraejemplo de   A+ · A+ = A + .
Sea Σ =  {a, b}, A =  {a}. Se tiene

A+ = A 1 ∪ A2 ∪ · · · =  {a} ∪ {aa} ∪ {aaa} ∪ · · · =  {an : n  ≥  1 }

Por otro lado,

A+ · A+ =  {a, a2 , a3 , . . . } · {a, a2 , a3 , . . . } =  { a2 , a3 , a4 , . . . } =  {an : n  ≥  2 }.


 

Capı́t ulo 1   Lenguajes formales   11

on:   Según las definiciones dadas, Σ∗ tiene dos significados:


Observaci´ 

Σ∗ = conjunto de las palabras sobre el alfabeto Σ.


Σ∗ = conjunto de todas las concatenaciones de palabras de Σ.

No hay conflicto de notaciones porque las dos definiciones anteriores de Σ∗ dan


lugar al mismo conjunto.
    
Ejercicio   Sean A, B  ⊆  Σ ∗ . Demostrar que
    

(A ∪ B)∗ = (A∗ B ∗ )∗ (1.1)

Ayuda: tener en cuenta tanto la  descripción 1 como la descripción 2 presentadas


arriba.

1.12. Inverso de un lenguaje


Dado A  un lenguaje sobre Σ, se define A −1 de la siguiente forma:

A−1 = {u−1 : u  ∈  A }.

Propiedades. Sean A  y B  lenguajes sobre Σ (es decir, A, B  ⊆  Σ ∗ ).

1. (A · B)−1 = B −1 · A−1 .

2. (A ∪ B)−1 = A −1 ∪ B −1 .

3. (A ∩ B)−1 = A −1 ∩ B −1 .
−1
4. (A−1 ) = A.

5. (A∗ )−1 = (A−1 ) .
1 +
6. (A+ )− = (A−1 ) .

on :
Demostraci´ 

1.
x ∈  (A · B)−1 ⇐⇒   x = u −1 ,   donde u  ∈  A · B.
⇐⇒   x = u −1 ,   donde u = vw, v  ∈  A, w  ∈  B.
⇐⇒   x = (vw)−1 ,   donde v  ∈  A, w  ∈  B.
⇐⇒   x = w −1 v −1 ,   donde v  ∈  A, w  ∈  B.
⇐⇒   x  ∈  B −1 · A−1
 

12   Teorı́a de la Computación (15410) 2003-I.   Profesor: Rodrigo De Castro

    
2. Ejercicio
    
    
3. Ejercicio
    
    
4. Ejercicio
    

5.
x  ∈  (A∗ )−1 ⇐⇒   x = u −1 ,   donde u  ∈  A ∗ .
⇐⇒   x = (u1 · u2 · · · un )−1 ,  donde los u i  ∈  A, n ≥  0.
1 −1 −1
⇐⇒   x = u −n   · u2   · · · u1   ,  donde los u i  ∈  A, n  ≥  0.
−1 ∗
⇐⇒   x  ∈  (A ) .
    
6. Ejercicio
    

    
Ejercicio   ¿Se pueden generalizar las propiedades 2 y 3 anteriores para uniones
    e intersecciones arbitrarias, respectivamente?

1.13. Lenguajes regulares


Los  lenguajes regulares  sobre un alfabeto dado Σ son todos los lenguajes que
se pueden formar a partir de los lenguajes básicos   ∅,  { λ},  { a}, a  ∈  Σ, por medio
de las operaciones de unión, concatenación y estrella de Kleene.
Podemos dar una definición recursiva de los lenguajes regulares. Sea Σ un alfa-
beto.

1.   ∅,  { λ}  y  {a},
para cada a  ∈  Σ, son lenguajes regulares sobre Σ. Estos son
los denominados lenguajes regulares básicos.
2. Si A y  B  son lenguajes regulares sobre Σ, también lo son
A ∪ B   (unión)
A · B   (concatenación)
A∗ (estrella de Kleene)

Obsérvese que Σ y Σ∗ son lenguajes regulares sobre Σ.


    
Ejemplos   Sea Σ =  { a, b}. Los siguientes son lenguajes regulares sobre Σ.
    

1. El lenguaje A  de todas las palabras que tienen exactamente una a:

A =  {b}∗ · {a} · {b}∗ .


 

Capı́t ulo 1   Lenguajes formales   13

2. El lenguaje B  de todas las palabras que comienzan con b:

B =  { b} · {a, b}∗ .

3. El lenguaje C  de todas las palabras que contienen la cadena ba:

C   =  {a, b}∗ · {ba} · {a, b}∗ .

4. ({a} ∪ {b}∗ ) · {a}.


5.
  
{a}∗ ∪ {b}∗ · {b} .

1.14. Expresiones regulares


Las expresiones regulares representan lenguajes regulares y su propósito es sim-
plificar la escritura de los lenguajes regulares.
La siguiente es la definición recursiva de las   expresiones regulares   sobre un
alfabeto Σ dado.

1. Expresiones regulares básicas:


∅   es una expresión regular que representa al lenguaje   ∅.
λ   es una expresión regular que representa al lenguaje  { λ}.
a   es una expresión regular que representa al lenguaje  { a}, a ∈  Σ.

2. Si R y S  son expresiones regulares sobre Σ, también lo son:


RS 
R ∪ S 
R∗
RS  representa la concatenación de los lenguajes representados por R y S ;
R ∪S  representa su unión, y R∗ representa la clausura de Kleene del lenguaje
representado por R.

    
Ejemplo   Dado el alfabeto Σ =  { a,b,c},
    

(a ∪ b∗ )a∗ (bc)∗

es una expresión regular que representa al lenguaje

({a} ∪ {b}∗ ) · {a}∗ · {bc}∗ .


 

14   Teorı́a de la Computación (15410) 2003-I.   Profesor: Rodrigo De Castro

    
Ejemplo   Dado el alfabeto Σ =  { a, b},
    

(λ ∪ a)∗ (a ∪ b)∗ (ba)∗

es una expresión regular que representa al lenguaje

({λ} ∪ {a})∗ · {a, b}∗ · {ba}∗.

    
Ejemplos   Los tres primeros lenguajes de la sección 1.13 podemos representar-
    los con expresiones regulares:

1. El lenguaje A  de todas las palabras que tienen exactamente una a:

A = b∗ ab∗ .

2. El lenguaje B  de todas las palabras que comienzan con b:

B = b(a ∪ b)∗ .

3. El lenguaje C  de todas las palabras que contienen la cadena ba:

C   = (a ∪ b)∗ ba(a ∪ b)∗ .

on:   La representación de lenguajes regulares por medio de expre-


Observaci´ 
siones regulares no es única. Es posible que haya varias expresiones regulares
diferentes para el mismo lenguaje. Por ejemplo, b(a ∪ b)∗ y b(b ∪ a)∗ representan
el mismo lenguaje. Otro ejemplo: las dos expresiones regulares

(a ∪ b)∗ (a∗ b∗)∗

representan el mismo lenguaje en razón de la igualdad (1.1) de la sección 1.11.


    
Ejemplos   Encontrar expresiones regulares que representen los siguientes len-
    guajes, definidos sobre el alfabeto Σ =  {a, b}.

1. Lenguaje de todas las palabras que comienzan con b  y terminan con a.


Solución:   b(a ∪ b)∗ a.

2. Lenguaje de todas las palabras que tienen exactamente dos a’s.


Solución:   b∗ ab∗ ab∗ .
 

Capı́t ulo 1   Lenguajes formales   15

3. Lenguaje de todas las palabras que tienen un número par de sı́mbolos (pa-
labras de longitud par).
Solución: (aa ∪ ab ∪ ba ∪ bb)∗ .

4. Lenguaje de todas las palabras que tienen un número impar de sı́mbolos


(palabras de longitud impar).
Solución:   a(aa ∪ ab ∪ ba ∪ bb)∗ ∪ b(aa ∪ ab ∪ ba ∪ bb)∗ .

5. Lenguaje de todas las palabras que tienen un número par de a s.


Soluciones:
b∗ (ab∗ a)∗ b∗.
(ab∗ a ∪ b)∗ .
(b∗ ab∗ ab∗ )∗ ∪ b∗ .
b∗ (b∗ ab∗ ab∗ )∗ b∗ .

    
Ejemplo   Encontrar una expresión regular que represente el lenguaje de todas
    las palabras que no contienen la cadena bc, definido sobre el alfabeto
Σ =  { a,b,c}.
Solución:   c∗ (b ∪ ac∗)∗ .
    
Ejercicio   Encontrar expresiones regulares para los siguientes lenguajes:
    

1. Σ =   {a, b}. Lenguaje de todas las palabras que tienen la cadena   ab   un


número par de veces.

2. Σ =  {a, b}. Lenguaje de todas las palabras que tienen un número impar de
a’s.

3. Σ =  {a, b}. Lenguaje de todas las palabras que tienen un número par de
a’s o un número impar de b’s.

4. Σ =  { a,b,c}. Lenguaje de todas las palabras que tienen un número par de


sı́mbolos.

5. Σ =  { a,b,c}. Lenguaje de todas las palabras que tienen un número impar


de sı́mbolos.

6. Σ =  {a,b,c}. Lenguaje de todas las palabras que comienzan con  c  y termi-


nan con b.

7. Σ =  {a,b,c}. Lenguaje de todas las palabras que no contienen la cadena cc.


 

16   Teorı́a de la Computación (15410) 2003-I.   Profesor: Rodrigo De Castro

8. (Opcional, ¡Difı́cil!) Σ =  { a, b}. Lenguaje de todas las palabras que tienen


un número par de a’s y un número impar de b’s.

Observaci´ 
on:
No todos los lenguajes sobre un alfabeto dado Σ son regulares. Más adelante se
mostrará que el lenguaje

L =  { λ,ab,aabb,aaabbb,... }  =  {anbn : n  ≥  0 }

sobre Σ =  { a, b}  no se puede representar por medio de una expresión regular, y


por lo tanto, no es un lenguaje regular.
 

Capı́tulo 2

Autómatas finitos

2.1. Autómatas finitos deterministas


Los  autómatas finitos  son máquinas abstractas que procesan palabras, las cua-
les son aceptadas o rechazadas.

El autómata actúa leyendo los sı́mbolos escritos sobre una cinta semi-infinita,
dividida en casillas, sobre la cual se escribe una palabra de entrada  u, un sı́mbo-
lo por casilla. El autómata posee una   cabeza lectora   o   control finito, que
inicialmente “escanea” o lee la casilla del extremo izquierdo de la cinta.
 

La cabeza lectora del autómata posee un cierto número (finito) de configuraciones


internas, llamadas estados del autómata. Entre los estados de un autómata se
destacan el  estado inicial  y los  estados finales  o  estados de aceptación.
Formalmente, un autómata finito  M   está definido por cinco parámetros,

M   = (Σ , Q , q0  , F , δ)  ,

a saber:

1. Un alfabeto Σ, llamado alfabeto de cinta. Todas las palabras que procesa


M  pertenecen a Σ . ∗

2.   Q  =  {q 0, q 1 , . . . , q   }, conjunto de estados del autómata.


n

3.   q 0  ∈  Q , estado inicial.

4.   F   ⊆  Q , conjunto de estados finales o de aceptación.  F   


= ∅.

5. La función de transición del autómata


δ  :  Q × Σ   −→   Q
(q, a)   −→   δ (q, a)

Toda palabra de entrada es procesada completamente, hasta que la cabeza lectora


encuentra la primera casilla vacı́a.
    
Ejemplo
    
Σ =  { a, b}
Q  =  { q 0 , q 1 , q 2 }
q 0  : estado inicial
F   =  { q 0 , q 2 }, estados de aceptación.
Función de transición  δ :

δ a b
δ (q 0 , a) =  q 0   δ (q 0 , b) =  q 1
q 0   q 0   q 1
δ (q 1 , a) =  q 1   δ (q 1 , b) =  q 2
q 1   q 1   q 2
δ (q 2 , a) =  q 1   δ (q 2 , b) =  q 1
q 2   q 1   q 1
 

Ilustración del procesamiento de dos palabras de entrada:

1.   u =  aabab.
2.   v  =  aababa.

Puesto que  q 2  es un estado de aceptación, la palabra de entrada  u  es aceptada.

Puesto que q 1  no es un estado de aceptación, la palabra de entrada  v  es rechazada.


Caso especial: la palabra  λ  es la palabra de entrada.

Puesto que  q 0  es un estado de aceptación, la palabra  λ  es aceptada.


En general se tiene: la palabra vacı́a   λ   es aceptada por un autómata   M   si y
solamente si el estado inicial  q 0  de  M  también es un estado de aceptación.

Los autómatas finitos descritos arriba se denominan  autómatas finitos deter-


ministas   ya que para cada estado   q  y para cada sı́mbolo   a  ∈   Σ, la función de
transición  δ (q, a) siempre está definida. Es decir, la función de transición  δ  deter-
mina unı́vocamente  la acción que el autómata realiza cuando el control finito se
encuentra en un estado  q   leyendo un sı́mbolo  a  sobre la cinta:
 

Dado un autómata  M , el   lenguaje aceptado o reconocido  por  M  se denota


L(M ) y se define por

L(M ) :=   {u ∈  Σ :  M  termina el procesamiento de la palabra


de entrada  u  en un estado  q  ∈  F }.


 

2.2. Diagrama de estados de un autómata finito


Un autómata finito se puede representar por medio de un grafo dirigido y eti-
quetado. Recuérdese que un  grafo  es un conjunto de vértices o nodos unidos por
aristas o conectores; si las aristas tienen tanto dirección como etiquetas, el grafo
se denomina  grafo dirigido y etiquetado  o   digrafo etiquetado.
El grafo de un autómata se obtiene siguiendo las siguientes convenciones:

Los vértices o nodos son los estados del autómata.

El estado  q   se representa por:

El estado inicial  q 0  se representa por:

Un estado final  q   se representa por:

La transición  δ  = (q, a) =  p  se representa en la forma:

Dicho grafo se denomina el   diagrama de estados del autómata.


    
Ejemplo   Diagrama de estados del autómata de la sección anterior.
    
Σ =  { a, b}
Q  =  { q 0 , q 1 , q 2 }
q 0  : estado inicial
F   =  { q 0 , q 2 }, estados de aceptación.
Función de transición  δ :

δ a b
δ (q 0 , a) =  q 0   δ (q 0 , b) =  q 1
q 0   q 0   q 1
δ (q 1 , a) =  q 1   δ (q 1 , b) =  q 2
q 1   q 1   q 2
δ (q 2 , a) =  q 1   δ (q 2 , b) =  q 1
q 2   q 1   q 1
 

2.3. Diseño de autómatas

Para autómatas deterministas se adopta la siguiente convención adicional con


respecto a los diagramas de estados: se supone las aristas no dibujadas explı́cita-
mente conducen a un estado “limbo” de no-aceptación. Es decir, en el diagrama
de estados se indican únicamente las aristas que conduzcan a trayectorias de
aceptación. Esto permite simplificar considerablemente los diagramas.
En esta sección se considerará el siguiente tipo de problemas:

Dado un lenguaje regular  L  diseñar un autómata finito determinista


M  que acepte o reconozca a  L, es decir, tal que  L(M ) =  L .

Más adelante se demostrará, en toda su generalidad, que estos problemas  siempre 


tienen solución.
    
Ejemplo   Σ =  { a, b}.  L  =  a =  { λ,a,a2 , a3 , . . .}.

    

Versión simplificada:

    
Ejemplo   Σ =  { a, b}.  L  =  a + =  { a, a2 , a3, . . .}.
    

Versión simplificada:
 

    
Ejemplo   Σ =   {a, b}.   L   = lenguaje de las palabras sobre Σ que contienen
    exactamente dos  a’s.  L  =  b ab ab .
∗ ∗ ∗

    
Ejemplo   Σ =   {a, b}.   L   = lenguaje de las palabras sobre Σ que tienen un
    número par de sı́mbolos (palabras de longitud par).

    
Ejemplo   Σ =  {a, b}.   L  = lenguaje de las palabras sobre Σ que contienen un
    número par de  a’s.

    
Ejemplo   Σ =  { a, b}.  L  = lenguaje de las palabras sobre Σ que terminan en  b.
    

    
Ejercicios   Diseñar autómatas finitos deterministas que acepten los siguientes
    lenguajes:

1. Σ =  {a, b}.  L  = lenguaje de las palabras sobre Σ de longitud impar.

2. Σ =  {a, b}.  L  = lenguaje de las palabras sobre Σ que contienen un número


impar de  b’s.

3. Σ =  {a,b,c}.  L  = lenguaje de las palabras sobre Σ que contienen la cadena


bc.
 

4. Σ =  {a, b}.   L  = lenguaje de las palabras sobre Σ que comienzan con   b  y


terminan con  a.

5. Σ =  {a, b}.  L  = lenguaje de las palabras sobre Σ que contienen un número


par de  a’s y un número par de  b’s. Ayuda: utilizar 4 estados.

6. Σ =  {a, b}.  L  =  ab + .

7. Σ =  {a, b}.  L  =  ab ∪ ab a.


∗ ∗

8. Σ =  {a, b}.  L  = (a ∪ ba) .∗

9. Σ =  {a, b}.  L  = (ab ∪ ba) . ∗


 

2.4. Autómatas finitos no deterministas

Los autómatas finitos no-deterministas se asemejan a los AFD, excepto por el


hecho de que para cada estado  q   ∈  Q  y cada   a  ∈  Σ, la transición  δ (q, a) puede
consistir en más de un estado o puede no estar definida. Más concretamente, un
autómata finito no-determinista  (AFN) está definido por

M   = (Σ , Q , q0  , F, ∆)

donde

1. Σ es el alfabeto de cinta.

2.   Q  es un conjunto (finito) de estados.

3.   q 0  ∈  Q  es el estado inicial.

4.   ∅ =  F   ⊆  Q  es el conjunto de estados finales o estados de aceptación.



5.
∆ :  Q × Σ   →   ℘(Q)
(q, a)   →   ∆(q, a) =  { q i , q i , . . . , qi  }
1 2 k

donde ℘(Q) es el conjunto de subconjunto de Q.

Puede suceder que ∆( q, a) = ∅, lo cual significa que, si durante el procesamiento


de una palabra de entrada   u,   M   ingresa al estado   q  leyendo sobre la cinta el
sı́mbolo  a, el cómputo se aborta.
Cómputo abortado:

La noción de diagrama de estados para un AFN se define de manera análoga al


caso AFD, pero puede suceder que desde un mismo nodo (estado) salgan dos o
más aristas con la misma etiqueta:
 

Un AFN   M  puede procesar una palabra de entrada   u  ∈  Σ de varias maneras.


Sobre el diagrama de estados del autómata, esto significa que pueden existir varias
trayectorias etiquetadas con los sı́mbolos de  u.
La siguiente es la noción de aceptación para autómatas no deterministas:

L(M ) = lenguaje aceptado o reconocido por M 


=   {u  ∈  Σ : existe por lo menos un cómputo completo

de  u  que termina en un estado  q  ∈  F }

Es decir, para que una palabra   u   sea aceptada, debe existir por lo menos un
cómputo en el que  u  sea procesada completamente y que finalice estando  M   en
un estado de aceptación.
    
Ejemplo   Sea  M  el siguiente AFN:
    

∆   a b
q 0   {q 0 , q 1 , q 3 }   ∅

q 1   {q 1 } {q 2 }


q 2   ∅   {q 1 , q 2 }
q 3   ∅   {q 3 }

Para la palabra de entrada  u  =  abb, existen cómputos que conducen al rechazo,


cómputos abortados y cómputos que terminan en estados de aceptación. Según
la definición de lenguaje aceptado,  u  ∈  L (M ).
 

    
Ejemplo   En un ejemplo de la sección 2.3 se diseño el siguiente AFD que acepta
    el lenguaje de las palabras sobre Σ =  { a, b}  que terminan en  b:

Un AFN que acepta el mismo lenguaje y que es, tal vez, más fácil de concebir, es
el siguiente:
 

Este autómata se asemeja a la expresión regular (a ∪ b) b.


     +
Ejemplo   Considérese el lengua je  L  =  ab ∪ a sobre el alfabeto Σ =  { a, b}.  El

    siguiente AFN  M  satisface  L(M ) =  L .

    
Ejemplo   Σ =  { a, b}, L  = (ab ∪ aba) .  El siguiente AFN acepta a  L.

    

Otro AFN que acepta el mismo lenguaje y que tiene sólo tres estados es el sigui-
ente:

    
Ejercicios   Diseñar AFD’s o AFN’s que acepten los siguientes lenguajes:
    

1. Σ =   {a,b,c}, L  = lenguaje de las palabras sobre Σ que no contienen la


cadena  bc. Ayuda: considerar la expresión regular de  L  dada en la sección
1.14.
2. Σ =  {a, b}, L  =  ab + a .

3. Σ =  {a, b}, L  =  a (a ∪ ab) .



 

4. Σ =  {a,b,c}, L  =  a b c .
∗ ∗ ∗
 

2.5. Equivalencia computacional entre los AFD


y los AFN
En esta sección se mostrará que los modelos AFD y AFN son computacionalmen-
te equivalentes. En primer lugar, es fácil ver que un AFD   M   = (Σ, Q , q0  , F , δ ) 
puede ser considerado como un AFN  M  = (Σ, Q , q0  , F, ∆) definiendo ∆(q, a) =
{δ (q, a)}  para cada  q  ∈  Q  y cada  a ∈  Σ. Para la afirmación recı́proca tenemos el
siguiente teorema:

2.5.1 Teorema.  Dado un AFN   M   = (Σ , Q , q0  , F, ∆)  se puede construir un AFD 
M  equivalente a   M , es decir, tal que  L(M ) =  L (M  ).

Este teorema, cuya demostración se dará en detalle más adelante, establece que
el no-determinismo se puede eliminar. Dicho de otra manera, los autómatas de-
terministas y los no deterministas aceptan los mismos lenguajes. La idea de la
demostración consiste en considerar cada conjunto de estados   { p1 , . . . , p j }   del
autómata no-determinista como un ´  unico estado del nuevo autómata determinis-
ta. El siguiente ejemplo ilustra el procedimiento.
    
Ejemplo   Consideremos el   AFN   M    presentado en la sección 2.4, tal que
    L(M ) =  ab ∗ ∪ a+ sobre Σ =  { a, b}:

La función de transición ∆ de  M   es:

∆   a b
q 0   {q 1 , q 2 }   ∅

q 1   ∅   {q 1 }
q 2   {q 2 }   ∅

El nuevo AFD   M  construido a partir de   M   y equivalente a   M   tiene (por lo
menos) un estado más:   {q 1 , q 2 }  y su función de transición   δ   tiene el siguiente
aspecto:
 

δ a b
q 0   {q 1 , q 2 }   ∅

q 1   ∅   {q 1 }
q 2   {q 2 }   ∅

{q 1 , q 2 } {q 2 } {q 1 }

El diagrama de estados de este autómata es:

Para mayor simplicidad, podemos cambiar los nombres de los estados de este
autómata:

    
Ejercicios   Diseñar AFD’s equivalentes a los ejemplos de   AFN’s construidos
    en la sección 2.4.
Para la demostración del teorema, conviene extender la definición de la función
de transición, tanto de los autómatas deterministas como de los no-deterministas.
2.5.2 Definición.   Sea   M   = (Σ, Q , q0  , F , δ )  un AFD. La función de transición
 
δ   :   Q × Σ  −→   Q   se extiende a una función δ   :   Q × Σ∗ −→   Q  por medio de la
siguiente definición recursiva:
 

 δ (q, λ) = q, q  ∈  Q,


 δ (q, a) = δ (q, a), q  ∈  Q, a ∈  Σ,
 δ (q,wa) = δ  (δ (q, w), a), q  ∈  Q, a ∈  Σ, w ∈  Σ . ∗

Según esta definición, para una palabra de entrada  w  ∈  Σ ,  δ (q  , w) es el estado

0
en el que el autómata termina el procesamiento de   w. Por lo tanto, podemos
describir el lenguaje aceptado por  M  de la siguiente forma:
 
L(M ) =  { w  ∈  Σ ∗  : δ (q 0 , w)  ∈  F }.

 
Notación.  Sin peligro de ambigüedad, la función extendida δ (q, w) se notará sim-
plemente  δ (q, w).

2.5.3 Definición.   Sea   M   = (Σ, Q , q0  , F, ∆) un AFN. La función de transición


∆ :  Q × Σ −→ ℘(Q) se extiende inicialmente a conjuntos de estados. Para  a  ∈  Σ
y  S   ⊆  F  se define 
∆(S, a) := ∆(q, a)
q ∈S 

 
Podemos extender ∆ a una función ∆ :  Q × Σ∗ −→  ℘ (Q), de manera similar a
como se hizo para AFD’s. Recursivamente,

 ∆(q, λ) = {q }, q  ∈  Q,


 ∆(q, a) = ∆(q, a), q  ∈  Q, a ∈ Σ,
 ∆(q,wa) = ∆( ∆(q, w), a) = ∆( p, a), q  ∈  Q, a ∈  Σ , w  ∈  Σ ∗ .
 p∈∆(q,w )
  

 
Según esta definición, para una palabra de entrada  w  ∈  Σ∗ , δ (q 0 , w) es el conjunto
de los posibles estados en los que terminan los cómputos  completos  de   w. Si el
cómputo se aborta durante el procesamiento de   w, se tendrı́a ∆(q 0 , w) =   ∅.  
Podemos describir el lenguaje aceptado por  M  de la siguiente forma:
 
L(M ) =  { w  ∈  Σ ∗ : ∆(q 0 , w) ∩ F   
= ∅}.

 
Notación.  Sin peligro de ambigüedad, la función extendida ∆(q, w) se notará sim-
plemente ∆(q, w).

A continuación se hará la demostración del teorema 2.5.1


on : Dado el AFN  M   = (Σ, Q , q0  , F, ∆), construimos el AFD  M  ası́:
Demostraci´ 

M  = (Σ , ℘(Q), {q 0 }, F , δ ) 


 

donde
δ  :  ℘ (Q) × Σ   →   ℘(Q)
(S, a)   →   δ (S, a) := ∆(S, a).
F  =  { S  ⊆  ℘ (Q) :  S  ∩ F   
= ∅}.
Se demostrará que  L(M ) =  L (M  ) probando que, para toda palabra  w  ∈  Σ ∗ ,

δ ({q 0 }, w) = ∆(q 0 , w).

La anterior igualdad se demostrará por inducción sobre  w.


Para  w  =  λ , claramente se tiene  δ ({q 0 }, λ) = ∆(q 0 , λ) =  {q 0 }.
Para  w  =  a ,  a  ∈  Σ, se tiene

δ ({q 0 }, a) = ∆({q 0 }, a) = ∆(q 0 , a).

Supóngase (hipótesis de inducción) que  δ ({q 0 }, w) = ∆(q 0 , w), y que  a ∈  Σ.

δ ({q 0 }, wa) =   δ (δ ({q 0 }, w), a) (definición de la extensión de  δ )


=   δ (∆({q 0 }, w), a) (hipótesis de inducción)
= ∆(∆({q 0 }, w), a) (definición de  δ )
= ∆({q 0 }, wa) (definición de la extensión de ∆)
= ∆(q 0 , wa) (definición de la extensión de ∆)

Esto demuestra el teorema.


 

2.6. Autómatas con transiciones λ


Un   autómata finito con transiciones   λ  (AFN-λ) es un AFN  M 

M   = (Σ , Q , q0  , F, ∆)

en el que la función de transición está definida como

∆ :  Q × (Σ ∪ {λ})  →  ℘(Q).

La transición ∆(q, λ) =  { pi , . . . , pi }, llamada “transición  λ”, tiene el siguiente


1 n

significado computacional: estando en el estado  q , el autómata puede cambiar a


uno cualquiera de los estados p i , . . . , pi , independientemente del sı́mbolo leı́do y
1 n

sin mover la cabeza lectora. Dicho de otra manera, las transiciones  λ  permiten al
autómata cambiar internamente de estado “sin consumir el sı́mbolo leı́do sobre
la cinta”.
En el diagrama de estados, las transiciones λ  dan lugar a aristas con etiquetas  λ .
Una palabra de entrada  w  es aceptada por un AFN-λ  si existe por lo menos una
trayectoria cuyas etiquetas son exactamente los sı́mbolos de  w, intercalados con
cero, uno o más  λ’s.
El modelo AFN-λ, al igual que el AFN, permite múltiples cómputos para una
misma palabra de entrada, ası́ como cómputos abortados. Pero, a diferencia de
los AFD y los AFN, en los AFN-λ  pueden existir “cómputos infinitos”, es decir
cómputos que nunca terminan.
    
Ejemplo   M :
    

Ejemplos de palabras aceptadas por  M :

u  =  aab
v  =  abaa
w  =  abbaa
 

Cómputos de aceptación de  u  =  aab  y  v  =  abaa:

Los AFN-λ  permiten aún más libertad en el diseño de autómatas, especialmente


cuando hay numerosas concatenaciones.
    
Ejemplo   Σ =  { a,b,c}.L  =  a b c . AFN que acepta a  L:
∗ ∗ ∗

    

AFN-λ  que acepta a  L:


 

    
Ejemplo   Σ =  { a,b,c}. L  =lenguaje de todas las palabras sobre Σ que tienen
    un número par de  a’s o un número par de  b’s.
AFD que acepta el lenguaje de las palabras con un número par de  a’s:

AFD que acepta el lenguaje de las palabras con un número par de  b´s:

AFN-λ   que acepta el lenguaje de las palabras con un número par de   a’s o un
número par de  b’s:

    
Ejercicios   Diseñar AFN-λ  que acepten los siguientes lenguajes:
    

1. (ab ∪ b) ab , sobre Σ =  {a, b}.


∗ ∗

2.   a(a ∪ c) a , sobre Σ =  {a,b,c}.


∗ ∗

3.   ab ∪ ba ∪ b(ab ∪ ba) , sobre Σ =  { a, b}.


∗ ∗ ∗

4.   ab ba b(ab ∪ ba) , sobre Σ =  {a, b}.


∗ ∗ ∗

5. (a ∪ aba ∪ bb) a (ab ∪ ba) , sobre Σ =  {a, b}.


∗ ∗ ∗
 

2.7. Equivalencia computacional entre los


AFN-λ   y los AFN
En esta sección se mostrará que el modelo AFN-λ  es computacionalmente equi-
valente al modelo AFN. O dicho más gráficamente, las transiciones  λ  se pueden
eliminar, añadiendo transiciones que las simulen, sin alterar el lenguaje aceptado.
En primer lugar, un AFN   M   = (Σ, Q , q0  , F, ∆) puede ser considerado como un
AFN-λ en el que, simplemente, hay  cero transiciones λ. Para la afirmación recı́p ro-
ca tenemos el siguiente teorema:

2.7.1 Teorema.   Dado un AFN- λ M   = (Σ, Q , q0  , F, ∆), se puede construir un 
AFN   M  equivalente a   M , es decir, tal que  L(M ) =  L (M  )
 

Para construir   M  a partir de   M   se requiere la noción de   λ-clausura de un


estado. Para un estado   q   ∈   Q, la   λ-clausura de   q , notada   λ[q ], es el conjunto


de estados de  M  a los que se puede llegar desde  q   por 0, 1 o más transiciones  λ.
Nótese que, en general,  λ[q ]  
= ∆( q, λ). Por definición,  q  ∈  λ [q ]. La  λ-clausura de
un conjunto de estados  { q 1 , . . . , qk  }  se define por:

λ[{q 1 , . . . , qk  }] :=  λ [q 1] ∪ · · · ∪ λ[q n ].

Además,  λ[∅] := ∅. El AFN  M  se define como 

  
M  = (Σ , Q , q0  , F  , ∆ )

donde
∆ :  Q × Σ   −→   ℘(Q)

 
(q, a)   −→   ∆ (q, a) :=  λ ∆(λ[q ], a) .

y

F  =  { q  ∈  Q  :  λ [q ] ∩ F   
= }.

Es decir, los estados finales de   M  incluyen los estados finales de   M   y aquellos

estados desde los cuales se puede llegar a un estado final por medio de una o más
transiciones  λ.
Como se puede apreciar, la construcción de   M  a partir de   M   es puramente

algorı́t mica.
    
Ejemplo Vamos a ilustrar el anterior algoritmo con el AFN-λ M , presentado
    en el segundo ejemplo de la sección 2.6.
 

L(M ) =  a b c sobre Σ =  { a,b,c}.


∗ ∗ ∗

Las  λ-clausuras de los estados vienen dadas por:


λ[q 0 ] =   {q 0 , q 1 , q 2 }.
λ[q 1 ] =   {q 1 , q 2 }.
λ[q 2 ] =   {q 2 }.

La función de transición ∆ :  Q × {a,b,c} → ℘({a,b,c}) es:


∆ (q 0, a)

=   λ [∆(λ[q 0 ], a)] =  λ [∆({q 0 , q 1, q 2 }, a)] =  λ [{q 0 }] =  { q 0, q 1 , q 2 }.
∆ (q 0 , b)

=   λ [∆(λ[q 0 ], b)] =  λ [∆({q 0 , q 1 , q 2 }, b)] =  λ [{q 1 }] =  { q 1 , q 2 }.
∆ (q 0 , c)

=   λ [∆(λ[q 0 ], c)] =  λ [∆({q 0 , q 1 , q 2 }, c)] =  λ [{q 2 }] =  { q 2 }.
∆ (q 1, a)

=   λ [∆(λ[q 1 ], a)] =  λ [∆({q 1 , q 2}, a)] =  λ [∅] = ∅.
∆ (q 1 , b)

=   λ [∆(λ[q 1 ], b)] =  λ [∆({q 1 , q 2 }, b)] =  λ [{q 1 }] =  { q 1, q 2 }.
∆ (q 1 , c)

=   λ [∆(λ[q 1 ], c)] =  λ [∆({q 1 , q 2 }, c)] =  λ [{q 2 }] =  { q 2}.
∆ (q 2, a)

=   λ [∆(λ[q 2 ], a)] =  λ [∆({q 2 }, a)] =  λ [∅] = ∅.
∆ (q 2 , b)

=   λ [∆(λ[q 2 ], b)] =  λ [∆({q 2 }, b)] =  λ [∅] = ∅.
∆ (q 2 , c)

=   λ [∆(λ[q 2 ], c)] =  λ [∆({q 2 }, c)] =  λ [{q 2}] =  { q 2 }.

El autómata  M  ası́ obtenido es el siguiente:


    
Ejercicios   Construir AFN’s equivalentes a los siguientes AFN-λ’s.
    
1.
 

2.

3. El autómata presentado en la sección 2.6, que acepta el lenguaje de todas


las palabras sobre Σ = {a, b}  que tienen un número par de  a’s o un número
par de  b’s.
 

2.8. Teorema de Kleene. Parte I

En las secciones anteriores se ha mostrado la equivalencia computacional de los


modelos AFD, AFN y AFN-λ, lo cual puede ser descrito en la forma:

AFD ≡ AFN ≡ AFN-λ
Esto quiere decir que para cada autómata de uno de estos tres modelos se pueden
construir autómatas equivalentes en los otros modelos. Por lo tanto, los modelos
AFD, AFN y AFN- λ  aceptan exactamente los mismos lenguajes. El teorema de
Kleene establece que tales lenguajes son precisamente los lenguajes regulares.
2.8.1. Teorema de Kleene.  Unlenguaje es regular si y solo si es aceptado por 
un aut´ 
omata finito (AFD o AFN o AFN- λ).

Para demostrar el teorema, consideraremos las dos direcciones por separado. Pri-
mero demostraremos que dado un lenguaje regular   L, existe un AFN-λ  tal que
L(M ) =  L. En la sección 2.11, demostraremos que a partir de un AFD  M  se pue-
de encontrar una expresión regular   R  tal que   L(M ) =  R. En ambas direcciones,
las demostraciones son constructivas, lo que permite presentar las construcciones
de este capı́tulo en la siguiente forma:

Parte I.  Dada una expresión regular   R  sobre un alfabeto Σ, se puede construir


un AFN-λ M  tal que el lenguaje aceptado por   M   sea exactamente el lenguaje
representado por   R.
 

Demostraci´ 
on : Puesto que la definición de las expresiones regulares se hace re-
cursivamente, la demostración se lleva a cabo razonando por inducción sobre   R.
Para las expresiones regulares básicas, podemos construir fácilmente autómatas
que acepten los lenguajes representados.
El autómata

acepta el lenguaje ∅ , es decir, el lenguaje representado por la expresión regular


R  = ∅.
El autómata

acepta el lenguaje  { λ}, es decir, el lenguaje representado por la expresión regular


R  =  λ.
El autómata

acepta el lenguaje  { a},   a  ∈  Σ, es decir, el lenguaje representado por la expresión


regular   R  =  a.
Paso inductivo: supóngase que para las expresiones regulares R y S  existen AFN-λ
M 1  y  M 2  tales que  L (M 1 ) =  R,  L (M 2 ) =  S . Esquemáticamente vamos a presentar
los autómatas   M 1  y   M 2  en la siguiente forma:

Los estados finales o de aceptación se dibujan a la derecha, pero cabe advertir


que el estado inicial puede ser también un estado de aceptación. Obviando ese
detalle, podemos ahora obtener AFN-λ  que acepten los lenguajes   R ∪ S ,   L · S  y
L .

 

Autómata que acepta   R   ∪   S . Los autómatas   M 1   y   M 2   se conectan en


paralelo y los estados finales del nuevo autómata son los estados finales de
M 1  junto con los de   M 2 :

Autómata que acepta   R ·  S . Los autómatas   M 1  y   M 2  se conectan en serie
y los estados finales del nuevo autómata son únicamente los estados finales
de   M 2 :

Autómata que acepta   R . Los estados finales del nuevo autómata son los

estados finales de   M 1  junto con el estado inicial.

Esto concluye la demostración de la parte I del teorema de Kleene. En la sigui-


ente sección se presentan ejemplos concretos del procedimiento utilizado en la
demostración.
 

2.9. Ejemplos de la parte I del Teorema de Klee-


ne
De acuerdo con las construcciones de la  demostración de la parte I del Teorema
de Kleene, un AFN-λ  que acepta el lenguaje  a es:∗

Para simplificar las construcciones utilizaremos, en su lugar, el autómata

    
Ejemplo   Vamos a utilizar el procedimiento del teorema para construir un
    AFN-λ   que acepte el lenguaje   a (ab  ∪  ba)
∗ ∗
∪   a(b  ∪  a ) sobre el

alfabeto  { a, b}.
Autómata que acepta  ab:

Autómata que acepta  ba:

Autómata que acepta  ab ∪  ba:


 

Autómata que acepta (ab ∪ ba) :∗

Autómata que acepta  a (ab ∪  ba) :


∗ ∗
 

Autómata que acepta  b ∪  a :


Autómata que acepta  a(b ∪ a ): ∗

Autómata que acepta  a (ab ∪  ba) ∪ a(b ∪ a ):


∗ ∗ ∗
 

    
Ejercicios   Diseñar autómatas AFN-λ  que acepte los siguientes lenguajes so-
    bre Σ =  { a,b,c}:

1.   a (b ∪  ab ∪ ab a)c ∪ (a ∪  b)(a ∪ ac) .


∗ ∗ ∗ ∗ ∗

2.   c a(a ∪ ba) (abc) ∪ c (a ∪ cb c).


∗ ∗ ∗ ∗ ∗
 

2.10. Lema de Arden

Vamos a utilizar el siguiente resultado, conocido como “lema de Arden”, para


demostrar la segunda parte del teorema de Kleene.

2.10.1. Lema de Arden.  Si   A  y   B  son lenguajes sobre un alfabeto  Σ  y   λ  
∈  A,
on   X   =  AX  ∪ B  tiene una unica
entonces la ecuaci´  ´  on dada por   X   =  A∗ B .
soluci´ 

on : Si  X  es una solución de  X  =  AX ∪ B , entonces  B  ⊆  AX ∪ B  =  X .


Demostraci´ 
También se tiene  AX  ⊆  X ; a partir de esta contenencia y usando inducción sobre
n, se puede demostrar que   A X   ⊆  X  para todo   n  ∈ N. Por lo tanto
n

A B  ⊆  A X   ⊆  X 
n n

para todo   n ∈ N. Ası́ que


  
A B  = A B  = A B  ⊆  X.
n n

n≥0 ≥0
n

Esto muestra que toda solución de  X  =  AX ∪ B  contiene a  A ∗B , y es fácil verificar
que, de hecho,   A∗ B  es una solución:

A(A B ) ∪ B  =  A B  ∪ B  = (A
+ +
∪ λ)B  =  A∗ B.

Para la unicidad, demostraremos que si   A∗ B  ∪  C , con   C   ∩   A∗ B   =   ∅, es una


solución de la ecuación, entonces   C   = ∅.
∗ ∗
A B  ∪ C   =  A(A B ∪ C ) ∪ B
=  A+B ∪ AC  ∪ B
= (A+ ∪ λ)B  ∪ AC 
=  A∗B  ∪ AC 

Intersectando con   C  ambos lados de la anterior igualdad, se tiene:

(A∗B  ∩ C ) ∪ C   = (A∗ B  ∩ C ) ∪ (AC  ∩ C )


C   =  AC  ∩ C 

Por lo tanto,   C   ⊆   AC . Si se tuviera   C   


=   ∅, existirı́a una palabra   u   ∈   C   de
longitud mı́nima. Entonces   u  =  vw , con   v  ∈  A,   w  ∈  C . Por hipótesis,   v  
=  λ; por
consiguiente |w|   <  |u|. Esta contradicción muestra que necesariamente   C   =   ∅,
tal como se querı́a.
    
Ejemplo   La ecuación   X   =  aX  ∪ b∗ ab  tiene solución única   X   =  a∗b∗ ab.
    
 

     2 +
Ejemplo   La ecuación   X    =   a X  ∪   b X  ∪   ab   se puede escribir en la forma
    X   = (a2 ∪   b+ )X  ∪   ab.   Por el lema de Arden tiene solución única
2 + ∗
X   = (a ∪b ) ab.
     2 ∗ ∗
Ejemplo   La ecuación   X   =   ab X  ∪   aX  ∪   a b  ∪   b a   se puede escribir como
    X   = ( ab2 ∪ a)X  ∪ (a∗ b ∪ b∗ a). Por lema de Arden tiene solución única
X   = (ab2 ∪ a)∗ (a∗b ∪ b∗ a).
    
Ejercicios   En los ejercicios 1. y 2. encontrar las soluciones (únicas) de las
    siguientes ecuaciones.

1.   X   =  aX  ∪ bX.

2.   X   =  aX  ∪ b∗ ab ∪ bX  ∪ a∗ .

3. Demostrar de si   λ  ∈  A , entonces   Y    es una solución de la ecuación


X   =  AX  ∪ B  si y solo si   Y    =  A∗ (B  ∪ D) para algún   D  ⊆ Σ ∗ .
 

2.11. Teorema de Kleene. Parte II

En esta sección demostraremos que para todo AFN  M   = (Σ, Q , q0  , F, ∆) existe
una expresión regular  R  tal que  L(M ) =  R .
El autómata   M   tiene un único estado inicial y cambiando dicho estado surgen
nuevos autómatas. Para cada   q i   ∈   Q, sea   M i   el autómata que coincide con   M 
pero con estado inicial  q i . Más precisamente,   M i   = (Σ, Q , qi , F, ∆). Al lenguaje
aceptado por  M i  lo denotaremos  Ai ; es decir,  L(M i ) =  Ai . En particular,  A0  =
L(M ). Puesto que los estados de aceptación no se han alterado, se tiene que

Ai  =  { w  ∈  Σ ∗ : ∆(q i , w) ∩ F   
= ∅}.
Veremos que cada   Ai   se puede representar con una expresión regular y por lo
tanto lo podemos escribir como
 
 {aA  : q   ∈ ∆(q  , a)},   si  q   ∈ F,
a∈Σ
 j  j i i
A  =
i (2.1)
  {aA  : q   ∈ ∆(q  , a)} ∪ λ.   si  q   ∈  F.
 j  j i i
a∈Σ

Si  Q  =  {q 0 , q 1 , . . . , qn  }, las igualdades de la forma (2.1) dan lugar a un sistema
de  n + 1 ecuaciones con  n + 1 incógnitas (los  Ai ):

 AA    ==    C C  AA  ∪ ∪ C C  AA ∪∪ ·· ·· ··
0

1
01

11
0

0
02

12
1

1
∪  C 0n An   (∪λ)
∪  C 1n An   (∪λ)
..   ..
 . .
A   =   C  A  ∪ C  A ∪ · · ·
n n1 0 n2 1 ∪  C nn An   (∪λ)
donde cada coeficiente  C ij   o es   ∅  o es un sı́mbolo de Σ. El término  λ  se añade a
una ecuación solamente si el estado correspondiente es un estado de aceptación.
Utilizando sucesivas veces el lema de Arden, se puede mostrar que este sistema
de ecuaciones siempre se puede solucionar y su solución es única. En efecto,
comenzando con la última ecuación, se escribe   An   en términos de los demás
Ai , para lo cual se usa el lema de Arden si es necesario. Este valor de   An   se
reemplaza en las demás ecuaciones y el sistema se reduce a  n   ecuaciones con   n
incógnitas. Similarmente,  A n−1  se escribe en términos de los demás  Ai , usando el
lema de Arden si es necesario, y tal valor se reemplaza en las ecuaciones restantes.
Prosiguiendo de esta manera, el sistema original se reduce a una sola ecuación
cuya incógnita es precisamente   A0. Esta ecuación se soluciona recurriendo una
vez más al lema de Arden. Puesto que los coeficientes C ij   diferentes de   ∅   son
sı́mbolos de Σ, se obtiene una expresión regular  R  tal que  L(M ) =  A 0  =  R .
    
Ejercicio   ¿Porque la anterior demostración no es valida para autómatas con
    transiciones  λ?.
 

2.12. Ejemplos de la parte II del Teorema de


Kleene
A continuación ilustraremos el procedimiento de la  demostración de la sección
2.11 para encontrar  L(M ) a partir de un AFN  M  = (Σ, Q , q0  , F, ∆) dado.
    
Ejemplo   Considérese el siguiente AFN  M :
    

Por simple inspección sabemos que  L(M ) = (a ∪ b) a2(a ∪ b) , pero utilizaremos


∗ ∗

el método descrito para encontrar explı́citamente  L(M ).


El sistema de ecuaciones asociado con el autómata  M   es:
 (1)   A   =   aA0 ∪ bA0 ∪ aA1
0

 (2)  A
(3)   A
1

2
  =   aA2
  =   aA2 ∪ bA2 ∪ λ
(3) se puede escribir como
(4)   A2  = (a ∪ b)A2 ∪ λ
Lema de Arden en (4):
(5)   A2  = (a ∪ b) λ  = (a ∪ b)
∗ ∗

(5) en (2):
(6)   A1  =  a (a ∪ b) ∗

(6) en (1):
(7)   A0  = (a ∪ b)A0 ∪ a2 (a ∪ b) ∗

Lema de Arden en (7):

A0  = (a ∪ b) a2 (a ∪ b)
∗ ∗
 

    
Ejemplo   Encontrar una expresión regular para el lenguaje aceptado por el
    siguiente AFN  M :

El sistema de ecuaciones asociado con el autómata  M   es:


 (1)   A   =   aA1
0
 (2)   A 1   =   aA2
bA2 ∪ bA3 ∪ λ
 (3)  A 2   =  
aA3 ∪ bA4
 (4)  A
(5)   A
3

4
 
 
=
=
 
  aA2 ∪ aA3 ∪ λ

(5) en (4):
  A3   =   aA3 ∪ baA2 ∪ baA3 ∪ b
(6)
= (a ∪ ba)A3 ∪ baA2 ∪ b
Lema de Arden en (6):
  A3   = (a ∪ ba) (baA2 ∪ b)

(7)
= (a ∪ ba) baA2 ∪  (a ∪ ba) b
∗ ∗

(7) en (3):
(8)   A2   =   bA2 ∪ b(a ∪ ba) baA2 ∪ b(a ∪ ba) b ∪ λ
∗ ∗

El sistema original de cinco ecuaciones y cinco incógnitas se reduce al sistema de


tres ecuaciones y tres incógnitas formado por (1), (2) y (8).
La ecuación (8) se puede escribir como
(9)   A2   =
b ∪ b(a ∪ ba) baA  ∪ b(a ∪ ba)
∗ ∗
∪λ
2

Lema de Arden en (9):



(10)   A2   =
b ∪ b(a ∪ ba) ba b(a ∪ ba) b ∪ λ
∗ ∗

se sustituye (10) en (2) y luego el valor de   A1   obtenido se sustituye en (1),


obtenemos finalmente:

A0   =   a2 b ∪ b(a ∪ ba) ba
 ∗
 b(a ∪ ba) b ∪ λ

 

    
Ejemplo   Encontrar una expresión regular para el lenguaje   L   de todas las
    palabras sobre Σ =   {a, b}   que tienen un número par de   a’s y un

número par de  b’s.

Este autómata da lugar al siguiente sistema de ecuaciones:



  =   aA1 ∪ bA2 ∪ λ
 (1)   A 0

(2)   A 1   =   aA0 ∪ bA3


 (3)   A 2   =   aA3 ∪ bA0
  =   aA2 ∪ bA1
 (4)   A 3

(4) en (3):
(5)   A2   =   a2 A2 ∪ abA1 ∪ bA0
(4) en (2):
(6)   A1   =   aA0 ∪ baA2 ∪ b2 A1
El sistema original de cuatro ecuaciones y cuatro incógnitas se reduce a un sistema
de tres ecuaciones y tres incógnitas, a saber:

 (1)   A 0   =   aA1 ∪ bA2 ∪ λ
  =   aA0 ∪ baA2 ∪ b2 A1
 (6)   A 1

(5)   A 2   =   a2 A2 ∪ abA1 ∪ bA0

Lema de Arden en (5):


  A2   = (a2 ) (abA1 ∪ bA0)

(7)
= (a2 ) abA1 ∪  (a2 ) bA0
∗ ∗

(7) en (6):
(8)   A1   =   aA0 ∪ ba(a2) abA1 ∪ ba(a2 ) bA0 ∪ b2 A1
∗ ∗
 

(7) en (1):
(9)   A0   =   aA1 ∪ b(a2 ) abA1 ∪ b(a2 ) bA0 ∪ λ
∗ ∗

El sistema se reduce ahora a dos ecuaciones:



 (9)   A 0   =   aA1 ∪ b(a2 ) abA1 ∪ b(a2 ) bA0 ∪ λ∗ ∗

  =   aA0 ∪ ba(a2 ) abA1 ∪ ba(a2 ) bA0 ∪ b2 A1


 (8)   A
∗ ∗
1

=
ba(a ) ab ∪ b A  ∪ aA  ∪ ba(a ) bA
2 ∗ 2 2 ∗
1 0 0

Lema de Arden en (8):



 
ba(a ) ab ∪ b  aA  ∪ ba(a ) bA 
A1   = 2 ∗ 2 2 ∗
0 0
(10)   2
  2 ∗
2 2 ∗
2
= ba(a ) ab ∪ b aA  ∪ ba(a )ab ∪ b ba(a ) bA

0

0


 2 2
Haciendo  R  = ba(a ) ab ∪ b , (10) se puede escribir como

(11)   A1   =   RaA0 ∪ Rba(a2 ) bA0 ∗

Lema de Arden en (9):



 
b(a ) b aA  ∪ b(a ) abA  ∪ λ
A0   = 2 ∗ 2 ∗
1 1
(12)   2
  ∗
  2 ∗
2 2 ∗
= b(a ) b aA  ∪ b(a ) b b(a ) abA  ∪ b(a ) b

1
∗ ∗
1


  2
Haciendo  S   = b(a ) b , (12) se puede escribir como:

(13)   A0   =   SaA1 ∪ Sb (a2 ) abA1 ∪ S  ∗

Al sustituir (11) en (13), el sistema original se reduce a una sola ecuación:


 
(14)   A0   =   Sa RaA0 ∪ Rba(a2 ) bA0  ∪ Sb (a2 ) ab RaA0 ∪ Rba(a2 ) bA0  ∪ S 
∗ ∗
 ∗

Agrupando los términos en los que aparece A0  y factorizando, se obtiene

(15)   A0   = SaRa ∪ SaRba(a2 ) b ∪ Sb (a2 ) bRa ∪ Sb (a2) abRba(a2 ) b A0 ∪ S 
∗ a ∗ ∗

Lema de Arden en (15):

(16)   A0   =
SaRa ∪ SaRba(a ) b ∪ Sb(a ) abRa ∪ Sb (a ) abRba(a ) b S 
2 ∗ 2 ∗ 2 ∗ 2 ∗

Si sustituimos  R  y  S   en (16) obtenemos una expresión regular para  L.


    
Ejercicios   Utilizar el lema de Arden para encontrar una expresión regular
    para los siguientes lenguajes sobre Σ =  { a, b}:

(a) El lenguaje  L  de todas las palabras que tienen un número par de  a’s y un
número impar de  b’s.

(b) El lenguaje  L  de todas las palabras que tienen un número par de  a’s o un
número impar de  b’s.
 

    
Ejercicios   En los siguientes ejercicios utilizar el Lema de Arden para en-
    contrar una expresión regular del lenguaje aceptado por el AFN
respectivo.

1. AFN:

2. AFN:

3. AFN:
 

Capı́tulo 3

Otras propiedades de los


lenguajes regulares

3.1. Lema de bombeo


El llamado “lema de bombeo”es una propiedad de los lenguajes regulares que es
muy útil para demostrar que ciertos lenguajes no son regulares.

3.1.1. Lema de bombeo.  Para todo lenguaje regular  L  (sobre un alfabeto dado
Σ) existe una constante   n ∈ N, llamada constante de bombeo para   L, tal que toda 
palabra   w ∈ L, con   |w| ≥ n, satisface la siguiente propiedad:
 w  se puede descomponer como  w  =  uvx, con  | uv | ≤ n,  v  
=  λ,
(B )
y para todo  i ≥ 0 se tiene   uvi x ∈ L.

Demostraci´ 
on : Por el Teorema de Kleene y por los teoremas de equivalencia de
los modelos AFD, AFN y AFN-λ, existe un AFD  M  tal que  L(M ) =  L . Sea

n  = # de estados de  M.

Si  w ∈ L  y |w| ≥ n, entonces durante el procesamiento completo de  w , hay por lo


menos un estado que se repite. Sea  q   el primer estado que se repite. Tal como se
muestra en la siguiente gráfica,  w  se puede descomponer como  w  =  uvx, donde
|uv | ≤ n,  v  
=  λ .
 

Nótese que tanto  u  como  x  pueden ser la palabra vacı́a  λ, pero  v  
=  λ. Además,
la palabra  v  se puede “bombear”, en el sentido de que  uvi x  es aceptada por  M 
para todo  i  ≥  0. En el diagrama de estados, se puede visualizar esta propiedad
de bombeo de  v :

Uso del lema de bombeo.   El lema de bombeo se puede usar para concluir
que un cierto lenguaje dado   L   no es regular, recurriendo a un razonamiento
por contradicción (o reducción al absurdo). El razonamiento empleado tiene la
siguiente forma:

1. Si  L  fuera regular, existirı́a una constante de bombeo  n  para  L.

2. Se escoge una palabra “adecuada” w  ∈  L  y se aplica la propiedad ( B ) del


lema de bombeo, descomponiendo  w  como

w  =  uvx, v  
=  λ,   |uv | ≤ n.

3. Se llega a la siguiente contradicción:

(I) Por el lema de bombeo, uvi x ∈ L, para todo  i ≥ 0.


(II)   uvi x  no puede estar en  L, para algún  i ∈ I .
 

    
Ejemplo   Usar el lema de bombeo para demostrar que el lenguaje
    L  = {ai bi :  i ≥ 0}  no es un lenguaje regular.

Solución: Si   L   fuera regular, existirı́a una constante de bombeo   n   para   L. Sea


w  =  an bn ∈  L. Entonces   w  se puede descomponer como   w  =  uvx, con  |v | ≥  1,
|uv | ≤ n, y para todo  i ≥ 0,  uv i x ∈ L. Por lo tanto,  u  y  v  constan únicamente de
a’s:
u  =  a r ,   para algún  r ≥ 0,
v  =  a s ,   para algún  s ≥ 1.
Entonces,
x  =  a n−(r+s) bn =  a n−r−s bn .
De donde,
uv 2 x  =  a r as as an−r−s bn =  a r+2s+n−r−s bn =  a n+s bn .
Por el lema de bombeo, la palabra  uv2 x ∈ L  pero como  s ≥ 1,  an+s bn no está en
L. Esta contradicción muestra que  L  no puede ser regular.
    
Ejemplo   Demostrar que el lengua je de los palı́ndromes sobre  {a, b}  no es un
    lengua je regular. Recuérdese que un  Palı́ndrome  es una palabra  w

tal que  w  =  w −1 .
Solución: Si   L   fuera regular, existirı́a una constante de bombeo   n   para   L. Sea
w  =  an ban ∈  L. Entonces  w  se puede descomponer como  w  =  uvx, con  |v | ≥  1,
|uv | ≤ n, y para todo  i ≥ 0,  uv i x ∈ L. Por lo tanto,  u  y  v  constan únicamente de
a’s:
u  =  a r ,   para algún  r ≥ 0,
v  =  a s ,   para algún  s ≥ 1.
Entonces,
x  =  a n−(r+s) ban =  a n−r−s ban .
De donde,

uv 2 x  =  a r as as an−r−s ban =  a r+2s+n−r−s ban =  a n+s ban .

Por el lema de bombeo, la palabra  uv2 x  ∈  L, pero como  s  ≥  1,  an+s bn no es un
palı́ndrome. En conclusión,  L  no puede ser regular.
      2

Ejemplo   Demostrar que el lenguaje  L  = ai :  i ≥ 0  no es regular.
    
Solución: Si   L   fuera
regular, existirı́a una constante de bombeo   n   para   L. Sea
n2
w   =   a ∈   L. Entonces   w   se puede descomponer como   w   =   uvx, con   |v | ≥   1,
|uv | ≤ n. Por el lema de bombeo,  uv2 x ∈ L, pero por otro lado,

n2 < n2 + |v| = |uvx | + |v | = |uv 2 x| ≤ n2 + |uv | ≤ n2 + n < ( n + 1)2 .

Esto quiere decir que el número de sı́mbolos de la palabra  uv 2 x  no es un cuadrado
 

perfecto y, por consiguiente,  uv2 x ∈


 L. En conclusión,  L  no es regular.
    
Ejercicios   Demostrar que los siguientes lenguajes no son regulares:
    

1.   L = {w ∈ {a, b}∗ :  w  tiene el mismo número de  a’s que de  b’s}.


2.   L = {ai b j ai :  i ≥ 0, j  ≥ 0}, sobre Σ = {a, b}.
3.   L = {a2i bi :  i ≥ 0}, sobre Σ = {a, b}.
4.   L = {bi abi a  :  i ≥ 0}, sobre Σ = {a, b}.
5.   L = {ai b j ci+ j :  i ≥ 0, j  ≥ 0}, sobre Σ = {a,b,c}.
6.   L = {ww  :  w ∈ Σ∗ }, siendo Σ = {a, b}.
7.   L = {ww −1 :  w ∈ Σ∗ }, siendo Σ = {a, b}.
8.   L = {ai :  i  es un número primo}, sobre Σ = {a, b}.

3.3. Propiedades de clausura


El siguiente teorema establece que la colección R ⊆ ℘(Σ∗ ) de los lenguajes regu-
lares sobre un alfabeto Σ es cerrada bajo todas las operaciones booleanas.
3.3.1 Teorema.   Si   L, L1   y   L2   son lenguajes regulares sobre un alfabeto   Σ,
también lo son:
(1)   L1 ∪ L2   (unión)
(2)   L1 L2   (concatenación)
(3)   L∗ (estrella de Kleene)
+
(4)   L (clausura positiva)
(5)   L  = Σ∗ \ L   (complemento)
(6)   L1 ∩ L2   (intersección)
(7)   L1 \ L2   (diferencia)
(8)   L1  L2   (diferencia simétrica)
Demostraci´ 
on :
(1), (2) y (3) se siguen de la definición de los lenguajes regulares.
(4) Por (2), (3) y  L+ =  L ∗ L.
(5) Por el Teorema de Kleene y por los teoremas de equivalencia de los modelos
AFD, AFN y AFN- λ, existe un AFD  M  = (Σ , Q , q0  , F , δ )  tal que  L(M ) =  L . Para
 

construir un AFD que acepte el complemento de  L  basta intercambiar los estados


finales con los no finales. Sea  M  = (Σ, Q , q0  , Q \ F, δ ); entonces  L(M  ) =  L .
(6) Se sigue de  L1 ∩ L2  =  L 1 ∪ L2 , (1) y (5).
(7) Se sigue de  L1 \ L2  =  L 1 ∩ L2 , (5) y (6).
(8) Puesto que

L1  L2  = (L1 ∪ L2 ) \ (L1 ∩ L2 ) = ( L1 \ L2 ) ∪ (L2 \ L1 )

el resultado se sigue de (1), (6), (7).


Recuérdese que un álgebra booleana de conjuntos  es una familia  A ⊆ ℘(X )
cerrada bajo las operaciones de unión, intersección y complemento, tal que ∅ ∈ A,
X   ∈ A.

on   R ⊆ ℘(Σ∗ ) de todos los lenguajes regulares sobre 


3.3.2 Corolario.  La colecci´ 
un alfabeto Σ es un ´ 
algebra booleana de conjuntos.

Demostraci´ on : Se sigue del teorema 3.3.1 y del hecho de que ∅ y Σ ∗ son lenguajes


regulares sobre Σ.
Las propiedades de clausura del teorema 3.3.1 se pueden enunciar como procedi-
mientos algorı́tmicos de construcción de autómatas finitos.

3.3.3 Teorema.   Sean  M ,  M 1   y   M 2  aut´ omatas finitos (ya sean AFD o AFN o
AFN-λ) y   L(M ) =  L ,  L(M 1 ) =  L 1 ,  L(M 2 ) =  L 2 . Se pueden construir aut´ 
omatas 
 finitos que acepten los siguientes lenguajes:

(1)   L1 ∪ L2 (5)   L  = Σ∗ \ L
(2)   L1 L2   (6)   L1 ∩ L2
(3)   L∗ (7)   L1 \ L2
(4)   L+ (8)   L1  L2
Demostraci´ on : La construcción de autómatas para   L1  ∪ L2 ,   L1 L2 ,   L∗ y   L+ se
presento en la demostración de la parte I del Teorema de Kleene. En el numeral
(5) del teorema 3.3.1 se vió cómo se puede construir un AFD  M  que acepte  L  a
partir de un AFD  M   que acepte  L.
Los procedimientos de construcción de (1), (2), (3), (4) y (5) se pueden combinar
para obtener autómatas que acepten los lenguajes  L1 ∩ L2 ,  L1 \ L2  y  L1  L2 .
Para diseñar un autómata que acepte  L1 ∩ L2 , según el argumento anterior, hay
que usar la igualdad   L1 ∩ L2   =   L1 ∪ L2   y los procedimientos para unión, com-
plemento, eliminación de transiciones   λ   y eliminación del no-determinismo. El
siguiente teorema muestra que existe una construcción más sencilla para  L 1 ∩ L2 .
 

3.3.4 Teorema.   Sean  M  = (Σ, Q1 , q 1 , F 1 , δ 1 ) y  M  = (Σ , Q2 , q 2 , F 2 , δ 2 ) dos AFD.
Entonces el AFD 

M   = (Σ, Q1 × Q2 , (q 1 , q 2 ), F 1 × F 2 , δ )

donde 
δ  : (Q1 × Q2 ) × Σ   −→   Q1 × Q2
δ ((q i , q  j ), a) = (δ 1 (q i , a), δ 2 (q  j , a))
satisface  L(M ) =  L (M 1 ) ∩ L(M 2 ).

on : Sea   w   ∈   Σ∗ . La conclusión del teorema se sigue demostrando


Demostraci´ 
primero por inducción sobre w  que  δ ((q 1 , q 2 ), w) = (δ 1 (q 1 , w), δ 2 (q 2 , w)) para toda
palabra  w ∈ Σ∗ y observando que:

w ∈ L(M )   ⇐⇒   δ ((q 1 , q 2 ), w) ∈ F 1 × F 2


⇐⇒   (δ 1 (q 1 , w), δ 2 (q 2 , w)) ∈ F 1 × F 2
⇐⇒   δ (q 1 , w) ∈ F 1   &   δ (q 2 , w) ∈ F 2
⇐⇒   w ∈ L(M 1 ) &   w ∈ L(M 2 )
⇐⇒   w ∈ L(M 1 ) ∩ L(M 2 )

    
Ejemplo   Utilizar el procedimiento del teorema 3.3.4 para construir un AFD
    que acepte el lenguaje  L  de todas las palabras sobre Σ = {a, b}  que

tienen un número par de  a’s y un número par de  b’s.


AFD  M 1  que acepta las palabras con un número par de  a’s:

AFD  M 2  que acepta las palabras con un número par de  b’s:

Entonces  L  =  L (M 1 ) ∩ L(M 2 ). El nuevo autómata tiene 4 estados: (q 1 , q 2 ), ( q 1 , q 4 ),
(q 3 , q 2 ) y (q 3 , q 4 ); el único estado de aceptación es (q 1 , q 2 ). Su función de transición
 

δ   es
δ ((q 1 , q 2 ), a) = (δ 1 (q 1 , a), δ 2 (q 2 , a)) = ( q 3 , q 2 )
δ ((q 1 , q 2 ), b) = ( δ 1 (q 1 , b), δ 2 (q 2 , b)) = ( q 1 , q 4 )
δ ((q 1 , q 4 ), a) = (δ 1 (q 1 , a), δ 2 (q 4 , a)) = ( q 3 , q 4 )
δ ((q 1 , q 4 ), b) = ( δ 1 (q 1 , b), δ 2 (q 4 , b)) = ( q 1 , q 2 )
δ ((q 3 , q 2 ), a) = (δ 1 (q 3 , a), δ 2 (q 2 , a)) = ( q 1 , q 2 )
δ ((q 3 , q 2 ), b) = ( δ 1 (q 3 , b), δ 2 (q 2 , b)) = ( q 3 , q 4 )
δ ((q 3 , q 4 ), a) = (δ 1 (q 3 , a), δ 2 (q 4 , a)) = ( q 1 , q 4 )
δ ((q 3 , q 4 ), b) = ( δ 1 (q 3 , b), δ 2 (q 4 , b)) = ( q 3 , q 2 )
El diagrama de estados del autómata ası́ obtenido es un viejo conocido nuestro:

    
Ejercicio   Utilizar el procedimiento del   teorema 3.3.3   para construir un
    autómata que acepte el lenguaje L   de todas las palabras sobre

Σ = {a, b}  que tienen un número par de  a’s y un número par de  b’s. Compárese
con el AFD construido en el ejemplo inmediatamente anterior.
    
Ejercicios   Diseñar autómatas finitos que acepten los siguientes los siguientes
    lenguajes sobre el alfabeto  { a,b,c}:

1. El lenguaje  L  de todas las palabras que tienen longitud par y terminan en
a.

2. El lenguaje  L  de todas las palabras de longitud par que tengan un número
impar de  b’s.
3. El lenguaje L  de todas las palabras de longitud impar que tengan un número
par de  c’s.
4. El lenguaje  L  de todas las palabras de longitud impar que tengan exacta-
mente dos  a’s.
 

3.6. Algoritmos de decisión


El argumento empleado en la demostración del lema de bombeo sirve para obte-
ner otras conclusiones importantes sobre los lenguajes aceptados por autómatas
finitos.
3.6.1 Teorema.   Sea   M  un AFD con   n  estados y sea   L  =  L (M ).

1.   L 
= ∅  si y solo si   M  acepta una palabra   w  tal que   |w| < n.

2.   L  es infinito si y solo si  M  acepta una palabra   w  tal que   n ≤ |w| < 2 n.

on :
Demostraci´ 

1. La parte “si” es obvia. Para la otra implicación, sea   w   una palabra de


longitud mı́nima en   L(M ). Entonces  |w|   < n  ya que si  |w| ≥   n, según la
demostración del lema de bombeo, w  se podrı́a descomponer como  w  =  uvx,
donde  |uv | ≤  n,  v  
=  λ. La palabra ux  ∈  L  y  |ux|  <  | w|, lo que contradice
la minimalidad de  | w|.

2. Si   w   ∈   M   y   n   ≤ |w |   <   2n, entonces por la demostración del lema de


bombeo,  w  se puede descomponer como  w  =  uvx, donde  |uv | ≤  n,  v   =  λ.
i
M   acepta infinitas palabras:  uv x  para todo  i ≥ 0.
Recı́procamente, si  L  es infinito, existe  w  ∈  L  con  |w| ≥  n. Por la demos-
tración del lema de bombeo,  w  =  uvx  donde  |uv | ≤  n,  v   =  λ. Si  |w|  <  2n
la demostración está terminada. Si   |w| ≥  2n, puesto que   |v | ≤ |uv | ≤   n,
se tendrá   |ux| ≥   n   y   ux   ∈   L   . De nuevo, si   |ux|   <   2n, la demostración
termina; en caso contrario, se prosigue de esta forma hasta encontrar una
palabra en  L  cuya longitud    satisfaga  n ≤  <  2 n.
3.6.2 Corolario.  Sea   Σ un alfabeto dado. Existen algoritmos para los siguientes 
problemas de decisi´ 
on referentes a aut´ 
omatas finitos sobre  Σ:

omata finito  M , ¿Es   L(M ) 


1. Dado un aut´  = ∅? 

omata finito  M , ¿Es   L(M ) infinito? 


2. Dado un aut´ 
3. Dados dos aut´ 
omatas finitos   M 1  y   M 2 , ¿L(M 1 ) =  L (M 2 )? 

Demostraci´ 
on :

1. Algoritmo: construir un AFD M  que acepte el lenguaje  L(M ) y chequear


la aceptación o rechazo de todas las palabras   w   ∈   Σ∗ tales que  |w|   < n,
donde  n  = # de estados de  M  .
 

2. Algoritmo: construir un AFD M  que acepte el lenguaje  L(M ) y chequear la


aceptación o rechazo de todas las palabras  w ∈ Σ∗ tales que  n ≤ |w| < 2 n,
donde  n  = # de estados de  M  .

3. Sea  L1  =  L (M 1 ) y  L2  =  L (M 2 ). Se tiene

L1  =  L 2  ⇐⇒ L1  L2  = ∅

Algoritmo: construir un AFD  M  que acepte el lenguaje  L1  L2  y utilizar


el procedimiento de la parte 1 para decidir si  L1  L2  es o no vacı́o.
    
Ejercicios   Sea Σ un alfabeto dado. Encontrar algoritmos para los siguientes
    problemas de decisión referentes a autómatas finitos sobre Σ:

1. Dado un autómata finito  M , ¿Es  L(M ) = Σ∗ ?

2. Dado un autómata finito  M , ¿Es  L(M ) cofinito? (Recuérdese que un con-
 junto es  cofinito  si su complemento es finito).

3.10. Observaciones finales


1. Todo lenguaje finito es regular. ¿Por qué?

2. Una unión finita de lenguajes regulares es regular, pero una unión infinita de
lenguajes regulares no es necesariamente regular. Considérese, por ejemplo,

L  = {an bn :  n ≥ 1} =
{ ai bi }.
i≥1

Cada conjunto  {ai bi }  es regular, pero  L  no lo es.

3. Un sublenguaje (subconjunto) de un lenguaje regular no es necesariamente


regular. Dicho de otra forma, un lenguaje regular puede contener sublen-
guajes no-regulares. Por ejemplo, el lenguaje   L   =   {an bn :   n   ≥   1}   es un
sublenguaje del lenguaje regular  a∗ b∗ , pero  L  mismo no es regular.

     ∗ ∗
Ejercicio   Demostrar que   a b es la unión de dos lenguajes disyuntos no-
    regulares.
    
Ejercicio   Sea  L  un lenguaje no-regular y  N  un subconjunto finito de  L. De-
    mostrar que  L \ N  tampoco es regular.
 

Capı́tulo 4

Lenguajes independientes del


contexto

Como lo hemos visto, los autómatas son mecanismos que   procesan  palabras de en-
trada. En capı́tulos posteriores consideraremos modelos de autómatas con mayor
poder computacional que el de los modelos AFD-λ, AFN y AFD. En el presente
capı́tulo iniciaremos el estudio de las   gramáticas generativas , que son meca-
nismos para   generar   palabras a partir de un sı́mbolo inicial.

•   Los autómatas   procesan  palabras

•   Las gramáticas   generan   palabras

4.1. Gramáticas independientes del contexto (GIC)


Una  gramática independiente del contexto  (GIC) es una cuádrupla,

G  = (V, Σ, S , P  )
formada por:

1. Un alfabeto V   cuyos elementos se llaman variables o sı́mbolos no-terminales.


2. Un alfabeto Σ cuyos elementos se llaman  sı́mbolos terminales.
3. Una variable especial  S   ∈  V  , llamada  sı́mbolo inicial  de la gramática.
4. Un conjunto finito  P   ⊆  V   × (V   ∪ Σ) de  producciones o   reglas de re-

escritura.
 

Notación y definiciones.  Las variables se denotan con letras mayúsculas A ,  B ,


C , . . . Los elementos de Σ, o sı́mbolos terminales, se denotan con letras minúsculas
a , b , c , . . .  Una producción (A, w) ∈   P   de   G  se denotará por   A   →   w. Si   u, v   ∈
(V   ∪ Σ) y  A  →  w  es una producción, se dice que  uwv  se  deriva directamente

de  uAv, lo cual se denota por

uAv  ⇒  uwv.

Si se quiere hacer referencia a la gramática  G, se escribe

uAv  ⇒ G   uwv.

Si   u1 , u2 , . . . , un   son palabras en (V   ∪  Σ) y hay una sucesión de derivaciones


directas
u1  ⇒ G   u2 , u2  ⇒ G   u3 , . . . , un 1  ⇒ G   un


se dice que   un   se deriva de   u1   y se escribe   u1 ⇒   un . La anterior sucesión de
derivaciones directas se representa como

u1  ⇒  u 2  ⇒  u 3  ⇒ · · · ⇒  u n − 1  ⇒  u n

y se dice que es una  derivación  de   un  a partir de   u1 . Para toda palabra   w   se


  ∗   ∗
asume que  w ⇒  w ; por lo tanto,  u ⇒  v  significa que  v  se obtiene de  u  utilizando
cero, una o más producciones de la gramática. El  lenguaje generado por una
gramática  G  se denota por  L(G) y se define como
  ∗
L(G) :=  { w  ∈  Σ :  S  ⇒  w }.

Un lenguaje  L  sobre un alfabeto Σ se dice que es un   lenguaje independiente


del contexto  (LIC) si existe una GIC  G  tal que  L(G) =  L. Dos GIC  G1   y  G2
son  equivalentes  si  L(G1 ) =  L (G2 ).
    
Ejemplo   Sea  G  una gramática (V, Σ, S , P  ) dada por:
    

V   =  { S }
Σ =  {a, b}
P   =  { S   →  aS, S   →  λ }
Se tiene  S   ⇒  λ  y
  ∗
S   ⇒  aS  ⇒  a · · · aS   ⇒  a · · · a.
Por consiguiente,  L(G) =  a . ∗

De manera más simple, podemos presentar una gramática GIC listando sus pro-
ducciones y separando con el sı́mbolo  |  las producciones de una misma variable.
Se asume siempre que las letras mayúsculas representan variables y las letras
minúsculas representan sı́mbolos terminales.
 

    
Ejemplo   La gramática  G = (V, Σ, S , P  ) dada por:
    

V   =  { S, A}
Σ =  {a, b}
P   =  { S   →   aS, S   →   bA, S   →  λ, A  →   bA, A  →  b, A  →  λ }
se puede presentar como    S  →  aS  |  bA  |  λ
A  →  bA  |  b  |  λ
Se tiene   S   ⇒   λ. Todas las demás derivaciones en   G   comienzan ya sea con la
producción  S   →  aS  o con  S   →  bA . Por lo tanto, tenemos
  ∗
S   ⇒  aS  ⇒  a · · · aS  ⇒  a · · · a.
  ∗
S   ⇒  bA ⇒  b · · · bA ⇒  b · · · b.
  ∗   ∗
S   ⇒  aS  ⇒  a · · · aS  ⇒  a · · · abA ⇒  a · · · ab · · · bA ⇒  a · · · ab · · · b.

Por consiguiente  L(G) =  a b . ∗ ∗

Las siguientes gramáticas también generan el lengua je   a b y son, por lo tanto,


∗ ∗

equivalentes a  G:
 S   →  AB
 S  →  AB  |  λ    S  →  aS  |  A
A  →  aA  |  λ A  →  aA  |  a  |  λ
A  →  bA  |  λ
B  →  bB  |  λ B  →  bB  |  b  |  λ
 
    
Ejemplo   La gramática  G  dada por:
        S   →  aS  |  aA
A  →  bA  |  b
genera el lenguaje  a+ b+ .
    
Ejemplo   Encontrar una GIC que genere el lenguaje  a ba ba sobre Σ =  { a, b},
∗ ∗ ∗

    es decir, el lenguaje de todas las palabras con exactamente dos  b’s.

Solución:   G  :    S   →  AbAbA


A  →  aA  |  λ
Una gramática equivalente es
 S   →  aS  |  bA
A  →  aA  |  bB
B  →  aB  |  λ

 

     i i
Ejemplo   Encontrar una GIC que genere el lenguaje  L  =  { a b :  i  ≥  0 }  sobre
    Σ =  { a, b}, el cual no es un lenguaje regular.

Solución:   G  :
S   →  aS b |  λ.
    
Ejemplo   Encontrar una GIC que genere el lenguaje de todos los palı́ndromes
    sobre Σ =  { a, b}, el cual no es lenguaje regular.

Solución:   G  :
S   →  aS a |  bS b  |  a  |  b  |  λ.
    
Ejemplo   Encontrar una GIC que genere el lenguaje de todas las palabras sobre
    Σ =  { a, b}  que tienen un número par de sı́mbolos.

Solución:   G  :
S  →  aS a |  bS b  |  aS b |  bS a |  λ.
Una gramática equivalente es

S  →  aaS  |  bbS  |  abS  |  baS  |  λ.

    
Ejemplo   Encontrar una GIC que genere el lenguaje (ab  ∪   ba) sobre

    Σ =  { a, b}.

Solución:   G  :
S   →  abS  |  baS  |  λ.
    
Ejercicios   Encontrar GIC’s que acepten los siguientes lenguajes sobre
    Σ =  { a, b}:

1. El lenguaje de todas las palabras que tienen un número par de  b’s.

2. El lenguaje de todas las palabras que comienzan con  b  y terminan con  ba.

3.   a b ∪ a.

4.   a b ∪ b a.
∗ ∗

5. (ab ∪ b a) .
∗ ∗ ∗

6.   {ai b2i :  i  ≥  0 }.  ¿Es este un lenguaje regular?


 

     i  j i+ j
Ejercicio   Encontrar una GIC que acepte el lenguaje  { a b c :  i  ≥  0 , j  ≥  1 },
    sobre  { a,b,c}. ¿Es este un lenguaje regular?
    
Ejercicios   Sea Σ =  { a, b}. Para  w  ∈  Σ , se definen

    

N a (w) = número de  a’s que hay en  w,


N b (w) = número de  b’s que hay en  w.
Encontrar GIC’s que acepten los siguientes lenguajes:

1.   L1  =  { w  ∈  Σ :  N a (w) =  N b (w)}  (lenguaje de las palabras que tienen igual

número de  a’s que de  b’s).

2.   L2  =  {w  ∈  Σ :  N a (w) = 2N b (w)}  (lenguaje de las palabras que tienen el

doble de  a’s que de  b’s).

3.   L3  =  { w  ∈  Σ :  N a (w) =  N b (w) + 1 }.


¿Cuál de los lenguajes  L1 ,  L2 ,  L3  es regular y cuál no?
 

4.2. Gramáticas regulares


4.2.1 Definición.  Una GIC se llama  regular  si sus producciones son de la forma

   A  →  aB, a ∈  Σ , B  ∈  V 


A  →  λ
Los siguientes teoremas establecen la conexión entre los lenguajes regulares y las
gramáticas regulares.
4.2.2 Teorema.   Dado un AFD   M   = (Q, Σ, q 0 , F , δ),
  existe una GIC regular 
G  = (V, Σ, S , P  )  tal que   L(M ) =  L (G).

Demostraci´ 
on : Sea  V   =  Q  y  S   =  q 0 . Las producciones de  G  están dadas por
   q  →  ap   si y solo si   δ (q, a) =  p
q  →  λ   si y solo si   q  ∈  F 

Demostraremos primero que para toda  w  ∈  Σ ,   w  


=  λ  y para todo  p, q  ∈  Q  se

tiene
  ∗
(1) Si  δ (q, w) =  p   entonces   q  ⇒  wp.
La demostración de (1) se hace por inducción sobre  w. Si   w  =  a  y   δ (q, a) =  p,
entonces  q  →  ap  es una producción de  G  y obviamente se concluye  q  ⇒  ap . Para
el paso inductivo, sea  δ (q,wa) =  p . Entonces


 p =  δ (q,wa) =  δ (δ (q, w), a) =  δ ( p, a)
  ∗
donde   δ (q, w) =   p. Por hipótesis de inducción   q  ⇒   wp   y como   δ ( p, a) =   p , 

entonces  p  ⇒  ap . Por lo tanto,


  ∗ 
q  ⇒  wp  ⇒  wap

que era lo que se querı́a demostrar.


A continuación demostraremos el recı́proco de (1): para toda   w  ∈  Σ ,   w  
=  λ  y ∗

para todo  p, q  ∈  Q  se tiene


  ∗
(2) Si  q  ⇒  wp   entonces   δ (q, w) =  p .
La demostración de (2) se hace por inducción sobre la longitud de la derivación
  ∗
q  ⇒   wp, es decir, por el número de pasos o derivaciones directas que hay en
  ∗
q  ⇒  wp. Si la derivación tiene longitud 1, necesariamente  q  ⇒  ap  lo cual significa
  ∗
que   δ (q, a) =   p. Para el paso inductivo, supóngase que   q  ⇒   wp  tiene longitud
n + 1,  w  =  w a  y en el último paso se aplica la producción  p →  ap . Entonces
 

  ∗   
q  ⇒  w  p ⇒  w ap  =  wp
 

Por hipótesis de inducción,  δ (q, w ) =  p y por consiguiente


 

  
δ (q, w) =  δ (q, w a) =  δ (δ (q, w ), a) =  δ ( p , a) =  p,

que era lo que se querı́a demostrar.


Como consecuencia de (1) y (2) se puede ahora demostrar que
  ∗
(3) Para toda palabra  w  ∈  Σ ,   δ (q 0 , w)  ∈  F    si y solo si   S  ⇒G w

lo cual afirma que   L(M ) =   L(G). En efecto, si   w   =   λ,   δ (q 0 , w)   ∈   F   si y solo


si   q 0   ∈   F . Por lo tanto,   q 0   →   λ   es una producción de   G. Ası́ que   S   ⇒   λ.
  ∗
Recı́procamente, si  S  ⇒  λ , necesariamente  S   ⇒  λ ,  q 0  ∈  F   y  δ (q 0 , λ)  ∈  F .
∗   ∗
Sea ahora  w   =  λ. Si   δ (q 0 , w) =  p  ∈  F , por (1) se tiene   q 0 ⇒  w, o sea,  S  ⇒  w.
  ∗ ∗
Recı́procamente, si   S  ⇒G  w , entonces   q 0 ⇒G  wp  ⇒  w   donde   p →   λ. Utilizando
(2), se tiene  δ (q 0 , w) =  p  ∈  F .
    
Ejemplo   El siguiente AFD M es el  ultimo ejemplo de la sección 2.3, el cual
    acepta las palabras que terminan en  b, sobre Σ =  { a, b}

M  induce la gramática regular  G


   q 0  →  aq 0  |  bq 1
q 1  →  bq 1  |  aq 0  |  λ

que cumple  L(M ) =  L (G).


    
Ejemplo   Para el lenguaje regular  a ba ba , sobre Σ =  {a, b}   (el lenguaje de
∗ ∗ ∗

    todas las palabras con exactamente dos  b’s), vimos en el cuarto

ejemplo de la sección 4.1 una gramática que lo genera:


   S   →  AbAbA
A  →  aA  |  λ

Esta gramática no es regular, pero por medio del AFD


 

y el teorema 4.2.2 se puede obtener una GIC regular que genere  a ba ba : ∗ ∗ ∗

 S  →  aS  |  bA


A  →  aA  |  bB
B  →  aB  |  λ

4.2.3 Teorema.   Dada una GIC regular   G  = (V, Σ, S , P  ), existe un AFN 
M  = (Q, Σ, q 0 , F, ∆) tal que   L(M ) =  L (G).

Demostraci´ 
on : Se construye  M   = (Q, Σ, q 0 , F, ∆) haciendo  Q  =  V  ,  q 0  =  S  y
   B  ∈  ∆( A, a) para cada producción   A  →  aB
A  ∈  F    si   A  →  λ

Usando razonamientos similares a los del teorema 4.2.2, se puede demostrar que


  ∗
A ⇒G  wB   si y solo si   B  ∈  ∆( A, w),

para todo  w  ∈  Σ ,  w  

=  λ, de donde  L(M ) =  L(G). Los detalles se dejan como
ejercicio.
4.2.4 Corolario.   Un lenguaje es regular si y solamente si es generado por una 
gram´ 
atica regular.

Demostraci´ 
on : Se sigue del teorema 4.2.2, teorema 4.2.3 y del teorema de Kleene.
4.2.5 Corolario.  Todo lenguaje regular es un LIC (pero no viceversa).

Demostraci´ on : Se sigue del  corolario 4.2.4  Por otro lado,   {ai bi :   i   ≥  0}  es LIC
pero no es regular.
4.2.6 Definición.  Una GIC se llama  regular por la derecha  si sus produccio-
nes son de la forma     A  →  wB, w  ∈  Σ , B  ∈  V 

A  →  λ

4.2.7 Teorema.  Las gram´  aticas regulares y las gram´ 


aticas regulares por la de-
recha generan los mismos lenguajes, es decir, los lenguajes regulares. Dicho de 
otra manera, la definici´ 
on de gram´ 
atica regular es equivalente a la definici´ 
on de 
gram´ 
atica por la derecha 

Demostraci´ 
on : Una gramática regular es obviamente regular por la derecha. Re-
cı́procamente, en una gramática regular por la derecha   G   = (V, Σ, S , P  ) , una
producción de la forma
A  →  a 1 a2 · · · an B
 

donde los  ai  ∈  Σ,  n  ≥  2,  B  ∈  V  , se puede simular con producciones de la forma
A  →  aB  y  A  →  λ . En efecto, se introducen  n − 1 variables nuevas   A1 , . . . , An 1

unicas   producciones son:


cuyas ´ 

A   →   a 1 A1
A1   →   a 2 A2
..
.
An −1   →   an B

De esta manera se puede construir una gramática regular equivalente a  G.


    
Ejercicios   Encuentre una GIC regular que genere los siguientes lenguajes,
    sobre Σ =  { a, b}

1.   ab a

2. (ab ∪ ba) ∗

3.   a+ b ∪ b+ a b ∗

    
Ejercicio   Una GIC se llama   regular por la izquierda  si sus producciones
    son de la forma:
   A  →  Bw, w  ∈  Σ , B  ∈  V 

A  →  λ
Demostrar que las gramáticas regulares y las gramáticas regulares por la izquierda
generan los mismos lenguajes.
 

4.3. Eliminación de variables inútiles de una GIC


4.3.1. Definiciones.
  ∗
(i) Una variable  A  es  alcanzable  si existen  u, v  ∈  ( V  ∪ Σ)∗ tales que  S  ⇒  uAv .
La variable inicial  S   es alcanzable por definición.
  ∗
(ii) Una variable A  es  terminable  si existe  w  ∈  Σ ∗ tal que  A ⇒  w . En parti-
cular, si  A  →  λ  es una producción entonces  A  es terminable.

(iii)   A  es una variable  inútil  si no es alcanzable o no es terminable.

Existen algoritmos para detectar todas las variables inútiles de una GIC. Usando
tales algoritmos podemos construir una gramática G equivalente a una gramática
G  dada, de tal manera que  G no tiene variables inútiles.

4.3.2. Algoritmo para encontrar las variables terminables de una GIC.

El siguiente algoritmo sirve para encontrar todas las variables terminables de una
GIC.

TERM1  := A  ∈  V  : Existe una producción de la forma  A  →  w, w  ∈  Σ ∗


TERMi+1 :=TERMi  ∪ A  ∈  V   :  ∃  producción  A  →  w, w  ∈  (Σ ∪ TERMi )∗

Obtenemos una sucesión creciente de conjuntos de variables:

TERM1  ⊆  TERM2  ⊆  TERM3  ⊆ · · ·

Como el conjunto de variables es finito, existe  k  tal que

TERMk  =  TERMk+1  =  TERMk+2  =  · · ·

El conjunto  TERM  de variables terminables es entonces

TERM  :=
 TERMi
i≥1

El anterior algoritmo se puede presentar de la siguiente forma:

INICIALIZAR:
TERM

:= A ∈  V    : ∃  producción  A  →  w, w  ∈  Σ ∗

REPETIR:
:= TERM ∪ A  ∈  V    : ∃   producción  A  →  w, w  ∈  (Σ  ∪   TERMi )∗
TERM
 
HASTA:
No se añaden nuevas variables a   TERM
 

    
Ejemplo   Encontrar las variables terminables de la siguiente gramática  G.
      S  →  AC D  |  bBd  |  ab
A  →  aB  |  aA  |  C 

B  →  aDS   |  aB
 C   →  aC S   |  C B  |  C C 
D  →  bD  |  ba
E   →  AB  |  aDb

TERM1  =  { S, D}
TERM2  =  { S, D} ∪ {B, E }  =  { S,D,B,E }
TERM3  =  { S,D,B,E } ∪ {A}  =  { S , D , B , E , A}
TERM4  =  { S , D , B , E , A} ∪ { } =  { }

TERM=  { S,A,B,D,E }. Conjunto de variables no terminables:  { C }.

4.3.3. Algoritmo para encontrar las variables alcanzables de una GIC.

El siguiente algoritmo sirve para encontrar todas las variables alcanzables de una
GIC.
ALC1 :={S}
ALCi+1 :=ALCi  ∪ {A  ∈  V  :∃  prod.  B  →  uAv ,  B  ∈  ALCi  u, v  ∈  ( V   ∪ Σ)∗ }
Obtenemos una sucesión creciente de conjuntos de variables:

ALC1  ⊆  ALC 2  ⊆  ALC 3  ⊆ · · ·

Como el conjunto de variables es finito, existe  k  tal que

ALCk  =  ALC k+1  =  ALC k+2  =  · · ·

El conjunto  ALC  de variables alcanzables es entonces

ALC  =
 ALCi
i≥1

El anterior algoritmo se puede presentar de la siguiente forma:

INICIALIZAR:
ALC :=  { S }
REPETIR:
:= ALC ∪ A ∈  V    :  ∃   producción  B  →  uAv ,  B  ∈   ALC  y  u, v  ∈  (V    ∪ Σ)∗
ALC
 
HASTA:
No se añaden nuevas variables a   ALC
 

    
Ejemplo   Encontrar las variables alcanzables de la siguiente gramática  G.
      S   →  aS  |  AaB  |  AC S 
A  →  aS  |  AaB  |  AC 

 A  →  aA  |  λ
B  →  bB  |  DB  |  B B
 C   →  aDa |  ABD  |  ab
D  →  aD  |  DD  |  ab
E   →  F F   |  aa

F   →  aE  |  E F 
ALC1  =  { S }
ALC2  =  { S } ∪ {A,B,C }  =  { S,A,B,C }
ALC3  =  { S,A,B,C } ∪ {D}  =  { S,A,B,C,D}
ALC4  =  { S,A,B,C,D} ∪ { } =  { S,A,B,C,D}

ALC={S,A,B,C,D}. Conjunto de variables no alcanzables:  { E, F }.

Dada una GIC G, los dos algoritmos anteriores (algoritmo 4.3.2 y algoritmo 4.3.3)
se pueden llevar a cabo en dos órdenes diferentes:

Esto da lugar a las siguientes preguntas:

(1) ¿Es  G2  =  G 4 ?


(2) ¿G2  tiene variables inútiles?
(3) ¿G4  tiene variables inútiles?

El siguiente ejemplo muestra que la respuesta a la pregunta (1) es  NO  y que al


realizar los algoritmos en el orden (II) pueden permanecer en  G4  algunas variables
inútiles. Sin embargo, si los algoritmos se llevan a cabo en el orden (I) la gramática
G2  ya no tiene variables inútiles (¿por qué?).
    
Ejemplo   Considérese la siguiente gramática  G
    
   S  →  a  |  AB
G  :
A  →  aA  |  λ
Aplicaci´ 
on de los algoritmos en el orden (I):
 

Variables terminables de  G:  TERM= {S, A}.


   S  →  a
G1  :
A  →  aA  |  λ
Variables alcanzables de  G1 :  ALC=  {S }.
G2  :
  →
S   a
Se tiene que  L(G2 ) =  {a}.
on de los algoritmos en el orden (II):
Aplicaci´ 
Variables alcanzables de  G:  ALC={S,A,B}.
   S   →  a  |  AB
G3  :
A  →  aA  |  λ
Variables terminables de  G3 :  TERM={S, A}.
   S  →  a
G4  :
A  →  aA  |  λ
Se observa que en  G4 ,  A  no es alcanzable. Además,  G2  
=  G 4 .
    
Ejemplo   Eliminar las variables inútiles de la siguiente gramática  G.
    
 S  →  S BS  |  B C   |  Bb
A  →  AA  |  aA

 B  →  aBCa  |  b
G  : C   →  aC  |  AC C   |  abb
D  →  aAB  |  ab

 E   →  aS  |  bAA
F   →  aDb  |  aF 
Ejecutamos los algoritmos en el orden (I):
TERM1  =  { B , C , D}
TERM2  =  { B , C , D} ∪ {S, F }
TERM3  =  { B,C,D,S,F } ∪ {E }  =  { B,C,D,S,F,E }
TERM4  =  { B,C,D,S,F,E } ∪ { }
La única variable no-terminable de   G  es   A. Por lo tanto,  G  es equivalente a la
siguiente gramática  G1
 S   →  S BS  |  BC   |  Bb
B  →  aBCa  |  b

C   →  aC  |  abb
G1  :
 D  →  ab
E  →  aS 
F   →  aDb  |  aF 

 

Variables alcanzables de  G1 :


ALC1  =  { S }
ALC2  =  { S } ∪ {B, C }
ALC3  =  { S , B , C }  ∪ { }
Las variables   D , E , F    son no alcanzables. Por lo tanto,   G   es equivalente a la
siguiente gramática  G2 , que no tiene variables inútiles.
 S   →  S BS  |  BC   |  Bb
G2  : B  →  aBCa  |  b
C   →  aC  |  abb

    
Ejercicios   Eliminar las variables inútiles de las siguientes gramáticas.
      S   →  S S  |  S BB  |  C CE 
A  →  aE  |  bE 

B  →  bB  |  Db
G  :
 C   →  aC  |  bB
D  →  aDb  |  ab  |  λ
E   →  aA  |  bB

 S  →  E A  |  SaBb  |  aE b
A  →  DaD  |  bD

 B  →  bB  |  Ab  |  λ
G  : C   →  aC  |  bBC 
D  →  aE b  |  ab

 E   →  aA  |  bB  |  λ
F   →  F b  |  F a  |  a
 

4.4. Eliminación de las producciones   λ


4.4.1. Definiciones.

(i) Una producción de la forma  A  →  λ  se llama producción  λ


  ∗
(ii) Una variable  A  se llama anulable si  A ⇒  λ .
4.4.2. Algoritmo para encontrar las variables anulables de una GIC.

ANUL1 :={A  ∈  V   :  A  →  λ  es una producción}



ANULi+1 :=ANULi ∪ A  ∈  V   :  ∃  producción  A  →  w, w  ∈  (ANULi )∗

Obtenemos una sucesión creciente de conjuntos de variables:

ANUL1  ⊆  ANUL2  ⊆  ANUL3  ⊆ · · ·

Como el conjunto de variables es finito, existe  k  ∈ N  tal que

ANULk  = ANULk+1  = ANULk+2  =  · · ·

El conjunto ANUL de variables anulables es entonces



ANUL := ANULi
i≥1

El anterior algoritmo se puede presentar de la siguiente forma:

INICIALIZAR:
ANUL :=  {A  ∈  V   :  A  →  λ  es una producción}
REPETIR:

ANUL := ANUL ∪ A  ∈  V   :  ∃  prod.  A  →  w, w  ∈  (ANUL)∗

HASTA:
No se añaden nuevas variables a ANUL

4.4.3 Teorema.  Dada una GIC   G, se puede construir una GIC   G equivalente 
a   G  sin producciones  λ, excepto (posiblemente)  S  →  λ .

Demostraci´  on : Una vez que haya sido determinado el conjunto  ANUL de varia-
bles anulables, por medio del  algoritmo 4.4.2, las producciones de   λ  se pueden
eliminar (excepto  S  →  λ ) añadiendo nuevas producciones que simulen el efecto de
las producciones λ  eliminadas. Más concretamente, por cada producción  A  →  u
de   G  se añaden las producciones de la forma   A  →  v  obtenidas suprimiendo de
la cadena   u   una, dos o más variables anulables presentes, de todas las formas
posibles. La gramática  G ası́ obtenida es equivalente a la gramática original  G.
 

    
Ejemplo   Eliminar las producciones  λ  de la siguiente gramática  G.
    
 S   → AB  |  AC A |  ab
 A →  aAa  |  B  | C D
G  :
 BC   →  bB  |  bA
→  cC  |  λ
 D →  aDc  |  C C   |  ABb
Primero encontramos las variables anulables de G  por medio del algoritmo 4.4.2:

ANUL1  =  { C }
ANUL2  =  { C } ∪ {D} =  {C, D}
ANUL3  =  { C, D} ∪ {A}  =  {C,D,A}
ANUL4  =  { C,D,A} ∪ {S }  =  {C,D,A,S }
ANUL5  =  { C,D,A,S } ∪ { } =  { C,D,A,S }

Al eliminar de   G  la producciones   λ  (la única es  C   →  λ) se obtiene la siguiente


gramática equivalente a  G:
 S   → AB  | AC A |  ab  |  B  |  C A |  AA  |  AC  | A  |  C  | λ
 A →  aAa  |  B  |  C D |  aa  |  C  | D

G :
 C B  →  bB  |  bA  |  b
→  cC  |  c
 D →  aDc |  C C   |  ABb  |  ac  |  C  |  B b

    
Ejercicio   Eliminar las producciones  λ  de la siguiente gramática  G.
      S   → E A |  SaBb |  aE b
 A →  DaD |  bD  |  BEB
G  :
 BD →  bB  |  Ab  |  λ
 →  aE b |  ab
 E   → aA  |  bB  | λ
 

4.5. Eliminación de las producciones unitarias


4.5.1. Definiciones.

(i) Una producción de la forma  A  →  B   donde   A  y  B  son variables, se llama


producción unitaria.

(ii) El  conjunto unitario  de una variable   A (ó  conjunto cadena  de   A) se
define de la siguiente manera:
  ∗
UNIT(A) :={X   ∈  V   :  ∃  una derivación  A ⇒  X  que usa solo producciones
unitarias}.

Por definición,  A  ∈  UNIT(A).

4.5.2. Algoritmo para encontrar las producciones unitarias de una GIC.

El siguiente algoritmo sirve para encontrar el conjunto unitario  UNIT(A) de una


variable  A.
UNIT1 (A) :=  { A}.
UNITi+1 (A) =  UNITi (A) ∪ {X   ∈  V   :  ∃  producción  Y   →  X ,  Y   ∈  UNITi (A)}.

Para el conjunto de producciones unitarias se tiene que:

UNIT1 (A)  ⊆  UNIT2 (A)  ⊆  UNIT3 (A)  ⊆ · · ·

Puesto que el conjunto de variables es finito, la anterior es una sucesión finita y


se tiene 
UNIT(A) = UNITi (A)
i≥1

El anterior algoritmo se puede representar de la siguiente forma:

INICIALIZAR:
UNIT(A):={A}
REPETIR:

UNIT(A):=  UNIT(A) ∪ X   ∈  V   :  ∃  una producción Y   →  X   con
Y   ∈  UNIT(A)

HASTA:
No se añaden nuevas variables  UNIT(A)
 

4.5.3 Teorema.   Dada una GIC   G, se puede construir una GIC   G equivalente 
a   G   sin producciones unitarias.

Demostraci´ on : Las producciones unitarias de  G  se pueden eliminar añadiendo pa-


ra cada variable A  de  G  las producciones (no unitarias) de las variables contenidas
en el conjunto unitario  UNIT(A). La gramática  G ası́ obtenida es equivalente a
la gramática original  G.
    
Ejemplo   Eliminar las producciones unitarias de la siguiente gramática  G.
    
 S  →  AS  |  AA  |  BA |  λ
 A →  aA  |  a
G  :
 B  →  bB  |  bC  | C 
C   →  aA  |  bA  |  B  |  ab
Aplicando el algoritmo para cada una de las variables de  G, se tiene que:

UNIT1 (S ) =  { S }


UNIT2 (S ) =  { S } ∪ { } =  { S }
UNIT1 (A) =  { A}
UNIT2 (A) =  { A} ∪ { } =  { A}
UNIT1 (B ) =  { B }
UNIT2 (B ) =  { B } ∪ {C }  =  { B, C }
UNIT3 (B ) =  { B, C } ∪ {B }  =  { B, C }
UNIT1 (C ) =  { C }
UNIT2 (C ) =  { C } ∪ {B }  =  { C, B }
UNIT3 (C ) =  { C, B } ∪ {C }  =  { C, B }

Eliminando las producciones unitarias se obtiene una gramática  G equivalente:


 S  →  AS  |  AA  |  BA |  λ
 A →  aA  |  a
G :
 B  →  bB  | bC  | aA  |  bA  |  ab
C   →  aA  |  bA  |  ab  |  bB  |  bC 

    
Ejemplo   Eliminar las producciones unitarias de la siguiente gramática  G.
      S  →  AC A |  C A |  AA  |  A  |  C  | λ
 A →  aAa  |  aa  |  B  |  C 
G  :
 BC   →  cC  |  D  |  C 
→  bC 
 D →  aA  |  λ
 

Realizando el algoritmo para cada una de las variables de  G  se obtiene:

UNIT(S ) =  { S,A,C,B,D}
UNIT(A) =  { A,B,C,D}
UNIT(B ) =  { B , C , D}
UNIT(C ) =  { C }
UNIT(D) =  { D}

Eliminando las producciones unitarias se obtiene una gramática  G equivalente:


 S   → AC A |  C A |  AA  |  λ  |  aAa  |  aa  |  bC  | cC  | aA
 A →  aAa  |  aa  |  cC  | bC  | aA  |  λ
G
 BC   →  cC  |  bC  |  aA  |  λ
→  bC 
 D →  aA  |  λ
    
Ejemplo   Eliminar las producciones unitarias de la siguiente gramática  G.
      S  →  AC A |  ab  |  B  |  C A |  A  |  C  | λ
 A →  aAa  |  B  |  C D |  aa  |  D
G  :
 BC   →  bB  |  bA  |  b
→  cC  |  c
 D →  ABb  |  ac  |  C  |  B b
 

4.6. Forma Normal de Chomsky (FNC)


Una GIC  G  está en  Forma Normal de Chomsky  (FNC) si satisface:

1.   G  no tiene variables inútiles.

2.   G  no tiene producciones  λ  (excepto posiblemente  S  →  λ ).

3. Todas las producciones son de la forma:   A   →   a  (producciones simples)


ó  A  →  BC   (producciones binarias).

En particular, una gramática en FNC no tiene producciones unitarias.

4.6.1 Teorema.  toda GIC   G es equivalente a una gram´ 


atica en Forma Normal 
de Chomsky.

on : Podemos transformar  G  en una gramática en FNC, equivalente a


Demostraci´ 
G, ejecutando los algoritmos de las secciones anteriores en el siguiente orden:

1. Eliminar las variables no terminales.

2. Eliminar las variables no alcanzables.

3. Eliminar las producciones λ  (excepto, posiblemente,  S  →  λ ).

4. Eliminar las producciones unitarias.

5. Las producciones resultantes (diferentes de S  →  λ ) son de la forma:  A  →  a


ó  A  →  w , donde |w| ≥  2. Estas últimas se pueden simular con producciones
de la forma   A   →   BC   o   A  →   a. Se introduce primero, para cada   a   ∈   Σ,
una variable nueva   T a  cuya única producción es   T a   →   a. A continuación,
se introducen nuevas variables, con producciones binarias, para simular las
producciones deseadas. Esta parte del procedimiento se ilustra en los dos
siguientes ejemplos.
    
Ejemplo   Simular la producción  A  →  abBaC  con producciones simples y bi-
    narias.

Introducimos las variables T a  y  T b , y las producciones  T a  →  a  y  T b  →  b . Entonces


A  →  abBaC   se simula con:
 A →  T  T  BT  C 
a b a

 →  a
 T T   →
a

b  b
 

Ahora introducimos nuevas variables T 1 ,  T 2 ,  T 3  y las producciones binarias nece-
sarias. Las únicas producciones de estas nuevas variables son las mostradas:
 A →  T  T 
a 1
 T   →  T  T 
1 b 2
 T   →  BT 
2 3

 T   →  T  C 
3 a

 T   →  a
a

T b  →  b

    
Ejemplo   Simular la producción   A   →   BAaCbb  con producciones simples y
    binarias.

Introducimos las variables T a  y  T b , y las producciones T a  →  a  y  T a  →  b . Entonces


A  →  BAaCbb  se simula con:
 A →  BAT  CT  T 
a b b

 →  a
 T T   →
a

b  b

Ahora introducimos nuevas variables   T 1,   T 2 ,   T 3 ,   T 4   y las producciones binarias
necesarias. Las únicas producciones de estas nuevas variables son las mostradas:
 A →  BT 
1
 T   →  AT 
1 2
 T   →  T  T 
2 a 3

 T T   →
3

4
 C T 
 →  T  T 
b
4

b
 T   →  a
a
 T   →  b
b

En los siguientes ejemplos se ilustra el procedimiento completo para convertir una


gramática dada a la Forma Normal de Chomsky (FNC).
    
Ejemplo   Encontrar una GIC en FNC equivalente a la siguiente a la gramática:
    
 S   → AB  |  aBC   | S BS 
 A →  aA  |  C 
G  :
 B  →  bbB  | b
C   →  cC  |  λ
El conjunto de variables terminables es   TERM={B,C,S,A}  y el conjunto de
variables alcanzables es ALC={S,A,B,C }. Es decir, la gramática no tiene varia-
bles inútiles. El conjunto de variables anulables es  ANUL={C, A}. Al eliminar
 

las producciones  λ  de  G  (la única es  C   →  λ ) se obtiene la gramática equivalente


G1 : 
S   →  AB  |  aB C   |  S BS  |  B  |  aB
A  →  aA  |  C  |  a

G1  :
B  →  bbB  |  b

C   →  cC  |  c
A continuación encontramos los conjuntos unitarios de todas las variables:
UNIT(S)={S, B }
UNIT(A)={A, C }
UNIT(B)={B }
UNIT(C)={C }
Al eliminar las producciones unitarias obtenemos la gramática equivalente  G2 :
 S   → AB  |  aBC   | S BS  |  aB  |  bbB  | b
 A →  aA  |  a  |  cC  | c
G2  :
 B  →  bbB  |  b
C   →  cC  |  c

Luego introducimos las variables nuevas  T a ,  T b  y  T c , y las producciones  T a  →  a ,
T b  →  b  y  T c  →  c  con el propósito de que todas las producciones sean unitarias o
de la forma  A  →  w , donde  | w| ≥  2.
 S   → AB  | T  BC  | S BS  | T  B  |  T  T  B  |  b
a a b b
 A →  T  A |  a  |  T  C   | c
a c
 B  → T  T  B  | b
b b

G3  :
 C T   →
→  T  C   |  c
c

 T   →  b a
a

b
 T   →  c
c

Finalmente, se introducen nuevas variables, con producciones binarias, para si-


mular las producciones de la forma  A  →  w , donde  |w| ≥  2:
 S  →  AB  |  T  T   |  S T   |  T  B  |  T  T   |  b
a 1 2 a b 3
 A →  T  A |  T  C   | a  |  c
a C 
 B  →  T  T   |  b
b 3
 C   → T  C   | c
c
 T   →  BC 
1
G4  :
 T   →  BS 
2

 T   →  T  B
3 b

 T   →  a
a

 T   →  b
b

T c  →  c
 

    
Ejemplo   Encontrar una GIC en FNC equivalente a la siguiente a la gramática:
      S   → aS  | aA  |  D
 A →  aAa  |  aAD  |  λ
G  :
 C B  →  aB  |  BC 
→  aB b  |  C C   |  λ
 D  →  aB  |  bA  |  aa  |  A
TERM={A,C,D,S}. Eliminando la variable no-terminable  B  obtenemos:
 S   → aS  | aA  |  D
 A →  aAa  |  aAD  |  λ
G1  :
 C   → C C   | λ
D  →  bA  |  aa  |  A
Las variables alcanzables de  G 1  son  ALC={S,A,D }. Eliminando la variable no-
alcanzable  C  obtenemos:

S   →  aS  |  aA  |  D
G2  : A  →  aAa  |  aAD  |  λ
D  →  bA  |  aa  |  A

El conjunto de variables anulables de  G2  es  ANUL={A,D,S }. Eliminando las
producciones  λ  obtenemos:
 S   → aS  | aA  |  D  |  a  |  λ
G3  :
 AD →  aAa  |  aAD  |  aa  |  aA  |  aD  |  a
 →  bA  |  aa  |  A  |  b
A continuación encontramos los conjuntos unitarios de todas las variables:
UNIT(S)={S,D,A}
UNIT(A)={A}
UNIT(D)={D, A}
Al eliminar las producciones unitarias obtenemos la gramática equivalente  G4 :
 S   → aS  |  aA  |  a  |  λ  |  aAa  |  aAD  |  aa  |  aD  |  a  |  bA  |  b
G4  :
 AD →  aAa  |  aAD  |  aa  |  aA  |  aD  |  a
 →  bA  |  aa  |  b  |  aAa  |  aAD  |  aa  |  aA  |  aD  |  a
Finalmente, simulamos las producciones de  G4  con producciones unitarias y bi-
narias:

S   →  T a S   |  T a A  |  a  |  λ  |  T a T 1  |  T a T 2  |  T a T a  |  T a D  |  a  |  T b A  |  b
A  →  T a T 1  |  T a T 2  |  T a T a  |  T a A  |  T a D  |  a

D  →  T b A  |  T a T a  |  b  |  T a T 1  |  T a T 2  |  T a T a  |  T a A  |  T a D  |  a

G5  : T 1  →  AT a
T 2  →  AD

T a  →  a

T b  →  b

 

    
Ejercicios   Encontrar una GIC en FNC equivalente a cada una de las sigui-
    entes gramáticas:

1.  S   → ABC   | BaC   | aB


 A →  Aa  |  a
G  :
 B  → BAB  |  bab
C   →  cC  |  c

2.  S   → aASb |  BAb


 A →  Aa  |  a  |  λ
G  :
 B  →  BAB  | bAb
C   →  cC C   |  λ
 

4.7.   Árbol de una derivación


Un  árbol   es un tipo muy particular de grafo no-dirigido: está formado por un
conjunto de vértices o nodos conectados entre sı́ por aristas o conectores, con
la siguiente propiedad: existe un nodo especial, llamado la   raı́z   del árbol, tal
que hay una única trayectoria entre cualquier nodo y la raı́z. De esta manera,
la raı́z se ramifica en nodos, llamados  descendientes inmediatos, cada uno de
los cuales puede tener, a su vez, descendientes inmediatos, y ası́ sucesivamente.
La propiedad que caracteriza a un árbol garantiza que un nodo puede tener 0,
1, o más descendientes inmediatos pero un único antecesor inmediato. El único
nodo que no tiene antecesores es la raı́z. Los nodos que no tienen descendientes se
llaman hojas del árbol. En la terminologı́a usualmente utilizada, los descendientes
de un nodo también se denominan  hijos  y los antecesores  padres  o  ancestros.
El número de vértices (y por lo tanto, el número de aristas) de un árbol puede
ser infinito. Ejemplos de árboles son:

  ∗
El árbol de una derivación S  ⇒  w, w  ∈ Σ , en una GIC se forma de la siguiente

manera. La raı́z del árbol es el sı́mbolo inicial   S  y si en la derivación se utiliza


la producción   A   →   s1 s2 · · · sk ,   si   ∈   (V    ∪ Σ) , el nodo   A  tiene   k   descendientes

 

inmediatos:   s1 ,   s2, . . . ,   sk . De esta forma, las hojas del árbol de derivación de


  ∗
S  ⇒  w  son precisamente los sı́mbolos de la palabra   w.
    
Ejemplo   Sea   G  la gramática:
    
 S  →  AB |  AaB
 AB →  aA |  a
 →  bBa  |  b
El árbol de la derivación
S   ⇒  AB  ⇒   AbBa ⇒  abBa  ⇒  abba

es

El anterior es también el árbol de la derivación


S   ⇒  AB  ⇒  aB  ⇒  abBa  ⇒  abba

Esto muestra que dos derivaciones diferentes pueden tener el mismo árbol de
derivación ya que en el árbol aparecen las producciones utilizadas pero no el
orden en que han sido aplicadas.
    
Ejemplo   Sea   G  la gramática:
    
 S   → BAa
 A →  bBC  |  a
 B →  bB |  b
C   →  aB  |  aa

El árbol de la derivación
S   ⇒  B Aa ⇒  bAa  ⇒  bbBCa  ⇒  bbbCa  ⇒   bbbaBa  ⇒  bbbaba

es
 

    
Ejercicio   Sea   G  la gramática:
      S   →  ABC  |  BaC  |  aB
 A →  Aa |  a
G  :
 B  →  B AB |  bab
C   →  cC  |  c

Encontrar derivaciones de las palabras   w1  =   abab,   w2  =  babacc,   w3  =  ababababc


y hallar los árboles de tales derivaciones.
 

4.8. Lema de bombeo


Una de las consecuencias más importantes de la Forma Normal de Chomsky es el
lema de bombeo para lenguajes independientes del contexto, el cual es útil para
demostrar que ciertos lenguajes no son LIC. Puesto que las producciones en una
gramática en FNC son unitarias (A  →  a) o binarias (A  →  BC ), en cada nodo
el árbol de una derivación se ramifica en dos nodos, a lo sumo. Tales árboles se
denominan  binarios.
atica en FNC y   w   ∈ Σ . Si la 
4.8.1 Teorema.   Sea   G = (V, Σ, S , P )    una gram´  ∗

  ∗
longitud de la trayectoria m´ 
as larga en un ´  on de   S  ⇒  w  tiene   k
arbol de derivaci´ 
k 2
(o menos) nodos, entonces   |w| ≤  2 . Aquı́  k  ≥  2.

Demostraci´ 
on : La siguiente tabla muestra las relaciones obtenidas entre  k   =
  ∗
número de nodos de la trayectoria más larga de S  ⇒ w y la longitud de w, en los
casos k = 2, k  = 3, k  = 4 y k  = 5.
 

Se observa que | w| ≤ 2 k 2 . Para hacer una demostración rigurosa del caso general

se procede por inducción sobre k.


atica en FNC y  w  ∈  Σ . Si la 
4.8.2 Corolario.   Sea  G = (V, Σ, S , P  )  una gram´  ∗

  ∗
longitud de la trayectoria m´ 
as larga en un ´  on de   S  ⇒  w   tiene 
arbol de derivaci´ 
k
k + 2  (o menos) nodos, entonces   |w| ≤  2 . Aquı́  k  ≥  0.

Demostraci´ 
on : Inmediata.
atica en FNC y  w  ∈  Σ , |w|  > 2 k
4.8.3 Corolario.  Sea  G = (V, Σ, S , P  ) una gram´  ∗

(con   k   ≥   0) entonces la longitud de la trayectoria m´ 


as larga en un ´ 
arbol de 
  ∗
derivaci´  on de   S  ⇒ w  tiene m´ 
as de   k + 2  nodos.

Demostraci´ 
on : Es la afirmación contra-recı́proca del Corolario 4.8.2.
4.8.4. Lema de bombeo para LIC.  Sea  L  un LIC que no contiene a  λ. Existe 
una constante   m   (llamada constante de bombeo de   L) tal que toda   z   ∈   L   con 
|z |  > m se puede descomponer en la forma  z  = uvwxy donde:

(1)   |vwx | ≤  m.


(2)   uvi wxi y  ∈  L  para todo i  ≥  0.
(3)   v   o x  
=  λ  ´  =  λ.

Demostraci´  on : Sea G = (V, Σ, S , P  ) una gramática en FNC tal que L(G) = L. Tal
gramática existe por el  Teorema 4.6.1. Sea k =  | V |  = número de variables de G
y m = 2k . Sea z  ∈  L  con  | z |  > m = 2k . Por el Corolario 4.8.3, la trayectoria más
  ∗
larga en el árbol de una derivación S  ⇒ w tiene más de k +2 nodos. Consideremos
los últimos k +2 de tal trayectoria (siguiendo el orden que va desde la raı́z S   hasta
las hojas del árbol). El último nodo de esa trayectoria es un terminal a  ∈  Σ y los
restantes  k + 1 nodos son variables. Como hay solo  k variables en la gramática,
entonces hay por lo menos una variable A repetida en la trayectoria. Por lo tanto,
existen cadenas u, v,w,x, y  ∈  Σ tales que ∗

  ∗   ∗   ∗
S  ⇒  uAy, A ⇒ vAx, A ⇒  w.

Ası́ que
  ∗   ∗   ∗
S  ⇒ uAy ⇒ uvAxy ⇒ uvwxy = z.
  ∗   ∗
Puesto que la trayectoria más larga en el árbol de derivación de  A ⇒   vAx ⇒
vwx   tiene menos de  k + 2 nodos, por el  Corolario 4.8.2, podemos concluir que
|vwx | ≤ 2 k = m. Además:
  ∗   ∗   ∗   ∗
S  ⇒ uAy ⇒ uvAxy ⇒ uv i Axi y ⇒  uv i wxi y,   para todo i  ≥  0.
 

  ∗
Finalmente, la derivación A ⇒ vAx se puede escribir como
  ∗
A  ⇒  BC  ⇒  vAx

utilizando una producción de la forma  A  →   BC   como primer paso. Se deduce


que
  ∗   ∗   ∗   ∗
(B ⇒  v  & C  ⇒  Ax) ó (B ⇒ vA &  C  ⇒ x).
Puesto que no hay producciones   λ   en la gramática  G, se tiene necesariamente
que v   
=  λ ó x  
=  λ. Esto demuestra las propiedades (1), (2) y (3) del lema de
bombeo.
     i i i
Ejemplo   Demostrar que el lenguaje L =  {a b c : i  ≥  1}  sobre Σ =  {a,b,c}
    no es un LIC.

Demostraci´  on : Argumento por contradicción. Si   L   fuera LIC, por el lema de


bombeo, existirı́a una constante de bombeo m. Sea z  = a m bm cm ; se tiene que z  ∈
L y  |z |  > m. Por lo tanto, z   se puede descomponer como z   = a m bm cm = uvwxy
con las propiedades (1), (2) y (3) del   lema 4.8.4 Puesto que   |vwx | ≤   m, en la
cadena vxw no pueden aparecer los tres terminales a, b, c simultáneamente. Luego
en las palabras bombeadas uv i wxi y se altera el número de dos de las letras a, b, c,
a lo sumo, pero no de las tres. Esto implica que  uvi wxi y ∈ /  L para i  ≥  2. Pero
el lema de bombeo afirma que uvi wxi y  ∈  L  para todo i  ≥  2. Esta contradicción
muestra que L no es un LIC.
     i
Ejemplo   Demostrar que el lenguaje L =  {a : i es primo}  sobre Σ =  {a}  no
    esun LIC.
Demostraci´  on : Argumento por contradicción. Si   L   fuera LIC, por el lema de
bombeo, existirı́a una constante de bombeo m. Sea z   = an con n primo n > m
y n > 2. Entonces z   ∈  L  y  |z |  > m. Por lo tanto, z   se puede descomponer como
z  = a n = uvwxy con las propiedades (1), (2) y (3) del  lema 4.8.4
Sea  |u| + |w| + |y|  = k; entonces  |v | + |x|  =  n − k  ≥  1. Por el lema de bombeo,
uvi wxi y  ∈  L para todo i  ≥  0; es decir,  | uvi wxi y|  es primo para todo i  ≥  0. Pero

|uvi wxi y|  = k + |v i | + |xi |  = k + i|v| + i|x|  = k + i(|v | + |x|) = k + i(n − k).

(i) Si k = 0 tomando i = n se obtiene que k + i(n − k) = 0+ i(n − 0) = in = nn


que no es primo pues n > 2.

(ii) Si   k   = 1 tomando   i   = 0 se obtiene que   k + i(n  −  k) = 1 + i(n  −  1) =


1 + 0(n − 1) = 1 que no es un número primo.

(iii) Si k > 1 para i = k  se tiene

|uvk wxk y |  = k + k(n − k) = k(1 + n − k).


 

el cual no es un número primo pues   k >   1 y como   n  −  k   ≥   1 entonces


1 + n − k  ≥  2

Luego de (i), (ii) y (iii)  | uvk wxk y|  no es un número primo, lo cual contradice que
uvk wxk y  ∈  L, según el lema de bombeo. Esta contradicción muestra que L  no es
un LIC.
    
Ejercicios   Demostrar que los siguientes lenguajes no son LIC.
    

1.   L =  { ai bi c j : j  ≥  i}, sobre Σ =  {a,b,c}.

2.   L =  { ai b j c j : i  ≥  j }, sobre Σ =  { a,b,c}.

3.   L =  { ai b j ck : 1  ≤  i  ≤  j  ≤  k }, sobre Σ =  {a,b,c}.

4.   L =  { ai : i es un cuadrado perfecto }, sobre Σ =  {a}.

5.   L =  { ai b2i ai : i  ≥  0 }, sobre Σ =  { a, b}.

6.   L =  { ww : w  ∈ {a, b} }. ∗


 

4.9. Forma Normal de Greibach (FNG)


Una GIC está en  Forma Normal de Greibach  (FNG) si sus producciones son
de la siguiente forma:

1.   A  →  a .
2.   A  →  aB 1 B2 . . . Bk , donde las  Bi  son variables.

y no hay variables inútiles.


Existe un procedimiento algorı́tmico para transformar una GIC dada en una
gramática equivalente en FNG. Para presentar el procedimiento necesitamos al-
gunos resultados preliminares.
4.9.1 Definición.   Una variable se llama recursiva a la izquierda si tiene una
producción de la forma:
A  →  Aw, w  ∈ {V   ∪ Σ} ∗

La recursividad a izquierda se puede eliminar, como se muestra en el siguiente


Teorema.
4.9.2. Eliminación de la recursividad a la izquierda  Las producciones de 
una variable A cualquiera se pueden dividir en dos clases:
   A  →  Aα 1  |  Aα 2  | · · · |  Aα n
A  →  β 1  |  β 2  | · · · |  β m

donde   αi  ∈ {V   ∪ Σ} ,  β i  ∈ {V  ∪ Σ} y el primer sı́mbolo de  β i  es diferente de   A.
∗ ∗

Sin alterar el lenguaje generado, las anteriores producciones se pueden simular,


reemplaz´ andolas por las siguientes:
   A  →  β 1  |  β 2  | · · · |  β m  |  β 1 Z   |  β 2 Z   | · · · |  β m Z 
Z   →  α 1  |  α 2  | · · · |  α n  |  α 1 Z   |  α 2 Z   | · · · |  α n Z 

donde   Z   es una variable completamente nueva.

Demostraci´  on : Se puede observar que, tanto con las producciones originales como
las nuevas,  A  genera el lenguaje
{β 1 , β 2 , . . . , βm  } · {α1 , α2 , . . . , αn } ∗

4.9.3 Lema.  En una GIC cualquiera, una producci´  on   A  →  uB v  se puede reem-
plazar (simular) por 
A  →  uw 1 v  |  uw 2 v  | · · · |  uw n v
siendo  B  →  w 1  |  w 2  | · · · |  w n  todas las producciones de  B .
 

4.9.4. Procedimiento para transformar una GIC a la Forma Normal de


Greibach.  Suponemos que la gramática dada está en FNC. Esto simplifica el
procedimiento, aunque éste es válido para una gramática arbitraria si se eliminan
primero las variables inútiles, las producciones  λ  y las producciones unitarias.

1. Enumerar las variables en un orden arbitrario pero fijo durante el procedi-


miento.  S  debe ser la variable con orden 1.
2. Para cada variable   A  de la gramática original, siguiendo el orden elegido,
se modifican sus producciones de tal manera que el primer sı́mbolo a mano
derecha de cada producción sea un terminal o una variable cuyo orden es
mayor que  A. Para lograrlo se usa el teorema de eliminación de la recursi-
vidad a la izquierda 4.9.2 y el Lema 4.9.3, todas las veces que sea necesario.
3. Utilizar el Lema 4.9.3, para modificar las producciones de las variables ori-
ginales de tal manera que el primer sı́mbolo de cada producción, a mano
derecha, sea un terminal. Esto se hace siguiendo el inverso de enumeración
de las variables: última, penúltima, etc.
4. Utilizar el Lema 4.9.3, para modificar las producciones de las variables nue-
vas de tal manera que el primer sı́mbolo de cada producción, a mano dere-
cha, sea un terminal.
    
Ejemplo   Encontrar una gramática en FNG equivalente a la siguiente gramáti-
    ca (que esta en FNC):
   S   →  AA  |  a
G  :
A  →  S A  |  b

Paso 1:   Aquı́ solamente hay un orden posible para variables:  S, A.


Paso 2:    S   →  AA  |  a
G  :
A  →  AAA  |  aA  |  b
Se elimina luego la recursividad a izquierda de la variable  A  y se obtiene la
gramática: 
S   →  AA  |  a
A  →  aA  |  b  |  aAZ  |  bZ 
Z   →  AA  |  AAZ 

Paso 3:    S  →  aAA  |  bA  |  aAZA  |  bZ A  |  a
A  →  aA  |  b  |  aAZ  |  bZ 
Z   →  AA  |  AAZ 

 

Paso 4:
 S  →  aAA  |  bA  |  aAZA  |  bZ A  |  a
A  →  aA  |  b  |  aAZ  |  bZ 
Z   →  aAA  |  bA  |  aAZA  |  bZ A  |  aAAZ   |  bAZ  |  aAZAZ   |  bZAZ 

    
Ejemplo   Encontrar una gramática en FNG equivalente a la siguiente gramáti-
    ca (que esta en FNC):

S   →  AB  |  BC 
A  →  AB  |  a

B  →  AA  |  C B  |  a

C   →  a  |  b

Paso 1:  Orden de las variables:  S, A, B,C .


Paso 2:    S   →  AB  |  BC 
A  →  a  |  aZ 1
B  →  aA  |  aZ 1 A  |  C B  |  a
C   →  a  |  b

Z 1  →  B  |  BZ 1

Paso 3:    S   →  aB  |  aZ 1 B  |  aAC  |  aZ 1 AC   |  aBC   |  bBC   |  aC 
A  →  a  |  aZ 1

B  →  aA  |  aZ 1 A  |  aB  |  bB  |  a
C   →  a  |  b

Z 1  →  B  |  BZ 1

Paso 4:
 S  →  aB  |  aZ 1 B  |  aAC  |  aZ 1 AC   |  aBC   |  bBC   |  aC 
B  →  aA  |  aZ 1 A  |  aB  |  bB  |  a

A  →  a  |  aZ 1
C   →  a  |  b

Z 1  →  aA  |  aZ 1 A  |  aB  |  bB  |  a  |  aAZ 1  |  aZ 1 AZ 1  |  aBZ 1  |  bBZ 1  |  aZ 1

    
Ejemplo   Encontrar una gramática en FNG equivalente a la siguiente gramáti-
    ca (que esta en FNC):

S   →  AB
A  →  AB  |  C B  |  a

B  →  AB  |  b

C   →  AC  |  c
 

Paso 1:  Orden de las variables:  S, A, B,C .


Paso 2:    S   →  AB
A  →  C B  |  a  |  C BZ 1  |  aZ 1
B  →  C BB  |  aB  |  C BZ 1 B  |  aZ 1 B  |  b
C   →  C BC  |  aC  |  C BZ 1 C   |  aZ 1 C   |  c

Z 1  →  B  |  B Z 1
Prosiguiendo con el paso 2, se elimina la recursividad a izquierda de la
variable C:
 S  →  AB
A  →  C B  |  a  |  C BZ 1  |  aZ 1

B  →  C BB  |  aB  |  C BZ 1 B  |  aZ 1 B  |  b
 C   →  aC  |  aZ 1 C   |  c  |  aC Z 2  |  aZ 1 CZ 2  |  cZ 2
Z 1  →  B  |  BZ 1
Z 2  →  B C   |  BZ 1 C   |  BCZ 2  |  B Z 1 CZ 2

Paso 3:
 S   →  14 producciones
A  →  a  |  aZ 1  |  6 producciones  |  6 producciones
B  →  aB  |  aZ 1 B  |  b  |  6 producciones |  6 producciones

 C   →  aC  |  aZ 1 C   |  c  |  aC Z 2  |  aZ 1 CZ 2  |  cZ 2
Z 1  →  B  |  BZ 1
Z 2  →  BC   |  BZ 1 C   |  BCZ 2  |  B Z 1 CZ 2

Paso 4:  El número de producciones de la nueva gramática se incrementa drásti-
camente.
 S   → 14 producciones
A  →  a  |  aZ 1  |  6 producciones |  6 producciones

B  →  aB  |  aZ 1 B  |  b  |  6 producciones |  6 producciones
 C   →  aC  |  aZ 1 C   |  c  |  aC Z 2  |  aZ 1 CZ 2  |  cZ 2
Z 1  →  14 producciones |  14 producciones
Z 2  →  14 producciones |  14 producciones |  14 producciones  |  14 producciones

    
Ejercicios   Encontrar gramáticas en FNG equivalentes a las gramáticas dadas
    (que están en FNC):
1.  S   →  S A  |  AC  |  a
A  →  B A  |  AB  |  b
G  :

 B  →  AA  |  a  |  b
C   →  AC  |  C C   |  a
 

2.  S   →  S B  |  B C   |  b
A  →  AC  |  C A  |  a
G  :

 B  →  BB  |  a
C   →  BC   |  C A  |  a

3.  S   →  S C   |  AA  |  a


A  →  C A  |  AB  |  a
G  :

 B  →  AC  |  b
C   →  C A  |  AB  |  b
 

4.10. Análisis gramatical y ambigüedad


Para los lenguajes naturales, como el español, se pueden presentar GIC que gene-
ren las frases u oraciones permitidas en la comunicación hablada o escrita. Una
porción de una GIC para el idioma español se presenta a continuación; las varia-
bles aparecen encerradas entre paréntesis    y   Oraci´ 
on   la variable inicial de la
gramática. Los terminales son las palabras propias del idioma.
Oraci´ 
on  → SujetoVerboCompl. Directo | SujetoVerboCompl. Directo
Compl. Circunst. | Sujeto VerboCompl. IndirectoCompl. Circunst.
Sujeto  → Sustant. |  Juan  |  Pedro  |   Marı́a  | · · ·
Sustant.  →   casa  |   perro  |  libro  |  lápiz  | · · ·
Compl. Directo → Prepos.Artı́c uloSustant. | Prepos.Artı́c uloSustant.
Prepos.Artı́c uloSustant.
Compl. Indirecto → Prepos.Artı́c uloSustant.
Compl. Circunst. → Prepos.Artı́c uloSustant. | Adverbio
Prepos. →   a  |  ante  |  bajo  |   cabo  |  con  |   contra  |  de  |  desde  |  en  |  entre  |  hacia  |  λ  | · · ·
Artı́c ulo →   el  |  la  |  lo  |  las  |  los  |  un  |  una  |  unas  |  unos  |  λ
Adverbio →   muy |   bastante  |  poco  |  demasiado  |   lento  |   lentamente  |  rápido  |  rápidamente  |  λ  | · · ·
Verbo →   escribir  |  escribo  |  escribe  |  escribes  |  escriben  |   escribı́  |  escribiste  |  escribieron  | · · ·

Hay oraciones para las cuales se pueden construir (por lo menos) dos árboles
de derivación diferentes, o lo que es lo mismo, oraciones para las cuales hay dos
derivaciones que (ignorando el orden de las producciones) difieren por lo menos
en una producción. Tales oraciones tienen un significado ambiguo. Los lenguajes
naturales son casi siempre ambiguos porque existen muchas reglas de producción,
lo que da lugar a múltiples árboles de derivación para ciertas oraciones.
    
Ejemplo   La oración
    
Juan mira a un hombre con un telescopio
 

es ambigua. La ambigüedad surge porque las producciones permiten dos árboles


de derivación para la oración:

Se puede dar una definición de la noción de ambigüedad en el contexto abstrac-


to de las GIC, ya sea en términos de derivaciones o en términos de árboles de
derivación. Hay ciertas derivaciones que se pueden considerar “estándares”: las
llamadas derivaciones a izquierda.

4.10.1 Definición.  Una derivación se llama  derivación a izquierda  si en cada


paso se aplica una producción a la variable que está más a la izquierda.

Una derivación cualquiera se puede transformar siempre en una derivación a iz-


quierda aplicando, en cada paso, producciones a la variable que está más a la
izquierda.

4.10.2 Definición.  Una GIC G  es  ambigua si existe una palabra  w  ∈ Σ para la

cual hay dos derivaciones a izquierda diferentes. Equivalentemente, una GIC  G  es
ambigua  si existe una palabra  w  ∈ Σ con dos árboles de derivación diferentes.

    
Ejemplo   La siguiente gramática  G  es ambigua
    
   S   →  aS A |  λ
G  :
A  →  bA  |  λ
G  es ambigua porque para la palabra  aab  hay dos derivaciones a izquierda dife-
rentes.
S   ⇒  aS A ⇒  aaSAA ⇒  aaAA ⇒  aaA  ⇒  aabA ⇒  aab
S  ⇒  aS A ⇒  aaSAA ⇒  aaAA ⇒  aabAA ⇒  aabA ⇒  aab
 

Los árboles de derivación para estas dos derivaciones son:

El lenguaje generado por esta gramática es   a+ b ∪  λ . Se puede construir una


gramática no-ambigua que genere el mismo lenguaje:


 S  →  AB  |  λ

G : A  →  aA  |  a
B  →  bB  |  λ

    
Ejemplo   Gramática de las expresiones aritméticas. Considérese el alfabeto
    

Σ = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, ∗, (, )

La siguiente gramática para generar expresiones aritméticas es ambigua:

S  →  S  + S   |  S  ∗ S   | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Hay dos derivaciones a izquierda diferentes para la cadena 3 + 1 ∗ 5

S   ⇒  S  + S  ⇒ 3 + S   ⇒ 3 + S  ∗ S   ⇒ 3 + 1 ∗ S   ⇒ 3 + 1 ∗ 5

S   ⇒  S  ∗ S   ⇒  S  + S  ∗ S  ⇒ 3 + S  ∗ S   ⇒ 3 + 1 ∗ S   ⇒ 3 + 1 ∗ 5
La ambigüedad se elimina introduciendo paréntesis:

S   → ( S  + S )  | ( S  ∗ S )  | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Con esta gramática, las cadenas (3+1)∗5 y 3+(1∗5) tienen árboles de derivación
diferentes.
Observaci´  on:  Existen lenguajes independientes del contexto para los cuales to-
da gramática es ambigua. Tales lenguajes se llaman inherentemente ambiguos.
 

    
Ejercicios   En cada caso, mostrar que la gramática  G  es ambigua. Encontrar
    el lenguaje generado por   G   y construir luego una gramática no-

ambigua que genere el mismo lenguaje.

1.  S   →  AaSbB  |  λ
G  : A  →  aA  |  a
B  →  bB  |  λ

2.  S  →  AS B  |  AB
G  : A  →  aA  |  a
B  →  bB  |  λ

    
Ejercicios   Utilizando la gramática presentada al inicio de la presente sección
    mostrar
que las siguientes oraciones del idioma español son ambi-
guas. ¿Cómo se puede eliminar la ambigüedad?

1. Ana mira la televisión sobre la mesa.

2. Pedro escucha una conversación tras la puerta.


 

Capı́tulo 5

Autómatas de Pila

5.1. Autómatas de Pila Deterministas (AFPD)


Un  Autómata Finito de Pila Determinista  (AFPD), es una 7-upla:

M   = (Σ, Q , q0  , F, Γ, s0 , ∆)

cuyos parámetros son:

1. Σ es el alfabeto de cinta.

2.   Q  es el conjunto (finito) de estados.

3.   q 0  ∈  Q  es el estado inicial.

4.   F  es el conjunto de estados finales o de aceptación,  ∅ =


  F  ⊆  Q .
5. Γ es el alfabeto de pila.

6.   s0  ∈  Γ es el sı́mbolo inicial de pila.

7. ∆ es la función de transición del autómata:



∆ :  Q × (Σ ∪ λ) × Γ  →  ( Q × Γ )

Como en los modelos anteriores, el AFPD procesa palabras sobre una cinta de en-
trada, pero hay una cinta adicional, llamada pila, que es utilizada por el autómata
como lugar de almacenamiento. En un momento determinado, la cabeza lectora
del autómata está escaneando un sı́mbolo  a  sobre la cinta de entrada y el sı́mbolo
s  en el tope o cima de la pila, como lo muestra la siguiente gráfica:
 

La transición

∆(q,a,s) = (q  , γ )
representa un   paso computacional: la cabeza lectora pasa al estado   q  y se

mueve a la derecha; además, borra el sı́mbolo  s  que está en el tope de la pila y


escribe la palabra  γ   (palabra que pertenece a Γ ). La siguiente gráfica ilustra un

paso computacional:
 

En un paso computacional, el autómata sólo tiene acceso al sı́mbolo que está en


el tope de la pila. El contenido de la pila siempre se lee desde arriba (el tope)
hacia abajo; esa es la razón por la cual la pila se dibuja verticalmente.

Casos especiales de transiciones:

1. ∆(q,a,s) = (q  , s). En este caso, el contenido de la pila no se altera.


2. ∆(q,a,s) = (q  , λ). El sı́mbolo  s  en el tope de la pila se borra y el control


finito pasa a escanear el nuevo tope de la pila, que es el sı́mbolo inmediata-


mente debajo de  s.

3. ∆(q,λ,s) = (q  , γ ).   Ésta es una transición  λ: el sı́mbolo sobre la cinta de

entrada no se consume y la cabeza lectora no se mueve a la derecha, pe-


ro el tope   s   de la pila es reemplazado por la palabra   γ . Para garantizar
el determinismo, ∆(q,a,s), con   a   ∈   Σ, y ∆( q,λ,s) no pueden estar si-
multáneamente definidos (de lo contrario el autómata tendrı́a una opción
no-determinista). Las transiciones  λ  en un AFPD permiten que el autóma-
ta cambie el contenido de la pila, sin consumir sı́mbolos sobre la cinta de
entrada.

Configuración o descripción instantánea.  Es una tripla (q,au,sβ ) que re-


presenta lo siguiente: el autómata está en el estado  q ,  au  es la parte no procesada
de la palabra de entrada, y la cabeza lectora está escaneando el sı́mbolo   a. La
cadena  sβ  es el contenido  total   de la pila; siendo  s  el sı́mbolo que está en el tope.
Para una palabra de entrada  w  ∈  Σ , la configuración inicial es (q 0 , w , s0).

Ésta es una notación muy cómoda: para representar el paso computacional de la


figura anterior escribimos simplemente

(q,au,sβ )    ( p, u, γβ )

Aquı́ el autómata utilizó la transición ∆(q,a,s) = ( p, γ ).


La notación ∗

(q,u,β )   ( p, v, γ )


significa que el autómata pasa de la configuración instantánea (q,u,β ) a la con-
figuración instantánea ( p, v, γ ) en cero, uno o más pasos computacionales.

Configuración de aceptación.  La configuración ( p, λ, β ), siendo  p  un estado


final o de aceptación, se llama configuración de aceptación. Esto significa que,
para ser aceptada, una palabra de entrada debe ser procesada completamente,
 

con el control finito en un estado de aceptación. La palabra  β  que queda en la


pila puede ser cualquier cadena de sı́mbolos en Γ . ∗

Lenguaje aceptado por un AFPD.  El lenguaje aceptado por un AFPD  M  se
define como


L(M ) :=  { w  ∈  Σ : (q 0 , w , s0)   ( p, λ, β ), p  ∈  F }

Es decir, una palabra es aceptada si se puede ir desde es la configuración inicial


a una configuración de aceptación, en cero, uno o más pasos.

Observaciones:

1. En el modelo AFPD se permite que la transición ∆(q,a,s) no esté definida,


para algunos valores  q   ∈  Q,   a  ∈  Σ,  s  ∈  Γ. En tal caso, el cómputo de la
palabra de entrada se aborta, es decir, el autómata se detiene.

2. No se debe confundir la tripla que aparece en la función de transición


∆(q,a,s) con la tripla (q,u,β ) que representa una configuración instantánea.

3. La definición de la función de transición ∆ requiere que haya por lo menos


un sı́mbolo en la pila. No hay cómputos con pila vacı́a.

4. No hay diagramas de estado (que sean útiles) para los AFPD ya que el
procesamiento de una palabra de entrada depende del contenido de la pila,
el cual puede cambiar en cada paso computacional.

     i i
Ejemplo   Diseñar un AFPD que acepte el lenguaje   {a b :   i   ≥   1}, sobre el
    alfabeto Σ =  { a, b}.

IDEA: Copiar las  a es en la pila y borrar una  a  por cada  b  que sea leı́da sobre la

cinta. Una palabra será aceptada si es procesada completamente y en la pila sólo


queda el sı́mbolo  s0 .
M   = (Σ, Q , q0  , F, Γ, s0 , ∆), donde

Σ =  { a, b}
Γ = {s0 , A , B }
Q  =  { q 0 , q 1, q 2 }
F   =  { q 2 }

y la función de transición está dada por:


 

∆(q 0, a , s0 ) = (q 0 , As0 )


∆(q 0, a , A) = (q 0 , AA)
∆(q 0, b , A) = (q 1 , λ)
∆(q 1, b , A) = (q 1 , λ)
∆(q 1, λ , s0 ) = (q 2 , s0 )

Podemos ilustrar el procesamiento de varias palabras de entrada. Sea, inicialmen-


te,  w  =  aaabbb.

(q 0 , aaabbb, s0 )      (q 0 , aabbb, As0 )    ( q 0 , abbb, AAs0 )    (q 0 , bbb, AAAs0 )
   (q 1 ,bb,AAs0 )    (q 1 ,b,As0)    (q 1, λ , s0 )   (q 2 , λ , s0 )

La última es una configuración de aceptación; por lo tanto  aaabbb  es aceptada.


Para la palabra de entrada  w  =  aabbb, se obtiene el siguiente procesamiento:

(q 0 , aabbb, s0 )    (q 0, abbb, As0 )    (q 0 , bbb, AAs0)    (q 1,bb,As0 )


 (q 1, b , s0 ) [cómputo abortado]

Para la palabra de entrada  w  =  aaabb, se tiene:

(q 0 , aaabb, s0 )      (q 0 , aabb, As0 )    ( q 0 , abb, AAs0 )   ( q 0 ,bb,AAAs0 )
   (q 1 ,b,AAs0 )    (q 1 ,λ,As0 )

A pesar de que se ha procesado completamente la palabra de entrada, la confi-


guración (q 0 ,λ,As0 ) no es de aceptación.
    
Ejemplo   Diseñar un AFPD que acepte el lenguaje de todas las palabras sobre
    el alfabeto Σ =  { a, b}  (diferentes de  λ) que tienen igual número de

a’s que de  b’s.


IDEA:  Acumular las   a’s o   b’s consecutivas en la pila. Si en el tope de la pila
hay una  A  y el autómata lee una  b, borrar la  A; similarmente, si en el tope de
la pila hay una  B  y el autómata lee una  a, borrar la  B . La palabra de entrada
será aceptada si es procesada completamente y en la pila sólo queda el sı́mbolo
s0 .
M   = (Σ, Q , q0  , F, Γ, s0 , ∆), donde

Σ =  { a, b}
Γ = {s0 , A , B }
Q  =  { q 0 , q 1, q 2 }
F   =  { q 2 }

y la función de transición está dada por:


 

∆(q 0 , a , s0 ) = (q 1, As0 )


∆(q 0 , b , s0 ) = (q 1, Bs 0 )
∆(q 1 , a , A) = (q 1, AA)
∆(q 1 , b , B ) = (q 1, BB )
∆(q 1 , a , B ) = (q 1, λ)
∆(q 1 , b , A) = (q 1, λ)
∆(q 1 , λ , s0 ) = (q 2, s0 )

Procesamiento de algunas palabras de entrada.


Palabra de entrada:   aabababb
(q 0 , aabababb, s0 )      (q 1 , abababb, As0 )    (q 1 , bababb, AAs0 )   ( q 1 , ababb, As0 )
   (q 1 , babb, AAs0 )   ( q 1 ,abb,As0 )    ( q 1 ,bb,AAs0 )
   (q 1 ,b,As0)    (q 1, λ , s0 )   (q 2 , λ , s0 )

Palabra de entrada:  bbbaba


(q 0 , bbbaba, s0 )      (q 1 , bbaba, Bs0 )    ( q 1 , baba, BBs0 )   ( q 1 ,aba,BBBs0 )
   (q 1 ,ba,BBs0)    (q 1,a,BBBs0)    (q 1,λ,BBs0 )

En este último caso, la palabra de entrada  bbbaba  es procesada completamente


pero la configuración final no es una configuración de aceptación.
     −1

Ejemplo   Diseñar un AFPD que acepte el lenguaje  L  =  { wcw :  w  ∈ {a, b} }.


    Aquı́ el alfabeto es Σ =  { a,b,c}.

IDEA. Acumular los sı́mbolos en la pila hasta que aparezca la c . Luego comparar
los sı́mbolos leı́dos con los almacenados en la pila, borrando en cada paso el tope
de la pila. La palabra de entrada será aceptada si es procesada completamente y
en la pila sólo queda el sı́mbolo  s 0 .
M   = (Σ, Q , q0  , F, Γ, s0 , ∆), donde

Σ =  { a, b}
Γ = {s0 , A , B }
Q  =  { q 0 , q 1, q 2 }
F   =  { q 2 }

y la función de transición está dada por:


 

∆(q 0 , a , s0 ) = (q 0 , As0 )


∆(q 0 , b , s0 ) = (q 0 , Bs 0 )
∆(q 0 , c , s0 ) = (q 2 , s0 ) (para aceptar la palabra c)
∆(q 0 , a , A) = (q 0 , AA)
∆(q 0 , a , B ) = (q 0 , AB )
∆(q 0 , b , A) = (q 0 , BA )
∆(q 0 , b , B ) = (q 0 , BB )
∆(q 0 , c , A) = (q 1 , A)
∆(q 0 , c , B ) = (q 1 , B )
∆(q 1 , a , A) = (q 1 , λ)
∆(q 1 , b , B ) = (q 1 , λ)
∆(q 1 , λ , s0) = (q 2 , s0 )

    
Ejercicios   Diseñar AFPD’s que acepten los siguientes lenguajes sobre
    Σ =  { a, b}

1.   L  =  { a2i bi :  i  ≥  1 }.

2.   L  =  { ai b2i :  i  ≥  1 }.
 

5.2. Autómatas de pila no deterministas


(AFPN)
Un  autómata finito de pila no determinista  (AFPN), esta definido por:
M   = (Σ, Q , q0  , F, Γ, s0 , ∆)

el cual consta de los mismos siete parámetros de un AFPD, pero la función de


transición ∆ es de la forma:
∆ :  Q × (Σ ∪ λ) × Γ  → ℘f (Q × Γ ). ∗

donde ℘f (Q × Γ ) es el conjunto de subconjuntos finitos de (Q × Γ ).


∗ ∗

∆(q,a,s) =  {( p1 , γ 1), ( p2 , γ 2 ), . . . , ( pk , γ k )}.


Su significado es: al leer el sı́mbolo  a  sobre la cinta de entrada, la cabeza lectora
o control finito, pasa (aleatoriamente) a uno de los estados   pi  y se mueve a la
derecha. Sobre la pila hace lo siguiente: borra el sı́mbolo  s  que está en el tope y
escribe la palabra  γ i  (palabra que pertenece a Γ ). ∗

En el modelo AFPN las transiciones  λ, ∆(q,λ,s), no tiene restricción alguna.


El lenguaje aceptado por un AFPN  M  se define como:

L(M ) :=  { w  ∈  Σ : existe por lo menos un cómputo (q 0 , w , s0 )   ( p, λ, β ), p  ∈  F }.


Es decir, una palabra  w  es aceptada si existe por lo menos un procesamiento de


w  desde la configuración inicial hasta una configuración de aceptación.
     i i
Ejemplo   Diseñar un AFPN que acepte el lenguaje   {a b :   i   ≥   0}, sobre el
    alfabeto Σ =  { a, b}.

Definimos un autómata similar al utilizado en el primer ejemplo de la sección 5.1,


pero con un estado menos.
M   = (Σ, Q , q0  , F, Γ, s0 , ∆), está dado por:

Σ =  {a, b}
Γ =  {s0, A , B }
Q  =  { q 0, q 1 }
F   =  { q 1 }

y la función de transición está dada por:


∆(q 0, a , s0) =   {(q 0 , As0 )}
∆(q 0, a , A) =   {(q 0 , AA)}
∆(q 0, b , A) =   {(q 0 , λ)}
∆(q 0, λ , s0 ) =   {(q 1 , s0 )}
 

En este autómata el no-determinismo se presenta por la presencia simultánea de


∆(q 0 , a , s0 ) y ∆(q 0 , λ , s0 ).
    
Ejemplo   Diseñar un AFPN que acepte el lenguaje de todas las palabras sobre
    el alfabeto Σ =  { a, b}  que tiene igual número de  a’s que de  b ’s.

M   = (Σ, Q , q0  , F, Γ, s0 , ∆) donde

Σ =  {a, b}
Γ =  {s0, A , B }
Q  =  { q 0, q 1 }
F   =  { q 1 }

y la función de transición está dada por:

∆(q 0 , a , s0 ) =   {(q 0, As0 )}


∆(q 0 , b , s0 ) =   {(q 0, Bs 0 )}
∆(q 0 , a , A) =   {(q 0, AA)}
∆(q 0 , b , B ) =   {(q 0, BB )}
∆(q 0 , a , B ) =   {(q 0, λ)}
∆(q 0 , b , A) =   {(q 0, λ)}
∆(q 0 , λ , s0 ) =   {(q 1, s0 )}

Al igual que en ejemplo anterior, el no-determinismo se presenta únicamente por


la presencia simultánea de ∆(q 0 , a , s0 ) y ∆(q 0 , λ , s0).
     1
Ejemplo   Diseñar un AFPN que acepte el lenguaje   L   =   {ww :   w   ∈   Σ },
− ∗

    donde Σ =  { a, b}.

on:  No es difı́cil ver que  L  es el lenguaje de los palı́ndromes de lon-
Observaci´ 
gitud par. Se puede demostrar (aunque no es fácil) que no existe ningún AFPD
que acepte este lenguaje. Esto muestra que los AFPD y AFPN no son compu-
tacionalmente equivalentes, en contraste con los modelos AFD y AFN, que si lo
son.
IDEA.  Modificar el autómata del tercer ejemplo de la sección 5.1, permitiendo,
a través del no determinismo, que el autómata “adivine” cuál es la palabra.
M   = (Σ, Q , q0  , F, Γ, s0 , ∆), donde

Σ =  { a, b}
Γ = {s0 , A , B }
Q  =  { q 0 , q 1, q 2 }
F   =  { q 2 }

y la función de transición está dada por:


 

∆(q 0 , a , s0) =   {(q 0 , As0 )}


∆(q 0 , b , s0 ) =   {(q 0 , Bs 0 )}
∆(q 0 , λ , s0) =   {(q 2 , s0 )}   (para aceptar  λ)
∆(q 0 , a , A) =   {(q 0 , AA), (q 1 , λ)}
∆(q 0 , a , B ) =   {(q 0 , AB )}
∆(q 0 , b , A) =   {(q 0 , BA )}
∆(q 0 , b , B ) =   {(q 0 , BB ), (q 1, λ)}
∆(q 1 , a , A) =   {(q 1 , λ)}
∆(q 1 , b , B ) =   {(q 1 , λ)}
∆(q 1 , λ , s0) =   {(q 2 , s0 )}
    
Ejercicios   Diseñar AFPD’s o AFPN’s que acepten los siguientes lenguajes:
    

1.   L  =  { ai b j :  i  
=  j }, sobre Σ =  {a, b}.

2.   L  =  { a2i b3i :  i, j  ≥  0 }, sobre Σ =  {a, b}.

3.   L  =  { ai b j ck :  i  + k  =  j }, sobre Σ =  { a,b,c}.

4.   L  =  { ai c j bi :  i, j  ≥  0 }, sobre Σ =  {a,b,c}.

5.   L  =  { ai b j :  i  ≤  j  ≤  2 i}, sobre Σ =  {a, b}.

6. El lenguaje de todas las palabras sobre Σ =   {a, b}   que tienen el doble


número de  a ’s que de  b’s.
 

5.3. Autómatas de pila y LIC (Parte I)


En el tercer ejemplo de la sección 5.2, se mencionó que los modelos de autómata
de pila AFPD y AFPN no son computacionalmente equivalentes, pero el modelo
AFPN corresponde a los lenguajes independientes del contexto. Este es un resul-
tado análogo al Teorema de Kleene y en esta sección consideraremos la primera
parte de dicha correspondencia.
5.3.1 Teorema.  Dada una GIC   G, existe un AFPN  M   tal que   L(G) =  L (M ).

on : Dada la gramática  G  = (Σ, V , S , P  ) se define el autómata:


Demostraci´ 
M  = (Σ, Q , q0  , F, Γ, s0 , ∆) estableciendo:

Q  =  { q 0 , q 1, q 2 }


F   =  { q 2 }
Γ = Σ ∪ V   ∪ {s0 }
La función de transición ∆ se define de la siguiente manera:
∆(q 0 , λ , s0 ) =  {(q 1 , Ss 0 )}   (coloca el sı́mbolo  S   en el tope de la pila)
Para cada variable  A  ∈  V  ,
∆(q 1 , λ , A) =  {(q 1 , w) :  A  →  w  es una producción de la gramática  G}.
Para cada sı́mbolo terminal  a  ∈  Σ,
∆(q 1 , a , a) =   {(q 1, λ)}
∆(q 1 , λ , s0 ) =   {(q 2, s0 )}

El autómata   M   está diseñado de tal forma que si   S   ⇒   w  es una derivación a
izquierda en la gramática  G, entonces existe un procesamiento

(q 0 , w , s0 )   (q 2 , λ , s0 )
que simula la derivación.

  ∗
Recı́procamente, puede demostrarse que si ( q 0 , w , s0 )   ( q 2 , λ , s0 ) entonces  S  ⇒  w
en la gramática  G.
Obsérvese que el autómata  M   tiene  siempre   tres estados.
    
Ejemplo   Sea  G  la gramática:
    
 S   →  aAbS   |  bBa  |  λ
G  : A  →  aA  |  a
B  →  bB  |  b

 

Según la construcción indicada arriba, el autómata  M   está dado por:


M  = (Σ, Q , q0  , F, Γ, s0 , ∆) donde

Q  =  { q 0 , q 1 , q 2 }


F   =  { q 2 }
Γ = {a,b,S,A,B,s0 }

La función de transición ∆ está dada por:

∆(q 0, λ , s0 ) =   {(q 1 , Ss 0)}


∆(q 1, λ , S )  =   {(q 1 , aAbS ), (q 1,bBa), (q 1 , λ)}
∆(q 1, λ , A) =   {(q 1 , aA), (q 1 , a)}
∆(q 1, λ , B ) =   {(q 1 , bB ), (q 1 , b)}
∆(q 1, a , a) =   {(q 1 , λ)}
∆(q 1, b , b) =   {(q 1 , λ)}
∆(q 1, λ , s0 ) =   {(q 2 , s0 )}

Podemos ilustrar la correspondencia entre derivaciones en  G  y procesamientos en


M  con la palabra  aabbba, la cual tiene la siguiente derivación a izquierda:

S  ⇒  aAbS  ⇒  aabS   ⇒  aabbBa  ⇒  aabbba

El autómata  M  simula esta derivación de la palabra  aabbba  ası́:

(q 0 , aabbba, s0)      (q 1, aabbba, Ss0 )    ( q 1 , aabbba, aAbSs0 )    ( q 1 , abbba, AbSs 0 )
   (q 1, abbba, abSs0 )    ( q 1 , bbba, bSs0 )    ( q 1 ,bba,Ss0 )
   (q 1, bba, bBas0 )    ( q 1 ,ba,Bas0 )    ( q 1 ,ba,bas0 )
   (q 1,a,as0 )    ( q 1 , λ , s0 )    ( q 2 , λ , s0 )

    
Ejemplo   La siguiente gramática   G   genera los palı́ndromes de longitud par
    sobre Σ =   {a, b}, es decir, el lenguaje   L   =   {ww 1 :   w   ∈   Σ }   del
− ∗

tercer ejemplo de la sección 5.2.


S   →  aS a  |  bS b  |  λ
Siguiendo el procedimiento del Teorema 5.3.1 podemos construir un AFPN que
acepta L ; este autómata es diferente del exhibido en el tercer ejemplo de la sección
5.2.
M  = (Σ, Q , q0  , F, Γ, s0 , ∆) donde

Q  =  { q 0 , q 1 , q 2 }


F   =  { q 2 }
Γ = {a,b,S,s0 }
 

La función de transición ∆ está dada por:

∆(q 0 , λ , s0 ) =   {(q 1 , Ss 0 )}
∆(q 1 , λ , S )  =   {(q 1 ,aSa), (q 1 ,bSb), (q 1 , λ)}
∆(q 1 , a , a) =   {(q 1 , λ)}
∆(q 1 , b , b) =   {(q 1 , λ)}
∆(q 1 , λ , s0 ) =   {(q 2 , s0 )}

    
Ejercicio   Construir un AFPN   M  que acepte el lenguaje generado por la si-
    guiente gramática:
 S   →  Aba  |  AB  |  λ
G  : A  →  aAS  |  a
B  →  bBA  |  λ

Encontrar una derivación a izquierda en  G  de la palabra  w  =  aaababa  y procesar
luego la palabra  w  con el autómata  M , simulando la derivación.

    
Ejercicio   Construir un AFPN   M  que acepte el lenguaje generado por la si-
    guiente gramática:
   S   →  AS A  |  AaA  |  aa
G  :
A  →  AbA  |  λ
Encontrar una derivación a izquierda en  G  de la palabra w  =  bab  y procesar luego
la palabra  w  con el autómata  M , simulando la derivación.
 

Capı́tulo 6

Máquinas de Turing

6.1. Máquinas de Turing (MT) como aceptado-


ras de lenguajes
Una   Máquina de Turing (MT),   M    = (Q, q 0 , F, Σ, Γ, b̄, δ ) , consta de siete
parámetros a saber:

1.   Q  es el conjunto (finito) de estados.


2.   q 0  ∈  Q  es el estado inicial.
3.   F  es el conjunto de estados finales o de aceptación,  ∅ =
  F  ⊆  Q .
4. Σ es el alfabeto de entrada.
5. Γ es el alfabeto de cinta.
6. b̄  ∈  Γ es el sı́mbolo “blanco”.
7.   δ   es la función de transición de la máquina:
δ  :  Q × Γ  −→  Q × Γ × {I, D}

δ  es una   funci´ 


on parcial , es decir, puede no estar definida en algunos ele-
mentos del dominio.  I  denota desplazamiento a izquierda y  D  denota des-
plazamiento a la derecha. La transición
δ (q, a) = ( p, b, T )

significa: estando en el estado  q , escaneando el sı́mbolo  a, la cabeza lectora


borra   a, escribe   b   y se mueve en el estado   p, ya sea a la izquierda (si el
“traslado”  T  es I) o a la derecha (si el “traslado”  T  es D).
 

Además, se tiene que Σ  ⊆  Γ y el sı́mbolo blanco b̄  pertenece al alfabeto Γ pero


no al alfabeto de cinta Σ.
Una Máquina de Turing  M  procesa palabras de entrada  w  ∈  Σ , que se colocan

en una cinta que es infinita en ambas direcciones. Para procesar una palabra
de entrada   w, el control finito o cabeza lectora de   M   está en el estado inicial
q 0  escaneando el primer sı́mbolo de   w. Las demás celdas o casillas de la cinta
contienen el sı́mbolo b̄.
Descripción o configuración instantánea.  Es una expresión de la forma
a1 a2 · · · ai
− 1 qa i · · · an

donde los a’s son sı́mbolos del alfabeto de cinta Γ, cada uno colocado en una casilla
individual, y  q  ∈  Q . Esta expresión representa el status actual del cómputo:

Es decir, la descripción instantánea   a1 a2 · · · ai 1 qa i · · · an   indica que el control


finito de   M   está en el estado   q   escaneando el sı́mbolo   ai . Se supone que las
casillas en las que no aparecen  a’s contienen el sı́mbolo blanco, b̄.
Ejemplos concretos de descripciones instantáneas son:

aabq 2 baaa
q 5 ababba
abb̄b̄aabq 0 bba

La configuración o descripción instantánea inicial, o simplemente  configuraci´ 


on 
inicial , es
q 0 w
siendo  w  la palabra de entrada, la cual se coloca en cualquier parte de la cinta de
entrada.
Paso computacional. El paso de una descripción instantánea a otra, por medio
de una transición definida por  δ , se denomina un paso computacional y se denota
por
u1 qu 2    v 1 pv2
 

Aquı́  u1 , u2 , v1 , v2  ∈  Γ y  p, q  ∈  Q . Un ejemplo concreto es


abbaq 2 ba    abbq 1 aca

en la cual la máquina utilizó la transición  δ (q 2 , b) = ( q 1 , c , I )  .


La notación ∗

u1 qu 2   v 1 pv2
significa que M  puede pasar de la descripción instantánea  u 1 qu 2  a la descripción
instantánea  v1 pv2  en cero, uno o más pasos computacionales.
Cómputos especiales.  Durante el cómputo o procesamiento de una palabra de
entrada hay dos situaciones especiales que se pueden presentar:

1. El cómputo termina porque en determinado momento no hay trancisión


definida.
2. El cómputo no termina; esto es lo que se denomina un “bucle infinito”. Esta
situación se representa con la notación

u1 qu 2  ∞

que indica que el cómputo que se inicia en la descripción instantánea  u 1 qu 2


no se detiene nunca.

Lenguaje aceptado por una MT.  Una palabra de entrada  w  es aceptada por
una MT   M   si hay un cómputo que se inicia en la configuración inicial   q 0 w   y
termina en una configuración instantánea  w1 pw2 , ( p  estado de aceptación) en la
cual  M   se  detiene completamente . El lenguaje  L (M ) aceptado por una MT  M   se
define entonces como

L(M ) :=

{w  ∈  Σ :  q 0 w   w 1 pw2 , p  ∈  F, w1 , w2  ∈  Γ , M  se detiene en la config.  w1 pw2 }


∗ ∗

La noción de aceptación para Máquinas de Turing es más flexible que para


autómatas: una palabra de entrada no tiene que ser leı́da en su totalidad pa-
ra que sea aceptada; sólo se requiere que la máquina se detenga completamente,
en un momento determinado, en un estado de aceptación.
Para tener un mayor control sobre las MT, en el modelo estándar se supone que
la máquina siempre se detiene cuando el control finito entra en un estado de
aceptación. Es decir, no se permiten transiciones  δ (q, a) cuando  q  ∈  F .
Las Máquinas de Turing originan las siguientes clases de lenguajes:
 

1.   L  es un lenguaje   recursivamente enumerable  si existe una MT   M  tal que


L(M ) =  L .

2.   L  es un lenguaje   recursivo  si existe una MT  M  tal que  L(M ) =  L  y  M   se
detiene con todas las palabras de entrada

Obviamente, todo lenguaje recursivo es recursivamente enumerable, pero la afir-


mación recı́proca no es, en general, válida.
Diagrama de estados o diagrama de flujo de una MT.  La función de tran-
sición  δ  de una MT se puede presentar como un diagrama de estados o diagrama
de flujo. Ası́, la transición  δ (q, a) = ( p, b, D) se representa por

     i i i
Ejemplo   Construir una MT   M  que acepte el lenguaje   L   =  {a b c :   i  ≥   0}
    sobre el alfabeto Σ =   {a,b,c}. Como se demostró en el capı́tulo

anterior,  L  no es LIC, es decir, no puede ser aceptado por ningún autómata de
pila.

Sea  M  la MT con parámetros

Σ =  {a,b,c}
Γ = {a,b,c,X,Y,Z, b̄}
Q  =  { q 0 , q 1 , q 2 , q 3 , q 4 , q 5 }
F   =  { q 5 }

y cuya función de transición está representada en el siguiente diagrama de estados:


 

La idea utilizada para el diseño de esta MT es la siguiente: el control finito cambia


la primera  a  por  X  y se mueve a la derecha hasta encontrar la primera  b, la cual
se sobre-escribe por una  Y   . Luego se mueve hacia la derecha hasta encontrar la
primera  c, la cual se cambia por  Z . El control finito retrocede entonces hacia la
izquierda en busca de la primera  X  que encuentre en su camino; este retorno se
hace en el estado  q 3 . La máquina avanza luego hacia la derecha hasta encontrar la
primera  a  que quede en la cinta y todo el proceso anterior se repite. Si la palabra
de entrada tiene la forma requerida, todas las  a´s serán reemplazadas por  X ´s,
las  b ´s por Y  ´s y las  c ´s por Z ´s. Una vez terminada la transformación, el control
finito se mueve hacia la derecha, en el estado  q 4 , hasta encontrar la primera celda
marcada con el sı́mbolo blanco b̄. La MT está diseñada de tal forma que si la
palabra de entrada no tiene la forma requerida, el procesamiento terminará en
un estado diferente del estado de aceptación  q 5 .
 

A continuación procesamos la palabra de entrada  w  =  aabbcc  ∈  L .

q 0 aabbcc    X q 1 abbcc    X aq 1 bbcc    X aY q 2 bcc    XaY bq 2 cc    XaY bq 3 bZc

  q 3 XaY bZc    X q 0 aY bZc    X Xq 1 Y bZc    XXY q 1 bZc    XX Y Y q 2 Zc

  XXY Zq 2 c    XXY q 3 ZZ    X q 3 XY ZZ     X Xq 0 Y Y ZZ 


  XXY q 4 Y Z Z    XXY Y ZZq 4 b̄    XX Y Y ZZ b̄q 5 b̄

    
Ejercicios   Diseñar MT’s que acepten los siguientes lenguajes sobre Σ =
    {a, b}. Escribir explı́citamente la idea utilizada en el diseño de la

máquina y hacer su diagrama de estados.

1.   L  =  { a2i bi :  i  ≥  1 }.

2.   L  =  { ai b2i :  i  ≥  1 }.

3.   L  =  { ai b j ai+ j :  i  ≥  0 , j  ≥  1 }.

4.   L  =  { w  ∈  Σ :  w  tiene el mismo número de  a´s que de  b´s}.


5.   L  =  { ww  :  w  ∈  Σ }. ∗
 

6.2. Variaciones del modelo estándar de MT


El modelo estándar de MT es susceptible de varias modificaciones que no alteran
la clase de lenguajes aceptado. Las variaciones que estudiaremos añaden recursos
computacionales a las máquinas, individualmente consideradas, pero la capacidad
de cómputo no se incrementa en general: los modelos son equivalentes al modelo
estándar. Indicaremos cómo se pueden simular los nuevos modelos por medio
máquinas estándares.
Recuérdese que en el modelo estándar, una MT siempre se detiene cuando el con-
trol finito entra en un estado de aceptación. Es decir, no se permiten transiciones
δ (q, a) cuando  q  ∈  F .

6.2.1. Control finito estacionario


Se puede permitir que el control finito no se mueva en un determinado paso com-
putacional, es decir, que no realice ningún desplazamiento. Este tipo de transición
tiene la forma:
δ (q, a) = ( p, b, N )
donde  a, b  ∈  Γ;  p, q  ∈  Q  y  N  representa un ‘No-desplazamiento’.
Simulación. La anterior transición se puede simular por medio de un movimiento
a la derecha seguido de un retorno a la izquierda. Ası́, para simular la transición
δ (q, a) = ( p, b, N ) utilizamos un estado auxiliar  q  y las transiciones:


δ (q, a) = ( q  , b , D)

δ (q  , s) = ( p, s, I ),   para todo sı́mbolo  s  ∈  Γ .

La directiva   N   también se puede simular con un movimiento a la izquierda se-


guido de un retorno a la derecha. En cualquier caso, concluimos que las MT con
transiciones estacionarias,   δ (q, a) = ( p, b, N ), aceptan los mismos lenguajes que
las MT estándares.

6.2.2. Estado de aceptación único


Toda MT se puede convertir, sin alterar el lenguaje generado, en una máquina con
un único estado de aceptación. Esto se consigue fácilmente añadiendo transiciones
desde los estados de aceptación originales hasta el único estado de aceptación  q u ,
el cual es un estado nuevo. Las transiciones necesarias son:

δ (q, a) = ( q u , a , N )  ,   para todo  q   estado de aceptación original y todo  a  ∈  Γ .


 

De esta manera, se puede considerar que toda MT tiene un único estado inicial y
un único estado de aceptación. Este es un hecho importante para la codificación
binaria de máquinas de Turing (sección 6.4).

6.2.3. Máquina de Turing con cinta dividida en pistas


En el modelo multi-pista, la cinta está dividida en un número finito  k  de pistas.
La función de transición adquiere la siguiente forma:

δ (q, (a1 , a2 , a3 , . . . , ak )) = ( p, (b1 , b2 , b3 , . . . , bk ), T )

donde los  ai  y los  bi  son sı́mbolos del alfabeto de cinta Γ y  T   es una traslación
I o D o N. En un paso computacional, el control finito cambia simultáneamente
el contenido de las   k   pistas de la celda escaneada y realiza luego uno de los
desplazamientos D,  I   o  N .

Simulación.   Las Máquinas de Turing que actúan sobre una cinta dividida en
k  pistas aceptan los mismos lenguajes que las MT estándares. Para concluir tal
afirmación, basta considerar el modelo multi-pistas como una MT normal en la
que el alfabeto de cinta está formado por el conjunto de  k -uplas (s1 , s2 , . . . , sk ),
donde los   si   ∈  Γ. Es decir, el nuevo alfabeto de cinta es el producto cartesiano
Γk = Γ × Γ × · · · × Γ (k  veces).

6.2.4. Máquina de Turing con múltiples cintas


En el modelo multi-cintas, hay  k  cintas diferentes, cada una dividida en celdas o
casillas. La cadena de entrada se coloca en la primera cinta; las demás cintas están
llenas de blancos. En un paso computacional, el control finito cambia el contenido
de la celda escaneada en cada cinta y realiza luego uno de los desplazamientos D ,
I  o  N . Esto se hace de manera independiente en cada cinta; el controlo finito tiene
 

entonces   k   “visores” que actúan independientemente en cada cinta. La función


de transición adquiere la siguiente forma:

δ (q, (a1 , a2 , a3 , . . . , ak )) = ( p, (b1, b2 , b3 , . . . , bk ), (T , T , . . . , T )  )

donde los   ai   y los   bi   son sı́mbolos del alfabeto de cinta Γ, y   T   es una de las
traslaciones  I   o  D  o  N .

Simulación.  A pesar de que el modelo multi-cinta parece, a primera vista, más


poderoso que el modelo estándar, resulta que una MT con múltiples cintas se
puede simular con una MT multi-pista. Una MT con  k  cintas se simula con una
MT que actúa sobre una única cinta dividida en 2k  + 1 pistas. Cada cinta de
la máquina multi-cinta da lugar a 2 pistas en la máquina simuladora: la pista
superior simula la cinta propiamente dicha y la inferior tiene todas sus celdas en
blanco, excepto una, marcada con un sı́mbolo especial  X , que indica la posición
actual del visor de la máquina original en dicha cinta. La pista adicional de
la máquina simuladora se utiliza para marcar, con un sı́mbolo especial   Y   , las
posiciones más a la izquierda y más a la derecha del control finito en la máquina
original. Para simular un solo paso computacional, la nueva máquina requiere
hacer múltiples recorridos a izquierda y a derecha, actualizando el contenido de
 

las pistas y la posición de los marcadores   X   y   Y   . Omitiremos los detalles más
especı́ficos de este proceso de simulación.
     i i i
Ejemplo   MT con 2 cintas que acepta el lenguaje   L   =   {a b c :   i   ≥   1}. La
    idea
implementada para esta MT es: se copia en la segunda cinta
una   X   por cada   a   leı́da. Al aparecer las   b’s se avanza hacia la derecha en la
primera cinta y hacia la izquierda en la segunda. Al aparecer las c’s se avanza
hacia la derecha en ambas cintas. Si la palabra de entrada tiene la forma  ai bi ci ,
se detectará simultámeamente el sı́mbolo en blanco b̄  en ambas cintas.
La función de transición es:

δ (q 0 , (a, b̄)) = ( q 1 , (a, D), (X, D ))


δ (q 1 , (a, b̄)) = ( q 1 , (a, D), (X, D ))
δ (q 1 , (b, b̄)) = ( q 2 , (b, N ), (b̄, I ))
δ (q 2 , (b, X )) = ( q 2 , (b, D ), (X, I ))
δ (q 2 , (c, b̄)) = (q 3 , (c, N ), (b̄, D ))
δ (q 3 , (c, X )) = (q 3 , (c, D), (X, D ))
δ (q 3 , (b̄, b̄)) = (q 4 , (b̄, b̄), (N, N ))

    
Ejercicio   Diseñar Máquinas de Turing multi-cintas que acepten los siguientes
    lenguajes. En cada caso, escribir explı́citamente la idea utilizada en
el diseño.

1.   L  =  { ai b j ai b j :  i, j  ≥  0 }.


2.   L  =  { ai b2i ai :  i  ≥  0 }.

6.2.5. Máquinas de Turing no deterministas (MTN)


En el modelo no determinista se permite que, en un paso computacional, el control
finito escoja entre varias transiciones posibles. Concretamente, la función  δ   tiene
la siguiente forma:

δ (q, a) =  { ( p1 , b1 , T ), ( p2 , b2 , T ), . . . , ( pk , bk , T ))}

donde los  ai  y los  bi  son sı́mbolos del alfabeto de cinta Γ, los  pi  son estados y  T 
es una de las traslaciones  I   o  D  o  N .
La noción de aceptación de las MTN es similar a la de los modelos no determi-
nistas considerados antes: una palabra de entrada  w  es aceptada si existe  por lo
menos un c´  omputo  a partir de la configuración inicial  q 0 w  que termina en la con-
figuración  u1 pu2, con  p  ∈  F . Como antes, los cómputos en los cuales la máquina
 

se detiene en un estado de no aceptación, o que no se detienen, son irrelevantes


para la aceptación.
Simulación.  Una MTN no tiene mayor poder computacional que una MT es-
tándar, es decir, una MTN se puede simular con una MT, como lo explicaremos
a continuación. Sea   M   una MTN; se bosquejará la construcción de una MT
M  tal que   L(M ) =   L(M  ). Sea   n   el número máximo de transiciones en los
 

conjuntos δ (q, a), considerando todo  a  ∈  Γ,  q  ∈  Q . Para cada  a  ∈  Γ y  q   ∈  Q , las
transiciones contenidas en  δ (q, a) se pueden numerar entre 1 y  n . Si hay menos de
n  transiciones en un  δ (q, a) particular, se repite arbitrariamente una de de ellas
hasta completar  n. Una vez establecida esta numeración, cada transición posible
se puede considerar como un par de la forma (δ (q, a), i) con 1  ≤  i  ≤  n .
La MT   M  que simulará a   M   tendrá tres cintas. La primera cinta almacena la

entrada, la segunda genera de forma sistemática todas las secuencias finitas de


números entre 1 y   n: primero las secuencias de longitud 1, luego las secuencias
de longitud 2, luego las de longitud 3 y ası́ sucesivamente (no es difı́cil imaginar
una MT auxiliar que realice esta generación sistemática de secuencias). Para cada
secuencia generada en la cinta 2,  M  copia la cadena de entrada sobre la cinta 3 y

simula sobre ella la computación que hace la máquina original M . Si  M  se detiene

en un estado de aceptación, entonces tanto   M   como   M  aceptan la entrada. Si


la entrada es aceptada por   M   existirá una computación que se detiene en un


estado de aceptación y, eventualmente,  M  encontrará y simulará tal computación.

Recuérdese que una MT estándar acepta únicamente cuando el procesamiento se


detiene en un estado de aceptación y que no hay transiciones desde los estados
de aceptación.
 

6.3. Simulación de autómatas AFD y AFPN por


medio de máquinas de Turing
En esta sección veremos que los modelos de autómatas AFD y AFPN se pueden
simular con máquinas de Turing.
Simulación de un AFD.  Sea  M  = (Q, q 0 , F, Σ, δ ) un AFD. Se puede construir
una MT  M  tal que  L(M ) =  L (M  ) definiendo  M  = (Q , q 0 , F  , Σ, Γ, b̄, δ  ) como
     

  
Q =  Q ∪ {q  },   donde  q  es un estado nuevo.
Γ = Σ ∪ {b̄}.
 
F  = { q  }.

δ  (q, s) = (δ (q, s), s , D),   para  q  ∈  Q, s  ∈  Σ .
 
δ  (q, b̄) = (q  , b̄, N ),   para todo  q  ∈  F.

La MT M  se detiene para cualquier entrada  w . Puesto que los lenguajes regulares

son precisamente los aceptados por los AFD, concluimos el siguiente teorema.
6.3.1 Teorema.  Un lenguaje regular es un lenguaje recursivo.

    
Ejercicio   Simular el siguiente AFD por medio de una MT M .
    

Hacer el diagrama de estados de la máquina  M .

Simulación de un AFPN.   Sea   M   = (Q, q 0 , F, Σ, Γ, s0 , ∆) un AFPN. Para


simular a   M   se puede construir una MTN   M  que actúe sobre dos cintas: la

primera cinta simula la cinta de entrada y la segunda simula la pila del autómata.
Se define  M  = (Q , q 0 , F  , Σ, Γ , b̄, δ ) haciendo
   

  
Q =  Q ∪ {q  },   donde  q  es un estado nuevo.

Γ = Σ ∪ Γ ∪ {b̄}
 
F  = { q  }

La MT  M  coloca inicialmente el sı́mbolo inicial de pila sobre la cinta 2:


δ (q 0 , (s, b̄)) = ( q 0 , (s, s0 ), (N, N )),   para cualquier  s  ∈  Γ .


 

Una transición de la forma ∆(q,a,s) = ( p, γ ) se simula con varias transiciones: se
trata de lograr que  M   sobre-escriba el sı́mbolo  s  en la cinta 2, que representa el
tope de la pila, por la cadena  γ . Por ejemplo, la transición ∆(q,a,s) = ( p, a1 a2a3 )
se simula añadiendo un estado auxiliar  q e  junto con las transiciones

δ (q, (a, s)) = ( q e , (a, N ), (a3 , D))


δ (q e , (a, b̄)) = (q e , (a, N ), (a2 , D))
δ (q e , (a, b̄)) = (q e , (a, D), (a1 , N ))

Para no alterar el lenguaje aceptado, cada transición de este tipo requiere la


adición de un estado especial   q e  diferente. Una transición   λ   del autómata   M ,
∆(q,λ,s) = ( p, γ ) se simula de manera similar: la posición del control finito y el
contenido de la primera cinta no cambian durante el procedimiento. Finalmente,
se debe añadir la transición

δ (q, (b̄, s)) = ( q  , (b̄, s), (N, N )),   para todo  s  ∈  Γ y todo  q  ∈  F .

Lo anterior muestra que el comportamiento del autómata  M  se simula comple-


tamente con la MT  M  y se tiene que  L (M ) =  L (M  ). Nótese que  M  no necesa-
  

riamente se detiene con cada cadena de entrada  w. Por consiguiente, solamente
se puede concluir —por ahora— lo que se afirma en el siguiente teorema.

6.3.2 Teorema.  Un LIC es un lenguaje recursivamente enumerable.

    
Ejercicio   Simular por medio de una MT M  el autómata de pila (primer ejem-
 de la sección 5.1) que acepta el lenguaje  {ai bi :  i  ≥  1 }, sobre el
   plo

alfabeto Σ =  {a, b}, y cuya función de transición es:

∆(q 0 , a , s0 ) = (q 0, As0 )


∆(q 0 , a , A) = (q 0, AA)
∆(q 0 , b , A) = (q 1, λ)
∆(q 1 , b , A) = (q 1, λ)
∆(q 1 , λ , s0 ) = (q 2, s0 )

¿Se detiene  M  con todas las palabras de entrada?


 

6.4. Codificación de Máquinas de Turing


Toda MT se puede codificar como una secuencia finita de ceros y unos. Para
simplificar la codificación, suponemos que toda MT tiene un único estado inicial,
denotado q 0 , y un único estado final, denotado q 1  (en la sección 6.2.2 se mostró que
esta modificación siempre se puede hacer, sin alterar los lenguajes aceptados). Los
sı́mbolos del alfabeto de cinta

Γ =  {s1 , s2 , . . . , sk , sk+1 , . . . , sm }
    
sı́mbolos de Σ

se codifican como secuencias de unos;  s1  representa el sı́mbolo blanco b̄:

Sı́mbolo Codificación
s1  (sı́mbolo b̄) 1
s2   11
..   ..
. .
sm   · · · 1 
11 
 
m   veces

Los estados de la MT Q  =  { q 0 , q 1 , q 2 , . . . , qn  } se codifican también como secuencias
de unos:
Estado Codificación
q 0  (inicial) 1
q 1  (final) 11
..   ..
. .
q n   11 · · · 1
    
n+1 veces

Las directivas de movimiento   D,   I   y   N   se codifican con 1, 11 y 111, respecti-


vamente. Una transición   δ (q, a) = ( p, b, N ) se codifica usando ceros como sepa-
radores para los estados y los sı́mbolos del alfabeto de cinta. Ası́, la transición
δ (q 3 , s2 ) = ( q 5 , s3 , D) se codifica como

0111101101111110111010

En la codificación de una transición cualquiera  δ (q, s) = (q  , s , T ) aparecen exac-


 

tamente seis ceros rodeados por secuencias de unos.


Puesto que solamente hay un estado inicial y uno de aceptación, para codificar una
MT basta presentar la secuencia binaria de la función de transición  δ , codificada
siguiendo el anterior esquema.
 

    
Ejemplo   Considérese la siguiente MT que acepta el lenguaje  a+ b:
    

δ (q 0 , a) = ( q 2 , a , D )
δ (q 2 , a) = ( q 2 , a , D )
δ (q 2 , b) = (q 3 , b , D)
δ (q 3 , b̄) = (q 1 , b̄, N )

Si los sı́mbolos del alfabeto de cinta b̄,  a  y  b  se codifican con 1, 11 y 111, respec-
tivamente, la anterior MT adquiere la siguiente codificación como secuencia de
ceros y unos:

010110111011010011101101110110100111011101111011101001111010110101110

Es claro que una secuencia de ceros y unos que represente una MT se puede de-
codificar. De hecho, es fácil concebir un algoritmo que determine si una secuencia
binaria finita dada es o no una MT y que la decodifique en caso afirmativo.
Enumeración de Máquinas de Turing.  Podemos diseñar un algoritmo simple
para enumerar, es decir, hacer una lista (infinita) de todas las MT que actúen
sobre un alfabeto de cinta Σ dado. Se generan de manera sistemática todas las
sucesiones binarias (primero las secuencias de longitud 1, luego las secuencias
de longitud 2, luego las de longitud 3 y ası́ sucesivamente). Para cada secuencia
binaria generada se determina si codifica o no a una MT; la primera MT detectada
se llama  M 1 , la siguiente  M 2 , y ası́ sucesivamente. Este algoritmo produce la lista
o enumeración   M 1 ,   M 2 ,   M 3 ,   . . .  de todas las MT sobre Σ. Por consiguiente, el
conjunto de todas las máquinas de Turing (sobre un alfabeto dado) es enumerable.
    
Ejercicio   Sea  M  la MT definida por el siguiente diagrama de estados:
    

1. ¿Cuál es el lenguaje aceptado por  M ?


 

2. Convertir  M  en una MT  M  con un único estado de aceptación.


3. Codificar la máquina  M  siguiendo el esquema presentado en esta sección


(los sı́mbolos del alfabeto de cinta b̄,   a   y   b   se codifican con 1, 11 y 111,


respectivamente).

    
Ejercicio   La siguiente secuencia binaria codifica una MT M , siguiendo el
    esquema
de codificación presentado en esta sección. Decodificar la
máquina  M   y determinar  L(M ).

  sigue
01011011101101001110111011110111010011110111011110111010 −−→
0111101101111101101001111010110101110
 

6.5. Máquina de Turing universal


La máquina de Turing universal  M   simula el comportamiento de cualquier otra
u

MT, si esta última se presenta codificada.   M    es una MT con tres cintas cuyo
u

alfabeto de cinta es  {0, 1}. La primera cinta contiene la codificación de una MT


M   cualquiera, siguiendo el esquema mencionado en la sección 6.4. El control finito
se coloca en el 0 inicial de la máquina codificada. La segunda cinta contiene la
codificación de la entrada  w  de  M ; la cabeza lectora se coloca inicialmente en el
primer 1 de la codificación de  w . La tercera cinta se usa para almacenar el estado
actual de  M .
M   utiliza la información de las cintas 2 y 3 para buscar en la cinta 1 la transición
u

que sea aplicable. Si encuentra una transición aplicable,  M   simula en la cinta 2
u

lo que harı́a   M . Si después de escanear la cinta 1,   M   no encuentra una transi-
u

ción aplicable, la máquina se detiene, como lo harı́a  M . Después de realizar una
transición, el control finito regresa, en la primera cinta, al 0 inicial; en las demás
cintas el control permanece estacionario. Si al procesar una entrada  w ,  M   se de-
u

tiene en el único estado de aceptación de  M , entonces la cadena  w  será aceptada.


Por consiguiente,  M    tiene también un único estado de aceptación,  q 1 , que es el
u

mismo estado de aceptación de cualquier otra MT.


 

6.6. Problemas indecidibles o irresolubles


Al final de la sección 6.4 mencionamos que, dado un alfabeto de cinta Σ, existe
un algoritmo para enumerar todas las MT sobre Σ: M 1 , M 2 , M 3 , . . .. Cada MT
aparece en la lista codificada como una secuencia binaria. Puesto que Σ es finito, el
conjunto Σ de todas las palabras sobre Σ es también enumerable en la forma Σ =
∗ ∗

{w1 , w2 , w3 , . . .}  (en la lista aparece primero la palabra vacı́a, luego las palabras
de longitud 1, luego las de longitud 2 y ası́ sucesivamente, todas codificadas
como secuencias binarias). Utilizando estas enumeraciones es posible construir
un lenguaje que no es recursivamente enumerable.

6.6.1 Teorema.   El lenguaje 

L =  {wi  :  wi  no es aceptada por   M i }

no es RE (recursivamente enumerable), es decir, no es aceptado por ninguna MT.

Demostraci´  on : Razonamos suponiendo que L sı́ es RE para llegar a una contradic-


ción. Si L fuera RE serı́a aceptado por una MT M k , con respecto a la enumeración
de máquinas de Turing ya descrita. Es decir,  L = L(M k ). Se tendrı́a entonces

wk  ∈  L =⇒  wk  no es aceptada por M k  =⇒ w k  ∈/  L(M k ) = L.


wk  ∈
/  L =⇒  wk  ∈
/  L(M k ) =⇒ w k  es aceptada por M k  =⇒ w k  ∈  L.

Por lo tanto, w k  ∈  L  ⇐⇒  wk  ∈


/  L, lo cual es una contradicción.

6.6.1. Problema de la parada o problema de la detención


Este famoso problema (halting problem , en inglés), considerado por Turing en
1936, consiste en preguntar si existe un algoritmo para el siguiente problema de
decisión:

Dada una MT M  cualquiera, sobre el alfabeto de cinta Σ, y una cadena


w  ∈  Σ , ¿se detiene M  al procesar la palabra de entrada w?

Una instancia   (o caso) de este problema es una pareja (M, w) formada por una
MT M  y una cadena w  ∈  Σ dadas, ambas codificadas según el esquema de codi-

ficación de la sección 6.4. Obsérvese que hay infinitas instancias para el problema;
el algoritmo debe ser aplicable uniformemente a todas ellas y terminar con una
de las conclusiones ‘SI’ o ‘NO’.
Si se quiere ser más precisos con respecto a la noción de algoritmo, el problema
de la parada se puede enunciar con respecto máquinas de Turing, en vez de
 

‘algoritmos’ general. En tal caso, el problema adquiere la siguiente forma: ¿existe


una MT que resuelva el problema de la parada? Esta MT tendrá su propio alfabeto
de cinta (que incluye a Σ junto con otros sı́mbolos auxiliares) y debe procesar
una instancia (M, w), formada por codificaciones binarias de una MT M   y una
cadena w  ∈  Σ dadas, deteniéndose en un estado de aceptación (que representa

la decisión ‘SI’) o un estado de rechazo (que representa la decisión ‘NO’).

6.6.2 Teorema.  El problema de la parada es indecidible (o irresoluble), es decir,


no existe una MT que resuelva el problema.

Demostraci´ on : Razonamos por contradicción: suponemos que existe una MT  M


que procesa todas las entradas (M, w) y se detiene siempre en un estado de
‘aceptación’ o en uno de ‘rechazo’. La ‘aceptación’ significa que la MT   M   se
detiene con la entrada   w, y el ‘rechazo’ significa que   M   no se detiene con la
entrada w. Esta suposición permitirá construir una MT M L  que acepte el lenguaje
L del Teorema 6.6.1, de lo cual se deducirı́a que L es RE, contradiciendo ası́ la
conclusión de dicho teorema.
Con una entrada w  ∈  Σ , la máquina M L  procede ası́: enumera sistemáticamente

las palabras w1 , w2 , w3 , . . . hasta que encuentra un k tal que w = wk . Luego genera


la MT M k  e invoca (o simula) a  M  con entrada (M k , wk ). Entonces, si  M  decide
que M k  no se detiene con la entrada wk , M L  acepta a w = w k . Si, por el contrario,
M  decide que M k  se detiene con la entrada w k , M L  invoca (o simula) la máquina
de Turing universal M u . Con entrada (M k , wk ), la máquina de Turing universal se
detiene determinando si M k  acepta o no a w k . Si M k  acepta a w k , M L  se detiene
y rechaza a w; si M k  rechaza a w k , M L  se detiene y acepta a  w. Esto muestra que
L(M L ) = L, lo cual contradice el Teorema 6.6.1.

6.6.2. Técnica de reducción de problemas


Se puede concluir que muchos problemas de decisión son irresolubles reduciéndo-
los a problemas que se sabe de antemano que son indecidibles. Para ser más
precisos, supóngase que ya se sabe que un cierto problema  P 1  es indecidible (co-
mo el problema de la parada, por ejemplo). Podrı́amos concluir que un problema
dado P 2  es indecidible razonando por contradicción: si P 2  fuera decidible tam-
bién lo serı́a P 1 . Esta contradicción mostrará que el problema   P 2  no puede ser
decidible.
Para utilizar esta “técnica de reducción”, es necesario diseñar (o concebir) una
MT M  que sea capaz de convertir una instancia cualquiera w  del problema P 1

en instancias del problema P 2  de tal manera que, al aplicar la supuesta MT M


que resuelve el problema  P 2 , se llegue a una decisión, SI o NO, del problema P 1
para la entrada  w. La siguiente gráfica ilustra este procedimiento; el diseño de
 

M  , que aparece representada por el rectángulo a trozos, es la parte esencial del


procedimiento de reducción.

    
Ejemplo   Problema de la cinta en blanco.
    

Dada una MT M   cualquiera, sobre el alfabeto de cinta Σ, ¿se detiene


M   al iniciar su funcionamiento con la cinta en blanco (todas las celdas
marcadas con b̄)?

Se puede mostrar que este problema es irresoluble reduciéndolo al problema de


la parada; la gráfica siguiente ilustra el procedimiento.

Se asume que existe una MT  M  que resuelve el problema de la cinta en blanco;


podrı́amos entonces resolver el problema de la parada. Sea (M, w) una instancia
arbitraria (M   y   w   están codificadas); construimos una MT  M  que realice las

siguientes acciones.   M  comienza con la cinta en blanco, luego escribe  w   en la



 

cinta y a continuación simula el procesamiento que hace M  con entrada w. Como


M  inicia su procesamiento con la cinta en blanco, podemos ejecutar la máquina

M, con entrada M  .  M  decide si M  se detiene o no y, por lo tanto, se obtiene


 

una decisión sobre si M  se detiene o no con entrada w. Conclusión: si el problema


de la cinta en blanco fuera decidible, también lo serı́a el problema de la parada.

    
Ejercicios   Mediante la técnica de reducción de problemas, mostrar que los
    siguientes problemas de decisión son irresolubles:

1. Dada una MT M   ¿es L(M ) = ∅? Ayuda: reducirlo al problema de la cinta


en blanco.

2. Dada una MT M   ¿es L(M ) = Σ ? ∗

3. Dada una MT  M   = (Q, q 0 , F, Σ, Γ, b̄, δ ) cualquiera y un sı́mbolo   a   ∈   Γ,
¿escribirá M  alguna vez el sı́mbolo a sobre la cinta si M  inicia su funciona-
miento con la cinta en blanco?

4. Dadas dos MT M 1  y M 2  cualesquiera, ¿es L(M 1) = L(M 2 )?

También podría gustarte