Está en la página 1de 130

LENGUAJES Y AUTOMATAS

DR. RAMON ZATARAIN


CABADA
INDICE
1. INTRODUCCION
2. GRAMATICAS
3. AUTOMATAS FINITOS
4. MAQUINAS DE TURING
5. GRAMATICAS Y AUTOMATAS
6. APLICACIONES A LENGUAJES
1. INTRODUCCION
1.1 CONJUNTOS FINITOS E INFINITOS
Los conjuntos
X={1,2,3}
Y={a,b,c,d}
se definen de una manera explcita. Los conjuntos
que contienen un nmero finto muy largo de
miembros o un nmero infinto de miembros se
definen de manera implcita.
Ejemplo: El conjunto de todos los cuadrados
perfectos es definido como:
{n | n=m
2
para algn nmero natural m}

El conjunto vaco se representa por 0, y es
el conjunto que no tiene miembros, o sea
que 0 = { }


Una cadena de un conjunto X es una secuencia finta de
elementos de X. Las cadenas son objetos fundamentales
usados en la definicin de lenguajes. El conjunto de elementos
de donde las cadenas son producidas son llamados alfabetos
de el lenguaje. Un alfabeto consiste de un conjunto finto de
objetos no divisibles. El alfabeto de un lenguaje se representa
por S.
El alfabeto de un lenguaje natural como el espaol consiste
de las palabras de el lenguaje.

Ejemplo: Sea ={a,b,c}. Las siguientes son cadenas de ese
alfabeto: abc, ccb, cab,aaaabbbccc

Comnmente los elementos de un alfabeto se representan
por caracteres nicos como letras (a,b,c) o dgitos (1,2,3).
La cadena que contiene cero elementos es llamada cadena
nula o vaca y se representa por l.
La concatenacin de dos cadenas u y v, escrita uv, es pegar
las dos cadenas para formar una nueva.

Ejemplo: Sea u=ab , v=ca y w=bb. Entonces
uv=abca vw=cabb
(uv)w=abcabb u(vw)=abcabb
El resultado de la concatenacin de u,v y w es independiente
de el orden en que las operaciones son ejecutadas. Matema-
ticamente esta propiedad es conocida como asociatividad.

La longitud o tamao de una cadena w es el nmero de
elementos que contiene la cadena.

Ejemplo: La cadena abcdef tiene una longitud de 6.

Una subcadena u de la cadena v existe si existen las
cadenas x y y de tal forma que v = xuy. Esto quiere decir
Que u ocurre dentro de v.
Un prefijo de v es una subcadena u en donde x es la
cadena vaca en la descomposicin de v. Eso quiere decir
que v=uy. Similarmente, u es un sufijo de v si v=xu.

Ejemplo: ab es un prefijo de la cadena abcdef y ef es un
sufijo de la misma cadena.
1.2 Representacin finta del lenguaje

Un lenguaje consiste de un grupo de cadenas de un alfabeto.
Usualmente ciertas restricciones se aplican a las cadenas de
el lenguaje. Por ejemplo el lenguaje Espaol consiste de
todas las cadenas de palabras que nosotros llamamos oraciones.
No todas las combinaciones de palabras forman oraciones. De
alli que un lenguaje consiste de un subconjunto de el conjunto
de todas las posibles cadenas que se pueden formar de el
alfabeto.

Ejemplo: El lenguaje L de cadenas de el alfabeto {a,b} en
donde cada cadena comienza con una a y tiene longitud par.
Las cadenas aa, ab, aaaa, abbb, abab, abbbaaba forman parte
de ese lenguaje.
El lenguaje anterior se puede definir recursivamente como:

i) Base: aa, ab son miembros de L.
ii) Paso recursivo: Si u es miembro de L, Entonces
uaa, uab, uba, ubb son miembros de L.
iii) Cierre (Closure): Una cadena u es miembro de L solo si puede
ser obtenida de los elementos base por un nmero finto
de aplicaciones del paso recursivo.
Ejemplo: El lenguaje L consiste de cadenas del alfabeto {a,b}
en donde cada ocurrencia de b es inmediatamente precedida
por una a. Por ejemplo, l, a, abaab estan en L y bb, bab, abb
no estan en L.

i) Base: l es miembro de L.
ii) Paso recursivo: Si u es miembro de L, Entonces
ua, uab son miembros de L.
iii) Cierre (Closure): Una cadena u es miembro de L solo si puede
ser obtenida de los elementos base por un nmero finto
de aplicaciones del paso recursivo.

Definiciones recursivas como la anterior son una herramienta
para definir las cadenas de un lenguaje. Sin embargo esta tcnica
no es suficiente para definir lenguajes complejos como los
Lenguajes de Programacin.

Otra tcnica para construr lenguajes es usar operaciones de
conjuntos (sets) para construr, desde conjuntos mas simples
conjuntos complejos de cadenas.

Por ejemplo La concatenacin de los lenguajes X y Y, denotada
XY, es el lenguaje
XY = {uv | u es miembro de X y v es miembro de Y}

La concatenacin de X consigo mismo n veces es denotada
como X
n
. X
0
es definida como {l}.


Ejemplo: Sea X = {a,b,c} y Y = {abb, ba}. Entonces

XY = {aabb,babb,cabb,aba,bba,cba}
X
0
= {l}
X
1
= X = {a,b,c}
X
2
= XX = {aa,ab,ac,ba,bb,bc,ca,cb,cc}
X
3
= X
2
X = {aaa,aab,aac,aba,abb,abc,aca,acb,acc,
baa,bab,bac,bba,bbb,bbc,bca,bcb,bcc,
caa,cab,cac,cba,cbb,cbc,cca,ccb,ccc}

Una operacin importante es el Kleene Star, denotada para
un conjunto X como X*, que no es otra cosa que la concate-
Nacin de del mismo lenguaje.
Lo anterior tambin es representado como
v
X* = U X
i
i=0
Contien todos loas cadenas construdas desde X incluyendo la
cadena nula.

Si no se incluye la cadena vaca entonces tenemos a
v
X
+
= U X
i
i=1
El conjunto de cadenas no nulas construdas desde X.

Ejemplo: El lenguaje L = {a,b}*{bb}{a,b}* consiste de las
cadenas del alfabeto {a,b} que contiene la subcadena bb. La
concatenacin de el conjunto {bb} asegura la presencia de
bb en cualquier cadena en L. Los conjuntos {a,b}* permiten
cualquier nmero de as y bs, en cualquier orden, y que
preceden y siguen la ocurrencia de bb.

Las cadenas bb, abba, ababbbabab, bbaaaa, aaaabb son
ejemplos de cadenas de el lenguaje L.


Ejercicios.

Sea X = {aa,bb} y Y = {l,b,ab}
Lista las cadenas en el conjunto XY.
Lista las cadenas de el conjunto Y* de longitud tres o menos.
Cuntos cadenas de longitud 6 existen en X* ?

Dar un lenguaje L sobre el alfabeto {a,b} que contenga
todas las cadenas que comienzan con aa y terminan con bb.

Sea L
1
= {aaa}*, L
2
= {a,b}{a,b}{a,b}{a,b} y L
3
= L
2
*.
Describe las cadenas que estan en los lenguajes L2, L3 y
L
1
L
3




2. GRAMATICAS
1.1 Introduccin a las Gramticas
Una gramtica es una herramienta o notacin que nos
permite definir un lenguaje por medio de una serie de reglas
que nos dicen como construr cadenas validas (oraciones)
para el lenguaje.
Chomski formaliz el concepto de una gramatica, al hacer
observaciones importantes en la complejidad de una
gramtica que a su vez establece la complejidad de el lenguaje
Como se estableci antes, un lenguaje es un conjunto finto
de cadenas desde un alfabeto. Una gramtica es una forma de
describir al lenguaje.
2.2 Estructuras de las gramticas
Una gramtica G consiste de:
Un alfabeto de smbolos terminales S
Un conjunto finto de variables (smbolos no-terminales) V
Un conjunto de reglas de substitucin o producciones P
Un smbolo inicial S

G = (S, V, P, S)

Una regla de substitucin o produccin est formada por
una parte izquierda a y una parte derecha b: a b
Su significado es reemplazar a con b.



La parte izquierda son cadenas desde V S, que contienen al
menos una variable desde V: a es un miembro de

(V S)* V (V S)*

Mientras que el lado derecho son cadenas desde V S: b es
un miembro de

(V S)*

La gramtica produce cadenas de S


*
al aplicar las producciones e
iniciando con el smbolo inicial hasta que no existan variables.
Cada vez que una produccin o regla es aplicada, una forma de
sentencia (cadenas de variables de V y terminales de S) es
producida.

El lenguaje generado por la gramtica, L(G), es el conjunto de
cadenas que pueden generarse aplicando las reglas anteriormente
descritas.

Ejemplo: Consideremos la siguiente gramtica
G = (S, V, P, S)

V= {S, A}

S= {a, m, o, t}

P={ (1) S toAto, (2) A ma, (3) A maA }
Que genera el lenguaje
L(G)= {tomato, tomamato, tomamamato,...}
Usando las siguientes reglas para la cadena tomamato
S
(1)
toAto
(3)
tomaAto
(2)
tomamato
Ejercicios:
Construr una gramtica con alfabeto {a,b,c} para los
Siguientes lenguajes:
{a
n
b2
n
c
m
| n,m > 0}
{a
n
b
m
c
2n+m
| n,m>0}

Construr una gramtica con alfabeto {a,b} cuyo lenguaje contiene
Precisamente cadenas con el mismo numero de as y bs.
2.3 Clasificacin de las Gramticas
N. Chomsky en 1959 en su famoso artculo On certain formal
properties of grammars defini cuatro familias de gramticas
(y lenguajes) que forman lo que se llama la jerarqua de
Chomsky. Estas son: gramticas sin restricciones, de contexto
sensitivo, de contexto libre y regulares (tipo 0, 1, 2 y 3).
La restricciones puestas en cada regla aumentan con el nmero
de la gramtica.

Gramticas sin Restriciones.
Son el tipo de gramtica mas generales. Una produccin uv
indica que una ocurrencia de una subcadena u en una cadena
puede ser reemplazada con la cadena v. La nica reestriccin
en una produccin es que el lado izquierdo no sea cadena nula.

Una definicin formal de una gramtica sin restricciones es
la siguiente:
Un cuadruplo (V, S, P, S) donde V es un conjunto finto de
variables, S (el alfabeto) es un conjunto de smbolos terminales
(del alfabeto), P es un conjunto de producciones y S es el
smbolo inicial de V. Una produccin de esta clase de gramtica
tiene la forma uv, donde u es miembro de (V S)
+
y v es
miembro de (V S)
*
.

Ejemplo: La gramtica sin restricciones
V= {S, A, C}
S= {a,b,c}
S aAbc | l
A aAbC | l
Cb bC
Cc cc
Con smbolo inicial S genera el lenguaje {a
i
b
i
c
i
| i>=0}.


Gramticas de Contexto Sensitivo
Estas gramticas representan un paso intermedio entre las
gramticas de contexto libre y las gramticas sin restricciones.
Para estas gramticas no existe restriccin alguna en la parte
izquierda de la produccin, pero la longitud de la parte derecha
debe ser al menos la longitud de la parte izquierda.
Una definicin formal de una gramtica de conexto sensitivo es
la siguiente:
Un cuadruplo G= (V, S , P, S) donde cada produccin tiene la
forma u v, donde u es un miembro de (V S)
+
, v es miembro
de (V S)
+
y longitud(u) >= longitud (v). Un lenguaje generado
por una gramtica de contexto sensitivo es llamado lenguaje
de contexto sensitivo (en gramticas sin restricciones el lenguaje
tambin es llamado sin restricciones).


Si eliminamos las producciones de cadena vaca de la anterior
gramtica sin restricciones, tenemos una gramtica de contexto
sensitvo.
S aAbc | abc
A aAbC | abC
que produce un lenguaje similar al ejemplo anterior.

Gramticas de Contexto Libre
La flexibilidad proporcionada por las gramticas de contexto
libre es tal que es la mas usada para definir la sintaxis de los
lenguajes de programacin.
Una definicin formal de una gramtica de conexto sensitivo es
la siguiente:


Es un cuadruplo G= (V, S , P, S) donde V es un conjunto finto
de variables, S es un conjunto finto de smbolos terminales,
P es un conjunto finto de reglas y S es el smbolo inicial.
Cada produccin tiene la forma uv, donde u es una variable
del conjunto V, y v es un miembro de (V S)
*
. Esto quiere decir
En la parte izquierda dela produccin viene siempre una variable
(smbolo no terminal) y en la parte derecha pueden venir
cualquier nmero de smbolos terminales y no terminales
incluyendo la cadena nula.

Una gramtica de contexto libre produce un lenguaje tambin de
contexto libre: G L(G).


Ejemplo: La siguiente gramtica genera el lenguaje que consiste
de cadenas con un nmero par positivo de as.

G= (V, S , P, S)
V={S,A}
S={a,b}
P: S AA
A AAA | bA | Ab | a

Una derivacin por la izquierda es la siguiente:
SAAbAAbaAbaa

Una derivacin por la derecha
SAAAbAAbaaba

Un rbol de parsing o rbol de derivacin es una representacin
grfica de la derivacin.
Ejemplo: La siguiente figura representa el rbol de parsing
para las cadenas del ejemplo anterior.
S
A A
b A a

a
S
A A
a b A
a
Ejercicios: Construr gramticas de Contexto Libre (GCL)
para los siguientes lenguajes:
1. L(G)= {a
n
b
m
a
n
| n>0, m>0}
2. L(G)= {a
n
b
m
c
m
d
2n
| n>=0, m>0}

La solucin tambin es una gramtica de contexto sensitivo?
Si no, que modificaras de la GCL para hacerla GCS?

3. Sea G una GCL
S abSc | A
A cAd | cd
Escribe una derivacin por la izquierda de ababccddcc
Construye un rbol de parsing para la misma cadena
Usa notacin de conjuntos para definir L(G)

Gramticas Regulares
Estas gramticas constituyen una importante subclase de
las gramticas de contexto libre. Son tambin tiles en la
definicin de lenguajes de programacin.
Una gramtica es regular (GR) si cada regla o produccin
cumple con las siguientes formas:

1. A a
2. A aB
3. A l

Donde A, B son miembros de V y a es miembro de S.
Una GR G genera un lenguaje regular L(G).
Ejemplo
La siguiente es una GCL ( l U (ab)
+
a* )


G: S abSA | l
A Aa | l

una correspondiente gramtica regular sera:

S aB | l
B bS | bA
A aA | l


Expresiones Regulares
Sea S un alfabeto. Una expresin regular para S se define
recursivamente como:
i) Base: 0 (el conjunto vaco), l y a para cada a que es
miembro de S, son expresiones regulares para S.
ii) Paso recursivo: Sea u y v expresiones regulares para S.
Las expresiones
(u U v)
(uv)
(u*)
son expresiones regulares para S.
iii) Cierre: u es una expresin regular para S solo si puede
ser obtenido de los elementos base por medio de un
nmero infinto de aplicaciones de el paso recursivo.
Debido a que la unin y concatenacin son asociativas,
los parntesis pueden ser omitdos de las expresiones que
consisten de una secuencia de una de esas operaciones. Se
Asigna tambin un orden de precedencia a los operadores.
La operacin Kleene Star tiene el mayor grado de precedencia,
seguido de la concatenacin y la unin.
Por ltimo, podemos decir que las expresiones regulares, al
igual que las gramticas, son una notacin usada para especificar
o definir un lenguaje
Ejemplo: Sea S = {a,b}
1. La expresin regular (a|b) denota el lenguaje {a, b}
2. La ER (a|b)(a|b) denota el lenguaje {aa,ab,ba,bb}
3. La ER a* denota el lenguaje {l, a, aa, aaa,...}
4. La ER (a|b)* denota el lenguaje de todos loas cadenas que
contienen cero o mas instancias de una a o b, esto es,
el conjunto de todas las cadenas de as y bs.



5. La ER a | a*b denota el lenguaje que contiene la cadena a
y las cadenas que consisten de cero o mas as seguido de
una b.
6. La ER (a|b)*bb(a|b)* denota el lenguaje que contiene las
cadenas de as y bs con al menos una subcadena bb.

Ejercicios: sea S = {a,b}
Escribir una ER para un lenguaje con cadenas que inician y
terminan con a y contienen al menos una b.
Lo mismo pero par el lenguaje de cadenas que contienen
la subcadena aa y y la subcadena bb.
Lo mismo pero para el lenguaje de cadenas que contienen
la subcadena aa mnimo dos veces (cuidaddo con aaa).
Lo mismo pero para el lenguaje de cadenas que no inician
con la la subcadena aaa.




2.4 Representacin de Gramticas
En las secciones anteriores, se usaron pequeas gramticas
para generar lenguajes tambin pequeos. Esos ejemplos
sirvieron para ilustrar el uso de gramticas para definir lenguajes.
Por otra parte, en el diseo de lenguajes de programacin se
maneja sintxis y alfabetos mas complejas y mas grandes. Esto
Por supuesto, incrementa la complejidad de las reglas para
generar el lenguaje.

Notacin de BNF.
John Backus y Peter Naur inventaron un sistema de reglas para
definir el lenguaje de programacin ALGOL 60. Este sistema
recibi el nombre de Backus-Naur Form o BNF. La sintxis del
Pascal tambin fue definido con este sistema o tcnica, y hoy en
da se usa para definir la gran mayora de los lenguajes de
programacin.


Una especificacin BNF es un conjunto de reglas de produccin,
escritas como:
<Smbolo de V> ::= <expression with symbols de V y S >

Ejemplo: Constantes Numricas en Pascal

<digito> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<entero sin signo> ::= <digito> <entero sin signo> | <digito>
<real sin signo> ::= <entero sin signo> . <entero sin signo> |
<entero sin signo> . <entero sin signo> E <factor de escala>
<entero sin signo> E <factor de escala>
<factor de escala> ::= <entero sin signo> | <signo> <entero sin signo>
<signo> ::= + | -
<numero sin signo> ::= <entero sin signo> | <real sin signo>
<constante sin signo> ::= <numero sin signo>
<constante> ::= <numero sin signo> | <signo> <numero sin signo>
Diagramas Sintcticos
Es tambin un tipo de notacin para especificar la sintxis de
Un lenguaje. La diferencia con la notacin BNF es que en esta
se usan lneas y figuras en lugar de nombres.


Diagrama sintctico de un
Smbolo no terminal

Smbolo no terminal


Smbolo terminal
Ejemplo: Diagramas sintcticos para expresiones
aritmticas como a + b - 8
-
+
trmino
trmino
expresin
*
factor
factor
/
trmino
factor
-
factor
identificador
nmero
( expresin )
3. AUTOMATAS FINITOS
En este captulo estudiaremos un tipo de mquinas abstractas
de computacin en donde la entrada consiste de una cadena de un
determinado alfabeto, y la salida o resultado de la computacin
es la aceptacin o no de la cadena de entrada. El conjunto de
cadenas aceptadas por la mquina es el lenguaje reconocido por
la mquina. De esta forma, asociamos lenguajes y mquinas, los
dos tpicos principales de esta materia.


3.1 Autmatas Fintos Determinsticos (AFD)

Un AFD es un quintuple M = (Q, S, d, q
0
, F), donde Q es
una mquina de estados finta, S es el alfabeto, q
0
es el
estado inicial, F es el estado(s) final(es) y d es una funcin
de Q x S a Q llamada la funcin de transicin.

Ejemplo: El siguiente AFD acepta el conjunto de cadenas
que contienen la subcadena bb y donde S={a,b}. Esto
quiere decir que L(M) = (a|b)*bb(a|b)* .

M: Q = {q
0
, q
1
,

q
2
}
S = {a, b}
F = {q
2
}

(Continuacin)

M: Q = {q
0
, q
1
,

q
2
}
S = {a, b}
F = {q
2
}

La funcin de transicin d es dada en forma tabular y
llamada tabla de transicin.

d a b
q
0
q
0
q
1
q
1
q
0
q
2

q
2
q
2
q
2

Para las cadenas abba y abab tenemos las siguientes
operaciones (computaciones) en la tabla:

[q0, abba] [q0, abab]
-[q0, bba] -[q0, bab]
-[q1, ba] -[q1, ab]
-[q2, a] -[q0, b]
-[q2, l] -[q1, l]
acepta rechazado

La cadena abba es aceptada ya que la computacin se
para (halts) en estado q2.
Una cadena de entrada es aceptada si existe una
computacin que procesa toda la cadena de entrada y
para en un estado final o aceptador.

Diagramas de Estado
El diagrama de estado de un AFD es un grafo dirigido-etiquetado
en el cual los nodos representan los estados de la mquina y los
arcos son obtenidos de la funcin de transicin.
Otra definicin es la siguiente:

El diagrama de estado de un AFD M = (Q, S, d, q
0
, F) es un
grafo etiquetado G definido por las sig. condiciones:
i) Los nodos de G son los elementos de Q.
ii) Las etiquetas sobre los arcos de G son elementos de S.
iii) q
0
es el nodo inicial, representado con >
iv) F es el conjunto de nodos aceptadores; cada nodo acaptador
se representa con


v) Existe un arco desde nodo q
i
a q
j
etiquetado a si d(q
i
,a)=q
j
.
vi) Por cada nodo q
i
y smbolo a es miembro de S, existe
exactamente un arco etiquetado a que sale de q
i.

Ejemplo: El diagrama de estados para el DFA del
ejemplo anterior:


a
b
q
0
q
1
q
2
a,b
b
a
Ejemplo: El DFA siguiente acepta el lenguaje que no
contiene la subcadena aa y donde S={a,b}.

q
0
q
1
q
2
a,b
a
b
a
b
Ejercicios:
1. Sea M un AFD
M: Q = {q
0
, q
1
,

q
2
}
S = {a, b}
F = {q
2
}
d a b
q
0
q
0
q
1
q
1
q
2
q
1

q
2
q
2
q
0

a) Realizar el diagrama de estados de M.
b) Hacer las computaciones de M que procesan las cadenas
abaa
bbbabb
Bababa
c) Cul de las cadenas anteriores son aceptados por M?
d) Escribir la expresin regular para L(M)
Ejercicios:
2. Construye AFD en forma de diagrama de estados que
acepte el lenguaje descrito:
El conjunto de cadenas para alfabeto {a,b} en
donde la subcadena aa ocurra al menos dos veces.
El conjunto de cadenas para alfabeto {a,b,c} que
comienzan con a, contienen exactamente dos bs y
terminan con cc.
(ab)*ba
(ab)*(ba)*


3.2 Autmatas Fintos No determinsticos (AFN)
La diferencia es el no determinismo de esta clase de
autmatas. Esto se manifiesta en la funcin de transicin
que en los AFD significa moverse de un estado a otro bajo
un smbolo de entrada. En un AFN la funcin de transicin
tambin contempla lo anterior, pero adems contempla
otras dos transiciones: moverse de un estado a varios
estados bajo una sola entrada o smbolo; y moverse de un
estado a otro bajo no entrada o smbolo. Estas tres
transiciones se dan como:
a
q
n
q
i

a
a
a
q
n

q
i

q
j

q
n

La relacin entre AFD y AFN se sumariza con la siguiente
frase: Cada AFD es AFN. La funcin de transicin de un
AFD especifca exactamente que con una entrada solo se
puede ir a un estado. Mientras en un AFN con una entrada
se puede ir a cero, uno o mas estados. Esto quiere decir que
la familia de AFDs es un subconjunto de los AFN.

Una cadena de entrada para un AFN puede generar distintas
computaciones. En unos casos el automata para (halt) sin
aceptar la cadena, en otros la rechaza o las acepta.
Ejemplo: El AFN M para la cadena ababb con tres
diferentes computaciones.

M: Q = {q
0
, q
1
,

q
2
}
S = {a, b}
F = {q
2
}

d a b
q
0
q
0
{q
0,
q
1}
q
1
0

q
2
q
2
0 0
[q
0
,ababb]
-[q
0
,babb]
-[q
0
,abb]
-[q
0
,bb]
-[q
0
,b]
-[q
0
, l]
[q
0
,ababb]
-[q
0
,babb]
-[q
1
,abb]
[q
0
, ababb]
-[q
0
, babb]
-[q
0
, abb]
-[q
0
, bb]
-[q
1
, b]
-[q
2
, l]
La primera computacin procesa toda la entrada y para
en un estado de rechazar. La segunda computacin,
para (halt) despus de ejecutar tres instrucciones ya
que no existe accin cuando la mquina esta en estado
q
1
y leyendo una a. Por ltimo, la tercera computacin
acepta la entrada.
Una cadena de entrada es aceptada si existe una
computacin que procesa toda la cadena de entrada y
para en un estado final o aceptador. Una cadena de
entrada est en el lenguaje de un AFN si existe una
computacin que lo acepte. El lenguaje de un AFN M,
denotado L(M), es el conjunto de cadenas aceptadas
por M.

El diagrama de estados para el AFN del ejemplo anterior es
el siguiente:
q
0
q
1
q
2
a,b
b b
El diagrama aceptado por este ltimo AFN es (a | b)*bb
Es AFN porqu existen dos transiciones de q
0
a q
0
y de q
0
a
q
1
ante una misma entrada: b
El siguiente diagrama de estados para un AFN acepta el
lenguaje expresado por (ab)* | a*
a
q
0
q
1
q
2
b a
a
q3
a
Es AFN porqu existen dos transiciones de q
0
a q
1
y de q
0
a
q
3
ante una misma entrada: a
Transiciones Lambda
Las transiciones de estado a estado en AFD y AFN se llevan a
cabo al procesar o leer un smbolo de entrada. Podemos
tambin redefinir a un AFN de tal manera que admita
transiciones de estado a estado sin leer un smbolo de entrada.
Una transicin de esta forma es llamada transicin lambda.
A este tipo de mquinas se les llama AFN- l.
Por medio de movimientos lambda se puede construr
mquinas complejas a partir de mquinas mas simples.
La definicin de halting (cuando parar) se extiende para
incluir la posibilidad que una computacin puede continuar
usando transiciones lambda despus de que toda la cadena de
entrada ha sido leda. Tambin se pide, al igual que en los
anteriores autmatas, que termine en un estado final, esto para
finalizar el AFN-l con xito.
M
1
q
1,0
Q
1,1
Q
1,2
a,b
b b
a,b
Ejemplo: Sea M1 y M2 las siguientes mquinas que
aceptan los lenguajes descritos por (a | b)*bb (a | b)*
y (b | ab)* (a | l).

Q
2,0
Q
2,1
b
a
b
M
2

Podemos construr mquinas compuestas combinando los
doagramas de estado M
1
y M
2
.

a,b
q
1,0
Q
1,1
Q
1,2
b b
a,b
Q
2,0
Q
2,1
b
a
b
l
l
El lenguaje del AFN-l M es L(M
1
) U L(M
2
)
Una computacin en la mquina M comienza siguiendo un
arco lambda a un estado inicial de M
1
o M
2
.
Ejemplo: Un AFN-l M que acepta L(M
1
) L(M
2
), la
concatenacin de dos lenguajes se construye juntando las
dos mquinas con un arco lambda.

M
1
q
1,0
Q
1,1
Q
1,2
a,b
b b
a,b
Q
2,0
Q
2,1
b
a
b
M
2
l
Una cadena de entrada es aceptada solo si consiste de
una cadena de L(M
1
) seguido de una cadena de L(M
2
) .
3.3 Equivalencia de AFN y AFD
Tres clases de autmatas finitos se han estudiado. En esta
seccin demostraremos que los tres tipos de autmatas
aceptan el mismo tipo de lenguajes; mejor dicho, el lenguaje
aceptado por un AFN- l es aceptado por un equivalente
AFN y tambin por un equivalente AFD. Demostraremos
como a un AFN- l y aun AFN le podemos quitar su no
determinismo mediante la construccin de un AFD
equivalente.
q
2 Q
3
Q
4,
Q
5
a
a
l
l
l
q
1
Q
6
En la figura anterior las transiciones de el estado q
1
ante
entrada a son el conjunto {q
2
, q
3
, q
5
, q
6
}. Esto debido a
que podemos alcanzar o llegar a esos estados desde el
estado q
1
y solo leyendo a. Al estado q
4
llegamos
leyendo solo l.
La funcin de transicin t de un NFA- l es una funcin un
poco diferente a la funcin de transicin d de un AFD o un
AFN. En la funcin t, las transiciones ante l son vlidas
para moverse de un estado a otro y juntndola con una
entrada del alfabeto.

Ejemplo: Las tablas de transicin siguientes ejemplifican
las funciones de transicin d y t para el siguiente AFN- l
(diagrama de estado M). El lenguaje de M es a
+
c*b*.

d a b c l
q
0
{q
0,
q
1,
q
2
}

0

0 0
q
1
0

{q
1
}

0
q
2
0 0 {q
2
} {q
1
}
t a b c
q
0
{q
0,
q
1,
q
2
}

0

0
q
1
0

{q
1
}

0
q
2
0 {q
1
}


{

q
1,
q
2
}
a b
a
a
l
c
q
0
q
1
q
2
La funcin de transicin t es usada para construir un
autmata finito determinstico equivalente. El
procedimiento usa el diagrama de estados de el AFN- l
para construir el diagrama de estados de el equivalente
AFD.
Ejemplo: Construir un AFD equivalente para el siguiente
AFN- l.
a b
a
a
l
c
q
0
q
1
q
2
a b
a
a
l
c
q
0
q
1
q
2
t a b c
q
0
{q
0,
q
1,
q
2
}

0

0
q
1
0

{q
1
}

0
q
2
0 {q
1
}


{

q
1,
q
2
}
{q
1
}


0 {q
1
}


0
{

q
1,
q
2
}

0 {q
1
}


{

q
1,
q
2
}

{q
0,
q
1,
q
2
}


{q
0,
q
1,
q
2
}


{q
1
}


{

q
1,
q
2
}

Su correspondiente diagrama de
estados:
Se crean tres nuevos estados
a los cuales se les aplica el
mismo procedimiento para
obtener hacia que estados se
mover. Este procedimiento
termina hasta que no hay no
se genere un nuevo estado
t a b c
q
0
{q
0,
q
1,
q
2
}

0

0
q
1
0

{q
1
}

0
q
2
0
{q
1
}
{

q
1,
q
2
}
{q
1
}

0 {q
1
}


0
{

q
1,
q
2
}

0 {q
1
}


{

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

{q
0,
q
1,
q
2
}


{q
1
}


{

q
1,
q
2
}
{q
0
}

{q
0,
q
1,
q
2
}

{q
1,
q
2
}

{q
1
}

0
a
a
b
b,c
a,c
a,b,c
a
b
c
b
c
A partir del diagrama de estados se puede construir el AFD
equivalente.
El AFN M acepta el lenguaje a
+
b
+
. Procedemos a
convertirlo a un equivalente AFD.
a
q
2
q
1
q
0
a
b
M:
{q
0
}
{q
0,
q
1
}

a
{q
1,
q
2
}

b

a, b
b
b a
M:
a a
Las mquinas M
1
and M
2
aceptan a(ba)* and a*
respectivamente.
M
1
: q
1 q
2
a
b
M
2
: q
3
a
Usando arcos lambda para conectar un nuevo estado inicial a
los estados iniciales de las mquinas originales creamos un
NFA- l M que acepta a(ba)* | a*.
q
0
M:
q
1
q
2
a
b l
q
3
l
a
La funcin de transicin para M es
t a b
q
0
{q
2,
q
3
}

0

q
1
{q
2
} 0

q
2
0 {q
1
}


q
3
{q
3
}

0
El equivalente AFD obtenido es
{q
0,
q
1,
q
3
}
{q
2,
q
3
}

{q
3
}
{q
1
}
{q
2
}
a a
b
b

b
b
b
a
a,b
a
3.4 Propiedades de los Lenguajes aceptados por un
Autmata Finito.
Cada autmata finito con alfabeto S acepta un lenguaje
para S. Podemos probar que la familia de lenguajes
aceptados por un autmata finito consiste precisamente
de los conjuntos o lenguajes regulares para S.
Primero demostramos que cada conjunto o lenguaje
regular es aceptado por algn AFN- l. La demostracin
va de acuerdo a una definicin recursiva. Los lenguajes
o conjuntos regulares se construyen a partir de los
elementos bsicos 0 (conjunto o estado vaco), l (cadena
vaca) y conjuntos individuales que contienen elementos
del alfabeto.
Los diagramas de estado para las mquinas que aceptan
dichos conjuntos son:
q
0
q
0
q
0
q
1
q
1
q
1
a
l
Conjuntos regulares se construyen de los elementos bsicos
usando unin, concatenacin y operacin Kleene Star. Al
igual que los conjuntos regulares, autmatas fintos mas
complejos se pueden construir a partir de los diagramas
anteriores y que acepten la unin, concatenacin y
operacin Kleene Star de lenguajes regulares.
Ejemplo: El lenguaje L(M
1
) U L(M
2
) es aceptado por la
mquina siguiente:
SM
1
FM
1
SM
2
FM
2
l
l
S
M
1
M
2
l
l
F
La concatenacin de dos lenguajes L(M
1
) L(M
2
) regulares
puede ser aceptado por la mquina siguiente:
SM
1
M
1
FM
1
SM
2
M
2
FM
2
l
Una mquina que acepta L(M1)* es la siguiente:
S
SM
1
M
1
FM
1
F
l
l
l l
CONCLUSION
Usando los autmatas finitos anteriores podemos construir
una mquina para cualquier expresin regular que describa
a un lenguaje o conjunto regular. Por lo tanto, la
conclusin es de que la familia de lenguajes aceptados por
una mquina o autmata finito son del tipo regular.

Ejercicio: Construir un AFN- l que acepte el lenguaje
denotado por (a|b)*ba.
a b
b a l
l
l
l
l
a
b
(a|b)
ba
l
l
l
l
b
l
a
l
l
l
(a|b)*
l
l
l
l
b
l
a
l
l
l
b a l
l
(a|b)*ba
3.5 Autmatas Finitos y Expresiones Regulares.
Los lenguajes regulares son definidos por medio de expresiones
regulares y aceptados por medio de autmatas finitos. Podemos
establecer que un lenguaje es regular si
Es una expresin regular bajo un S.
Es aceptado por un AFD, AFN o AFN- l.
Es generado por una gramtica regular.

En cuanto a las expresiones regulares y autmatas, hemos ya
comprobado en la seccin anterior que podemos construir un
autmata finito para cualquier expresin regular dada. Por otra
parte existen mtodos para producir una expresin regular a
partir de un autmata finito.
3.6 Determinacin de lenguajes regulares y no regulares.
Dado el lenguaje {a
i
b
i
| i<=n} podemos construir un AFD
que acepte dicho lenguaje?
El siguiente AFD acepta dicho lenguaje pero est
incompleto.
a
a
a
a
b
b
b
b
b b
b
El AFD anterior est incompleto puesto que es imposible
construir un AFD para un lenguaje que no es regular. De
hecho dicho lenguaje es del tipo contexto libre, o es un
lenguaje no regular.
Se puede demostrar que un lenguaje es regular al construir
un autmata finito que lo acepte. Pero para demostrar que no
es regular necesitamos usar otras tcnicas (e.g. Pumping
lemma) que veremos en otro captulo.
4. AUTOMATAS DE PUSH-
DOWN
Los lenguajes regulares se caracterizan por ser lenguajes
generados por gramticas regulares y aceptados por
autmatas finitos. En este captulo estudiaremos un tipo
de mquina usada para aceptar lenguajes de contexto
libre. Esta mquina recibe el nombre de autmata de
push-down (APD).
4.1 Definicin.
Un Autmata de Push-Down (APD) es una mquina de estado
finto aumentada o extendida con una pila de memoria externa.
La adicin de la pila al autmata le proporciona a este un medio
de almacenamiento de memoria LIFO (last-in, first-out). Esta
combinacin de pila con estados le da la posibilidad a un APD
de aceptar lenguajes como {a
i
b
i
| i>=0}.
Un APD es un sextuple (Q, S, G, d, q
0
, F), donde Q es el
conjunto finito de estados, S es un conjunto finito de el alfabeto
de entrada, G es un conjunto finito llamado el alfabeto de la pila,
q
0
es el estado inicial, F (un subconjunto de Q) es el conjunto de
estados finales y es la funcin de transicin de Q x (S U {l}) x
(G U {l}) a subconjuntos Q x (G U {l}) .
Un APD consulta el estado actual, el smbolo de entrada y el el
smbolo en el tope de la pila para determinar la transicin en la
mquina. La funcin de transicin lista todas las posibles
transiciones dada una determinada combinacin de estado,
smbolo y tope de la pila. El valor de la funcin de transicin
d(q
i
,a,A) = {[q
j
,B], [q
k
,C]}
Indica que dos transiciones son posibles cuando el autmata esta
en estado q
i
y leyendo una a con A en el tope de la pila. Si
tomamos la primera opcin [qj,B],esto causar que la mquina
cambie de estado q
i
a estado q
j


procese el smbolo a (leer el siguiente smbolo)
Remover A del tope de la pila
Meter B dentro de la pila

Un APD tambin puede representarse por medio de un diagrama
de estados (nuestros ejemplos los utilizaran).
La transicin d(q
i
,a,A) = {[qj,B]} es representada por


a A/B
qi qj
El smbolo / representa reemplazo (reemplazar A en el
tope de la pila por B).
El dominio de la funcin de transicin permite transiciones
lambda en el smbolo de entrada y en el tope de la pila.

Ejemplo:

1. d(q
i
, l,A) = [q
i
, l]




2. d(q
i
, l, l) = [q
i
, A]




3. d(q
i
,a, l) = [q
j
, l]


l A/l
l l/A
q
i
q
i
q
i
q
j
a l/l
*Pop una A
*Push una A
*Lee una a
4.2 Lenguajes aceptados por un Autmata de Push-Down
La adicin o extensin al autmata finto al manejar una pila
(APD) le permite a este ser un aceptador no solo de lenguajes
regulares sino tambin de lenguajes de contexto libre. Esto
nos permite establecer que existe una correspondencia entre
un APD y una gramtica de contexto libre.
Lo anterior es demostrable y la forma de hacerlo es por medio
de ir construyendo un APD a partir de cada produccin de una
gramtica de contexto libre. Para cada regla existe una
transicin dentro del APD.
Por otra parte un APD podra implementarse con puras
transiciones de leer los smbolos de entrada pero sin
movimientos en la pila (l/l). Esto nos dara una mquina
similar a un autmata finito la cual obviamente va a aceptar
cualquier gramtica regular.
4.3 APD determinstico.
Un APD es determinstico si existe no mas de una
transicin que es aplicable por cada combinacin de
estado, smbolo de entrada y tope de la pila. A
continuacin construimos un APD M determinstico
para aceptar el lenguaje {a
i
b
i
| i>=0}.

M: Q = {q
0
,q
1
}
S = {a,b}
G = {A}
F = {q
0
,q
1
}
d(q
0
,a, l) = {[q
0
, A]}
d(q
0
,b, A) = {[q
1
, l]}
d(q
1
,b, A) = {[q
1
, l]}


q
0
q
1
b A/l
a l/A b A/l
Ejercicios:

Construir un APD que acepte el lenguaje {wcw
R
| w es un
miembro de {a,b}*}.

Construir un APD que acepte el lenguaje {a
i
c
j
b
i
| i,j>=0}.

Construir un APD que acepte el lenguaje {a
i
b
j
c
k
| i+k=j}.

4.4 APD y Gramticas de Contexto Libre
Podemos probar que cada lenguaje libre de contexto es
aceptado por un APD. Para llevar a cabo esto, las reglas de la
gramtica se usan para generar las transiciones de un APD
equivalente. Sea L un lenguaje libre de contextos y G una
gramtica para ese lenguaje en forma normal de Greibach. En
esta forma de Greibach todas las producciones de una
gramtica tienen una de las siguientes formas:
A aA
1
A
2
.A
n
A a
A l

La gramtica G en forma de Greibach que acepta {a
i
b
i
| i>=0}
es usada para ilustrar la construccin de un APD equivalente.
G: S aAB | aB
A aAB | aB
B b
El APD tiene dos estados: un estado inicial q
0
y un estado
aceptador o final q
1
. Una regla S de la forma S aA
1
A
2
A
n

genera una transicin que procesa el smbolo terminal a, mete
(push) las variables A
1
A
2
A
n
a la pila y se mueve al estado q
1
.
El resto de las operaciones usan el smbolo de entrada y el tope
de la pila para determinar la transicin apropiada. La funcin de
transicin de el APD es definido directamente de las reglas de
G. d(q
0
,a, l) = {[q
1
,AB], [q
1
,B]}
d(q
1
,a,A) = {[q
1
,AB], [q
1
,B]}
d(q
1
,a,B) = {[q
1
, l]}
Por otra parte es tambin posible construr una gramtica de
contexto libre a partir de un APD.


5. MAQUINAS DE TURING
La mquina de Turing nos proporciona muchas de las
caractersticas comnmente asociadas con una computadora
moderna. De hecho, la mquina de Turing fue el modelo
utilizado para disear y construir la primer computadora de
programa almacenado. Esta mquina utiliza una secuencia
de operaciones elementales para acceder y alterar una
posicin de memoria. A diferencia de una computadora, una
mquina de Turing no tiene un lmite de memoria o de
tiempo para realizar un clculo. Por ltimo, la mquina de
Turing representa lo mximo dentro de los dispositivos de
computacin abstractos.
5.1 Definicin de Mquina de Turing.
Una mquina de Turing es una mquina de estado finto en
donde en una transicin se escribe un smbolo en la cinta
(tape). La cabeza de la cinta puede moverse en cualquier
direccin, permitiendo que la mquina lea y manipule la
entrada tantas veces como se desee.
Mas formalmente, una mquina de Turing es un quintuple
M = (Q, S, G, d, q0) donde Q es un conjunto finito de
estados, G es un conjunto finito llamado el alfabeto de la
cinta y contiene un smbolo especial B que representa un
blanco, S es un subconjunto de S {B} llamado el alfabeto
de entrada, d es una funcin parcial de Q x G a Q x G x
{L,R} llamado la funcin de transicin y q
0
(miembro de Q)
es un estado distinguido llamado estado inicial.
5.2 funcionamiento de la mquina de Turing.
La cinta de una mquina de Turing se extiende
indefinidamente en una direccin. Las posiciones de la cinta
estn numeradas por los nmeros naturales siendo la
posicin mas a la izquierda la nmero cero.
q0
0 1 2 3 4 5 6
.
Una computacin comienza con la mquina en estado q
0
y
la cabeza de la cinta leyendo la posicin mas a la izquierda.
La entrada, una cadena de S
*
se escribe en la cinta
comenzando en posicin uno. Posicin cero y el resto de la
cinta es asumido que estn iniciadas con blancos.


El alfabeto de la cinta proporciona smbolos adicionales que
pueden ser usados durante la computacin.
Una transicin consiste de tres acciones: cambiar el estado,
escribir un smbolo en el cuadro ledo por la cabeza de la cinta
y mover la cabeza de la cinta. La direccin del movimiento de
la cabeza de la cinta puede ser a la izquierda (L) o a la
derecha (R). La configuracin de la mquina
q
1
.
x
y transicin d(q
i
,x) = [q
j
,y,L] se combinan para producir la
nueva configuracin
q
j
y
La transicin cambi el estado de q
i
a q
j
, reemplaz el
smbolo x con y y movi la cabeza de la cinta un cuadro a la
izquierda.
Una mquina de Turing halts (termina) cuando encuentra
un estado (par de smbolos) para los cuales no existe
definida una transicin. Esto es una terminacin normal.
Una transicin de la posicin cero en la cinta puede
especificar un movimiento a la izquierda de los lmites de la
cinta. Cuando esto ocurre, la computacin se dice termina
anormalmente.
Mquina de Turing Standard
Son diseadas para ejecutar computaciones en cadenas del
alfabeto de entrada. Una computacin comienza con la cabeza
de la cinta leyendo el cuadro mas a la izquierda y la cadena de
entrada posicin uno. Todos los cuadros a la derecha de la
cadena de entrada es asumido estn en blanco.

Ejemplo: La funcin de transicin de una mquina de Turing
standard con alfabeto de entrad {a,b} es mostrada a
continuacin. La transicin del estado q
0
mueve la cabeza de
la cinta a posicin uno para leer la entrada. Las transiciones en
estado q
1
leen la cadena de entrada e intercambian los
smbolos a y b. Las transiciones en q
2
retornan la mquina a
la posicin inicial.
d B a b
q
0
q
1
,B,R
q
1
q
2
,B,L q
1
,b,R q
1
,a,R
q
2
q
2
,a,L q
2
,b,L
Una mquina de Turing puede representarse grficamente por
un diagrama de estados.
Ejemplo (tabla anterior): Intercambia as y bs en la cadena de
entrada.
B/B R
B/B L
a/b R
b/a R
b/b L
a/a L
q
0
q
1
q
2
Ejemplo: La siguiente Mquina de Turing con alfabeto de
entrada {a,b} produce una copia de la cadena de entrada. Esto
quiere decir que una computacin que comienza con la cinta
teniendo la forma BuB termina con la cinta BuBuB.

B/B R
a/X R
B/B L
X/a L
Y/b L
a/a R
b/b R
b/Y R
a/a R
b/b R
B/B R
B/b L
a/a R
b/b R
B/B R
b/b R
a/a R
B/a L
X/X R
Y/Y R
a/a L
b/b L
B/B L
COPY: q
0
q
1
q
2
q
3
q
4
q
5
q
6
q
7
Ejercicios:
Construir una mquina de Turing para mover la entrada
un espacio a la derecha. La configuracin de entrada
q
0
BuB resulta en q
f
BBuB.
Construir una mquina de Turing para concatenar una
copia de la cadena de entrada en reversa. La
configuracin de entrada q
0
BuB resulta en q
f
Buu
R
B.
5.3 Lenguajes aceptados por la mquina de Turing
Una mquina de Turing puede ser usada para calcular
funciones y para aceptar lenguajes. En el primer caso el
resultado de una computacin se define in trminos del estado
en donde termina la computacin o la configuracin de la
cinta. En el segundo caso, una computacin acepta o rechaza
la cadena de entrada. A diferencia de un autmata finto o de
Push Down, la mquina de Turing no necesita leer toda la
cadena de entrada para aceptar la cadena. Una mquina de
Turing aumentada con estados finales es un sextuple (Q, S, G,
d, q0, F) donde F es un subconjunto de Q y contiene los
estados finales.
Un lenguaje aceptado por una mquina de Turing es llamado
lenguaje recursivamente enumerable. La hablidad de una
mquina de Turing para moverse en ambas direcciones y
procesar blancos introduce la posibilidad de no parar (halt)
ante ciertas entradas. Un lenguaje que es aceptado por una
mquina de Turing y que termina (halt) ante todas las cadenas
de entrada es llamado lenguaje recursivo. Existen muchas
mquinas de Turing que aceptan un lenguaje en particular;
algunas pueden parar (halt) para todas las entradas mientras
otras no. La existencia de una mquina de Turing que para
(halt) con todas las entradas es suficiente para demostrar que
el lenguaje es recursivo.
B/B R
a/a R
b/b R
q
0
q
1
q
2
Ejemplo: La mquina de Turing
acepta el lenguaje (a U b)*aa(a U b)*. La computacin para
la cadena aabb examina solo la mitad de la entrada antes de
aceptar la cadena completa. El lenguaje (a U b)*aa(a U b)*
es recursivo; las computaciones en la mquina terminan
(halt) para cada cadena de entrada. Una computacin exitosa
termina cuando una subcadena aa es encontrada.
b/b R
a/a R
q
3
5.4 Ejemplo de mayor fuerza de la Mquina de Turing

5.5 Extensiones de la Mquina de Turing
Existen variaciones al modelo de la mquina de Turing
standard. Cada variacin o extensin parece incrementar la
capacidad de la mquina, pero la realidad es que los lenguajes
aceptados por esas mquinas de Turing extendidas son tambin
aceptados por mquinas de Turing Standard.

Mquinas de Turing de Multipistas
En este tipo de mquinas la cinta es dividida en varias pistas.
Una posicin en la multipista-cinta contiene n smbolos del
alfabeto de la cinta.
q
j
PISTA 1
PISTA 2
Una posicin en la cinta en una mquina de 2 pistas es
representada por un par ordenado [x,y] donde x es el smbolo
en pista 1 y y en pista 2. Una transicin lee y escribe la
posicin completa de la cinta y se escribe como:

d(q
i
,[x,y]) = [q
j
,[z,w],d] donde d es {L,R}

La entrada es puesta en la pista 1. Todas las posiciones en la
pista 2 estn en blanco. Aceptacin en este tipo de mquinas
de Turing es por medio de estado final.
Este tipo de mquinas de Turing, al ser equivalentes a la
mquina de Turing standard, acepta lenguajes recursivamente
enumerables.
Mquinas de Turing de dos direcciones (two-way)
Este tipo de mquinas es identico a una mquina de Turing
standard excepto que la cinta se extiende indefinidamente en
ambas direcciones (izquierda y derecha). En este tipo de
mquinas la cadena de entrad puede ser puesta en cualquier
lugar de la cinta. Todas las dems posiciones de la cinta se
asume que estn en blanco.
q0
. .
Se puede colocar un smbolo especial (#) en una posicin para
que sea el lmite de la izquierda (como en una mquina
standard). Este tipo de mquinas es tambin equivalente al de
la mquina standard (aceptan Lenguajes Rec. Enumerables).
Mquinas de Mltiple Cintas
Consiste de k cintas y k cabezas de cintas independientes. Los
estados y alfabetos son los mismos que en la mquina
standard. La mquina lee las cintas simultneamente pero solo
tiene un estado.
CINTA 1

CINTA 2

CINTA 3
q
i
Una transicin es determinada por el estado y el smbolo
ledo por cada cabeza de cinta. Una transicin puede
cambiar el estado
escribir un smbolo en cada cinta
independientemente reposicionar cada cabeza de cinta.

El reposicionamiento consiste de mover la cabeza de la
cinta un cuadro a la izquierda o la derecha o incluso dejar la
cabeza en su posicin actual. La entrada a la mquina es
puesta en la cinta 1. Todas las dems cintas estarn en
blanco.
Al igual que en las mquinas anteriores este tipo de
mquinas acepta lenguajes Rec. Enumerables.
5.6 Mquinas de Turing No Determinsticas
Estas mquinas pueden especificar cualquier nmero finito de
transiciones para una configuracin dada. Los componentes de
una mquina no determinstica, con excepcin de la funcin de
transicin, son idnticos a los de una mquina de Turing
standard. Las transiciones en una mquina no determinstica
son definidas por una funcin de Q x G a los subconjuntos Q x
G x {L,R}.
Cundo una transicin indica que mas de una accin es
posible, una computacin arbitrariamente escoge una de las
transiciones. Una cadena de entrada es aceptada por una
mquina no determinstica si existe una computacin que
termina en un estado aceptador.
5.7 El problema de Halting para las Mquinas de Turing
Un problema de decisin consiste de un conjunto de preguntas
cuyas respuestas son si o no. Una solucin a un problema de
decisin es un procedimiento efectivo que determine la respuesta
para cada una de las preguntas. Una mquina de turing es un
sistema matemtico ideal para solucionar problemas de decisin.
La teora de Church-Turing dice que se puede disear siempre
una mquina de Turing para resolver cualquier problema de
decisin que tenga solucin por un procedimiento efectivo.
Entonces, para establecer que un problema no tiene solucin es
suficiente con mostrar que no existe solucin en una mquina de
Turing (Undecidability).
El mas famoso de los problemas sin solucin (undecidable
problem) es el problema de Halting.
El problema de Halting se formula de la forma siguiente:
Dada una mquina de Turing arbitraria M con alfabeto de
entrada S y una cadena w que pertenece a S
*
, Parara la
computacin de M con la entrada w ?
Es importante entender la declaracin del problema. Debemos
ser capaces de determinar si una mquina de Turing en
particular parar (halt) con una cadena determinada. Por
ejemplo la ltima mquina de Turing revisada para (halt) con
todas las cadenas conteniendo la subcadena aa. Sin embargo,
una solucin del problema halting requiere un algoritmo
general que responda la pregunta de halting que para cada
combinacin posible de mquina de Turing y cadena de
entrada la mquina va a parar.
Ejemplo: Tenemos una mquina de Turing H que resuelve el
problema de parada Halting.

H
R(M)w
acepta

rechaza
M hace parada con entrada w
M no hace parada con entrada w
La entrada consiste de la representacin de la mquina de
Turing M seguido de cadena w. La computacin de M con
entrada w hace parada.
La mquina H es modificada para construir H. Las
computaciones de H son las mismas que H excepto que H se
cicla indefinidamente cuando H termina en un estado aceptador.
Las transiciones de H son construidas agregandole a H que
causan que H se mueva indefinidamente a la derecha cuando H
entre a un estado aceptador.
H es combinado con una mquina de Turing que copia otra
mquina de Turing para formar una nueva mquina D.

R(M)
ciclo

para
M para con entrada R(M)
M no para con entrada R(M)
copy
R(M)R(M)
H
La entrada a la mquina D puede representarse por cualquier
mquina Turing. Considera una computacin de D con entrada
R(D). Entonces tendriamos lo siguiente:

R(D)
ciclo

para
D para con entrada R(D)
D no para con entrada R(D)
copy
R(D)R(D)
H
D
D
En esta ltima mquina D, vemos que D hace parada con
entrada R(D), si y solo si, D no hace parada con entrada
R(D). Esto es una contradiccin. Sin embargo, mquina D
puede construirse desde mquina H que resuelve el
problema de parada. La premisa que el problema de parada
tiene solucin nos lleva a la contradiccin. Podemos
concluir que el problema de parada no tiene solucin.
6. GRAMATICAS Y AUTOMATAS
Las gramticas fueron estudiadas en el captulo 2 donde se
introdujo la clasificacin de estas dada por Chomsky. En esta
clasificacin las gramticas eran divididas en 4 clases de
gramticas: regulares, de contexto libre, de contexto sensitivo
y de estructura de frase o sin restricciones. En esta unidad 6
regresamos a estudiar las tres primeras gramticas con un poco
mas de profundidad.
6.1 Lenguajes Regulares.
Teorema de Kleene.
Este teorema establece que un lenguaje L es aceptado por un
AFD con alfabeto S si y solo si, L es un conjunto regular
para S.

Para demostrar esto haremos uso de dos propiedades:
1. La primera ya explicada durante el tema 3.4, se refiere a
que cada conjunto regular es aceptado por algn AFN- l.
2. La segunda dice que cada lenguaje aceptado por un
autmata finito es un conjunto regular.

Y de acuerdo a lo establecido anteriormente sobre la
equivalencia de autmatas determinsticos y no
determinsticos conclumos con la validez del teorema de
Kleene.

Para demostrar la segunda afirmacin, extenderemos la
nocin de diagrama de estado.
Un grafo de expresin es un grafo dirigido con etiquetas
en donde los arcos estn etiquetados por expresiones
regulares y contiene un nodo inicial y nodos aceptadores o
finales.

El lenguaje de un grafo de expresin es la unin de los
conjuntos representados por las expresiones regulares
aceptadas. Los caminos (paths) en un grafo de expresin
generan expresiones regulares.
Ejemplo: Los sig. grafos aceptan las exp. reg. u* y u*vw*.
u
u
w
v
Para los grafos anteriores los cuales son muy sencillos es
simple determinar las expresiones regulares aceptadas. Existe
un procedimiento para reducir un grafo de expresin a una de
dos formas simples. Esta reduccin se lleva a cabo por medio
de repetir remover nodos de el grafo de tal manera que produce
la expresin aceptada por el grafo.
El diagrama de estados de un autmata finito puede tener
cualquier nmero de estados aceptadores. Cada uno de esos
estados exhibe la aceptacin de un conjunto de cadenas. El
lenguaje de la mquina es la unin de esos conjuntos. Para
determinar el lenguaje de un autmata, la observacin anterior
nos permite considerar los estados aceptadores separadamente.
El algoritmo para construir una expresin regular desde un
diagrama de estados hace exactamente eso; construye una
expresin para un conjunto de cadenas aceptadas por cada
estado aceptador individual.
Los nodos de un AFN- l en el algoritmo se asumen estn
numerados. La etiqueta de un arco de nodo i a nodo j se
denota como w
i,j
. Si no hay arco de nodo i a j, w
i,j
= 0.


Algoritmo: Construccin de una expresin regular desde un autmata finito.
Entrada: Diagrama de estados G de un autmata finito
Los nodos de G numerados 1,2,,n
1. Sea M el nmero de estados aceptadores de G. Hacer m copias de G, cada una de cual tiene un
estado aceptador. Nombra a cada una G
1
,G
2
,,G
m
. Cada estado aceptador de G es el estado
aceptador de algn G
t
, para t= 1,2,.,m.
2. Para cada G
t
Hacer
2.1 Repetir
2.1.1 Escoger un nodo i en G
t
que no sea ni el nodo incial ni un nodo
aceptador de G
t.

2.1.2 Borrar el nodo i en G
t
de acuerdo al siguiente procedimiento:
Para cada j,k no igual a i (esto incluye j = k) Hacer
i. Si w
j,i
<> 0, w
i,k
<>0 y w
i,i
= 0 Entonces
agregar un arco desde nodo j hasta nodo k etiquetado w
j,i
w
i,k

ii. Si w
j,i
<> 0, w
i,k
<>0 y w
i,i
<>0 Entonces
agregar un arco desde nodo j hasta nodo k etiquetado
w
j,i
(w
i,i
)*w
i,k
iii. Si nodos j y k tienen arcos etiquetados w
1
,w
2
,.,w
s
conectandose
Entonces reemplazarlos por un solo arco etiquetado w
1
Uw
2
U.W
s

iv. Remover el nodo i y todos los arcos que inciden en nodo i en G
t


Hasta que los nicos nodos en G
t
sean el nodo inicial y un nico estado aceptador
2.2 Determinar la expresin aceptada por G
t

Fin End
3. La expresin regular aceptada por G es obtenida juntando las expresiones para cada G
t
con U
(unin)



Ejemplo:
b
c
b
c
G:
b
c
b
c
b
c
b
c
G1:
G2:
De G se construyen dos grafos de expresin G1 y G2::
Se reduce G1 borrando nodos 2 y 3:
b
cc
b
b
La expresin aceptada por G1 es b*. Se remueve nodo 2 de G2
y se tiene:
b
cc
b
con expresin asociada b*ccb*.
La expresin aceptada por G, construida desde las
expresiones G1 y G2, es b*| b*ccb*.
Y con esto se prueba lo establecido en el teorema de
Kleene.

Las Aplicaciones del Lema de Pumping
El lema de Pumping es usado para demostrar o
establecer que un lenguaje no es regular y se basa en
ciertas reglas de descomposicin que se aplican a las
cadenas de los lenguajes regulares.
Bombear (Pumping) una cadena se refiere a construir
nuevas cadenas repitiendo (bombeando) subcadenas de la
cadena original.
Ejemplo:
M:
b a
a
a
b
a,b
b
q0
q1
q2
q3
Considere la cadena z=ababbaaab en L(M). Esta cadena
puede descomponerse en subcadenas u, v y w donde u=a,
v=bab, w=baaab y z=uvw. Las cadenas a(bab)
i
baaab son
obtenidas al bombear (pumping) la subcadena bab en
ababbaaab.
El lenguaje L(M) es regular pues producimos un autmata
finito para el. Si las cadenas producidas al bomberase la
cadena original tambin pertenecen a L(M), entonces L(M)
es regular, si no, entonces L(M) no es regular. El lema de
Pumping para lenguajes regulares tiene como objetivo
principal demostrar que un lenguaje no es regular.

Ejemplo: Para demostrar que L={a
i
b
i
| i>=0} no es regular
probaremos con una cadena z=a
k
b
k
y descomponiendo esta
en subcadenas u=a
i
,v=a
j
y w=a
k-i-j
b
k
, donde i+j<=k y j>0.
Si bombeamos cualquier cadena de esta forma produce
uvw=a
i
a
j
a
j
a
k-i-j
b
k
, que no pertenece a L. Por lo tanto, ya que z
pertenece a L y no tiene descomposicin que satisface las
condiciones del lema de pumping, concluimos que L no es
regular.
El Teorema Myhill-Nerode
As como el teorema de Kleene establece la relacin entre
lenguajes regulares y autmatas finitos, el teorema Myhill-
Nerode caracteriza la regularidad por medio de la existencia
de una relacin de equivalencia en las cadenas del lenguaje.
Esta caracterizacin proporciona un mtodo para obtener un
AFD mnimo que acepta un lenguaje.
Este teorema se utiliza, al igual que el lema de Pumping,
para demostrar que un lenguaje no es regular.


6.2 Lenguajes de Contexto Libre
Forma Normal de Chomsky.
Una gramtica de contexto libre est en forma normal de
Chomsky si cada regla tiene una de las siguientes formas:
A BC
A a
S l
Donde B,C son smbolos no terminales y no son smbolo
inicial.
El rbol de derivacin asociado con una derivacin en una
gramtica en forma normal de Chomsky es un arbol binario.

Autmata de Push-Down.
(tema cubierto en captulo IV)
Compilador de Lenguajes Formales
Un compilador es un programa que traduce otro programa
escrito en un lenguaje de alto nivel (java, C++, Ada, etc.)
produciendo como salida un programa objeto usualmente en
cdigo mquina. El compilador para realizar su tarea divide
todo el trabajo en varias fases, las cuales pueden ser:
Anlisis de lxico
Anlisis de sintaxis
Anlisis de semntica
Generacin de cdigo intermedio
Generacin de cdigo objeto
Optimizacin de cdigo

Las dos primeras fases utilizan lenguages formales como
especificacin de entrada a la fase.
Anlisis de lxico. En esta fase el compilador descompone
el programa fuente en tokens (identificadores, constantes,
operadores, etc.) los cules son especificados por medio de
expresiones regulares.
Ejemplo:
Identificador = letra (letra | digito)*
Nmero entero = digito digito*

Anlisis de sintxis. En esta fase el compilador revisa si los
estatutos, expresiones o declaraciones del programa fuente
cumplen con las especificaciones definidas por una
gramtica de contexto libre para el lenguaje siendo
compilado. Existen muchas tcnicas para implementar un
analizador de sintaxis, los cules son llamadas Parsers.
Ejemplos de Parsers son:
Recursivo descendente
LL(1)
Operador precedencia
LR
SLR
LALR

Tambin existen herramientas para producir por medio de
especificaciones analizadores de lxico y sintaxis. Algunas de
estas herramientas son:
Lex
Yacc
JavaCC
Sable